Compare commits
30 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f3f3377c4d | |||
| 4c81c61644 | |||
| 31a6ab6db0 | |||
| 69f2aedef7 | |||
| e8818a4db5 | |||
| 470a7e82bc | |||
| 6439c233f1 | |||
| c931d42d62 | |||
| 5b497e107a | |||
| 324094f418 | |||
| 9ade6442b2 | |||
| ffea49bc40 | |||
| 2b89a890d0 | |||
| 3a67388ff3 | |||
| 3468bbb073 | |||
| 963178c609 | |||
| cfdb049368 | |||
| 058d83fd00 | |||
| c7ccc37dca | |||
| 74345d0c3b | |||
| 907b94c74f | |||
| 2c6b397be6 | |||
| eddcb2402d | |||
| 0301f3c300 | |||
| 7a8cfb73cd | |||
| c7c6f964bf | |||
| 91df7cfd72 | |||
| 0ed9ee64c4 | |||
| 01cea3df06 | |||
| 591cfb5857 |
@@ -1,7 +1,7 @@
|
|||||||
# Credits
|
# Credits
|
||||||
|
|
||||||
Electroblob's Wizardry
|
Electroblob's Wizardry
|
||||||
Version 4.2.3
|
Version 4.2.6
|
||||||
For Minecraft 1.12.2
|
For Minecraft 1.12.2
|
||||||
|
|
||||||
Designed, coded and textured by Electroblob
|
Designed, coded and textured by Electroblob
|
||||||
@@ -21,6 +21,8 @@ In addition, I'd like to thank the following individuals for their contributions
|
|||||||
- Tora-B
|
- Tora-B
|
||||||
- Avatair
|
- Avatair
|
||||||
- Aeronica
|
- Aeronica
|
||||||
|
- UltraHex
|
||||||
|
- Azim-Palmer
|
||||||
|
|
||||||
#### Translations
|
#### Translations
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ apply plugin: 'net.minecraftforge.gradle.forge'
|
|||||||
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
|
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
|
||||||
|
|
||||||
|
|
||||||
version = "4.2.4" // There, it matches semver, happy now?
|
version = "4.2.6" // There, it matches semver, happy now?
|
||||||
group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
archivesBaseName = "ElectroblobsWizardry"
|
archivesBaseName = "ElectroblobsWizardry"
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import electroblob.wizardry.spell.Spell;
|
|||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.SoundCategory;
|
import net.minecraft.util.SoundCategory;
|
||||||
@@ -238,6 +239,9 @@ public class CommonProxy {
|
|||||||
+ "of sound events, but the given array contained less than 3 sound events!");
|
+ "of sound events, but the given array contained less than 3 sound events!");
|
||||||
playSpellSoundLoop(world, x, y, z, spell, sounds[0], sounds[1], sounds[2], category, volume, pitch, duration);
|
playSpellSoundLoop(world, x, y, z, spell, sounds[0], sounds[1], sounds[2], category, volume, pitch, duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Starts the first-person blink overlay effect for the specified player. */
|
||||||
|
public void playBlinkEffect(EntityPlayer player){}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the client side world using Minecraft.getMinecraft().world. <b>Only to be called client side!</b> Returns
|
* Gets the client side world using Minecraft.getMinecraft().world. <b>Only to be called client side!</b> Returns
|
||||||
|
|||||||
@@ -169,6 +169,8 @@ public final class Settings {
|
|||||||
/** <b>[Server-only]</b> Whether to replace Minecraft's distance-based fall damage calculation with an equivalent,
|
/** <b>[Server-only]</b> Whether to replace Minecraft's distance-based fall damage calculation with an equivalent,
|
||||||
* velocity-based one. */
|
* velocity-based one. */
|
||||||
public boolean replaceVanillaFallDamage = true;
|
public boolean replaceVanillaFallDamage = true;
|
||||||
|
/** <b>[Server-only]</b> Whether using bonemeal on grass blocks has a chance to grow crystal flowers. */
|
||||||
|
public boolean bonemealGrowsCrystalFlowers = true;
|
||||||
/**
|
/**
|
||||||
* <b>[Server-only]</b> List of registry names of entities which summoned creatures are allowed to attack, in addition
|
* <b>[Server-only]</b> List of registry names of entities which summoned creatures are allowed to attack, in addition
|
||||||
* to the defaults.
|
* to the defaults.
|
||||||
@@ -542,6 +544,13 @@ public final class Settings {
|
|||||||
slowTimeAffectsPlayers = property.getBoolean();
|
slowTimeAffectsPlayers = property.getBoolean();
|
||||||
propOrder.add(property.getName());
|
propOrder.add(property.getName());
|
||||||
|
|
||||||
|
property = config.get(GAMEPLAY_CATEGORY, "bonemealGrowsCrystalFlowers", true,
|
||||||
|
"Whether using bonemeal on grass blocks has a chance to grow crystal flowers.");
|
||||||
|
property.setLanguageKey("config." + Wizardry.MODID + ".bonemeal_grows_crystal_flowers");
|
||||||
|
Wizardry.proxy.setToNamedBooleanEntry(property);
|
||||||
|
bonemealGrowsCrystalFlowers = property.getBoolean();
|
||||||
|
propOrder.add(property.getName());
|
||||||
|
|
||||||
property = config.get(GAMEPLAY_CATEGORY, "mobLootTableWhitelist", new String[0], "Whitelist for loot tables to inject additional mob drops (as specified in loot_tables/entities/mob_additions.json) into. Wizardry makes a best guess as to which loot tables belong to hostile mobs, but this may not always be correct or appropriate; add loot table locations (not entity IDs) to this list to manually include them.");
|
property = config.get(GAMEPLAY_CATEGORY, "mobLootTableWhitelist", new String[0], "Whitelist for loot tables to inject additional mob drops (as specified in loot_tables/entities/mob_additions.json) into. Wizardry makes a best guess as to which loot tables belong to hostile mobs, but this may not always be correct or appropriate; add loot table locations (not entity IDs) to this list to manually include them.");
|
||||||
property.setLanguageKey("config." + Wizardry.MODID + ".mob_loot_table_whitelist");
|
property.setLanguageKey("config." + Wizardry.MODID + ".mob_loot_table_whitelist");
|
||||||
property.setRequiresMcRestart(true);
|
property.setRequiresMcRestart(true);
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import net.minecraftforge.fml.common.registry.GameRegistry;
|
|||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.Calendar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <i>"Electroblob's Wizardry adds an RPG-like system of spells to Minecraft, with the aim of being as playable as
|
* <i>"Electroblob's Wizardry adds an RPG-like system of spells to Minecraft, with the aim of being as playable as
|
||||||
@@ -63,7 +64,7 @@ public class Wizardry {
|
|||||||
* 1.x.x represents Minecraft 1.7.x versions, 2.x.x represents Minecraft 1.10.x versions, 3.x.x represents Minecraft
|
* 1.x.x represents Minecraft 1.7.x versions, 2.x.x represents Minecraft 1.10.x versions, 3.x.x represents Minecraft
|
||||||
* 1.11.x versions, and so on.
|
* 1.11.x versions, and so on.
|
||||||
*/
|
*/
|
||||||
public static final String VERSION = "4.2.4";
|
public static final String VERSION = "4.2.6";
|
||||||
|
|
||||||
// IDEA: Triggering of inbuilt Forge events in relevant places?
|
// IDEA: Triggering of inbuilt Forge events in relevant places?
|
||||||
// IDEA: Abstract the vanilla particles behind the particle builder
|
// IDEA: Abstract the vanilla particles behind the particle builder
|
||||||
@@ -88,6 +89,8 @@ public class Wizardry {
|
|||||||
* this folder contains the main config file and the global spell properties folder, if used. */
|
* this folder contains the main config file and the global spell properties folder, if used. */
|
||||||
public static File configDirectory;
|
public static File configDirectory;
|
||||||
|
|
||||||
|
public static boolean tisTheSeason;
|
||||||
|
|
||||||
// The instance of wizardry that Forge uses.
|
// The instance of wizardry that Forge uses.
|
||||||
@Instance(Wizardry.MODID)
|
@Instance(Wizardry.MODID)
|
||||||
public static Wizardry instance;
|
public static Wizardry instance;
|
||||||
@@ -106,6 +109,10 @@ public class Wizardry {
|
|||||||
configDirectory = new File(event.getModConfigurationDirectory(), Wizardry.MODID);
|
configDirectory = new File(event.getModConfigurationDirectory(), Wizardry.MODID);
|
||||||
settings.initConfig(event);
|
settings.initConfig(event);
|
||||||
|
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
tisTheSeason = calendar.get(Calendar.MONTH) + 1 == 12 && calendar.get(Calendar.DAY_OF_MONTH) >= 24
|
||||||
|
&& calendar.get(Calendar.DAY_OF_MONTH) <= 26;
|
||||||
|
|
||||||
// Capabilities
|
// Capabilities
|
||||||
WizardData.register();
|
WizardData.register();
|
||||||
DispenserCastingData.register();
|
DispenserCastingData.register();
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.block;
|
package electroblob.wizardry.block;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.registry.WizardryBlocks;
|
import electroblob.wizardry.registry.WizardryBlocks;
|
||||||
import electroblob.wizardry.util.ParticleBuilder;
|
import electroblob.wizardry.util.ParticleBuilder;
|
||||||
import electroblob.wizardry.util.ParticleBuilder.Type;
|
import electroblob.wizardry.util.ParticleBuilder.Type;
|
||||||
@@ -56,7 +57,7 @@ public class BlockCrystalFlower extends BlockBush {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onBonemealEvent(BonemealEvent event){
|
public static void onBonemealEvent(BonemealEvent event){
|
||||||
// Grows crystal flowers when bonemeal is used on grass
|
// Grows crystal flowers when bonemeal is used on grass
|
||||||
if(event.getBlock().getBlock() == Blocks.GRASS){
|
if(Wizardry.settings.bonemealGrowsCrystalFlowers && event.getBlock().getBlock() == Blocks.GRASS){
|
||||||
|
|
||||||
BlockPos pos = event.getPos().add(event.getWorld().rand.nextInt(8) - event.getWorld().rand.nextInt(8),
|
BlockPos pos = event.getPos().add(event.getWorld().rand.nextInt(8) - event.getWorld().rand.nextInt(8),
|
||||||
event.getWorld().rand.nextInt(4) - event.getWorld().rand.nextInt(4),
|
event.getWorld().rand.nextInt(4) - event.getWorld().rand.nextInt(4),
|
||||||
|
|||||||
@@ -141,7 +141,8 @@ public class BlockTransportationStone extends Block {
|
|||||||
if(locations.isEmpty()) locations.add(here);
|
if(locations.isEmpty()) locations.add(here);
|
||||||
else{
|
else{
|
||||||
locations.remove(here); // Prevents duplicates
|
locations.remove(here); // Prevents duplicates
|
||||||
locations.set(Math.max(locations.size() - 1, 0), here);
|
if(locations.isEmpty()) locations.add(here);
|
||||||
|
else locations.set(Math.max(locations.size() - 1, 0), here);
|
||||||
}
|
}
|
||||||
if(!world.isRemote) player.sendStatusMessage(new TextComponentTranslation("tile." + Wizardry.MODID + ":transportation_stone.confirm", Spells.transportation.getNameForTranslationFormatted()), true);
|
if(!world.isRemote) player.sendStatusMessage(new TextComponentTranslation("tile." + Wizardry.MODID + ":transportation_stone.confirm", Spells.transportation.getNameForTranslationFormatted()), true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,6 +190,11 @@ public class ClientProxy extends CommonProxy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void playBlinkEffect(EntityPlayer player){
|
||||||
|
if(Minecraft.getMinecraft().player == player) WizardryClientEventHandler.playBlinkEffect();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getSpellHUDSkins(){
|
public Set<String> getSpellHUDSkins(){
|
||||||
return GuiSpellDisplay.getSkinKeys();
|
return GuiSpellDisplay.getSkinKeys();
|
||||||
|
|||||||
@@ -23,11 +23,8 @@ import net.minecraft.client.renderer.OpenGlHelper;
|
|||||||
import net.minecraft.client.renderer.Tessellator;
|
import net.minecraft.client.renderer.Tessellator;
|
||||||
import net.minecraft.client.renderer.entity.RenderManager;
|
import net.minecraft.client.renderer.entity.RenderManager;
|
||||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||||
import net.minecraft.client.settings.KeyBinding;
|
|
||||||
import net.minecraft.entity.EntityLiving;
|
import net.minecraft.entity.EntityLiving;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.SharedMonsterAttributes;
|
|
||||||
import net.minecraft.entity.ai.attributes.AttributeModifier;
|
|
||||||
import net.minecraft.entity.item.EntityArmorStand;
|
import net.minecraft.entity.item.EntityArmorStand;
|
||||||
import net.minecraft.inventory.Slot;
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
@@ -35,18 +32,17 @@ import net.minecraft.tileentity.TileEntity;
|
|||||||
import net.minecraft.tileentity.TileEntityDispenser;
|
import net.minecraft.tileentity.TileEntityDispenser;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.math.RayTraceResult;
|
import net.minecraft.util.math.RayTraceResult;
|
||||||
import net.minecraft.util.math.Vec3d;
|
|
||||||
import net.minecraft.village.MerchantRecipe;
|
import net.minecraft.village.MerchantRecipe;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.client.event.*;
|
import net.minecraftforge.client.event.*;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event handler responsible for client-side only events, mostly rendering.
|
* Event handler responsible for client-side only events, mostly rendering.
|
||||||
@@ -71,12 +67,6 @@ public final class WizardryClientEventHandler {
|
|||||||
private static int blinkEffectTimer;
|
private static int blinkEffectTimer;
|
||||||
/** The number of ticks the blink effect lasts for. */
|
/** The number of ticks the blink effect lasts for. */
|
||||||
private static final int BLINK_EFFECT_DURATION = 8;
|
private static final int BLINK_EFFECT_DURATION = 8;
|
||||||
|
|
||||||
private static final Method unpressKey;
|
|
||||||
|
|
||||||
static {
|
|
||||||
unpressKey = ObfuscationReflectionHelper.findMethod(KeyBinding.class, "func_74505_d", void.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Starts the first person blink overlay effect. */
|
/** Starts the first person blink overlay effect. */
|
||||||
public static void playBlinkEffect(){
|
public static void playBlinkEffect(){
|
||||||
@@ -151,7 +141,10 @@ public final class WizardryClientEventHandler {
|
|||||||
|
|
||||||
if(world == null) return;
|
if(world == null) return;
|
||||||
|
|
||||||
for(TileEntity tileentity : world.loadedTileEntityList){
|
// Somehow this was throwing a CME, I have no idea why so I'm just going to cheat and copy the list
|
||||||
|
List<TileEntity> tileEntities = new ArrayList<>(world.loadedTileEntityList);
|
||||||
|
|
||||||
|
for(TileEntity tileentity : tileEntities){
|
||||||
if(tileentity instanceof TileEntityDispenser){
|
if(tileentity instanceof TileEntityDispenser){
|
||||||
if(DispenserCastingData.get((TileEntityDispenser)tileentity) != null){
|
if(DispenserCastingData.get((TileEntityDispenser)tileentity) != null){
|
||||||
DispenserCastingData.get((TileEntityDispenser)tileentity).update();
|
DispenserCastingData.get((TileEntityDispenser)tileentity).update();
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.client.model;
|
package electroblob.wizardry.client.model;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.block.BlockStatue;
|
import electroblob.wizardry.block.BlockStatue;
|
||||||
import net.minecraft.client.model.ModelRenderer;
|
import net.minecraft.client.model.ModelRenderer;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
@@ -13,6 +14,7 @@ public class ModelWizardArmour extends ModelArmourFixer {
|
|||||||
ModelRenderer hatSegment4;
|
ModelRenderer hatSegment4;
|
||||||
ModelRenderer hatSegment5;
|
ModelRenderer hatSegment5;
|
||||||
ModelRenderer hatSegment6;
|
ModelRenderer hatSegment6;
|
||||||
|
ModelRenderer hatBobble;
|
||||||
ModelRenderer robe;
|
ModelRenderer robe;
|
||||||
|
|
||||||
public ModelWizardArmour(float delta){
|
public ModelWizardArmour(float delta){
|
||||||
@@ -75,6 +77,13 @@ public class ModelWizardArmour extends ModelArmourFixer {
|
|||||||
hatSegment6.mirror = true;
|
hatSegment6.mirror = true;
|
||||||
setRotation(hatSegment6, -0.5585054F, 0F, 0F);
|
setRotation(hatSegment6, -0.5585054F, 0F, 0F);
|
||||||
|
|
||||||
|
hatBobble = new ModelRenderer(this, 52, 47);
|
||||||
|
hatBobble.addBox(0F, 0F, 0F, 3, 3, 3);
|
||||||
|
hatBobble.setRotationPoint(-1.5F, -15.1F, 4F);
|
||||||
|
hatBobble.setTextureSize(64, 64);
|
||||||
|
hatBobble.mirror = true;
|
||||||
|
setRotation(hatBobble, -0.65F, 0F, 0F);
|
||||||
|
|
||||||
bipedBody = new ModelRenderer(this, 16, 16);
|
bipedBody = new ModelRenderer(this, 16, 16);
|
||||||
bipedBody.addBox(-4F, 0F, -2F, 8, 11, 4, delta);
|
bipedBody.addBox(-4F, 0F, -2F, 8, 11, 4, delta);
|
||||||
bipedBody.setRotationPoint(0F, 0F, 0F);
|
bipedBody.setRotationPoint(0F, 0F, 0F);
|
||||||
@@ -97,6 +106,7 @@ public class ModelWizardArmour extends ModelArmourFixer {
|
|||||||
bipedHead.addChild(hatSegment4);
|
bipedHead.addChild(hatSegment4);
|
||||||
bipedHead.addChild(hatSegment5);
|
bipedHead.addChild(hatSegment5);
|
||||||
bipedHead.addChild(hatSegment6);
|
bipedHead.addChild(hatSegment6);
|
||||||
|
bipedHead.addChild(hatBobble);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5){
|
public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5){
|
||||||
@@ -129,6 +139,8 @@ public class ModelWizardArmour extends ModelArmourFixer {
|
|||||||
this.robe.rotateAngleX = (this.bipedLeftLeg.rotateAngleX + this.bipedRightLeg.rotateAngleX) / 2f;
|
this.robe.rotateAngleX = (this.bipedLeftLeg.rotateAngleX + this.bipedRightLeg.rotateAngleX) / 2f;
|
||||||
this.robe.rotateAngleY = this.bipedBody.rotateAngleY;
|
this.robe.rotateAngleY = this.bipedBody.rotateAngleY;
|
||||||
this.robe.rotateAngleZ = (this.bipedLeftLeg.rotateAngleZ + this.bipedRightLeg.rotateAngleZ) / 2f;
|
this.robe.rotateAngleZ = (this.bipedLeftLeg.rotateAngleZ + this.bipedRightLeg.rotateAngleZ) / 2f;
|
||||||
|
|
||||||
|
this.hatBobble.showModel = Wizardry.tisTheSeason;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,10 +67,10 @@ public final class WizardryModels {
|
|||||||
|
|
||||||
registerMultiTexturedModel((ItemCrystal)WizardryItems.magic_crystal);
|
registerMultiTexturedModel((ItemCrystal)WizardryItems.magic_crystal);
|
||||||
|
|
||||||
registerItemModel(WizardryItems.magic_wand);
|
registerWandModel(WizardryItems.magic_wand);
|
||||||
registerItemModel(WizardryItems.apprentice_wand);
|
registerWandModel(WizardryItems.apprentice_wand);
|
||||||
registerItemModel(WizardryItems.advanced_wand);
|
registerWandModel(WizardryItems.advanced_wand);
|
||||||
registerItemModel(WizardryItems.master_wand);
|
registerWandModel(WizardryItems.master_wand);
|
||||||
|
|
||||||
registerItemModel(WizardryItems.spell_book);
|
registerItemModel(WizardryItems.spell_book);
|
||||||
// Wildcard registered for wizard trades.
|
// Wildcard registered for wizard trades.
|
||||||
@@ -78,37 +78,37 @@ public final class WizardryModels {
|
|||||||
registerItemModel(WizardryItems.arcane_tome);
|
registerItemModel(WizardryItems.arcane_tome);
|
||||||
registerItemModel(WizardryItems.wizard_handbook);
|
registerItemModel(WizardryItems.wizard_handbook);
|
||||||
|
|
||||||
registerItemModel(WizardryItems.novice_fire_wand);
|
registerWandModel(WizardryItems.novice_fire_wand);
|
||||||
registerItemModel(WizardryItems.novice_ice_wand);
|
registerWandModel(WizardryItems.novice_ice_wand);
|
||||||
registerItemModel(WizardryItems.novice_lightning_wand);
|
registerWandModel(WizardryItems.novice_lightning_wand);
|
||||||
registerItemModel(WizardryItems.novice_necromancy_wand);
|
registerWandModel(WizardryItems.novice_necromancy_wand);
|
||||||
registerItemModel(WizardryItems.novice_earth_wand);
|
registerWandModel(WizardryItems.novice_earth_wand);
|
||||||
registerItemModel(WizardryItems.novice_sorcery_wand);
|
registerWandModel(WizardryItems.novice_sorcery_wand);
|
||||||
registerItemModel(WizardryItems.novice_healing_wand);
|
registerWandModel(WizardryItems.novice_healing_wand);
|
||||||
|
|
||||||
registerItemModel(WizardryItems.apprentice_fire_wand);
|
registerWandModel(WizardryItems.apprentice_fire_wand);
|
||||||
registerItemModel(WizardryItems.apprentice_ice_wand);
|
registerWandModel(WizardryItems.apprentice_ice_wand);
|
||||||
registerItemModel(WizardryItems.apprentice_lightning_wand);
|
registerWandModel(WizardryItems.apprentice_lightning_wand);
|
||||||
registerItemModel(WizardryItems.apprentice_necromancy_wand);
|
registerWandModel(WizardryItems.apprentice_necromancy_wand);
|
||||||
registerItemModel(WizardryItems.apprentice_earth_wand);
|
registerWandModel(WizardryItems.apprentice_earth_wand);
|
||||||
registerItemModel(WizardryItems.apprentice_sorcery_wand);
|
registerWandModel(WizardryItems.apprentice_sorcery_wand);
|
||||||
registerItemModel(WizardryItems.apprentice_healing_wand);
|
registerWandModel(WizardryItems.apprentice_healing_wand);
|
||||||
|
|
||||||
registerItemModel(WizardryItems.advanced_fire_wand);
|
registerWandModel(WizardryItems.advanced_fire_wand);
|
||||||
registerItemModel(WizardryItems.advanced_ice_wand);
|
registerWandModel(WizardryItems.advanced_ice_wand);
|
||||||
registerItemModel(WizardryItems.advanced_lightning_wand);
|
registerWandModel(WizardryItems.advanced_lightning_wand);
|
||||||
registerItemModel(WizardryItems.advanced_necromancy_wand);
|
registerWandModel(WizardryItems.advanced_necromancy_wand);
|
||||||
registerItemModel(WizardryItems.advanced_earth_wand);
|
registerWandModel(WizardryItems.advanced_earth_wand);
|
||||||
registerItemModel(WizardryItems.advanced_sorcery_wand);
|
registerWandModel(WizardryItems.advanced_sorcery_wand);
|
||||||
registerItemModel(WizardryItems.advanced_healing_wand);
|
registerWandModel(WizardryItems.advanced_healing_wand);
|
||||||
|
|
||||||
registerItemModel(WizardryItems.master_fire_wand);
|
registerWandModel(WizardryItems.master_fire_wand);
|
||||||
registerItemModel(WizardryItems.master_ice_wand);
|
registerWandModel(WizardryItems.master_ice_wand);
|
||||||
registerItemModel(WizardryItems.master_lightning_wand);
|
registerWandModel(WizardryItems.master_lightning_wand);
|
||||||
registerItemModel(WizardryItems.master_necromancy_wand);
|
registerWandModel(WizardryItems.master_necromancy_wand);
|
||||||
registerItemModel(WizardryItems.master_earth_wand);
|
registerWandModel(WizardryItems.master_earth_wand);
|
||||||
registerItemModel(WizardryItems.master_sorcery_wand);
|
registerWandModel(WizardryItems.master_sorcery_wand);
|
||||||
registerItemModel(WizardryItems.master_healing_wand);
|
registerWandModel(WizardryItems.master_healing_wand);
|
||||||
|
|
||||||
registerItemModel(WizardryItems.spectral_sword);
|
registerItemModel(WizardryItems.spectral_sword);
|
||||||
registerItemModel(WizardryItems.spectral_pickaxe);
|
registerItemModel(WizardryItems.spectral_pickaxe);
|
||||||
@@ -303,6 +303,23 @@ public final class WizardryModels {
|
|||||||
// Assigns the model for all metadata values
|
// Assigns the model for all metadata values
|
||||||
ModelLoader.setCustomMeshDefinition(item, s -> new ModelResourceLocation(item.getRegistryName(), "inventory"));
|
ModelLoader.setCustomMeshDefinition(item, s -> new ModelResourceLocation(item.getRegistryName(), "inventory"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a wand model, using the item's registry name as the model name (this convention makes it easier to
|
||||||
|
* keep track of everything).
|
||||||
|
*/
|
||||||
|
private static void registerWandModel(Item item){
|
||||||
|
|
||||||
|
if(Wizardry.tisTheSeason){
|
||||||
|
// Changing the last parameter from null to "inventory" fixed the item/block model weirdness. No idea why!
|
||||||
|
ModelBakery.registerItemVariants(item, new ModelResourceLocation("ebwizardry:festive_wand", "inventory"));
|
||||||
|
// Assigns the model for all metadata values
|
||||||
|
ModelLoader.setCustomMeshDefinition(item, s -> new ModelResourceLocation("ebwizardry:festive_wand", "inventory"));
|
||||||
|
}else{
|
||||||
|
registerItemModel(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers an item model, using the itemstack-sensitive {@link IMultiTexturedItem#getModelName(ItemStack)} as the
|
* Registers an item model, using the itemstack-sensitive {@link IMultiTexturedItem#getModelName(ItemStack)} as the
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ public class LayerFrost implements LayerRenderer<EntityLivingBase> {
|
|||||||
double scaleX = 1, scaleY = 1;
|
double scaleX = 1, scaleY = 1;
|
||||||
// It's more logical to use the model's texture size, but some classes don't bother setting it properly
|
// It's more logical to use the model's texture size, but some classes don't bother setting it properly
|
||||||
// (e.g. ModelVillager), so to get the correct dimensions I'm getting them from the first box instead.
|
// (e.g. ModelVillager), so to get the correct dimensions I'm getting them from the first box instead.
|
||||||
if(model.boxList != null && model.boxList.get(0) != null){
|
if(model.boxList != null && model.boxList.size() >= 1 && model.boxList.get(0) != null){
|
||||||
scaleX = (double)model.boxList.get(0).textureWidth / 16d;
|
scaleX = (double)model.boxList.get(0).textureWidth / 16d;
|
||||||
scaleY = (double)model.boxList.get(0).textureHeight / 16d;
|
scaleY = (double)model.boxList.get(0).textureHeight / 16d;
|
||||||
}else{ // Fallback to model fields; should never be needed
|
}else{ // Fallback to model fields; should never be needed
|
||||||
@@ -121,11 +121,26 @@ public class LayerFrost implements LayerRenderer<EntityLivingBase> {
|
|||||||
}
|
}
|
||||||
GlStateManager.scale(scaleX, scaleY, 1);
|
GlStateManager.scale(scaleX, scaleY, 1);
|
||||||
GlStateManager.matrixMode(GL11.GL_MODELVIEW);
|
GlStateManager.matrixMode(GL11.GL_MODELVIEW);
|
||||||
|
|
||||||
|
boolean headWearHidden = false;
|
||||||
|
boolean bodyWearHidden = false;
|
||||||
|
boolean leftArmWearHidden = false;
|
||||||
|
boolean rightArmWearHidden = false;
|
||||||
|
boolean leftLegWearHidden = false;
|
||||||
|
boolean rightLegWearHidden = false;
|
||||||
|
|
||||||
// Hides the hat layer for bipeds
|
// Hides the hat layer for bipeds
|
||||||
if(this.model instanceof ModelBiped) ((ModelBiped)this.model).bipedHeadwear.isHidden = true;
|
if(this.model instanceof ModelBiped){
|
||||||
|
headWearHidden = ((ModelBiped)this.model).bipedHeadwear.isHidden;
|
||||||
|
((ModelBiped)this.model).bipedHeadwear.isHidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
if(this.model instanceof ModelPlayer){
|
if(this.model instanceof ModelPlayer){
|
||||||
|
bodyWearHidden = ((ModelPlayer)this.model).bipedBodyWear.isHidden;
|
||||||
|
leftArmWearHidden = ((ModelPlayer)this.model).bipedLeftArmwear.isHidden;
|
||||||
|
rightArmWearHidden = ((ModelPlayer)this.model).bipedRightArmwear.isHidden;
|
||||||
|
leftLegWearHidden = ((ModelPlayer)this.model).bipedLeftLegwear.isHidden;
|
||||||
|
rightLegWearHidden = ((ModelPlayer)this.model).bipedRightLegwear.isHidden;
|
||||||
((ModelPlayer)this.model).bipedBodyWear.isHidden = true;
|
((ModelPlayer)this.model).bipedBodyWear.isHidden = true;
|
||||||
((ModelPlayer)this.model).bipedLeftArmwear.isHidden = true;
|
((ModelPlayer)this.model).bipedLeftArmwear.isHidden = true;
|
||||||
((ModelPlayer)this.model).bipedRightArmwear.isHidden = true;
|
((ModelPlayer)this.model).bipedRightArmwear.isHidden = true;
|
||||||
@@ -136,7 +151,15 @@ public class LayerFrost implements LayerRenderer<EntityLivingBase> {
|
|||||||
this.model.setLivingAnimations(entity, limbSwing, limbSwingAmount, partialTicks);
|
this.model.setLivingAnimations(entity, limbSwing, limbSwingAmount, partialTicks);
|
||||||
this.model.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale);
|
this.model.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale);
|
||||||
|
|
||||||
if(this.model instanceof ModelBiped) ((ModelBiped)this.model).bipedHeadwear.isHidden = false;
|
if(this.model instanceof ModelBiped) ((ModelBiped)this.model).bipedHeadwear.isHidden = headWearHidden;
|
||||||
|
|
||||||
|
if(this.model instanceof ModelPlayer){
|
||||||
|
((ModelPlayer)this.model).bipedBodyWear.isHidden = bodyWearHidden;
|
||||||
|
((ModelPlayer)this.model).bipedLeftArmwear.isHidden = leftArmWearHidden;
|
||||||
|
((ModelPlayer)this.model).bipedRightArmwear.isHidden = rightArmWearHidden;
|
||||||
|
((ModelPlayer)this.model).bipedLeftLegwear.isHidden = leftLegWearHidden;
|
||||||
|
((ModelPlayer)this.model).bipedRightLegwear.isHidden = rightLegWearHidden;
|
||||||
|
}
|
||||||
|
|
||||||
// Undoes the texture scaling
|
// Undoes the texture scaling
|
||||||
GlStateManager.matrixMode(GL11.GL_TEXTURE);
|
GlStateManager.matrixMode(GL11.GL_TEXTURE);
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ public class RenderArcaneLock {
|
|||||||
|
|
||||||
GlStateManager.pushMatrix();
|
GlStateManager.pushMatrix();
|
||||||
GlStateManager.enableBlend();
|
GlStateManager.enableBlend();
|
||||||
|
boolean lighting = GL11.glIsEnabled(GL11.GL_LIGHTING);
|
||||||
GlStateManager.disableLighting();
|
GlStateManager.disableLighting();
|
||||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
|
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
|
||||||
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||||
@@ -62,6 +63,8 @@ public class RenderArcaneLock {
|
|||||||
List<TileEntity> tileentities = new ArrayList<>(world.loadedTileEntityList);
|
List<TileEntity> tileentities = new ArrayList<>(world.loadedTileEntityList);
|
||||||
|
|
||||||
for(TileEntity tileentity : tileentities){
|
for(TileEntity tileentity : tileentities){
|
||||||
|
|
||||||
|
if(tileentity == null) continue; // What the heck VoxelMap
|
||||||
|
|
||||||
if(tileentity.getDistanceSq(origin.x, origin.y, origin.z) <= tileentity.getMaxRenderDistanceSquared()
|
if(tileentity.getDistanceSq(origin.x, origin.y, origin.z) <= tileentity.getMaxRenderDistanceSquared()
|
||||||
&& tileentity.getTileData().hasUniqueId(ArcaneLock.NBT_KEY)){
|
&& tileentity.getTileData().hasUniqueId(ArcaneLock.NBT_KEY)){
|
||||||
@@ -82,7 +85,9 @@ public class RenderArcaneLock {
|
|||||||
|
|
||||||
GlStateManager.disableBlend();
|
GlStateManager.disableBlend();
|
||||||
GlStateManager.enableTexture2D();
|
GlStateManager.enableTexture2D();
|
||||||
GlStateManager.enableLighting();
|
if (lighting) {
|
||||||
|
GlStateManager.enableLighting();
|
||||||
|
}
|
||||||
GlStateManager.disableRescaleNormal();
|
GlStateManager.disableRescaleNormal();
|
||||||
GlStateManager.popMatrix();
|
GlStateManager.popMatrix();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,9 +53,8 @@ public class RenderBlackHole extends Render<EntityBlackHole> {
|
|||||||
(float)blackhole.ticksExisted / 10);
|
(float)blackhole.ticksExisted / 10);
|
||||||
}
|
}
|
||||||
if(blackhole.ticksExisted > blackhole.lifetime - 10){
|
if(blackhole.ticksExisted > blackhole.lifetime - 10){
|
||||||
GlStateManager.scale((float)(blackhole.lifetime - blackhole.ticksExisted) / 10,
|
float scale = Math.max(0, (float)(blackhole.lifetime - blackhole.ticksExisted) / 10);
|
||||||
(float)(blackhole.lifetime - blackhole.ticksExisted) / 10,
|
GlStateManager.scale(scale, scale, scale);
|
||||||
(float)(blackhole.lifetime - blackhole.ticksExisted) / 10);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.bindTexture(texture);
|
this.bindTexture(texture);
|
||||||
|
|||||||
@@ -166,7 +166,10 @@ public class DispenserCastingData extends BlockCastingData<TileEntityDispenser>
|
|||||||
// This will fire once for each dimension, but since we want dispenser-casting to work in all dimensions,
|
// This will fire once for each dimension, but since we want dispenser-casting to work in all dimensions,
|
||||||
// this is correct (the loaded tile entity list will of course be different in each case.
|
// this is correct (the loaded tile entity list will of course be different in each case.
|
||||||
|
|
||||||
for(TileEntity tileentity : event.world.loadedTileEntityList){
|
// Somehow this was throwing a CME, I have no idea why so I'm just going to cheat and copy the list
|
||||||
|
List<TileEntity> tileEntities = new ArrayList<>(event.world.loadedTileEntityList);
|
||||||
|
|
||||||
|
for(TileEntity tileentity : tileEntities){
|
||||||
if(tileentity instanceof TileEntityDispenser){
|
if(tileentity instanceof TileEntityDispenser){
|
||||||
if(DispenserCastingData.get((TileEntityDispenser)tileentity) != null){
|
if(DispenserCastingData.get((TileEntityDispenser)tileentity) != null){
|
||||||
DispenserCastingData.get((TileEntityDispenser)tileentity).update();
|
DispenserCastingData.get((TileEntityDispenser)tileentity).update();
|
||||||
|
|||||||
@@ -29,9 +29,9 @@ public class EntityIceSpike extends EntityMagicConstruct {
|
|||||||
this.setRotation(-facing.getHorizontalAngle(), WizardryUtilities.getPitch(facing));
|
this.setRotation(-facing.getHorizontalAngle(), WizardryUtilities.getPitch(facing));
|
||||||
float yaw = (-facing.getHorizontalAngle()) * (float)Math.PI/180;
|
float yaw = (-facing.getHorizontalAngle()) * (float)Math.PI/180;
|
||||||
float pitch = (WizardryUtilities.getPitch(facing) - 90) * (float)Math.PI/180;
|
float pitch = (WizardryUtilities.getPitch(facing) - 90) * (float)Math.PI/180;
|
||||||
Vec3d min = new Vec3d(-width/2, 0, -width/2).rotatePitch(pitch).rotateYaw(yaw);
|
Vec3d min = this.getPositionVector().add(new Vec3d(-width/2, 0, -width/2).rotatePitch(pitch).rotateYaw(yaw));
|
||||||
Vec3d max = new Vec3d(width/2, height, width/2).rotatePitch(pitch).rotateYaw(yaw);
|
Vec3d max = this.getPositionVector().add(new Vec3d(width/2, height, width/2).rotatePitch(pitch).rotateYaw(yaw));
|
||||||
this.setEntityBoundingBox(new AxisAlignedBB(this.getPositionVector().add(min), this.getPositionVector().add(max)));
|
this.setEntityBoundingBox(new AxisAlignedBB(min.x, min.y, min.z, max.x, max.y, max.z));
|
||||||
}
|
}
|
||||||
|
|
||||||
public EnumFacing getFacing(){
|
public EnumFacing getFacing(){
|
||||||
|
|||||||
@@ -392,7 +392,7 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onCheckSpawnEvent(LivingSpawnEvent.CheckSpawn event){
|
public static void onCheckSpawnEvent(LivingSpawnEvent.CheckSpawn event){
|
||||||
// We have no way of checking if it's a spawner in getCanSpawnHere() so this has to be done here instead
|
// We have no way of checking if it's a spawner in getCanSpawnHere() so this has to be done here instead
|
||||||
if(!event.isSpawner()){
|
if(event.getEntityLiving() instanceof EntityEvilWizard && !event.isSpawner()){
|
||||||
if(!ArrayUtils.contains(Wizardry.settings.mobSpawnDimensions, event.getWorld().provider.getDimension()))
|
if(!ArrayUtils.contains(Wizardry.settings.mobSpawnDimensions, event.getWorld().provider.getDimension()))
|
||||||
event.setResult(Event.Result.DENY);
|
event.setResult(Event.Result.DENY);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class EntityIceGiant extends EntityIronGolem implements ISummonedCreature
|
|||||||
this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F));
|
this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F));
|
||||||
this.tasks.addTask(7, new EntityAILookIdle(this));
|
this.tasks.addTask(7, new EntityAILookIdle(this));
|
||||||
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false));
|
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false));
|
||||||
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<EntityLivingBase>(this, EntityLivingBase.class,
|
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityLivingBase.class,
|
||||||
0, false, true, this.getTargetSelector()));
|
0, false, true, this.getTargetSelector()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ public class EntityIceWraith extends EntityBlazeMinion {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onCheckSpawnEvent(LivingSpawnEvent.CheckSpawn event){
|
public static void onCheckSpawnEvent(LivingSpawnEvent.CheckSpawn event){
|
||||||
// We have no way of checking if it's a spawner in getCanSpawnHere() so this has to be done here instead
|
// We have no way of checking if it's a spawner in getCanSpawnHere() so this has to be done here instead
|
||||||
if(!event.isSpawner()){
|
if(event.getEntityLiving() instanceof EntityLightningWraith && !event.isSpawner()){
|
||||||
if(!ArrayUtils.contains(Wizardry.settings.mobSpawnDimensions, event.getWorld().provider.getDimension()))
|
if(!ArrayUtils.contains(Wizardry.settings.mobSpawnDimensions, event.getWorld().provider.getDimension()))
|
||||||
event.setResult(Event.Result.DENY);
|
event.setResult(Event.Result.DENY);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ public class EntityLightningWraith extends EntityBlazeMinion {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onCheckSpawnEvent(LivingSpawnEvent.CheckSpawn event){
|
public static void onCheckSpawnEvent(LivingSpawnEvent.CheckSpawn event){
|
||||||
// We have no way of checking if it's a spawner in getCanSpawnHere() so this has to be done here instead
|
// We have no way of checking if it's a spawner in getCanSpawnHere() so this has to be done here instead
|
||||||
if(!event.isSpawner()){
|
if(event.getEntityLiving() instanceof EntityLightningWraith && !event.isSpawner()){
|
||||||
if(!event.getWorld().isThundering()) event.setResult(Event.Result.DENY);
|
if(!event.getWorld().isThundering()) event.setResult(Event.Result.DENY);
|
||||||
if(!ArrayUtils.contains(Wizardry.settings.mobSpawnDimensions, event.getWorld().provider.getDimension()))
|
if(!ArrayUtils.contains(Wizardry.settings.mobSpawnDimensions, event.getWorld().provider.getDimension()))
|
||||||
event.setResult(Event.Result.DENY);
|
event.setResult(Event.Result.DENY);
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public class EntityPhoenix extends EntitySummonedCreature implements ISpellCaste
|
|||||||
this.tasks.addTask(3, new EntityAILookIdle(this));
|
this.tasks.addTask(3, new EntityAILookIdle(this));
|
||||||
// this.targetTasks.addTask(0, new EntityAIMoveTowardsTarget(this, 1, 10));
|
// this.targetTasks.addTask(0, new EntityAIMoveTowardsTarget(this, 1, 10));
|
||||||
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
|
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
|
||||||
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<EntityLivingBase>(this, EntityLivingBase.class,
|
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityLivingBase.class,
|
||||||
0, false, true, this.getTargetSelector()));
|
0, false, true, this.getTargetSelector()));
|
||||||
|
|
||||||
this.setAIMoveSpeed((float)AISpeed);
|
this.setAIMoveSpeed((float)AISpeed);
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public class EntityShadowWraith extends EntitySummonedCreature implements ISpell
|
|||||||
this.tasks.addTask(2, new EntityAIWander(this, AISpeed));
|
this.tasks.addTask(2, new EntityAIWander(this, AISpeed));
|
||||||
this.tasks.addTask(3, new EntityAILookIdle(this));
|
this.tasks.addTask(3, new EntityAILookIdle(this));
|
||||||
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
|
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
|
||||||
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<EntityLivingBase>(this, EntityLivingBase.class,
|
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityLivingBase.class,
|
||||||
0, false, true, this.getTargetSelector()));
|
0, false, true, this.getTargetSelector()));
|
||||||
|
|
||||||
this.setAIMoveSpeed((float)AISpeed);
|
this.setAIMoveSpeed((float)AISpeed);
|
||||||
|
|||||||
@@ -218,7 +218,8 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
|||||||
// Copied from EntityVillager
|
// Copied from EntityVillager
|
||||||
if(!this.world.isRemote && this.livingSoundTime > -this.getTalkInterval() + 20){
|
if(!this.world.isRemote && this.livingSoundTime > -this.getTalkInterval() + 20){
|
||||||
this.livingSoundTime = -this.getTalkInterval();
|
this.livingSoundTime = -this.getTalkInterval();
|
||||||
this.playSound(stack.isEmpty() ? WizardrySounds.ENTITY_WIZARD_NO : WizardrySounds.ENTITY_WIZARD_YES, this.getSoundVolume(), this.getSoundPitch());
|
SoundEvent yes = Wizardry.tisTheSeason ? WizardrySounds.ENTITY_WIZARD_HOHOHO : WizardrySounds.ENTITY_WIZARD_YES;
|
||||||
|
this.playSound(stack.isEmpty() ? WizardrySounds.ENTITY_WIZARD_NO : yes, this.getSoundVolume(), this.getSoundPitch());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,6 +257,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SoundEvent getAmbientSound(){
|
protected SoundEvent getAmbientSound(){
|
||||||
|
if(Wizardry.tisTheSeason) return WizardrySounds.ENTITY_WIZARD_HOHOHO;
|
||||||
return this.isTrading() ? WizardrySounds.ENTITY_WIZARD_TRADING : WizardrySounds.ENTITY_WIZARD_AMBIENT;
|
return this.isTrading() ? WizardrySounds.ENTITY_WIZARD_TRADING : WizardrySounds.ENTITY_WIZARD_AMBIENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -414,7 +416,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
|||||||
this.spells = (List<Spell>)NBTExtras.NBTToList(nbt.getTagList("spells", NBT.TAG_INT),
|
this.spells = (List<Spell>)NBTExtras.NBTToList(nbt.getTagList("spells", NBT.TAG_INT),
|
||||||
(NBTTagInt tag) -> Spell.byMetadata(tag.getInt()));
|
(NBTTagInt tag) -> Spell.byMetadata(tag.getInt()));
|
||||||
|
|
||||||
NBTTagList tagList = nbt.getTagList("towerBlocks", NBT.TAG_LONG);
|
NBTTagList tagList = nbt.getTagList("towerBlocks", NBT.TAG_COMPOUND);
|
||||||
if(!tagList.isEmpty()){
|
if(!tagList.isEmpty()){
|
||||||
this.towerBlocks = new HashSet<>(NBTExtras.NBTToList(tagList, NBTUtil::getPosFromTag));
|
this.towerBlocks = new HashSet<>(NBTExtras.NBTToList(tagList, NBTUtil::getPosFromTag));
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
@@ -221,7 +221,8 @@ public interface ISummonedCreature extends IEntityAdditionalSpawnData, IEntityOw
|
|||||||
* possible for implementors to override this in order to do something special when selecting a target.
|
* possible for implementors to override this in order to do something special when selecting a target.
|
||||||
*/
|
*/
|
||||||
default Predicate<Entity> getTargetSelector(){
|
default Predicate<Entity> getTargetSelector(){
|
||||||
return entity -> getCaster() == null ? entity instanceof EntityPlayer : !entity.isInvisible() && isValidTarget(entity);
|
return entity -> !entity.isInvisible() && (getCaster() == null ? entity instanceof EntityPlayer &&
|
||||||
|
!((EntityPlayer)entity).isCreative() : isValidTarget(entity));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.entity.projectile;
|
package electroblob.wizardry.entity.projectile;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.registry.Spells;
|
import electroblob.wizardry.registry.Spells;
|
||||||
import electroblob.wizardry.registry.WizardrySounds;
|
import electroblob.wizardry.registry.WizardrySounds;
|
||||||
import electroblob.wizardry.spell.Spell;
|
import electroblob.wizardry.spell.Spell;
|
||||||
@@ -44,15 +45,34 @@ public class EntityMagicMissile extends EntityMagicArrow {
|
|||||||
public void tickInAir(){
|
public void tickInAir(){
|
||||||
|
|
||||||
if(this.world.isRemote){
|
if(this.world.isRemote){
|
||||||
ParticleBuilder.create(Type.SPARKLE, rand, posX, posY, posZ, 0.03, true).clr(1, 1, 0.65f).fade(0.7f, 0, 1)
|
|
||||||
.time(20 + rand.nextInt(10)).spawn(world);
|
if(Wizardry.tisTheSeason){
|
||||||
|
|
||||||
if(this.ticksExisted > 1){ // Don't spawn particles behind where it started!
|
ParticleBuilder.create(Type.SPARKLE, rand, posX, posY, posZ, 0.03, true).clr(0.8f, 0.15f, 0.15f)
|
||||||
double x = posX - motionX/2;
|
.time(20 + rand.nextInt(10)).spawn(world);
|
||||||
double y = posY - motionY/2;
|
|
||||||
double z = posZ - motionZ/2;
|
ParticleBuilder.create(Type.SNOW).pos(posX, posY, posZ).spawn(world);
|
||||||
ParticleBuilder.create(Type.SPARKLE, rand, x, y, z, 0.03, true).clr(1, 1, 0.65f).fade(0.7f, 0, 1)
|
|
||||||
.time(20 + rand.nextInt(10)).spawn(world);
|
if(this.ticksExisted > 1){ // Don't spawn particles behind where it started!
|
||||||
|
double x = posX - motionX / 2;
|
||||||
|
double y = posY - motionY / 2;
|
||||||
|
double z = posZ - motionZ / 2;
|
||||||
|
ParticleBuilder.create(Type.SPARKLE, rand, x, y, z, 0.03, true).clr(0.15f, 0.7f, 0.15f)
|
||||||
|
.time(20 + rand.nextInt(10)).spawn(world);
|
||||||
|
}
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
ParticleBuilder.create(Type.SPARKLE, rand, posX, posY, posZ, 0.03, true).clr(1, 1, 0.65f).fade(0.7f, 0, 1)
|
||||||
|
.time(20 + rand.nextInt(10)).spawn(world);
|
||||||
|
|
||||||
|
if(this.ticksExisted > 1){ // Don't spawn particles behind where it started!
|
||||||
|
double x = posX - motionX / 2;
|
||||||
|
double y = posY - motionY / 2;
|
||||||
|
double z = posZ - motionZ / 2;
|
||||||
|
ParticleBuilder.create(Type.SPARKLE, rand, x, y, z, 0.03, true).clr(1, 1, 0.65f).fade(0.7f, 0, 1)
|
||||||
|
.time(20 + rand.nextInt(10)).spawn(world);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,6 +58,8 @@ public interface IConjuredItem {
|
|||||||
*/
|
*/
|
||||||
default int getMaxDamageFromNBT(ItemStack stack, Spell spell){
|
default int getMaxDamageFromNBT(ItemStack stack, Spell spell){
|
||||||
|
|
||||||
|
if(!spell.arePropertiesInitialised()) return 600; // Failsafe, some edge-cases call this during preInit
|
||||||
|
|
||||||
float baseDuration = spell.getProperty(SpellConjuration.ITEM_LIFETIME).floatValue();
|
float baseDuration = spell.getProperty(SpellConjuration.ITEM_LIFETIME).floatValue();
|
||||||
|
|
||||||
if(stack.hasTagCompound() && stack.getTagCompound().hasKey(DURATION_MULTIPLIER_KEY)){
|
if(stack.hasTagCompound() && stack.getTagCompound().hasKey(DURATION_MULTIPLIER_KEY)){
|
||||||
|
|||||||
@@ -639,6 +639,7 @@ public class ItemArtefact extends Item {
|
|||||||
|
|
||||||
WizardryUtilities.getEntitiesWithinRadius(3, player.posX, player.posY, player.posZ, world).stream()
|
WizardryUtilities.getEntitiesWithinRadius(3, player.posX, player.posY, player.posZ, world).stream()
|
||||||
.filter(WizardryUtilities::isLiving)
|
.filter(WizardryUtilities::isLiving)
|
||||||
|
.filter(e -> e != player)
|
||||||
.min(Comparator.comparingDouble(player::getDistanceSq))
|
.min(Comparator.comparingDouble(player::getDistanceSq))
|
||||||
.ifPresent(target -> {
|
.ifPresent(target -> {
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.item;
|
package electroblob.wizardry.item;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.constants.Constants;
|
import electroblob.wizardry.constants.Constants;
|
||||||
import electroblob.wizardry.data.WizardData;
|
import electroblob.wizardry.data.WizardData;
|
||||||
import electroblob.wizardry.registry.Spells;
|
import electroblob.wizardry.registry.Spells;
|
||||||
@@ -11,11 +12,13 @@ import net.minecraft.entity.player.EntityPlayer;
|
|||||||
import net.minecraft.inventory.Slot;
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
public class ItemBlankScroll extends Item implements IWorkbenchItem {
|
public class ItemBlankScroll extends Item implements IWorkbenchItem {
|
||||||
|
|
||||||
public ItemBlankScroll(){
|
public ItemBlankScroll(){
|
||||||
this.setCreativeTab(WizardryTabs.WIZARDRY);
|
this.setCreativeTab(WizardryTabs.WIZARDRY);
|
||||||
|
this.addPropertyOverride(new ResourceLocation("festive"), (s, w, e) -> Wizardry.tisTheSeason ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package electroblob.wizardry.item;
|
|||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import electroblob.wizardry.registry.Spells;
|
import electroblob.wizardry.registry.Spells;
|
||||||
import electroblob.wizardry.registry.WizardryPotions;
|
import electroblob.wizardry.registry.WizardryPotions;
|
||||||
|
import electroblob.wizardry.spell.Spell;
|
||||||
import electroblob.wizardry.util.MagicDamage;
|
import electroblob.wizardry.util.MagicDamage;
|
||||||
import electroblob.wizardry.util.MagicDamage.DamageType;
|
import electroblob.wizardry.util.MagicDamage.DamageType;
|
||||||
import electroblob.wizardry.util.WizardryUtilities;
|
import electroblob.wizardry.util.WizardryUtilities;
|
||||||
@@ -81,6 +82,12 @@ public class ItemFrostAxe extends ItemAxe implements IConjuredItem {
|
|||||||
stack.setItemDamage(damage + 1);
|
stack.setItemDamage(damage + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Multimap<String, AttributeModifier> getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot){
|
||||||
|
attackDamage = Spells.frost_axe.getProperty(Spell.DAMAGE).floatValue();
|
||||||
|
return super.getItemAttributeModifiers(equipmentSlot);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase wielder){
|
public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase wielder){
|
||||||
if(!MagicDamage.isEntityImmune(DamageType.FROST, target))
|
if(!MagicDamage.isEntityImmune(DamageType.FROST, target))
|
||||||
|
|||||||
@@ -14,10 +14,7 @@ import net.minecraft.entity.EntityLivingBase;
|
|||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.ActionResult;
|
import net.minecraft.util.*;
|
||||||
import net.minecraft.util.EnumActionResult;
|
|
||||||
import net.minecraft.util.EnumHand;
|
|
||||||
import net.minecraft.util.NonNullList;
|
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
@@ -37,6 +34,7 @@ public class ItemScroll extends Item implements ISpellCastingItem {
|
|||||||
setHasSubtypes(true);
|
setHasSubtypes(true);
|
||||||
setMaxStackSize(16);
|
setMaxStackSize(16);
|
||||||
setCreativeTab(WizardryTabs.SPELLS);
|
setCreativeTab(WizardryTabs.SPELLS);
|
||||||
|
this.addPropertyOverride(new ResourceLocation("festive"), (s, w, e) -> Wizardry.tisTheSeason ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ public class ItemSpellBook extends Item {
|
|||||||
setHasSubtypes(true);
|
setHasSubtypes(true);
|
||||||
setMaxStackSize(16);
|
setMaxStackSize(16);
|
||||||
setCreativeTab(WizardryTabs.SPELLS);
|
setCreativeTab(WizardryTabs.SPELLS);
|
||||||
|
this.addPropertyOverride(new ResourceLocation("festive"), (s, w, e) -> Wizardry.tisTheSeason ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -27,10 +27,7 @@ import net.minecraft.inventory.Slot;
|
|||||||
import net.minecraft.item.EnumAction;
|
import net.minecraft.item.EnumAction;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.ActionResult;
|
import net.minecraft.util.*;
|
||||||
import net.minecraft.util.EnumActionResult;
|
|
||||||
import net.minecraft.util.EnumHand;
|
|
||||||
import net.minecraft.util.SoundCategory;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.RayTraceResult;
|
import net.minecraft.util.math.RayTraceResult;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|||||||
@@ -57,12 +57,12 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Should only be used by vanilla's armour damage calculations; use {@link ItemWizardArmour#setMana(ItemStack, int)}
|
/** Should only be used by vanilla's armour damage calculations; use {@link ItemWizardArmour#setMana(ItemStack, int)}
|
||||||
* to modify wand mana from elsewhere. */
|
* to modify armour mana from elsewhere. */
|
||||||
@Override
|
@Override
|
||||||
public void setDamage(ItemStack stack, int damage){
|
public void setDamage(ItemStack stack, int damage){
|
||||||
// Overridden to stop repair things from 'repairing' the mana in wizard armour
|
// Overridden to stop repair things from 'repairing' the mana in wizard armour
|
||||||
// This being armour, it's much easier to let its damage increase normally, but block it from being decreased
|
// This being armour, it's much easier to let its damage increase normally, but block it from being decreased
|
||||||
if(stack.getItemDamage() < damage) super.setDamage(stack, damage);
|
if(stack.getItemDamage() < damage) super.setDamage(stack, Math.min(damage, stack.getMaxDamage()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -178,9 +178,14 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana
|
|||||||
|
|
||||||
String s = "wizard_armour";
|
String s = "wizard_armour";
|
||||||
|
|
||||||
if(this.element != null) s = s + "_" + this.element.getName();
|
if(Wizardry.tisTheSeason){
|
||||||
|
s = s + "_festive";
|
||||||
|
}else{
|
||||||
|
if(this.element != null) s = s + "_" + this.element.getName();
|
||||||
|
if(stack.hasTagCompound() && stack.getTagCompound().getBoolean("legendary")) s = "legendary_" + s;
|
||||||
|
}
|
||||||
|
|
||||||
if(slot == EntityEquipmentSlot.LEGS) s = s + "_legs";
|
if(slot == EntityEquipmentSlot.LEGS) s = s + "_legs";
|
||||||
if(stack.hasTagCompound() && stack.getTagCompound().getBoolean("legendary")) s = "legendary_" + s;
|
|
||||||
|
|
||||||
return "ebwizardry:textures/armour/" + s + ".png";
|
return "ebwizardry:textures/armour/" + s + ".png";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -243,7 +243,12 @@ public final class Spells {
|
|||||||
IForgeRegistry<Spell> registry = event.getRegistry();
|
IForgeRegistry<Spell> registry = event.getRegistry();
|
||||||
|
|
||||||
registry.register(new None());
|
registry.register(new None());
|
||||||
registry.register(new SpellArrow<>("magic_missile", EntityMagicMissile::new).addProperties(Spell.DAMAGE).soundValues(1, 1.4f, 0.4f));
|
registry.register(new SpellArrow<EntityMagicMissile>("magic_missile", EntityMagicMissile::new){
|
||||||
|
@Override
|
||||||
|
protected String getTranslationKey(){
|
||||||
|
return Wizardry.tisTheSeason ? super.getTranslationKey() + "_festive" : super.getTranslationKey();
|
||||||
|
}
|
||||||
|
}.addProperties(Spell.DAMAGE).soundValues(1, 1.4f, 0.4f));
|
||||||
registry.register(new Ignite());
|
registry.register(new Ignite());
|
||||||
registry.register(new Freeze());
|
registry.register(new Freeze());
|
||||||
registry.register(new Snowball());
|
registry.register(new Snowball());
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ public final class WizardrySounds {
|
|||||||
public static final SoundEvent ENTITY_WIZARD_TRADING = createSound("entity.wizard.trading");
|
public static final SoundEvent ENTITY_WIZARD_TRADING = createSound("entity.wizard.trading");
|
||||||
public static final SoundEvent ENTITY_WIZARD_HURT = createSound("entity.wizard.hurt");
|
public static final SoundEvent ENTITY_WIZARD_HURT = createSound("entity.wizard.hurt");
|
||||||
public static final SoundEvent ENTITY_WIZARD_DEATH = createSound("entity.wizard.death");
|
public static final SoundEvent ENTITY_WIZARD_DEATH = createSound("entity.wizard.death");
|
||||||
|
public static final SoundEvent ENTITY_WIZARD_HOHOHO = createSound("entity.wizard.hohoho");
|
||||||
|
|
||||||
public static final SoundEvent ENTITY_DARKNESS_ORB_HIT = createSound("entity.darkness_orb.hit");
|
public static final SoundEvent ENTITY_DARKNESS_ORB_HIT = createSound("entity.darkness_orb.hit");
|
||||||
public static final SoundEvent ENTITY_DART_HIT = createSound("entity.dart.hit");
|
public static final SoundEvent ENTITY_DART_HIT = createSound("entity.dart.hit");
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.spell;
|
package electroblob.wizardry.spell;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.registry.WizardryItems;
|
import electroblob.wizardry.registry.WizardryItems;
|
||||||
import electroblob.wizardry.util.ParticleBuilder;
|
import electroblob.wizardry.util.ParticleBuilder;
|
||||||
import electroblob.wizardry.util.ParticleBuilder.Type;
|
import electroblob.wizardry.util.ParticleBuilder.Type;
|
||||||
@@ -7,6 +8,7 @@ import electroblob.wizardry.util.SpellModifiers;
|
|||||||
import electroblob.wizardry.util.WizardryUtilities;
|
import electroblob.wizardry.util.WizardryUtilities;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.EnumAction;
|
import net.minecraft.item.EnumAction;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumParticleTypes;
|
import net.minecraft.util.EnumParticleTypes;
|
||||||
@@ -78,9 +80,7 @@ public class Banish extends SpellRay {
|
|||||||
world.rand.nextDouble() - 0.5, world.rand.nextDouble() - 0.5);
|
world.rand.nextDouble() - 0.5, world.rand.nextDouble() - 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can't be bothered to route this through the proxies!
|
if(entity instanceof EntityPlayer) Wizardry.proxy.playBlinkEffect((EntityPlayer)entity);
|
||||||
if(entity == net.minecraft.client.Minecraft.getMinecraft().player)
|
|
||||||
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(y != null){
|
if(y != null){
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.spell;
|
package electroblob.wizardry.spell;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.registry.WizardryItems;
|
import electroblob.wizardry.registry.WizardryItems;
|
||||||
import electroblob.wizardry.util.RayTracer;
|
import electroblob.wizardry.util.RayTracer;
|
||||||
import electroblob.wizardry.util.SpellModifiers;
|
import electroblob.wizardry.util.SpellModifiers;
|
||||||
@@ -41,9 +42,8 @@ public class Blink extends Spell {
|
|||||||
world.spawnParticle(EnumParticleTypes.PORTAL, dx, dy, dz, world.rand.nextDouble() - 0.5,
|
world.spawnParticle(EnumParticleTypes.PORTAL, dx, dy, dz, world.rand.nextDouble() - 0.5,
|
||||||
world.rand.nextDouble() - 0.5, world.rand.nextDouble() - 0.5);
|
world.rand.nextDouble() - 0.5, world.rand.nextDouble() - 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can't be bothered to route this through the proxies!
|
Wizardry.proxy.playBlinkEffect(caster);
|
||||||
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.BLOCK){
|
if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.BLOCK){
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.spell;
|
package electroblob.wizardry.spell;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.constants.Constants;
|
import electroblob.wizardry.constants.Constants;
|
||||||
import electroblob.wizardry.event.SpellCastEvent;
|
import electroblob.wizardry.event.SpellCastEvent;
|
||||||
import electroblob.wizardry.registry.WizardryItems;
|
import electroblob.wizardry.registry.WizardryItems;
|
||||||
@@ -66,6 +67,11 @@ public class EmpoweringPresence extends Spell {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getTranslationKey(){
|
||||||
|
return Wizardry.tisTheSeason ? super.getTranslationKey() + "_festive" : super.getTranslationKey();
|
||||||
|
}
|
||||||
|
|
||||||
@SubscribeEvent(priority = EventPriority.LOW) // Doesn't really matter but there's no point processing it if casting is blocked
|
@SubscribeEvent(priority = EventPriority.LOW) // Doesn't really matter but there's no point processing it if casting is blocked
|
||||||
public static void onSpellCastPreEvent(SpellCastEvent.Pre event){
|
public static void onSpellCastPreEvent(SpellCastEvent.Pre event){
|
||||||
// Empowerment stacks extra potency on top of the existing potency.
|
// Empowerment stacks extra potency on top of the existing potency.
|
||||||
@@ -78,4 +84,5 @@ public class EmpoweringPresence extends Spell {
|
|||||||
event.getModifiers().get(SpellModifiers.POTENCY) * potency, true);
|
event.getModifiers().get(SpellModifiers.POTENCY) * potency, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,7 @@ public class FrostAxe extends SpellConjuration {
|
|||||||
|
|
||||||
public FrostAxe(){
|
public FrostAxe(){
|
||||||
super("frost_axe", WizardryItems.frost_axe);
|
super("frost_axe", WizardryItems.frost_axe);
|
||||||
|
addProperties(DAMAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.spell;
|
package electroblob.wizardry.spell;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.registry.WizardryItems;
|
import electroblob.wizardry.registry.WizardryItems;
|
||||||
import electroblob.wizardry.util.AllyDesignationSystem;
|
import electroblob.wizardry.util.AllyDesignationSystem;
|
||||||
import electroblob.wizardry.util.ParticleBuilder;
|
import electroblob.wizardry.util.ParticleBuilder;
|
||||||
@@ -62,4 +63,9 @@ public class InvigoratingPresence extends Spell {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getTranslationKey(){
|
||||||
|
return Wizardry.tisTheSeason ? super.getTranslationKey() + "_festive" : super.getTranslationKey();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,8 +43,7 @@ public class PhaseStep extends Spell {
|
|||||||
world.rand.nextDouble() - 0.5, world.rand.nextDouble() - 0.5);
|
world.rand.nextDouble() - 0.5, world.rand.nextDouble() - 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can't be bothered to route this through the proxies!
|
Wizardry.proxy.playBlinkEffect(caster);
|
||||||
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.BLOCK){
|
if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.BLOCK){
|
||||||
|
|||||||
@@ -597,13 +597,23 @@ public abstract class Spell extends IForgeRegistryEntry.Impl<Spell> implements C
|
|||||||
* translating it. If, for whatever reason, you need to supply an ITextComponent but don't want it translated
|
* translating it. If, for whatever reason, you need to supply an ITextComponent but don't want it translated
|
||||||
* (perhaps a name?), you can use TextComponentString, which will simply keep the raw string it is given. */
|
* (perhaps a name?), you can use TextComponentString, which will simply keep the raw string it is given. */
|
||||||
|
|
||||||
|
/** Returns the translation key for this spell. */
|
||||||
|
protected String getTranslationKey(){
|
||||||
|
return "spell." + unlocalisedName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns the translation key for this spell's description. */
|
||||||
|
protected String getDescriptionTranslationKey(){
|
||||||
|
return "spell." + unlocalisedName + ".desc";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the translated display name of the spell, without formatting (i.e. not coloured). <b>Client-side
|
* Returns the translated display name of the spell, without formatting (i.e. not coloured). <b>Client-side
|
||||||
* only!</b> On the server side, use {@link TextComponentTranslation} (see {@link Spell#getNameForTranslation()}).
|
* only!</b> On the server side, use {@link TextComponentTranslation} (see {@link Spell#getNameForTranslation()}).
|
||||||
*/
|
*/
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public String getDisplayName(){
|
public String getDisplayName(){
|
||||||
return net.minecraft.client.resources.I18n.format("spell." + unlocalisedName);
|
return net.minecraft.client.resources.I18n.format(getTranslationKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -611,7 +621,7 @@ public abstract class Spell extends IForgeRegistryEntry.Impl<Spell> implements C
|
|||||||
* formatting (i.e. not coloured).
|
* formatting (i.e. not coloured).
|
||||||
*/
|
*/
|
||||||
public ITextComponent getNameForTranslation(){
|
public ITextComponent getNameForTranslation(){
|
||||||
return new TextComponentTranslation("spell." + unlocalisedName);
|
return new TextComponentTranslation(getTranslationKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -620,7 +630,7 @@ public abstract class Spell extends IForgeRegistryEntry.Impl<Spell> implements C
|
|||||||
*/
|
*/
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public String getDisplayNameWithFormatting(){
|
public String getDisplayNameWithFormatting(){
|
||||||
return this.getElement().getFormattingCode() + net.minecraft.client.resources.I18n.format("spell." + unlocalisedName);
|
return this.getElement().getFormattingCode() + net.minecraft.client.resources.I18n.format(getTranslationKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -628,7 +638,7 @@ public abstract class Spell extends IForgeRegistryEntry.Impl<Spell> implements C
|
|||||||
* formatting (i.e. coloured).
|
* formatting (i.e. coloured).
|
||||||
*/
|
*/
|
||||||
public ITextComponent getNameForTranslationFormatted(){
|
public ITextComponent getNameForTranslationFormatted(){
|
||||||
return new TextComponentTranslation("spell." + unlocalisedName).setStyle(this.getElement().getColour());
|
return new TextComponentTranslation(getTranslationKey()).setStyle(this.getElement().getColour());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -637,7 +647,7 @@ public abstract class Spell extends IForgeRegistryEntry.Impl<Spell> implements C
|
|||||||
*/
|
*/
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public String getDescription(){
|
public String getDescription(){
|
||||||
return net.minecraft.client.resources.I18n.format("spell." + unlocalisedName + ".desc");
|
return net.minecraft.client.resources.I18n.format(getDescriptionTranslationKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================================ Sound methods ==============================================
|
// ============================================ Sound methods ==============================================
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.spell;
|
package electroblob.wizardry.spell;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.util.ParticleBuilder;
|
import electroblob.wizardry.util.ParticleBuilder;
|
||||||
import electroblob.wizardry.util.ParticleBuilder.Type;
|
import electroblob.wizardry.util.ParticleBuilder.Type;
|
||||||
import electroblob.wizardry.util.SpellModifiers;
|
import electroblob.wizardry.util.SpellModifiers;
|
||||||
@@ -9,7 +10,11 @@ import net.minecraft.entity.player.EntityPlayer;
|
|||||||
import net.minecraft.item.EnumAction;
|
import net.minecraft.item.EnumAction;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
import net.minecraft.util.text.TextComponentTranslation;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
public class SummonSnowGolem extends Spell {
|
public class SummonSnowGolem extends Spell {
|
||||||
|
|
||||||
@@ -45,4 +50,8 @@ public class SummonSnowGolem extends Spell {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getTranslationKey(){
|
||||||
|
return Wizardry.tisTheSeason ? super.getTranslationKey() + "_festive" : super.getTranslationKey();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1117,6 +1117,8 @@ config.ebwizardry.creative_bypasses_arcane_lock.true=Anyone in creative mode
|
|||||||
config.ebwizardry.creative_bypasses_arcane_lock.false=Only ops in creative mode
|
config.ebwizardry.creative_bypasses_arcane_lock.false=Only ops in creative mode
|
||||||
config.ebwizardry.slow_time_affects_players=Slow Time Affects Players
|
config.ebwizardry.slow_time_affects_players=Slow Time Affects Players
|
||||||
config.ebwizardry.slow_time_affects_players.tooltip=Whether players are slowed when another nearby player uses the slow time spell. If this is disabled, mobs and projectiles will still be affected but players will move at normal speed.
|
config.ebwizardry.slow_time_affects_players.tooltip=Whether players are slowed when another nearby player uses the slow time spell. If this is disabled, mobs and projectiles will still be affected but players will move at normal speed.
|
||||||
|
config.ebwizardry.bonemeal_grows_crystal_flowers=Bonemeal Grows Crystal Flowers
|
||||||
|
config.ebwizardry.bonemeal_grows_crystal_flowers.tooltip=Whether using bonemeal on grass blocks has a chance to grow crystal flowers.
|
||||||
config.ebwizardry.mob_loot_table_whitelist=Mob Loot Table Whitelist
|
config.ebwizardry.mob_loot_table_whitelist=Mob Loot Table Whitelist
|
||||||
config.ebwizardry.mob_loot_table_whitelist.tooltip=Whitelist for loot tables to inject additional mob drops (as specified in loot_tables/entities/mob_additions.json) into. Wizardry makes a best guess as to which loot tables belong to hostile mobs, but this may not always be correct or appropriate; add loot table locations (not entity IDs) to this list to manually include them.
|
config.ebwizardry.mob_loot_table_whitelist.tooltip=Whitelist for loot tables to inject additional mob drops (as specified in loot_tables/entities/mob_additions.json) into. Wizardry makes a best guess as to which loot tables belong to hostile mobs, but this may not always be correct or appropriate; add loot table locations (not entity IDs) to this list to manually include them.
|
||||||
config.ebwizardry.mob_loot_table_blacklist=Mob Loot Table Blacklist
|
config.ebwizardry.mob_loot_table_blacklist=Mob Loot Table Blacklist
|
||||||
@@ -1287,4 +1289,9 @@ integration.antiqueatlas.marker.ebwizardry\:wizard_tower=Wizard Tower
|
|||||||
integration.antiqueatlas.marker.ebwizardry\:obelisk=Obelisk
|
integration.antiqueatlas.marker.ebwizardry\:obelisk=Obelisk
|
||||||
integration.antiqueatlas.marker.ebwizardry\:shrine=Shrine
|
integration.antiqueatlas.marker.ebwizardry\:shrine=Shrine
|
||||||
|
|
||||||
|
spell.ebwizardry\:magic_missile_festive=Magic Mistletoe
|
||||||
|
spell.ebwizardry\:summon_snow_golem_festive=Summon Frosty The Snowman
|
||||||
|
spell.ebwizardry\:invigorating_presence_festive=Invigorating Presents
|
||||||
|
spell.ebwizardry\:empowering_presence_festive=Empowering Presents
|
||||||
|
|
||||||
wizard.debug=%1$s, %2$s, %3$s
|
wizard.debug=%1$s, %2$s, %3$s
|
||||||
|
|||||||
@@ -1117,6 +1117,8 @@ config.ebwizardry.creative_bypasses_arcane_lock.true=Anyone in creative mode
|
|||||||
config.ebwizardry.creative_bypasses_arcane_lock.false=Only ops in creative mode
|
config.ebwizardry.creative_bypasses_arcane_lock.false=Only ops in creative mode
|
||||||
config.ebwizardry.slow_time_affects_players=Slow Time Affects Players
|
config.ebwizardry.slow_time_affects_players=Slow Time Affects Players
|
||||||
config.ebwizardry.slow_time_affects_players.tooltip=Whether players are slowed when another nearby player uses the slow time spell. If this is disabled, mobs and projectiles will still be affected but players will move at normal speed.
|
config.ebwizardry.slow_time_affects_players.tooltip=Whether players are slowed when another nearby player uses the slow time spell. If this is disabled, mobs and projectiles will still be affected but players will move at normal speed.
|
||||||
|
config.ebwizardry.bonemeal_grows_crystal_flowers=Bonemeal Grows Crystal Flowers
|
||||||
|
config.ebwizardry.bonemeal_grows_crystal_flowers.tooltip=Whether using bonemeal on grass blocks has a chance to grow crystal flowers.
|
||||||
config.ebwizardry.mob_loot_table_whitelist=Mob Loot Table Whitelist
|
config.ebwizardry.mob_loot_table_whitelist=Mob Loot Table Whitelist
|
||||||
config.ebwizardry.mob_loot_table_whitelist.tooltip=Whitelist for loot tables to inject additional mob drops (as specified in loot_tables/entities/mob_additions.json) into. Wizardry makes a best guess as to which loot tables belong to hostile mobs, but this may not always be correct or appropriate; add loot table locations (not entity IDs) to this list to manually include them.
|
config.ebwizardry.mob_loot_table_whitelist.tooltip=Whitelist for loot tables to inject additional mob drops (as specified in loot_tables/entities/mob_additions.json) into. Wizardry makes a best guess as to which loot tables belong to hostile mobs, but this may not always be correct or appropriate; add loot table locations (not entity IDs) to this list to manually include them.
|
||||||
config.ebwizardry.mob_loot_table_blacklist=Mob Loot Table Blacklist
|
config.ebwizardry.mob_loot_table_blacklist=Mob Loot Table Blacklist
|
||||||
@@ -1287,4 +1289,9 @@ integration.antiqueatlas.marker.ebwizardry\:wizard_tower=Wizard Tower
|
|||||||
integration.antiqueatlas.marker.ebwizardry\:obelisk=Obelisk
|
integration.antiqueatlas.marker.ebwizardry\:obelisk=Obelisk
|
||||||
integration.antiqueatlas.marker.ebwizardry\:shrine=Shrine
|
integration.antiqueatlas.marker.ebwizardry\:shrine=Shrine
|
||||||
|
|
||||||
|
spell.ebwizardry\:magic_missile_festive=Magic Mistletoe
|
||||||
|
spell.ebwizardry\:summon_snow_golem_festive=Summon Frosty The Snowman
|
||||||
|
spell.ebwizardry\:invigorating_presence_festive=Invigorating Presents
|
||||||
|
spell.ebwizardry\:empowering_presence_festive=Empowering Presents
|
||||||
|
|
||||||
wizard.debug=%1$s, %2$s, %3$s
|
wizard.debug=%1$s, %2$s, %3$s
|
||||||
|
|||||||
@@ -103,7 +103,7 @@
|
|||||||
{
|
{
|
||||||
"type": "item",
|
"type": "item",
|
||||||
"name": "ebwizardry:astral_diamond",
|
"name": "ebwizardry:astral_diamond",
|
||||||
"weight": 1
|
"weight": 2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "item",
|
"type": "item",
|
||||||
@@ -113,7 +113,7 @@
|
|||||||
{
|
{
|
||||||
"type": "item",
|
"type": "item",
|
||||||
"name": "ebwizardry:grand_crystal",
|
"name": "ebwizardry:grand_crystal",
|
||||||
"weight": 1
|
"weight": 2
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,7 +108,7 @@
|
|||||||
{
|
{
|
||||||
"type": "item",
|
"type": "item",
|
||||||
"name": "ebwizardry:astral_diamond",
|
"name": "ebwizardry:astral_diamond",
|
||||||
"weight": 1
|
"weight": 2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "item",
|
"type": "item",
|
||||||
@@ -118,7 +118,7 @@
|
|||||||
{
|
{
|
||||||
"type": "item",
|
"type": "item",
|
||||||
"name": "ebwizardry:grand_crystal",
|
"name": "ebwizardry:grand_crystal",
|
||||||
"weight": 1
|
"weight": 2
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,5 +2,13 @@
|
|||||||
"parent": "item/generated",
|
"parent": "item/generated",
|
||||||
"textures": {
|
"textures": {
|
||||||
"layer0": "ebwizardry:items/scroll"
|
"layer0": "ebwizardry:items/scroll"
|
||||||
}
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"predicate": {
|
||||||
|
"festive": 1
|
||||||
|
},
|
||||||
|
"model": "ebwizardry:item/festive_scroll"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "ebwizardry:items/scroll_festive"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "ebwizardry:items/spell_book_festive"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "item/handheld",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "ebwizardry:items/wand_festive"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,5 +2,13 @@
|
|||||||
"parent": "item/generated",
|
"parent": "item/generated",
|
||||||
"textures": {
|
"textures": {
|
||||||
"layer0": "ebwizardry:items/scroll"
|
"layer0": "ebwizardry:items/scroll"
|
||||||
}
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"predicate": {
|
||||||
|
"festive": 1
|
||||||
|
},
|
||||||
|
"model": "ebwizardry:item/festive_scroll"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
@@ -2,5 +2,13 @@
|
|||||||
"parent": "item/generated",
|
"parent": "item/generated",
|
||||||
"textures": {
|
"textures": {
|
||||||
"layer0": "ebwizardry:items/spell_book"
|
"layer0": "ebwizardry:items/spell_book"
|
||||||
}
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"predicate": {
|
||||||
|
"festive": 1
|
||||||
|
},
|
||||||
|
"model": "ebwizardry:item/festive_spell_book"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
@@ -62,7 +62,8 @@
|
|||||||
"entity.wizard.no": {"category": "neutral", "sounds": ["mob/villager/no1", "mob/villager/no2", "mob/villager/no3"]},
|
"entity.wizard.no": {"category": "neutral", "sounds": ["mob/villager/no1", "mob/villager/no2", "mob/villager/no3"]},
|
||||||
"entity.wizard.hurt": {"category": "neutral", "sounds": ["mob/villager/hit1", "mob/villager/hit2", "mob/villager/hit3", "mob/villager/hit4"]},
|
"entity.wizard.hurt": {"category": "neutral", "sounds": ["mob/villager/hit1", "mob/villager/hit2", "mob/villager/hit3", "mob/villager/hit4"]},
|
||||||
"entity.wizard.death": {"category": "neutral", "sounds": ["mob/villager/death"]},
|
"entity.wizard.death": {"category": "neutral", "sounds": ["mob/villager/death"]},
|
||||||
|
"entity.wizard.hohoho": {"category": "neutral", "sounds": ["ebwizardry:hohoho"]},
|
||||||
|
|
||||||
"entity.darkness_orb.hit": {"category": "spells", "sounds": ["mob/wither/hurt1", "mob/wither/hurt2", "mob/wither/hurt3", "mob/wither/hurt4"]},
|
"entity.darkness_orb.hit": {"category": "spells", "sounds": ["mob/wither/hurt1", "mob/wither/hurt2", "mob/wither/hurt3", "mob/wither/hurt4"]},
|
||||||
"entity.dart.hit": {"category": "spells", "sounds": ["damage/hit1", "damage/hit2", "damage/hit3"]},
|
"entity.dart.hit": {"category": "spells", "sounds": ["damage/hit1", "damage/hit2", "damage/hit3"]},
|
||||||
"entity.dart.hit_block": {"category": "spells", "sounds": ["random/bowhit1", "random/bowhit2", "random/bowhit3"]},
|
"entity.dart.hit_block": {"category": "spells", "sounds": ["random/bowhit1", "random/bowhit2", "random/bowhit3"]},
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
"chargeup": 0,
|
"chargeup": 0,
|
||||||
"cooldown": 50,
|
"cooldown": 50,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"item_lifetime": 1200
|
"item_lifetime": 1200,
|
||||||
|
"damage": 8
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
@@ -74,5 +74,9 @@
|
|||||||
"planks": {
|
"planks": {
|
||||||
"texture": "ebwizardry:gui/spell_hud/planks",
|
"texture": "ebwizardry:gui/spell_hud/planks",
|
||||||
"metadata": "ebwizardry:gui/spell_hud/planks"
|
"metadata": "ebwizardry:gui/spell_hud/planks"
|
||||||
|
},
|
||||||
|
"festive": {
|
||||||
|
"texture": "ebwizardry:gui/spell_hud/festive",
|
||||||
|
"metadata": "ebwizardry:gui/spell_hud/festive"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "Festive",
|
||||||
|
"description": "'Tis the season!",
|
||||||
|
"width": 126,
|
||||||
|
"height": 41,
|
||||||
|
"mirror": {
|
||||||
|
"x": true,
|
||||||
|
"y": true
|
||||||
|
},
|
||||||
|
"spell_icon_inset": {
|
||||||
|
"x": 2,
|
||||||
|
"y": 2
|
||||||
|
},
|
||||||
|
"text_inset": {
|
||||||
|
"x": 40,
|
||||||
|
"y": 20
|
||||||
|
},
|
||||||
|
"spell_cascade_offset": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8
|
||||||
|
},
|
||||||
|
"cooldown_bar": {
|
||||||
|
"x": 39,
|
||||||
|
"y": 1,
|
||||||
|
"length": 86,
|
||||||
|
"height": 8,
|
||||||
|
"mirror": {
|
||||||
|
"x": true,
|
||||||
|
"y": true
|
||||||
|
},
|
||||||
|
"show_when_full": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
@@ -2,10 +2,10 @@
|
|||||||
{
|
{
|
||||||
"modid" : "ebwizardry",
|
"modid" : "ebwizardry",
|
||||||
"name" : "Electroblob's Wizardry",
|
"name" : "Electroblob's Wizardry",
|
||||||
"version" : "4.2.4",
|
"version" : "4.2.6",
|
||||||
"mcversion" : "1.12.2",
|
"mcversion" : "1.12.2",
|
||||||
"url" : "https://minecraft.curseforge.com/projects/electroblobs-wizardry",
|
"url" : "https://minecraft.curseforge.com/projects/electroblobs-wizardry",
|
||||||
"credits" : "\nDesigned, coded and textured by Electroblob.\nCode contributed by: Corail31, 12foo, Shadows-of-Fire, Tora-B, Avatair, Aeronica.\nTranslators: MadWrist (Spanish, Mexican Spanish), VilagVil & kellixon (Russian), Hahdrim (French), lorrampi (Brazilian Portuguese), ZHENGLOC & dragon-evol (Chinese), shejery & rewi_wire (Korean), Trozuu (Polish).",
|
"credits" : "\nDesigned, coded and textured by Electroblob.\nCode contributed by: Corail31, 12foo, Shadows-of-Fire, Tora-B, Avatair, Aeronica, UltraHex, Azim-Palmer.\nTranslators: MadWrist (Spanish, Mexican Spanish), VilagVil & kellixon (Russian), Hahdrim (French), lorrampi (Brazilian Portuguese), ZHENGLOC & dragon-evol (Chinese), shejery & rewi_wire (Korean), Trozuu (Polish).",
|
||||||
"authorList" : [
|
"authorList" : [
|
||||||
"Electroblob"
|
"Electroblob"
|
||||||
],
|
],
|
||||||
|
|||||||