diff --git a/src/main/java/electroblob/wizardry/Wizardry.java b/src/main/java/electroblob/wizardry/Wizardry.java index 74187947..4afa01ae 100644 --- a/src/main/java/electroblob/wizardry/Wizardry.java +++ b/src/main/java/electroblob/wizardry/Wizardry.java @@ -32,6 +32,7 @@ import net.minecraftforge.fml.common.registry.GameRegistry; import org.apache.logging.log4j.Logger; import java.io.File; +import java.util.Calendar; /** * "Electroblob's Wizardry adds an RPG-like system of spells to Minecraft, with the aim of being as playable as @@ -88,6 +89,8 @@ public class Wizardry { * this folder contains the main config file and the global spell properties folder, if used. */ public static File configDirectory; + public static boolean tisTheSeason; + // The instance of wizardry that Forge uses. @Instance(Wizardry.MODID) public static Wizardry instance; @@ -106,6 +109,10 @@ public class Wizardry { configDirectory = new File(event.getModConfigurationDirectory(), Wizardry.MODID); 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 WizardData.register(); DispenserCastingData.register(); diff --git a/src/main/java/electroblob/wizardry/client/model/ModelWizardArmour.java b/src/main/java/electroblob/wizardry/client/model/ModelWizardArmour.java index 2bebd9c0..4a55d5ef 100644 --- a/src/main/java/electroblob/wizardry/client/model/ModelWizardArmour.java +++ b/src/main/java/electroblob/wizardry/client/model/ModelWizardArmour.java @@ -1,5 +1,6 @@ package electroblob.wizardry.client.model; +import electroblob.wizardry.Wizardry; import electroblob.wizardry.block.BlockStatue; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; @@ -13,6 +14,7 @@ public class ModelWizardArmour extends ModelArmourFixer { ModelRenderer hatSegment4; ModelRenderer hatSegment5; ModelRenderer hatSegment6; + ModelRenderer hatBobble; ModelRenderer robe; public ModelWizardArmour(float delta){ @@ -75,6 +77,13 @@ public class ModelWizardArmour extends ModelArmourFixer { hatSegment6.mirror = true; 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.addBox(-4F, 0F, -2F, 8, 11, 4, delta); bipedBody.setRotationPoint(0F, 0F, 0F); @@ -97,6 +106,7 @@ public class ModelWizardArmour extends ModelArmourFixer { bipedHead.addChild(hatSegment4); bipedHead.addChild(hatSegment5); bipedHead.addChild(hatSegment6); + bipedHead.addChild(hatBobble); } 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.rotateAngleY = this.bipedBody.rotateAngleY; this.robe.rotateAngleZ = (this.bipedLeftLeg.rotateAngleZ + this.bipedRightLeg.rotateAngleZ) / 2f; + + this.hatBobble.showModel = Wizardry.tisTheSeason; } } diff --git a/src/main/java/electroblob/wizardry/client/model/WizardryModels.java b/src/main/java/electroblob/wizardry/client/model/WizardryModels.java index cf58f5ca..05a6ccc0 100644 --- a/src/main/java/electroblob/wizardry/client/model/WizardryModels.java +++ b/src/main/java/electroblob/wizardry/client/model/WizardryModels.java @@ -67,10 +67,10 @@ public final class WizardryModels { registerMultiTexturedModel((ItemCrystal)WizardryItems.magic_crystal); - registerItemModel(WizardryItems.magic_wand); - registerItemModel(WizardryItems.apprentice_wand); - registerItemModel(WizardryItems.advanced_wand); - registerItemModel(WizardryItems.master_wand); + registerWandModel(WizardryItems.magic_wand); + registerWandModel(WizardryItems.apprentice_wand); + registerWandModel(WizardryItems.advanced_wand); + registerWandModel(WizardryItems.master_wand); registerItemModel(WizardryItems.spell_book); // Wildcard registered for wizard trades. @@ -78,37 +78,37 @@ public final class WizardryModels { registerItemModel(WizardryItems.arcane_tome); registerItemModel(WizardryItems.wizard_handbook); - registerItemModel(WizardryItems.novice_fire_wand); - registerItemModel(WizardryItems.novice_ice_wand); - registerItemModel(WizardryItems.novice_lightning_wand); - registerItemModel(WizardryItems.novice_necromancy_wand); - registerItemModel(WizardryItems.novice_earth_wand); - registerItemModel(WizardryItems.novice_sorcery_wand); - registerItemModel(WizardryItems.novice_healing_wand); + registerWandModel(WizardryItems.novice_fire_wand); + registerWandModel(WizardryItems.novice_ice_wand); + registerWandModel(WizardryItems.novice_lightning_wand); + registerWandModel(WizardryItems.novice_necromancy_wand); + registerWandModel(WizardryItems.novice_earth_wand); + registerWandModel(WizardryItems.novice_sorcery_wand); + registerWandModel(WizardryItems.novice_healing_wand); - registerItemModel(WizardryItems.apprentice_fire_wand); - registerItemModel(WizardryItems.apprentice_ice_wand); - registerItemModel(WizardryItems.apprentice_lightning_wand); - registerItemModel(WizardryItems.apprentice_necromancy_wand); - registerItemModel(WizardryItems.apprentice_earth_wand); - registerItemModel(WizardryItems.apprentice_sorcery_wand); - registerItemModel(WizardryItems.apprentice_healing_wand); + registerWandModel(WizardryItems.apprentice_fire_wand); + registerWandModel(WizardryItems.apprentice_ice_wand); + registerWandModel(WizardryItems.apprentice_lightning_wand); + registerWandModel(WizardryItems.apprentice_necromancy_wand); + registerWandModel(WizardryItems.apprentice_earth_wand); + registerWandModel(WizardryItems.apprentice_sorcery_wand); + registerWandModel(WizardryItems.apprentice_healing_wand); - registerItemModel(WizardryItems.advanced_fire_wand); - registerItemModel(WizardryItems.advanced_ice_wand); - registerItemModel(WizardryItems.advanced_lightning_wand); - registerItemModel(WizardryItems.advanced_necromancy_wand); - registerItemModel(WizardryItems.advanced_earth_wand); - registerItemModel(WizardryItems.advanced_sorcery_wand); - registerItemModel(WizardryItems.advanced_healing_wand); + registerWandModel(WizardryItems.advanced_fire_wand); + registerWandModel(WizardryItems.advanced_ice_wand); + registerWandModel(WizardryItems.advanced_lightning_wand); + registerWandModel(WizardryItems.advanced_necromancy_wand); + registerWandModel(WizardryItems.advanced_earth_wand); + registerWandModel(WizardryItems.advanced_sorcery_wand); + registerWandModel(WizardryItems.advanced_healing_wand); - registerItemModel(WizardryItems.master_fire_wand); - registerItemModel(WizardryItems.master_ice_wand); - registerItemModel(WizardryItems.master_lightning_wand); - registerItemModel(WizardryItems.master_necromancy_wand); - registerItemModel(WizardryItems.master_earth_wand); - registerItemModel(WizardryItems.master_sorcery_wand); - registerItemModel(WizardryItems.master_healing_wand); + registerWandModel(WizardryItems.master_fire_wand); + registerWandModel(WizardryItems.master_ice_wand); + registerWandModel(WizardryItems.master_lightning_wand); + registerWandModel(WizardryItems.master_necromancy_wand); + registerWandModel(WizardryItems.master_earth_wand); + registerWandModel(WizardryItems.master_sorcery_wand); + registerWandModel(WizardryItems.master_healing_wand); registerItemModel(WizardryItems.spectral_sword); registerItemModel(WizardryItems.spectral_pickaxe); @@ -303,6 +303,23 @@ public final class WizardryModels { // Assigns the model for all metadata values 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 diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityWizard.java b/src/main/java/electroblob/wizardry/entity/living/EntityWizard.java index bc25a475..728be7d7 100644 --- a/src/main/java/electroblob/wizardry/entity/living/EntityWizard.java +++ b/src/main/java/electroblob/wizardry/entity/living/EntityWizard.java @@ -218,7 +218,8 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp // Copied from EntityVillager if(!this.world.isRemote && this.livingSoundTime > -this.getTalkInterval() + 20){ 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 protected SoundEvent getAmbientSound(){ + if(Wizardry.tisTheSeason) return WizardrySounds.ENTITY_WIZARD_HOHOHO; return this.isTrading() ? WizardrySounds.ENTITY_WIZARD_TRADING : WizardrySounds.ENTITY_WIZARD_AMBIENT; } diff --git a/src/main/java/electroblob/wizardry/entity/projectile/EntityMagicMissile.java b/src/main/java/electroblob/wizardry/entity/projectile/EntityMagicMissile.java index 9649b84a..c6565669 100644 --- a/src/main/java/electroblob/wizardry/entity/projectile/EntityMagicMissile.java +++ b/src/main/java/electroblob/wizardry/entity/projectile/EntityMagicMissile.java @@ -1,5 +1,6 @@ package electroblob.wizardry.entity.projectile; +import electroblob.wizardry.Wizardry; import electroblob.wizardry.registry.Spells; import electroblob.wizardry.registry.WizardrySounds; import electroblob.wizardry.spell.Spell; @@ -44,15 +45,34 @@ public class EntityMagicMissile extends EntityMagicArrow { public void tickInAir(){ 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(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); + + if(Wizardry.tisTheSeason){ + + ParticleBuilder.create(Type.SPARKLE, rand, posX, posY, posZ, 0.03, true).clr(0.8f, 0.15f, 0.15f) + .time(20 + rand.nextInt(10)).spawn(world); + + ParticleBuilder.create(Type.SNOW).pos(posX, posY, posZ).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); + } } } } diff --git a/src/main/java/electroblob/wizardry/item/ItemBlankScroll.java b/src/main/java/electroblob/wizardry/item/ItemBlankScroll.java index dc15754e..9ed93134 100644 --- a/src/main/java/electroblob/wizardry/item/ItemBlankScroll.java +++ b/src/main/java/electroblob/wizardry/item/ItemBlankScroll.java @@ -1,5 +1,6 @@ package electroblob.wizardry.item; +import electroblob.wizardry.Wizardry; import electroblob.wizardry.constants.Constants; import electroblob.wizardry.data.WizardData; import electroblob.wizardry.registry.Spells; @@ -11,11 +12,13 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; public class ItemBlankScroll extends Item implements IWorkbenchItem { public ItemBlankScroll(){ this.setCreativeTab(WizardryTabs.WIZARDRY); + this.addPropertyOverride(new ResourceLocation("festive"), (s, w, e) -> Wizardry.tisTheSeason ? 1 : 0); } @Override diff --git a/src/main/java/electroblob/wizardry/item/ItemScroll.java b/src/main/java/electroblob/wizardry/item/ItemScroll.java index ee850f17..09c88bb8 100644 --- a/src/main/java/electroblob/wizardry/item/ItemScroll.java +++ b/src/main/java/electroblob/wizardry/item/ItemScroll.java @@ -14,10 +14,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.NonNullList; +import net.minecraft.util.*; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; @@ -37,6 +34,7 @@ public class ItemScroll extends Item implements ISpellCastingItem { setHasSubtypes(true); setMaxStackSize(16); setCreativeTab(WizardryTabs.SPELLS); + this.addPropertyOverride(new ResourceLocation("festive"), (s, w, e) -> Wizardry.tisTheSeason ? 1 : 0); } @Override diff --git a/src/main/java/electroblob/wizardry/item/ItemSpellBook.java b/src/main/java/electroblob/wizardry/item/ItemSpellBook.java index 167d2c94..003b9bd1 100644 --- a/src/main/java/electroblob/wizardry/item/ItemSpellBook.java +++ b/src/main/java/electroblob/wizardry/item/ItemSpellBook.java @@ -33,6 +33,7 @@ public class ItemSpellBook extends Item { setHasSubtypes(true); setMaxStackSize(16); setCreativeTab(WizardryTabs.SPELLS); + this.addPropertyOverride(new ResourceLocation("festive"), (s, w, e) -> Wizardry.tisTheSeason ? 1 : 0); } @Override diff --git a/src/main/java/electroblob/wizardry/item/ItemWand.java b/src/main/java/electroblob/wizardry/item/ItemWand.java index f77a80b4..a6ec9ab1 100644 --- a/src/main/java/electroblob/wizardry/item/ItemWand.java +++ b/src/main/java/electroblob/wizardry/item/ItemWand.java @@ -27,10 +27,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.SoundCategory; +import net.minecraft.util.*; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/electroblob/wizardry/item/ItemWizardArmour.java b/src/main/java/electroblob/wizardry/item/ItemWizardArmour.java index 1e7c2708..bb3af0cd 100644 --- a/src/main/java/electroblob/wizardry/item/ItemWizardArmour.java +++ b/src/main/java/electroblob/wizardry/item/ItemWizardArmour.java @@ -178,9 +178,14 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana 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(stack.hasTagCompound() && stack.getTagCompound().getBoolean("legendary")) s = "legendary_" + s; return "ebwizardry:textures/armour/" + s + ".png"; } diff --git a/src/main/java/electroblob/wizardry/registry/Spells.java b/src/main/java/electroblob/wizardry/registry/Spells.java index 5398da75..8ee1b188 100644 --- a/src/main/java/electroblob/wizardry/registry/Spells.java +++ b/src/main/java/electroblob/wizardry/registry/Spells.java @@ -243,7 +243,12 @@ public final class Spells { IForgeRegistry registry = event.getRegistry(); 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("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 Freeze()); registry.register(new Snowball()); diff --git a/src/main/java/electroblob/wizardry/registry/WizardrySounds.java b/src/main/java/electroblob/wizardry/registry/WizardrySounds.java index 97f9f25e..8aefe1e9 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardrySounds.java +++ b/src/main/java/electroblob/wizardry/registry/WizardrySounds.java @@ -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_HURT = createSound("entity.wizard.hurt"); 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_DART_HIT = createSound("entity.dart.hit"); diff --git a/src/main/java/electroblob/wizardry/spell/EmpoweringPresence.java b/src/main/java/electroblob/wizardry/spell/EmpoweringPresence.java index ad42d9c3..5363c8dd 100644 --- a/src/main/java/electroblob/wizardry/spell/EmpoweringPresence.java +++ b/src/main/java/electroblob/wizardry/spell/EmpoweringPresence.java @@ -1,5 +1,6 @@ package electroblob.wizardry.spell; +import electroblob.wizardry.Wizardry; import electroblob.wizardry.constants.Constants; import electroblob.wizardry.event.SpellCastEvent; import electroblob.wizardry.registry.WizardryItems; @@ -66,6 +67,11 @@ public class EmpoweringPresence extends Spell { 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 public static void onSpellCastPreEvent(SpellCastEvent.Pre event){ // 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); } } + } \ No newline at end of file diff --git a/src/main/java/electroblob/wizardry/spell/InvigoratingPresence.java b/src/main/java/electroblob/wizardry/spell/InvigoratingPresence.java index c6c473b8..a90b7a44 100644 --- a/src/main/java/electroblob/wizardry/spell/InvigoratingPresence.java +++ b/src/main/java/electroblob/wizardry/spell/InvigoratingPresence.java @@ -1,5 +1,6 @@ package electroblob.wizardry.spell; +import electroblob.wizardry.Wizardry; import electroblob.wizardry.registry.WizardryItems; import electroblob.wizardry.util.AllyDesignationSystem; import electroblob.wizardry.util.ParticleBuilder; @@ -62,4 +63,9 @@ public class InvigoratingPresence extends Spell { return true; } + @Override + protected String getTranslationKey(){ + return Wizardry.tisTheSeason ? super.getTranslationKey() + "_festive" : super.getTranslationKey(); + } + } diff --git a/src/main/java/electroblob/wizardry/spell/Spell.java b/src/main/java/electroblob/wizardry/spell/Spell.java index 91406f63..fb4fd3dd 100644 --- a/src/main/java/electroblob/wizardry/spell/Spell.java +++ b/src/main/java/electroblob/wizardry/spell/Spell.java @@ -597,13 +597,23 @@ public abstract class Spell extends IForgeRegistryEntry.Impl implements C * 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. */ + /** 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). Client-side * only! On the server side, use {@link TextComponentTranslation} (see {@link Spell#getNameForTranslation()}). */ @SideOnly(Side.CLIENT) 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 implements C * formatting (i.e. not coloured). */ public ITextComponent getNameForTranslation(){ - return new TextComponentTranslation("spell." + unlocalisedName); + return new TextComponentTranslation(getTranslationKey()); } /** @@ -620,7 +630,7 @@ public abstract class Spell extends IForgeRegistryEntry.Impl implements C */ @SideOnly(Side.CLIENT) 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 implements C * formatting (i.e. coloured). */ 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 implements C */ @SideOnly(Side.CLIENT) public String getDescription(){ - return net.minecraft.client.resources.I18n.format("spell." + unlocalisedName + ".desc"); + return net.minecraft.client.resources.I18n.format(getDescriptionTranslationKey()); } // ============================================ Sound methods ============================================== diff --git a/src/main/java/electroblob/wizardry/spell/SummonSnowGolem.java b/src/main/java/electroblob/wizardry/spell/SummonSnowGolem.java index 2f77947c..b34f567d 100644 --- a/src/main/java/electroblob/wizardry/spell/SummonSnowGolem.java +++ b/src/main/java/electroblob/wizardry/spell/SummonSnowGolem.java @@ -1,5 +1,6 @@ package electroblob.wizardry.spell; +import electroblob.wizardry.Wizardry; import electroblob.wizardry.util.ParticleBuilder; import electroblob.wizardry.util.ParticleBuilder.Type; import electroblob.wizardry.util.SpellModifiers; @@ -9,7 +10,11 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.util.EnumHand; 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.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; public class SummonSnowGolem extends Spell { @@ -45,4 +50,8 @@ public class SummonSnowGolem extends Spell { return true; } + @Override + protected String getTranslationKey(){ + return Wizardry.tisTheSeason ? super.getTranslationKey() + "_festive" : super.getTranslationKey(); + } } diff --git a/src/main/resources/assets/ebwizardry/lang/en_gb.lang b/src/main/resources/assets/ebwizardry/lang/en_gb.lang index 0e4044fb..271d5662 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_gb.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_gb.lang @@ -1289,4 +1289,9 @@ integration.antiqueatlas.marker.ebwizardry\:wizard_tower=Wizard Tower integration.antiqueatlas.marker.ebwizardry\:obelisk=Obelisk 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 diff --git a/src/main/resources/assets/ebwizardry/lang/en_us.lang b/src/main/resources/assets/ebwizardry/lang/en_us.lang index c9513a61..cd320381 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_us.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_us.lang @@ -1289,4 +1289,9 @@ integration.antiqueatlas.marker.ebwizardry\:wizard_tower=Wizard Tower integration.antiqueatlas.marker.ebwizardry\:obelisk=Obelisk 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 diff --git a/src/main/resources/assets/ebwizardry/models/item/blank_scroll.json b/src/main/resources/assets/ebwizardry/models/item/blank_scroll.json index 14f38c44..bcbf8838 100644 --- a/src/main/resources/assets/ebwizardry/models/item/blank_scroll.json +++ b/src/main/resources/assets/ebwizardry/models/item/blank_scroll.json @@ -2,5 +2,13 @@ "parent": "item/generated", "textures": { "layer0": "ebwizardry:items/scroll" - } + }, + "overrides": [ + { + "predicate": { + "festive": 1 + }, + "model": "ebwizardry:item/festive_scroll" + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/item/festive_scroll.json b/src/main/resources/assets/ebwizardry/models/item/festive_scroll.json new file mode 100644 index 00000000..18e8a816 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/festive_scroll.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "ebwizardry:items/scroll_festive" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/festive_spell_book.json b/src/main/resources/assets/ebwizardry/models/item/festive_spell_book.json new file mode 100644 index 00000000..98e8e12e --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/festive_spell_book.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "ebwizardry:items/spell_book_festive" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/festive_wand.json b/src/main/resources/assets/ebwizardry/models/item/festive_wand.json new file mode 100644 index 00000000..b31af7dd --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/festive_wand.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "ebwizardry:items/wand_festive" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/scroll.json b/src/main/resources/assets/ebwizardry/models/item/scroll.json index 14f38c44..bcbf8838 100644 --- a/src/main/resources/assets/ebwizardry/models/item/scroll.json +++ b/src/main/resources/assets/ebwizardry/models/item/scroll.json @@ -2,5 +2,13 @@ "parent": "item/generated", "textures": { "layer0": "ebwizardry:items/scroll" - } + }, + "overrides": [ + { + "predicate": { + "festive": 1 + }, + "model": "ebwizardry:item/festive_scroll" + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/item/spell_book.json b/src/main/resources/assets/ebwizardry/models/item/spell_book.json index e47489da..b5941b77 100644 --- a/src/main/resources/assets/ebwizardry/models/item/spell_book.json +++ b/src/main/resources/assets/ebwizardry/models/item/spell_book.json @@ -2,5 +2,13 @@ "parent": "item/generated", "textures": { "layer0": "ebwizardry:items/spell_book" - } + }, + "overrides": [ + { + "predicate": { + "festive": 1 + }, + "model": "ebwizardry:item/festive_spell_book" + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/sounds.json b/src/main/resources/assets/ebwizardry/sounds.json index ce50a30b..75efd3a7 100644 --- a/src/main/resources/assets/ebwizardry/sounds.json +++ b/src/main/resources/assets/ebwizardry/sounds.json @@ -62,7 +62,8 @@ "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.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.dart.hit": {"category": "spells", "sounds": ["damage/hit1", "damage/hit2", "damage/hit3"]}, "entity.dart.hit_block": {"category": "spells", "sounds": ["random/bowhit1", "random/bowhit2", "random/bowhit3"]}, diff --git a/src/main/resources/assets/ebwizardry/sounds/hohoho.ogg b/src/main/resources/assets/ebwizardry/sounds/hohoho.ogg new file mode 100644 index 00000000..ee09f4df Binary files /dev/null and b/src/main/resources/assets/ebwizardry/sounds/hohoho.ogg differ diff --git a/src/main/resources/assets/ebwizardry/textures/armour/wizard_armour_earth_legs.png b/src/main/resources/assets/ebwizardry/textures/armour/wizard_armour_earth_legs.png deleted file mode 100644 index e1e6fad0..00000000 Binary files a/src/main/resources/assets/ebwizardry/textures/armour/wizard_armour_earth_legs.png and /dev/null differ diff --git a/src/main/resources/assets/ebwizardry/textures/armour/wizard_armour_festive.png b/src/main/resources/assets/ebwizardry/textures/armour/wizard_armour_festive.png new file mode 100644 index 00000000..00fa0cdc Binary files /dev/null and b/src/main/resources/assets/ebwizardry/textures/armour/wizard_armour_festive.png differ diff --git a/src/main/resources/assets/ebwizardry/textures/armour/wizard_armour_festive_legs.png b/src/main/resources/assets/ebwizardry/textures/armour/wizard_armour_festive_legs.png new file mode 100644 index 00000000..9d881faf Binary files /dev/null and b/src/main/resources/assets/ebwizardry/textures/armour/wizard_armour_festive_legs.png differ diff --git a/src/main/resources/assets/ebwizardry/textures/gui/spell_hud/_index.json b/src/main/resources/assets/ebwizardry/textures/gui/spell_hud/_index.json index a97d369c..c61e8b52 100644 --- a/src/main/resources/assets/ebwizardry/textures/gui/spell_hud/_index.json +++ b/src/main/resources/assets/ebwizardry/textures/gui/spell_hud/_index.json @@ -74,5 +74,9 @@ "planks": { "texture": "ebwizardry:gui/spell_hud/planks", "metadata": "ebwizardry:gui/spell_hud/planks" + }, + "festive": { + "texture": "ebwizardry:gui/spell_hud/festive", + "metadata": "ebwizardry:gui/spell_hud/festive" } } \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/textures/gui/spell_hud/festive.json b/src/main/resources/assets/ebwizardry/textures/gui/spell_hud/festive.json new file mode 100644 index 00000000..8decb029 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/textures/gui/spell_hud/festive.json @@ -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 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/textures/gui/spell_hud/festive.png b/src/main/resources/assets/ebwizardry/textures/gui/spell_hud/festive.png new file mode 100644 index 00000000..bf786195 Binary files /dev/null and b/src/main/resources/assets/ebwizardry/textures/gui/spell_hud/festive.png differ diff --git a/src/main/resources/assets/ebwizardry/textures/items/scroll_festive.png b/src/main/resources/assets/ebwizardry/textures/items/scroll_festive.png new file mode 100644 index 00000000..d90a556f Binary files /dev/null and b/src/main/resources/assets/ebwizardry/textures/items/scroll_festive.png differ diff --git a/src/main/resources/assets/ebwizardry/textures/items/spell_book_festive.png b/src/main/resources/assets/ebwizardry/textures/items/spell_book_festive.png new file mode 100644 index 00000000..2efce968 Binary files /dev/null and b/src/main/resources/assets/ebwizardry/textures/items/spell_book_festive.png differ diff --git a/src/main/resources/assets/ebwizardry/textures/items/wand_festive.png b/src/main/resources/assets/ebwizardry/textures/items/wand_festive.png new file mode 100644 index 00000000..6377c56c Binary files /dev/null and b/src/main/resources/assets/ebwizardry/textures/items/wand_festive.png differ