From 3df5597dcca2bcc9de97d77b3bc8888ab96ded7d Mon Sep 17 00:00:00 2001
From: Electroblob <35599699+Electroblob77@users.noreply.github.com>
Date: Wed, 7 Feb 2018 21:15:50 +0000
Subject: [PATCH] Initial 1.11.2 update
---
.gitattributes | 2 +
build.gradle | 25 +-
.../electroblob/wizardry/CommonProxy.java | 260 +--
.../java/electroblob/wizardry/Settings.java | 338 ++--
.../electroblob/wizardry/SpellGlyphData.java | 97 +-
.../java/electroblob/wizardry/WizardData.java | 327 ++--
.../java/electroblob/wizardry/Wizardry.java | 290 ++-
.../wizardry/WizardryEventHandler.java | 293 ++-
.../wizardry/WizardryGuiFactory.java | 53 +-
.../wizardry/WizardryGuiHandler.java | 39 +-
.../wizardry/WizardryKeyHandler.java | 71 +-
.../wizardry/WizardryWorldGenerator.java | 1690 ++++++-----------
.../wizardry/block/BlockArcaneWorkbench.java | 128 +-
.../wizardry/block/BlockCrystalFlower.java | 34 +-
.../wizardry/block/BlockCrystalOre.java | 11 +-
.../wizardry/block/BlockMagicLight.java | 35 +-
.../wizardry/block/BlockSnare.java | 78 +-
.../wizardry/block/BlockSpectral.java | 92 +-
.../wizardry/block/BlockStatue.java | 87 +-
.../block/BlockTransportationStone.java | 119 +-
.../wizardry/block/BlockVanishingCobweb.java | 67 +-
.../wizardry/client/ClientProxy.java | 392 ++--
.../wizardry/client/EntityNameEntry.java | 105 +-
.../wizardry/client/GuiArcaneWorkbench.java | 102 +-
.../wizardry/client/GuiButtonApply.java | 54 +-
.../wizardry/client/GuiButtonInvisible.java | 21 +-
.../wizardry/client/GuiButtonTurnPage.java | 58 +-
.../wizardry/client/GuiConfigWizardry.java | 106 +-
.../wizardry/client/GuiPortableCrafting.java | 44 +-
.../wizardry/client/GuiSpellBook.java | 161 +-
.../wizardry/client/GuiSpellDisplay.java | 40 +-
.../wizardry/client/GuiWizardHandbook.java | 367 ++--
.../wizardry/client/MixedFontRenderer.java | 104 +-
.../wizardry/client/MovingSoundEntity.java | 79 +-
.../client/WizardryClientEventHandler.java | 349 ++--
.../wizardry/client/model/ModelHammer.java | 145 +-
.../wizardry/client/model/ModelIceGiant.java | 574 +++---
.../wizardry/client/model/ModelPhoenix.java | 250 ++-
.../wizardry/client/model/ModelWizard.java | 291 ++-
.../client/model/ModelWizardArmour.java | 5 +-
.../client/model/WizardryItemModels.java | 256 +--
.../client/particle/ParticleBlizzard.java | 116 +-
.../particle/ParticleCustomTexture.java | 200 +-
.../client/particle/ParticleDarkMagic.java | 122 +-
.../client/particle/ParticleDust.java | 79 +-
.../client/particle/ParticleGiantBubble.java | 73 +-
.../wizardry/client/particle/ParticleIce.java | 24 +-
.../client/particle/ParticleLeaf.java | 40 +-
.../client/particle/ParticleMagicFlame.java | 63 +-
.../client/particle/ParticlePath.java | 142 +-
.../particle/ParticleRotatingSparkle.java | 92 +-
.../client/particle/ParticleSnow.java | 42 +-
.../client/particle/ParticleSpark.java | 96 +-
.../client/particle/ParticleSparkle.java | 155 +-
.../client/particle/ParticleTornado.java | 134 +-
.../wizardry/client/renderer/LayerStone.java | 189 +-
.../wizardry/client/renderer/RayHelper.java | 29 +-
.../wizardry/client/renderer/RenderArc.java | 82 +-
.../renderer/RenderArcaneWorkbench.java | 116 +-
.../client/renderer/RenderBlackHole.java | 93 +-
.../wizardry/client/renderer/RenderBlank.java | 7 +-
.../client/renderer/RenderBubble.java | 22 +-
.../wizardry/client/renderer/RenderDecay.java | 86 +-
.../wizardry/client/renderer/RenderDecoy.java | 45 +-
.../client/renderer/RenderEvilWizard.java | 31 +-
.../client/renderer/RenderFireRing.java | 303 +--
.../client/renderer/RenderForceArrow.java | 196 +-
.../client/renderer/RenderHammer.java | 21 +-
.../client/renderer/RenderIceGiant.java | 37 +-
.../client/renderer/RenderIceSpike.java | 41 +-
.../client/renderer/RenderLightningDisc.java | 110 +-
.../client/renderer/RenderLightningPulse.java | 86 +-
.../client/renderer/RenderMagicArrow.java | 191 +-
.../client/renderer/RenderMagicLight.java | 76 +-
.../client/renderer/RenderPhoenix.java | 56 +-
.../client/renderer/RenderProjectile.java | 130 +-
.../wizardry/client/renderer/RenderSigil.java | 104 +-
.../client/renderer/RenderSpiritHorse.java | 34 +-
.../client/renderer/RenderSpiritWolf.java | 32 +-
.../client/renderer/RenderStatue.java | 22 +-
.../client/renderer/RenderWizard.java | 28 +-
.../client/renderer/RenderWraithMinion.java | 19 +-
.../wizardry/command/CommandCastSpell.java | 272 +--
.../command/CommandDiscoverSpell.java | 61 +-
.../wizardry/command/CommandSetAlly.java | 45 +-
.../wizardry/command/CommandViewAllies.java | 49 +-
.../wizardry/constants/Constants.java | 20 +-
.../wizardry/constants/Element.java | 29 +-
.../wizardry/constants/SpellType.java | 9 +-
.../electroblob/wizardry/constants/Tier.java | 49 +-
.../enchantment/EnchantmentMagicSword.java | 68 +-
.../enchantment/EnchantmentTimed.java | 61 +-
.../wizardry/enchantment/Imbuement.java | 26 +-
.../wizardry/entity/EntityArc.java | 40 +-
.../wizardry/entity/EntityMeteor.java | 174 +-
.../wizardry/entity/EntityShield.java | 75 +-
.../entity/construct/EntityArrowRain.java | 24 +-
.../entity/construct/EntityBlackHole.java | 54 +-
.../entity/construct/EntityBlizzard.java | 31 +-
.../entity/construct/EntityBubble.java | 89 +-
.../entity/construct/EntityDecay.java | 64 +-
.../entity/construct/EntityEarthquake.java | 63 +-
.../entity/construct/EntityFireRing.java | 42 +-
.../entity/construct/EntityFireSigil.java | 33 +-
.../entity/construct/EntityForcefield.java | 84 +-
.../entity/construct/EntityFrostSigil.java | 77 +-
.../entity/construct/EntityHailstorm.java | 24 +-
.../entity/construct/EntityHammer.java | 269 +--
.../entity/construct/EntityHealAura.java | 33 +-
.../entity/construct/EntityIceSpike.java | 32 +-
.../construct/EntityLightningPulse.java | 8 +-
.../construct/EntityLightningSigil.java | 172 +-
.../construct/EntityMagicConstruct.java | 116 +-
.../entity/construct/EntityTornado.java | 125 +-
.../entity/living/EntityAIAttackSpell.java | 84 +-
.../entity/living/EntityAISelectSpell.java | 2 +-
.../entity/living/EntityBlazeMinion.java | 117 +-
.../wizardry/entity/living/EntityDecoy.java | 47 +-
.../entity/living/EntityEvilWizard.java | 83 +-
.../entity/living/EntityIceGiant.java | 195 +-
.../entity/living/EntityIceWraith.java | 369 ++--
.../entity/living/EntityLightningWraith.java | 201 +-
.../entity/living/EntityMagicSlime.java | 162 +-
.../wizardry/entity/living/EntityPhoenix.java | 241 +--
.../entity/living/EntityShadowWraith.java | 101 +-
.../entity/living/EntitySilverfishMinion.java | 121 +-
.../entity/living/EntitySkeletonMinion.java | 166 +-
.../entity/living/EntitySpiderMinion.java | 160 +-
.../entity/living/EntitySpiritHorse.java | 141 +-
.../entity/living/EntitySpiritWolf.java | 215 ++-
.../entity/living/EntityStormElemental.java | 82 +-
.../entity/living/EntitySummonedCreature.java | 113 +-
.../living/EntityWitherSkeletonMinion.java | 255 +++
.../wizardry/entity/living/EntityWizard.java | 314 +--
.../entity/living/EntityZombieMinion.java | 160 +-
.../living/IIntelligentSpellCaster.java | 22 +-
.../wizardry/entity/living/ISpellCaster.java | 57 +-
.../entity/living/ISummonedCreature.java | 267 +--
.../entity/projectile/EntityBomb.java | 21 +-
.../entity/projectile/EntityDarknessOrb.java | 139 +-
.../entity/projectile/EntityDart.java | 108 +-
.../entity/projectile/EntityFirebolt.java | 145 +-
.../entity/projectile/EntityFirebomb.java | 127 +-
.../entity/projectile/EntityForceArrow.java | 106 +-
.../entity/projectile/EntityForceOrb.java | 141 +-
.../entity/projectile/EntityIceCharge.java | 170 +-
.../entity/projectile/EntityIceLance.java | 144 +-
.../entity/projectile/EntityIceShard.java | 128 +-
.../projectile/EntityLightningArrow.java | 125 +-
.../projectile/EntityLightningDisc.java | 158 +-
.../entity/projectile/EntityMagicArrow.java | 944 ++++-----
.../entity/projectile/EntityMagicMissile.java | 119 +-
.../projectile/EntityMagicProjectile.java | 98 +-
.../entity/projectile/EntityPoisonBomb.java | 119 +-
.../entity/projectile/EntitySmokeBomb.java | 85 +-
.../entity/projectile/EntitySpark.java | 158 +-
.../entity/projectile/EntitySparkBomb.java | 153 +-
.../entity/projectile/EntityThunderbolt.java | 156 +-
.../wizardry/event/DiscoverSpellEvent.java | 20 +-
.../wizardry/event/SpellBindEvent.java | 7 +-
.../wizardry/event/SpellCastEvent.java | 57 +-
.../wizardry/item/IConjuredItem.java | 28 +-
.../wizardry/item/ItemArcaneTome.java | 51 +-
.../wizardry/item/ItemArmourUpgrade.java | 26 +-
.../wizardry/item/ItemFirebomb.java | 55 +-
.../wizardry/item/ItemFlamingAxe.java | 59 +-
.../wizardry/item/ItemFrostAxe.java | 65 +-
.../item/ItemIdentificationScroll.java | 20 +-
.../wizardry/item/ItemPoisonBomb.java | 57 +-
.../electroblob/wizardry/item/ItemScroll.java | 34 +-
.../wizardry/item/ItemSmokeBomb.java | 55 +-
.../wizardry/item/ItemSpectralArmour.java | 84 +-
.../wizardry/item/ItemSpectralBow.java | 132 +-
.../wizardry/item/ItemSpectralPickaxe.java | 53 +-
.../wizardry/item/ItemSpectralSword.java | 55 +-
.../wizardry/item/ItemSpellBook.java | 49 +-
.../electroblob/wizardry/item/ItemWand.java | 141 +-
.../wizardry/item/ItemWizardArmour.java | 219 ++-
.../wizardry/item/ItemWizardHandbook.java | 21 +-
.../wizardry/loot/RandomSpell.java | 276 ++-
.../wizardry/loot/WizardSpell.java | 40 +-
.../packet/PacketCastContinuousSpell.java | 13 +-
.../wizardry/packet/PacketCastSpell.java | 19 +-
.../wizardry/packet/PacketClairvoyance.java | 36 +-
.../wizardry/packet/PacketControlInput.java | 12 +-
.../wizardry/packet/PacketGlyphData.java | 17 +-
.../wizardry/packet/PacketNPCCastSpell.java | 11 +-
.../wizardry/packet/PacketPlayerSync.java | 12 +-
.../wizardry/packet/PacketSyncSettings.java | 42 +-
.../wizardry/packet/PacketTransportation.java | 24 +-
.../packet/WizardryPacketHandler.java | 15 +-
.../potion/ICustomPotionParticles.java | 18 +-
.../wizardry/potion/PotionDecay.java | 45 +-
.../wizardry/potion/PotionFrost.java | 33 +-
.../wizardry/potion/PotionMagicEffect.java | 32 +-
.../potion/PotionMagicEffectParticles.java | 6 +-
.../electroblob/wizardry/registry/Spells.java | 27 +-
.../registry/WizardryAchievements.java | 86 +-
.../wizardry/registry/WizardryBlocks.java | 44 +-
.../registry/WizardryEnchantments.java | 21 +-
.../wizardry/registry/WizardryItems.java | 22 +-
.../wizardry/registry/WizardryPotions.java | 48 +-
.../wizardry/registry/WizardryRegistry.java | 439 +++--
.../wizardry/registry/WizardrySounds.java | 9 +-
.../wizardry/registry/WizardryTabs.java | 119 +-
.../electroblob/wizardry/spell/Agility.java | 27 +-
.../java/electroblob/wizardry/spell/Arc.java | 72 +-
.../wizardry/spell/ArcaneJammer.java | 64 +-
.../electroblob/wizardry/spell/ArrowRain.java | 28 +-
.../electroblob/wizardry/spell/Banish.java | 153 +-
.../electroblob/wizardry/spell/BlackHole.java | 36 +-
.../electroblob/wizardry/spell/Blink.java | 88 +-
.../electroblob/wizardry/spell/Blizzard.java | 38 +-
.../electroblob/wizardry/spell/Bubble.java | 72 +-
.../wizardry/spell/ChainLightning.java | 136 +-
.../wizardry/spell/Clairvoyance.java | 71 +-
.../electroblob/wizardry/spell/Cobwebs.java | 66 +-
.../wizardry/spell/ConjureArmour.java | 69 +-
.../wizardry/spell/ConjureBow.java | 22 +-
.../wizardry/spell/ConjurePickaxe.java | 26 +-
.../wizardry/spell/ConjureSword.java | 23 +-
.../wizardry/spell/CureEffects.java | 41 +-
.../wizardry/spell/CurseOfSoulbinding.java | 49 +-
.../wizardry/spell/DarknessOrb.java | 29 +-
.../wizardry/spell/Darkvision.java | 19 +-
.../java/electroblob/wizardry/spell/Dart.java | 28 +-
.../electroblob/wizardry/spell/Decay.java | 62 +-
.../electroblob/wizardry/spell/Decoy.java | 36 +-
.../electroblob/wizardry/spell/Detonate.java | 69 +-
.../wizardry/spell/Diamondflesh.java | 35 +-
.../wizardry/spell/Earthquake.java | 38 +-
.../wizardry/spell/Entrapment.java | 84 +-
.../wizardry/spell/FireResistance.java | 44 +-
.../electroblob/wizardry/spell/FireSigil.java | 17 +-
.../electroblob/wizardry/spell/Fireball.java | 45 +-
.../electroblob/wizardry/spell/Firebolt.java | 23 +-
.../electroblob/wizardry/spell/Firebomb.java | 34 +-
.../electroblob/wizardry/spell/Fireskin.java | 25 +-
.../electroblob/wizardry/spell/Firestorm.java | 57 +-
.../electroblob/wizardry/spell/FlameRay.java | 85 +-
.../wizardry/spell/FlamingAxe.java | 21 +-
.../wizardry/spell/FlamingWeapon.java | 48 +-
.../electroblob/wizardry/spell/Flight.java | 28 +-
.../wizardry/spell/FontOfMana.java | 38 +-
.../wizardry/spell/FontOfVitality.java | 32 +-
.../wizardry/spell/ForceArrow.java | 36 +-
.../electroblob/wizardry/spell/ForceOrb.java | 34 +-
.../wizardry/spell/Forcefield.java | 34 +-
.../wizardry/spell/ForestsCurse.java | 60 +-
.../electroblob/wizardry/spell/Freeze.java | 133 +-
.../wizardry/spell/FreezingWeapon.java | 54 +-
.../electroblob/wizardry/spell/FrostAxe.java | 24 +-
.../electroblob/wizardry/spell/FrostRay.java | 101 +-
.../wizardry/spell/FrostSigil.java | 17 +-
.../electroblob/wizardry/spell/Glide.java | 25 +-
.../wizardry/spell/GreaterFireball.java | 43 +-
.../wizardry/spell/GreaterHeal.java | 39 +-
.../electroblob/wizardry/spell/GroupHeal.java | 51 +-
.../wizardry/spell/GrowthAura.java | 15 +-
.../electroblob/wizardry/spell/Hailstorm.java | 28 +-
.../java/electroblob/wizardry/spell/Heal.java | 42 +-
.../electroblob/wizardry/spell/HealAlly.java | 29 +-
.../wizardry/spell/HealingAura.java | 32 +-
.../wizardry/spell/HomingSpark.java | 24 +-
.../electroblob/wizardry/spell/IceAge.java | 89 +-
.../electroblob/wizardry/spell/IceCharge.java | 34 +-
.../electroblob/wizardry/spell/IceLance.java | 30 +-
.../electroblob/wizardry/spell/IceShard.java | 30 +-
.../electroblob/wizardry/spell/IceShroud.java | 26 +-
.../electroblob/wizardry/spell/IceSpikes.java | 86 +-
.../electroblob/wizardry/spell/IceStatue.java | 53 +-
.../electroblob/wizardry/spell/Ignite.java | 100 +-
.../wizardry/spell/ImbueWeapon.java | 72 +-
.../wizardry/spell/Intimidate.java | 45 +-
.../wizardry/spell/InvigoratingPresence.java | 37 +-
.../wizardry/spell/Invisibility.java | 34 +-
.../wizardry/spell/InvokeWeather.java | 27 +-
.../electroblob/wizardry/spell/Ironflesh.java | 34 +-
.../java/electroblob/wizardry/spell/Leap.java | 19 +-
.../wizardry/spell/Levitation.java | 12 +-
.../electroblob/wizardry/spell/LifeDrain.java | 72 +-
.../electroblob/wizardry/spell/Light.java | 37 +-
.../wizardry/spell/LightningArrow.java | 34 +-
.../wizardry/spell/LightningBolt.java | 91 +-
.../wizardry/spell/LightningDisc.java | 30 +-
.../wizardry/spell/LightningHammer.java | 34 +-
.../wizardry/spell/LightningPulse.java | 31 +-
.../wizardry/spell/LightningRay.java | 113 +-
.../wizardry/spell/LightningSigil.java | 21 +-
.../wizardry/spell/LightningWeb.java | 117 +-
.../wizardry/spell/MagicMissile.java | 42 +-
.../wizardry/spell/Metamorphosis.java | 108 +-
.../electroblob/wizardry/spell/Meteor.java | 25 +-
.../wizardry/spell/MindControl.java | 86 +-
.../electroblob/wizardry/spell/MindTrick.java | 53 +-
.../java/electroblob/wizardry/spell/None.java | 11 +-
.../electroblob/wizardry/spell/Oakflesh.java | 34 +-
.../electroblob/wizardry/spell/Petrify.java | 69 +-
.../electroblob/wizardry/spell/PhaseStep.java | 47 +-
.../wizardry/spell/PlagueOfDarkness.java | 56 +-
.../wizardry/spell/PocketFurnace.java | 42 +-
.../wizardry/spell/PocketWorkbench.java | 7 +-
.../electroblob/wizardry/spell/Poison.java | 89 +-
.../wizardry/spell/PoisonBomb.java | 34 +-
.../wizardry/spell/ReplenishHunger.java | 26 +-
.../wizardry/spell/RingOfFire.java | 30 +-
.../wizardry/spell/ShadowWard.java | 24 +-
.../electroblob/wizardry/spell/Shield.java | 11 +-
.../electroblob/wizardry/spell/Shockwave.java | 66 +-
.../wizardry/spell/SilverfishSwarm.java | 18 +-
.../wizardry/spell/SixthSense.java | 14 +-
.../electroblob/wizardry/spell/Slime.java | 89 +-
.../electroblob/wizardry/spell/SmokeBomb.java | 34 +-
.../electroblob/wizardry/spell/Snare.java | 36 +-
.../electroblob/wizardry/spell/Snowball.java | 16 +-
.../electroblob/wizardry/spell/SparkBomb.java | 34 +-
.../wizardry/spell/SpectralPathway.java | 35 +-
.../electroblob/wizardry/spell/Spell.java | 357 ++--
.../wizardry/spell/SpiderSwarm.java | 32 +-
.../wizardry/spell/StaticAura.java | 28 +-
.../wizardry/spell/SummonBlaze.java | 50 +-
.../wizardry/spell/SummonIceGiant.java | 26 +-
.../wizardry/spell/SummonIceWraith.java | 32 +-
.../wizardry/spell/SummonIronGolem.java | 25 +-
.../wizardry/spell/SummonLightningWraith.java | 33 +-
.../wizardry/spell/SummonPhoenix.java | 18 +-
.../wizardry/spell/SummonShadowWraith.java | 23 +-
.../wizardry/spell/SummonSkeleton.java | 25 +-
.../wizardry/spell/SummonSkeletonLegion.java | 33 +-
.../wizardry/spell/SummonSnowGolem.java | 23 +-
.../wizardry/spell/SummonSpiritHorse.java | 16 +-
.../wizardry/spell/SummonSpiritWolf.java | 15 +-
.../wizardry/spell/SummonStormElemental.java | 19 +-
.../wizardry/spell/SummonWitherSkeleton.java | 31 +-
.../wizardry/spell/SummonZombie.java | 23 +-
.../wizardry/spell/Telekinesis.java | 39 +-
.../wizardry/spell/Thunderbolt.java | 25 +-
.../wizardry/spell/Thunderstorm.java | 158 +-
.../electroblob/wizardry/spell/Tornado.java | 37 +-
.../wizardry/spell/Transience.java | 15 +-
.../wizardry/spell/Transportation.java | 16 +-
.../wizardry/spell/VanishingBox.java | 16 +-
.../wizardry/spell/WallOfFrost.java | 76 +-
.../wizardry/spell/WaterBreathing.java | 22 +-
.../electroblob/wizardry/spell/Whirlwind.java | 65 +-
.../electroblob/wizardry/spell/Wither.java | 89 +-
.../wizardry/spell/WitherSkull.java | 53 +-
.../tileentity/ContainerArcaneWorkbench.java | 369 ++--
.../ContainerPortableWorkbench.java | 13 +-
.../wizardry/tileentity/SlotItemList.java | 23 +-
.../wizardry/tileentity/SlotWandArmour.java | 31 +-
.../tileentity/TileEntityArcaneWorkbench.java | 153 +-
.../tileentity/TileEntityMagicLight.java | 46 +-
.../tileentity/TileEntityPlayerSave.java | 64 +-
.../wizardry/tileentity/TileEntityStatue.java | 183 +-
.../wizardry/tileentity/TileEntityTimer.java | 63 +-
.../wizardry/util/IElementalDamage.java | 16 +-
.../wizardry/util/IndirectMagicDamage.java | 2 +-
.../wizardry/util/IndirectMinionDamage.java | 14 +-
.../wizardry/util/MagicDamage.java | 147 +-
.../wizardry/util/MinionDamage.java | 11 +-
.../wizardry/util/SpellModifiers.java | 101 +-
.../electroblob/wizardry/util/WandHelper.java | 120 +-
.../wizardry/util/WizardryParticleType.java | 20 +-
.../wizardry/util/WizardryPathFinder.java | 206 +-
.../wizardry/util/WizardryUtilities.java | 769 ++++----
src/main/resources/mcmod.info | 2 +-
src/main/resources/pack.mcmeta | 6 +
368 files changed, 17234 insertions(+), 15082 deletions(-)
create mode 100644 .gitattributes
create mode 100644 src/main/java/electroblob/wizardry/entity/living/EntityWitherSkeletonMinion.java
create mode 100644 src/main/resources/pack.mcmeta
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..dfe07704
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/build.gradle b/build.gradle
index ed1e5ab8..e581fdbc 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,26 +8,28 @@ buildscript {
}
}
apply plugin: 'net.minecraftforge.gradle.forge'
-//Only edit below this line, the above code adds and enables the nessasary 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 = " 2.1.0 - MC 1.10.2"
-group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
-archivesBaseName = "Electroblob's Wizardry "
+version = "1.0"
+group = "com.yourname.modid" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
+archivesBaseName = "modid"
-srcCompat = JavaVersion.VERSION_1_8
-targetCompat = JavaVersion.VERSION_1_8
+sourceCompatibility = targetCompatibility = "1.6" // Need this here so eclipse task generates correctly.
+compileJava {
+ sourceCompatibility = targetCompatibility = "1.6"
+}
minecraft {
- version = "1.10.2-12.18.3.2185"
+ version = "1.11.2-13.20.1.2386"
runDir = "run"
// the mappings can be changed at any time, and must be in the following format.
// snapshot_YYYYMMDD snapshot are built nightly.
// stable_# stables are built at the discretion of the MCP team.
- // Use non-default mappings at your own risk. they may not allways work.
+ // Use non-default mappings at your own risk. they may not always work.
// simply re-run your setup task after changing the mappings to update your workspace.
- mappings = "snapshot_20161111"
+ mappings = "snapshot_20161220"
// makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
}
@@ -55,8 +57,7 @@ dependencies {
}
-processResources
-{
+processResources {
// this will ensure that this task is redone when the versions change.
inputs.property "version", project.version
inputs.property "mcversion", project.minecraft.version
@@ -69,7 +70,7 @@ processResources
expand 'version':project.version, 'mcversion':project.minecraft.version
}
- // copy everything else, thats not the mcmod.info
+ // copy everything else except the mcmod.info
from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info'
}
diff --git a/src/main/java/electroblob/wizardry/CommonProxy.java b/src/main/java/electroblob/wizardry/CommonProxy.java
index 1ae24b85..a5ae25a3 100644
--- a/src/main/java/electroblob/wizardry/CommonProxy.java
+++ b/src/main/java/electroblob/wizardry/CommonProxy.java
@@ -23,119 +23,137 @@ import net.minecraftforge.common.config.Property;
/**
* The common proxy for wizardry, serving the usual purpose of dealing with all things that need to be handled
- * differently on the client and the server. A lot of the methods here appear to do absolutely nothing; this is
- * because they do client-only things which are only handled in the client proxy.
+ * differently on the client and the server. A lot of the methods here appear to do absolutely nothing; this is because
+ * they do client-only things which are only handled in the client proxy.
+ *
* @see {@link electroblob.wizardry.client.ClientProxy}
* @author Electroblob
* @since Wizardry 1.0
- * */
+ */
@SuppressWarnings("deprecation")
public class CommonProxy {
-
+
// SECTION Registry
// ===============================================================================================================
- public void registerRenderers(){}
+ public void registerRenderers(){
+ }
- public void initialiseLayers(){}
-
- public void registerKeyBindings(){}
-
- public void registerSpellHUD(){}
-
- public net.minecraft.client.model.ModelBiped getWizardArmourModel(){ return null; }
+ public void initialiseLayers(){
+ }
+
+ public void registerKeyBindings(){
+ }
+
+ public void registerSpellHUD(){
+ }
+
+ public net.minecraft.client.model.ModelBiped getWizardArmourModel(){
+ return null;
+ }
+
+ public void initMixedFontRenderer(){
+ }
- public void initMixedFontRenderer(){}
-
// SECTION Particles
// ===============================================================================================================
-
- /**
- * Spawns a custom particle of the specified type.
- *
- * @param type EnumParticleType of the particle
- * @param world Reference to the World object
- * @param x Particle x position
- * @param y Particle y position
- * @param z Particle z position
- * @param velX Particle x velocity
- * @param velY Particle y velocity
- * @param velZ Particle z velocity
- * @param maxAge Lifetime of the particle in ticks
- * @param r Red component of particle colour; will be clamped to between 0 and 1
- * @param g Red component of particle colour; will be clamped to between 0 and 1
- * @param b Red component of particle colour; will be clamped to between 0 and 1
- * @param doGravity Whether the particle is affected by gravity (only affects SPARKLE at the moment)
- * @param radius The radius of the particle's motion, for cirular motion particles
- */
- public void spawnParticle(WizardryParticleType type, World world, double x, double y, double z, double velX, double velY, double velZ, int maxAge, float r, float g, float b, boolean doGravity, double radius){
- // Does nothing since particles are client-side only
- }
-
- /** Spawns a custom particle of the specified type. doGravity defaults to false and radius defaults to 0.
- * Note that some of these settings may not affect the particle; some particles are always affected by
- * gravity, for instance.
- *
- * @param type EnumParticleType of the particle
- * @param world Reference to the World object
- * @param x Particle x position
- * @param y Particle y position
- * @param z Particle z position
- * @param velX Particle x velocity
- * @param velY Particle y velocity
- * @param velZ Particle z velocity
- * @param maxAge Lifetime of the particle in ticks
- * @param r Red component of particle colour; will be clamped to between 0 and 1 (unless this is a MAGIC_FIRE particle, in which case this is the scale)
- * @param g Red component of particle colour; will be clamped to between 0 and 1
- * @param b Red component of particle colour; will be clamped to between 0 and 1
- */
- public void spawnParticle(WizardryParticleType type, World world, double x, double y, double z, double velX, double velY, double velZ, int maxAge, float r, float g, float b){
- this.spawnParticle(type, world, x, y, z, velX, velY, velZ, maxAge, r, g, b, false, 0);
- }
-
- /** Spawns a custom particle of the specified type. Colour defaults to white, doGravity defaults to false and radius
- * defaults to 0. Note that some of these settings may not affect the particle; some particles are always affected by
- * gravity, for instance.
- *
- * @param type EnumParticleType of the particle
- * @param world Reference to the World object
- * @param x Particle x position
- * @param y Particle y position
- * @param z Particle z position
- * @param velX Particle x velocity
- * @param velY Particle y velocity
- * @param velZ Particle z velocity
- * @param maxAge Lifetime of the particle in ticks
- */
- public void spawnParticle(WizardryParticleType type, World world, double x, double y, double z, double velX, double velY, double velZ, int maxAge){
- this.spawnParticle(type, world, x, y, z, velX, velY, velZ, maxAge, 1, 1, 1, false, 0);
- }
-
- public void spawnTornadoParticle(World world, double x, double y, double z, double velX, double velZ, double radius, int maxAge, IBlockState block, BlockPos pos){}
+
+ /**
+ * Spawns a custom particle of the specified type.
+ *
+ * @param type EnumParticleType of the particle
+ * @param world Reference to the World object
+ * @param x Particle x position
+ * @param y Particle y position
+ * @param z Particle z position
+ * @param velX Particle x velocity
+ * @param velY Particle y velocity
+ * @param velZ Particle z velocity
+ * @param maxAge Lifetime of the particle in ticks
+ * @param r Red component of particle colour; will be clamped to between 0 and 1
+ * @param g Red component of particle colour; will be clamped to between 0 and 1
+ * @param b Red component of particle colour; will be clamped to between 0 and 1
+ * @param doGravity Whether the particle is affected by gravity (only affects SPARKLE at the moment)
+ * @param radius The radius of the particle's motion, for cirular motion particles
+ */
+ public void spawnParticle(WizardryParticleType type, World world, double x, double y, double z, double velX,
+ double velY, double velZ, int maxAge, float r, float g, float b, boolean doGravity, double radius){
+ // Does nothing since particles are client-side only
+ }
+
+ /**
+ * Spawns a custom particle of the specified type. doGravity defaults to false and radius defaults to 0. Note that
+ * some of these settings may not affect the particle; some particles are always affected by gravity, for instance.
+ *
+ * @param type EnumParticleType of the particle
+ * @param world Reference to the World object
+ * @param x Particle x position
+ * @param y Particle y position
+ * @param z Particle z position
+ * @param velX Particle x velocity
+ * @param velY Particle y velocity
+ * @param velZ Particle z velocity
+ * @param maxAge Lifetime of the particle in ticks
+ * @param r Red component of particle colour; will be clamped to between 0 and 1 (unless this is a MAGIC_FIRE
+ * particle, in which case this is the scale)
+ * @param g Red component of particle colour; will be clamped to between 0 and 1
+ * @param b Red component of particle colour; will be clamped to between 0 and 1
+ */
+ public void spawnParticle(WizardryParticleType type, World world, double x, double y, double z, double velX,
+ double velY, double velZ, int maxAge, float r, float g, float b){
+ this.spawnParticle(type, world, x, y, z, velX, velY, velZ, maxAge, r, g, b, false, 0);
+ }
+
+ /**
+ * Spawns a custom particle of the specified type. Colour defaults to white, doGravity defaults to false and radius
+ * defaults to 0. Note that some of these settings may not affect the particle; some particles are always affected
+ * by gravity, for instance.
+ *
+ * @param type EnumParticleType of the particle
+ * @param world Reference to the World object
+ * @param x Particle x position
+ * @param y Particle y position
+ * @param z Particle z position
+ * @param velX Particle x velocity
+ * @param velY Particle y velocity
+ * @param velZ Particle z velocity
+ * @param maxAge Lifetime of the particle in ticks
+ */
+ public void spawnParticle(WizardryParticleType type, World world, double x, double y, double z, double velX,
+ double velY, double velZ, int maxAge){
+ this.spawnParticle(type, world, x, y, z, velX, velY, velZ, maxAge, 1, 1, 1, false, 0);
+ }
+
+ public void spawnTornadoParticle(World world, double x, double y, double z, double velX, double velZ, double radius,
+ int maxAge, IBlockState block, BlockPos pos){
+ }
// SECTION Items
// ===============================================================================================================
-
- public net.minecraft.client.gui.FontRenderer getFontRenderer(ItemStack stack) {
+
+ public net.minecraft.client.gui.FontRenderer getFontRenderer(ItemStack stack){
return null;
}
-
- /** Returns the translated name of the scroll, taking spell discovery into account. If, for some reason, this gets
+
+ /**
+ * Returns the translated name of the scroll, taking spell discovery into account. If, for some reason, this gets
* called server-side, it uses the deprecated server version of I18n, with a warning. Since any likely server-side
* use of this method will be for text-based logic purposes (like Bibliocraft's book checking system), and since no
- * particular player instance can be accessed, spell discovery is ignored. */
+ * particular player instance can be accessed, spell discovery is ignored.
+ */
public String getScrollDisplayName(ItemStack scroll){
-
+
// I have now learnt that the server side I18n always translates to the default en_US, so I could just return
// a hardcoded name in English instead.
Wizardry.logger.info("A mod has called ItemScroll#getItemStackDisplayName from the server side. Using the"
+ "deprecated server-side translation methods as a fallback.");
-
+
// Displays [Empty slot] if spell is continuous.
Spell spell = Spell.get(scroll.getItemDamage());
if(spell.isContinuous) spell = Spells.none;
-
- return I18n.translateToLocalFormatted("item.wizardry:wizardry:scroll.name", I18n.translateToLocal("spell." + spell.getUnlocalisedName())).trim();
+
+ return I18n.translateToLocalFormatted("item.wizardry:wizardry:scroll.name",
+ I18n.translateToLocal("spell." + spell.getUnlocalisedName())).trim();
}
public double getConjuredBowDurability(ItemStack stack){
@@ -144,33 +162,53 @@ public class CommonProxy {
// SECTION Packet Handlers
// ===============================================================================================================
-
- public void handlePlayerSyncPacket(PacketPlayerSync.Message message){}
- public void handleGlyphDataPacket(PacketGlyphData.Message message){}
- public void handleCastSpellPacket(PacketCastSpell.Message message){}
- public void handleCastContinuousSpellPacket(PacketCastContinuousSpell.Message message){}
- public void handleNPCCastSpellPacket(Message message){}
- public void handleTransportationPacket(PacketTransportation.Message message){}
- public void handleClairvoyancePacket(PacketClairvoyance.Message message){}
-
+
+ public void handlePlayerSyncPacket(PacketPlayerSync.Message message){
+ }
+
+ public void handleGlyphDataPacket(PacketGlyphData.Message message){
+ }
+
+ public void handleCastSpellPacket(PacketCastSpell.Message message){
+ }
+
+ public void handleCastContinuousSpellPacket(PacketCastContinuousSpell.Message message){
+ }
+
+ public void handleNPCCastSpellPacket(Message message){
+ }
+
+ public void handleTransportationPacket(PacketTransportation.Message message){
+ }
+
+ public void handleClairvoyancePacket(PacketClairvoyance.Message message){
+ }
+
// SECTION Misc
// ===============================================================================================================
- public void setToNumberSliderEntry(Property property){}
- //public void setToEntityNameEntry(Property property){}
-
- /** Plays a sound which moves with the given entity.
- *
- * @param entity The source of the sound
- * @param sound The SoundEvent to play
- * @param volume Volume relative to 1
- * @param pitch Pitch relative to 1
- * @param repeat Whether to repeat the sound for as long as the entity is alive (or until stopped manually)
- */
- public void playMovingSound(Entity entity, SoundEvent sound, float volume, float pitch, boolean repeat){}
-
- /** Gets the client side world using Minecraft.getMinecraft().theWorld. Only to be called client side!
- * Returns null on the server side. */
- public World getTheWorld(){ return null; }
+ public void setToNumberSliderEntry(Property property){
+ }
+ // public void setToEntityNameEntry(Property property){}
+
+ /**
+ * Plays a sound which moves with the given entity.
+ *
+ * @param entity The source of the sound
+ * @param sound The SoundEvent to play
+ * @param volume Volume relative to 1
+ * @param pitch Pitch relative to 1
+ * @param repeat Whether to repeat the sound for as long as the entity is alive (or until stopped manually)
+ */
+ public void playMovingSound(Entity entity, SoundEvent sound, float volume, float pitch, boolean repeat){
+ }
+
+ /**
+ * Gets the client side world using Minecraft.getMinecraft().world. Only to be called client side! Returns
+ * null on the server side.
+ */
+ public World getTheWorld(){
+ return null;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/electroblob/wizardry/Settings.java b/src/main/java/electroblob/wizardry/Settings.java
index 8d56dce6..dae93928 100644
--- a/src/main/java/electroblob/wizardry/Settings.java
+++ b/src/main/java/electroblob/wizardry/Settings.java
@@ -11,6 +11,7 @@ import electroblob.wizardry.util.MagicDamage;
import electroblob.wizardry.util.MagicDamage.DamageType;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.translation.I18n;
import net.minecraftforge.common.config.ConfigCategory;
import net.minecraftforge.common.config.Configuration;
@@ -18,7 +19,8 @@ import net.minecraftforge.common.config.Property;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
-/** Singleton class which deals with everything related to wizardry's config file. To access individual settings, use
+/**
+ * Singleton class which deals with everything related to wizardry's config file. To access individual settings, use
* {@link Wizardry#settings}. Also stores a few string constants for easy access.
*
* As part of the 1.2 update and code overhaul, the way the config settings work in multiplayer has been tightened up.
@@ -28,22 +30,25 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
* has an effect if the local game is the host, i.e. a dedicated server, a LAN host or a singleplayer world. Examples
* include worldgen, mob drops and commands.
*
Synchronised settings. These settings affect both client-side AND server-side code, and are synchronised with
- * each client on login via {@link Settings#sync(EntityPlayerMP)}. Changing these locally
- * only has an effect if the local game is the host, i.e. a dedicated server, a LAN host or a singleplayer world.
- * Examples include discovery mode and crafting recipes. Note that as far as users are concerned,
- * there is no difference in behaviour between server-only and synchronised settings.
- * Client-only settings. These settings only affect client-side code and hence are not synced. Each client obeys
- * its own values for these, and changing them on a dedicated server will have no effect. These are usually only display
- * and controls settings.
+ * each client on login via {@link Settings#sync(EntityPlayerMP)}. Changing these locally only has an effect if the
+ * local game is the host, i.e. a dedicated server, a LAN host or a singleplayer world. Examples include discovery mode
+ * and crafting recipes. Note that as far as users are concerned, there is no difference in behaviour between
+ * server-only and synchronised settings.
+ * Client-only settings. These settings only affect client-side code and hence are not synced. Each client obeys its
+ * own values for these, and changing them on a dedicated server will have no effect. These are usually only display and
+ * controls settings.
*
- * Each of the settings fields in this class is marked with one of the above categories to indicate which it belongs
- * to. This in turn dictates which logical side it should be called from: client, server or both. Do not access a
- * config setting from the wrong side, because it may cause unexpected or strange behaviour.
+ * Each of the settings fields in this class is marked with one of the above categories to indicate which it belongs to.
+ * This in turn dictates which logical side it should be called from: client, server or both. Do not access a config
+ * setting from the wrong side, because it may cause unexpected or strange behaviour.
+ *
* @since Wizardry 1.2
- * @author Electroblob */
-// NOTE: We could convert over to the @Config system IF it is sufficiently complete in this Forge version for my purposes.
+ * @author Electroblob
+ */
+// NOTE: We could convert over to the @Config system IF it is sufficiently complete in this Forge version for my
+// purposes.
// (For one, I know that the LangKey annotation is not applicable to type declarations in 1.10.2, unlike in 1.11.2)
-//@Config(modid = Wizardry.MODID)
+// @Config(modid = Wizardry.MODID)
@SuppressWarnings("deprecation") // Used server I18n deliberately; we want to write the comments in english.
public final class Settings {
@@ -66,7 +71,7 @@ public final class Settings {
// Server-only settings. These only affect server-side code and hence are not synced. Changing these locally only
// has an effect if the local game is the host, i.e. a dedicated server, a LAN host or a singleplayer world.
-
+
// Worldgen
/** [Server-only] The rarity of wizard towers, used by the world generator. Larger numbers are rarer. */
public int towerRarity = 8;
@@ -76,33 +81,46 @@ public final class Settings {
public int[] flowerDimensions = {0};
/** [Server-only] List of dimension ids in which to generate crystal ore. */
public int[] towerDimensions = {0};
- /** [Server-only] Whether or not wizardry loot should generate in dungeon chests. Note that this does not
- * affect the generation of loot in wizard towers. */
+ /**
+ * [Server-only] Whether or not wizardry loot should generate in dungeon chests. Note that this does not
+ * affect the generation of loot in wizard towers.
+ */
public boolean generateLoot = true;
-
+
// Entities' drops, targeting, damage, etc.
/** [Server-only] Chance (out of 200) for mobs to drop spell books. */
public int spellBookDropChance = 3;
- /** [Server-only] Whether or not players can teleport through unbreakable blocks (e.g. bedrock) using the phase step spell. */
+ /**
+ * [Server-only] Whether or not players can teleport through unbreakable blocks (e.g. bedrock) using the
+ * phase step spell.
+ */
public boolean teleportThroughUnbreakableBlocks = false;
/** [Server-only] Whether to allow players to damage their designated allies using magic. */
public boolean friendlyFire = true;
/** [Server-only] Whether to allow players to disarm other players using the telekinesis spell. */
public boolean telekineticDisarmament = true;
- /** [Server-only] Whether summoned creatures can revenge attack their caster if their caster attacks them. */
+ /** [Server-only] Whether summoned creatures can revenge attack their caster if their caster attacks them. */
public boolean minionRevengeTargeting = true;
- /** [Server-only] List of names of entities which summoned creatures are allowed to attack, in addition to the defaults. */
+ /**
+ * [Server-only] List of names of entities which summoned creatures are allowed to attack, in addition to the
+ * defaults.
+ */
public String[] summonedCreatureTargetsWhitelist = {};
- /** [Server-only] List of names of entities which summoned creatures are specifically not allowed to attack, overriding the defaults and the whitelist. */
+ /**
+ * [Server-only] List of names of entities which summoned creatures are specifically not allowed to attack,
+ * overriding the defaults and the whitelist.
+ */
public String[] summonedCreatureTargetsBlacklist = {"creeper"};
/** [Server-only] Global damage scaling factor for all player magic damage. */
public double playerDamageScale = 1.0f;
/** [Server-only] Global damage scaling factor for all npc magic damage. */
public double npcDamageScale = 1.0f;
-
+
// Commands (these don't need synchronising since typing a command always queries the server).
- /** [Server-only] The maximum allowed multiplier for the /cast command. This limit is here to stop people from accidentally
- * breaking their worlds! */
+ /**
+ * [Server-only] The maximum allowed multiplier for the /cast command. This limit is here to stop people from
+ * accidentally breaking their worlds!
+ */
public double maxSpellCommandMultiplier = 20d;
/** [Server-only] The name of the /cast command. */
public String castCommandName = "cast";
@@ -112,10 +130,10 @@ public final class Settings {
public String allyCommandName = "ally";
/** [Server-only] The name of the /allies command. */
public String alliesCommandName = "allies";
-
+
// Synchronised settings. These settings affect both client-side AND server-side code. Changing these locally
// only has an effect if the local game is the host, i.e. a dedicated server, a LAN host or a singleplayer world.
-
+
// Recipes (only need syncing for display in the wizard's handbook)
/** [Synchronised] Whether or not firebombs should be craftable. */
public boolean firebombIsCraftable = true;
@@ -123,20 +141,28 @@ public final class Settings {
public boolean poisonBombIsCraftable = true;
/** [Synchronised] Whether or not poison bombs should be craftable. */
public boolean smokeBombIsCraftable = true;
- /** [Synchronised] Whether to require a magic crystal in the blank scroll crafting recipe (in case it conflicts with another mod). */
+ /**
+ * [Synchronised] Whether to require a magic crystal in the blank scroll crafting recipe (in case it
+ * conflicts with another mod).
+ */
public boolean useAlternateScrollRecipe = false;
-
+
// Gamemodes
- /** [Synchronised] When set to true, spells a player hasn't cast yet will be unreadable until they are cast (on a per-world basis). Has no effect when in creative mode. Spells of
- * identification will be unobtainable in survival mode if this is false. */
+ /**
+ * [Synchronised] When set to true, spells a player hasn't cast yet will be unreadable until they are cast
+ * (on a per-world basis). Has no effect when in creative mode. Spells of identification will be unobtainable in
+ * survival mode if this is false.
+ */
public boolean discoveryMode = true;
-
+
// Client-only settings. These settings only affect client-side code and hence are not synced. Each client obeys
// its own values for these, and changing them on a dedicated server will have no effect.
-
+
// Controls
- /** [Client-only] Whether the player can switch between spells on a wand by scrolling with the mouse wheel while
- * sneaking. */
+ /**
+ * [Client-only] Whether the player can switch between spells on a wand by scrolling with the mouse wheel
+ * while sneaking.
+ */
public boolean enableShiftScrolling = true;
// Display
@@ -144,103 +170,108 @@ public final class Settings {
public boolean showSummonedCreatureNames = true;
/** [Client-only] The position of the spell HUD. */
public GuiPosition spellHUDPosition = GuiPosition.BOTTOM_LEFT;
-
+
/** Set of constants for each of the four positions that the spell HUD can be in. */
public enum GuiPosition {
-
- BOTTOM_LEFT("Bottom left"),
- TOP_LEFT("Top left"),
- TOP_RIGHT("Top right"),
- BOTTOM_RIGHT("Bottom right");
-
+
+ BOTTOM_LEFT("Bottom left"), TOP_LEFT("Top left"), TOP_RIGHT("Top right"), BOTTOM_RIGHT("Bottom right");
+
/** Constant array storing the names of each of the constants, in the order they are declared. */
public static final String[] names;
-
- static {
+
+ static{
names = new String[values().length];
for(GuiPosition position : values()){
names[position.ordinal()] = position.name;
}
}
-
+
/** The readable name for this GUI position that will be displayed on the button in the config GUI. */
public final String name;
-
+
GuiPosition(String name){
this.name = name;
}
-
- /** Gets a GUI position from its string name (ignoring case), or BOTTOM_LEFT if the given name is not a valid position. */
+
+ /**
+ * Gets a GUI position from its string name (ignoring case), or BOTTOM_LEFT if the given name is not a valid
+ * position.
+ */
public static GuiPosition fromName(String name){
-
+
for(GuiPosition position : values()){
if(position.name.equalsIgnoreCase(name)) return position;
}
-
+
Wizardry.logger.info("Invalid string for the spell HUD position. Using default (bottom left) instead.");
return BOTTOM_LEFT;
}
-
+
}
// As of Wizardry 1.1, all keys used in the config file itself are now hardcoded, not localised. The localisations
// are done in the config GUI. The config file has to be written in one language or it will end up with multiple
// options for different languages.
-
+
// These methods are package-protected to stop anyone else from calling them.
-
- /** Called from preInit to initialise the config file. The first part of the config file has to be done here (as is
+
+ /**
+ * Called from preInit to initialise the config file. The first part of the config file has to be done here (as is
* conventional) so that the various registries can change what they do accordingly. The spell part of the config
- * has to be done in the init method.*/
+ * has to be done in the init method.
+ */
void initConfig(FMLPreInitializationEvent event){
-
+
config = new Configuration(event.getSuggestedConfigurationFile());
config.load();
-
+
Wizardry.logger.info("Setting up main config");
-
+
setupGeneralConfig();
-
+
config.save();
}
-
- /** Called from init to initialise the parts of the config file that depend on other mods. For example, the spell
- * config is done here and not in preInit because all spells must be registered before it is added, including
- * those in other mods. */
+
+ /**
+ * Called from init to initialise the parts of the config file that depend on other mods. For example, the spell
+ * config is done here and not in preInit because all spells must be registered before it is added, including those
+ * in other mods.
+ */
void initConfigExtras(){
-
+
Wizardry.logger.info("Setting up spells config for " + Spell.getTotalSpellCount() + " spells");
-
+
setupSpellsConfig();
config.save();
}
-
+
/** Called to save changes to the config file after it has been edited in game from the menus. */
void saveConfigChanges(){
Wizardry.logger.info("Saving in-game config changes");
-
+
setupGeneralConfig();
setupSpellsConfig();
config.save();
}
-
+
/** Sends a packet to the specified player's client containing all the synchronised settings. */
public void sync(EntityPlayerMP player){
Wizardry.logger.info("Synchronising config settings for " + player.getName());
IMessage message = new PacketSyncSettings.Message(this);
WizardryPacketHandler.net.sendTo(message, player);
}
-
+
public ConfigCategory getConfigCategory(String name){
return config.getCategory(name);
}
private void setupSpellsConfig(){
- config.addCustomCategoryComment(SPELLS_CATEGORY, "Set a spell to false to disable it. Disabled spells will still have their associated spell book (mainly so the spell books don't all change) and can still be bound to wands, but cannot be cast in game, will not appear in any subsequently generated chests or wizard trades and will not drop from mobs. Disable a spell if it is causing problems, conflicts with another mod or creates an unintended exploit.");
+ config.addCustomCategoryComment(SPELLS_CATEGORY,
+ "Set a spell to false to disable it. Disabled spells will still have their associated spell book (mainly so the spell books don't all change) and can still be bound to wands, but cannot be cast in game, will not appear in any subsequently generated chests or wizard trades and will not drop from mobs. Disable a spell if it is causing problems, conflicts with another mod or creates an unintended exploit.");
Property property;
@@ -261,172 +292,206 @@ public final class Settings {
Property property;
- config.addCustomCategoryComment(Configuration.CATEGORY_GENERAL, "Please note that changing some of these settings may make the mod very difficult to play.");
+ config.addCustomCategoryComment(Configuration.CATEGORY_GENERAL,
+ "Please note that changing some of these settings may make the mod very difficult to play.");
- property = config.get(Configuration.CATEGORY_GENERAL, "towerRarity", 8, "Rarity of wizard towers. Higher numbers are rarer. Set to 0 to disable wizard towers completely.", 0, 50);
+ property = config.get(Configuration.CATEGORY_GENERAL, "towerRarity", 8,
+ "Rarity of wizard towers. Higher numbers are rarer. Set to 0 to disable wizard towers completely.", 0,
+ 50);
property.setLanguageKey("config.wizardry.tower_rarity");
property.setRequiresWorldRestart(true);
Wizardry.proxy.setToNumberSliderEntry(property);
towerRarity = property.getInt();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "spellBookDropChance", 3, "The chance for mobs to drop a spell book when killed. The greater this number, the more often they will drop. Set to 0 to disable spell book drops. Set to 200 for guaranteed drops.", 0, 200);
+ property = config.get(Configuration.CATEGORY_GENERAL, "spellBookDropChance", 3,
+ "The chance for mobs to drop a spell book when killed. The greater this number, the more often they will drop. Set to 0 to disable spell book drops. Set to 200 for guaranteed drops.",
+ 0, 200);
property.setLanguageKey("config.wizardry.spell_book_drop_chance");
Wizardry.proxy.setToNumberSliderEntry(property);
spellBookDropChance = property.getInt();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "oreDimensions", new int[]{0}, "List of dimension ids in which crystal ore will generate. Note that removing the overworld (id 0) from this list will make the mod VERY difficult to play!");
+ property = config.get(Configuration.CATEGORY_GENERAL, "oreDimensions", new int[]{0},
+ "List of dimension ids in which crystal ore will generate. Note that removing the overworld (id 0) from this list will make the mod VERY difficult to play!");
property.setLanguageKey("config.wizardry.ore_dimensions");
property.setRequiresWorldRestart(true);
oreDimensions = property.getIntList();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "flowerDimensions", new int[]{0}, "List of dimension ids in which crystal flowers will generate.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "flowerDimensions", new int[]{0},
+ "List of dimension ids in which crystal flowers will generate.");
property.setLanguageKey("config.wizardry.flower_dimensions");
property.setRequiresWorldRestart(true);
flowerDimensions = property.getIntList();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "towerDimensions", new int[]{0}, "List of dimension ids in which wizard towers will generate.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "towerDimensions", new int[]{0},
+ "List of dimension ids in which wizard towers will generate.");
property.setLanguageKey("config.wizardry.tower_dimensions");
property.setRequiresWorldRestart(true);
towerDimensions = property.getIntList();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "generateLoot", true, "Whether to generate wizardry loot in dungeon chests.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "generateLoot", true,
+ "Whether to generate wizardry loot in dungeon chests.");
property.setLanguageKey("config.wizardry.generate_loot");
property.setRequiresWorldRestart(true);
generateLoot = property.getBoolean();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "firebombIsCraftable", true, "Whether firebombs can be crafted or not.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "firebombIsCraftable", true,
+ "Whether firebombs can be crafted or not.");
property.setLanguageKey("config.wizardry.firebomb_is_craftable");
property.setRequiresMcRestart(true);
firebombIsCraftable = property.getBoolean();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "poisonBombIsCraftable", true, "Whether poison bombs can be crafted or not.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "poisonBombIsCraftable", true,
+ "Whether poison bombs can be crafted or not.");
property.setLanguageKey("config.wizardry.poison_bomb_is_craftable");
property.setRequiresMcRestart(true);
poisonBombIsCraftable = property.getBoolean();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "smokeBombIsCraftable", true, "Whether smoke bombs can be crafted or not.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "smokeBombIsCraftable", true,
+ "Whether smoke bombs can be crafted or not.");
property.setLanguageKey("config.wizardry.smoke_bomb_is_craftable");
property.setRequiresMcRestart(true);
smokeBombIsCraftable = property.getBoolean();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "useAlternateScrollRecipe", false, "Whether to require a magic crystal in the shapeless crafting recipe for blank scrolls. Set to true if another mod adds a conflicting recipe.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "useAlternateScrollRecipe", false,
+ "Whether to require a magic crystal in the shapeless crafting recipe for blank scrolls. Set to true if another mod adds a conflicting recipe.");
property.setLanguageKey("config.wizardry.use_alternate_scroll_recipe");
property.setRequiresMcRestart(true);
useAlternateScrollRecipe = property.getBoolean();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "teleportThroughUnbreakableBlocks", false, "Whether players are allowed to teleport through unbreakable blocks (e.g. bedrock) using the phase step spell.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "teleportThroughUnbreakableBlocks", false,
+ "Whether players are allowed to teleport through unbreakable blocks (e.g. bedrock) using the phase step spell.");
property.setLanguageKey("config.wizardry.teleport_through_unbreakable_blocks");
teleportThroughUnbreakableBlocks = property.getBoolean();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "showSummonedCreatureNames", true, "Whether to show summoned creatures' names and owners above their heads.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "showSummonedCreatureNames", true,
+ "Whether to show summoned creatures' names and owners above their heads.");
property.setLanguageKey("config.wizardry.show_summoned_creature_names");
showSummonedCreatureNames = property.getBoolean();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "friendlyFire", true, "Whether to allow players to damage their designated allies using magic.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "friendlyFire", true,
+ "Whether to allow players to damage their designated allies using magic.");
property.setLanguageKey("config.wizardry.friendly_fire");
friendlyFire = property.getBoolean();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "telekineticDisarmament", true, "Whether to allow players to disarm other players using the telekinesis spell. Set to false to prevent stealing of items.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "telekineticDisarmament", true,
+ "Whether to allow players to disarm other players using the telekinesis spell. Set to false to prevent stealing of items.");
property.setLanguageKey("config.wizardry.telekinetic_disarmament");
telekineticDisarmament = property.getBoolean();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "discoveryMode", true, "For those who like a sense of mystery! When set to true, spells you haven't cast yet will be unreadable until you cast them (on a per-world basis). Has no effect when in creative mode. Spells of identification will be unobtainable in survival mode if this is false.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "discoveryMode", true,
+ "For those who like a sense of mystery! When set to true, spells you haven't cast yet will be unreadable until you cast them (on a per-world basis). Has no effect when in creative mode. Spells of identification will be unobtainable in survival mode if this is false.");
property.setLanguageKey("config.wizardry.discovery_mode");
property.setRequiresWorldRestart(true);
discoveryMode = property.getBoolean();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "enableShiftScrolling", true, "Whether you can switch between spells on a wand by scrolling with the mouse wheel while sneaking. Note that this will only affect you; other players connected to the same server obey their own settings.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "enableShiftScrolling", true,
+ "Whether you can switch between spells on a wand by scrolling with the mouse wheel while sneaking. Note that this will only affect you; other players connected to the same server obey their own settings.");
property.setLanguageKey("config.wizardry.enable_shift_scrolling");
property.setRequiresWorldRestart(false);
enableShiftScrolling = property.getBoolean();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "minionRevengeTargeting", true, "Whether summoned creatures can revenge attack their owner if their owner attacks them.");
+ property = config.get(Configuration.CATEGORY_GENERAL, "minionRevengeTargeting", true,
+ "Whether summoned creatures can revenge attack their owner if their owner attacks them.");
property.setLanguageKey("config.wizardry.minion_revenge_targeting");
property.setRequiresWorldRestart(false);
minionRevengeTargeting = property.getBoolean();
propOrder.add(property.getName());
// These two aren't sliders because using a slider makes it difficult to fine-tune the numbers; the nature of a
- // scaling factor means that 0.5 is as big a change as 2.0, so whilst a slider is fine for increasing the damage,
+ // scaling factor means that 0.5 is as big a change as 2.0, so whilst a slider is fine for increasing the
+ // damage,
// it doesn't give fine enough control for values less than 1.
- property = config.get(Configuration.CATEGORY_GENERAL, "playerDamageScaling", 1.0, "Global damage scaling factor for the damage dealt by players casting spells, relative to 1.", 0, 20);
+ property = config.get(Configuration.CATEGORY_GENERAL, "playerDamageScaling", 1.0,
+ "Global damage scaling factor for the damage dealt by players casting spells, relative to 1.", 0, 20);
property.setLanguageKey("config.wizardry.player_damage_scaling");
playerDamageScale = property.getDouble();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "npcDamageScaling", 1.0, "Global damage scaling factor for the damage dealt by NPCs casting spells, relative to 1.", 0, 20);
+ property = config.get(Configuration.CATEGORY_GENERAL, "npcDamageScaling", 1.0,
+ "Global damage scaling factor for the damage dealt by NPCs casting spells, relative to 1.", 0, 20);
property.setLanguageKey("config.wizardry.npc_damage_scaling");
npcDamageScale = property.getDouble();
propOrder.add(property.getName());
- // This one isn't a slider either because people are likely to want exact values ("it must be at most 50.3" is a bit strange!).
- property = config.get(Configuration.CATEGORY_GENERAL, "castCommandMultiplierLimit", 20.0, "Upper limit for the multipliers passed into the /cast command. This is here to stop players from accidentally breaking a world/server. Large blast mutipliers can cause extreme lag - you have been warned!", 1, 255);
+ // This one isn't a slider either because people are likely to want exact values ("it must be at most 50.3" is a
+ // bit strange!).
+ property = config.get(Configuration.CATEGORY_GENERAL, "castCommandMultiplierLimit", 20.0,
+ "Upper limit for the multipliers passed into the /cast command. This is here to stop players from accidentally breaking a world/server. Large blast mutipliers can cause extreme lag - you have been warned!",
+ 1, 255);
property.setLanguageKey("config.wizardry.cast_command_multiplier_limit");
maxSpellCommandMultiplier = property.getDouble();
propOrder.add(property.getName());
- property = config.get(Configuration.CATEGORY_GENERAL, "summonedCreatureTargetsWhitelist", new String[0], "List of names of entities which summoned creatures and wizards are allowed to attack, in addition to the defaults. Add mod creatures to this list if you want summoned creatures to attack them and they aren't already doing so. Entity names are not case sensitive. For mod entities, prefix with the mod ID (e.g. wizardry:Wizard).");
+ property = config.get(Configuration.CATEGORY_GENERAL, "summonedCreatureTargetsWhitelist", new String[0],
+ "List of names of entities which summoned creatures and wizards are allowed to attack, in addition to the defaults. Add mod creatures to this list if you want summoned creatures to attack them and they aren't already doing so. Entity names are not case sensitive. For mod entities, prefix with the mod ID (e.g. wizardry:Wizard).");
property.setLanguageKey("config.wizardry.summoned_creature_targets_whitelist");
property.setRequiresWorldRestart(true);
- //Wizardry.proxy.setToEntityNameEntry(property);
+ // Wizardry.proxy.setToEntityNameEntry(property);
summonedCreatureTargetsWhitelist = property.getStringList();
// Converts all strings in the list to lower case, to ignore case sensitivity, and trims them.
- for(int i=0; i propOrder1 = new ArrayList();
- config.addCustomCategoryComment(RESISTANCES_CATEGORY, "Settings which allow entities to be made immune to certain types of magic. In multiplayer, the server/LAN host settings will apply.");
+ config.addCustomCategoryComment(RESISTANCES_CATEGORY,
+ "Settings which allow entities to be made immune to certain types of magic. In multiplayer, the server/LAN host settings will apply.");
- property = config.get(RESISTANCES_CATEGORY, "mobsImmuneToFire", new String[]{}, "List of names of entities that are immune to fire, in addition to the defaults. Add mod creatures to this list if you want them to be immune to fire magic and they aren't already. Entity names are not case sensitive. For mod entities, prefix with the mod ID (e.g. wizardry:Wizard).");
+ property = config.get(RESISTANCES_CATEGORY, "mobsImmuneToFire", new String[]{},
+ "List of names of entities that are immune to fire, in addition to the defaults. Add mod creatures to this list if you want them to be immune to fire magic and they aren't already. Entity names are not case sensitive. For mod entities, prefix with the mod ID (e.g. wizardry:Wizard).");
property.setLanguageKey("config.wizardry.mobs_immune_to_fire");
property.setRequiresMcRestart(true);
- //Wizardry.proxy.setToEntityNameEntry(property);
+ // Wizardry.proxy.setToEntityNameEntry(property);
// Converts all strings in the list to lower case, to ignore case sensitivity, and trims them.
- for(int i=0; i randomNames = new HashMap(Spell.getTotalSpellCount());
public Map randomDescriptions = new HashMap(Spell.getTotalSpellCount());
// Required constructors
- public SpellGlyphData() {
+ public SpellGlyphData(){
this(NAME);
}
public SpellGlyphData(String name){
super(name);
}
-
+
/** Generates random names and descriptions for any spells which don't already have them. */
public void generateGlyphNames(World world){
for(Spell spell : Spell.getSpells(Spell.allSpells)){
if(!randomNames.containsKey(spell)) randomNames.put(spell, generateRandomName(world.rand));
}
-
+
for(Spell spell : Spell.getSpells(Spell.allSpells)){
- if(!randomDescriptions.containsKey(spell)) randomDescriptions.put(spell, generateRandomDescription(world.rand));
+ if(!randomDescriptions.containsKey(spell))
+ randomDescriptions.put(spell, generateRandomDescription(world.rand));
}
-
+
this.markDirty();
}
-
+
private String generateRandomName(Random random){
-
+
String name = "";
-
- for(int i=0; i names = new ArrayList();
List descriptions = new ArrayList();
-
+
for(Spell spell : Spell.getSpells(Spell.allSpells)){
names.add(this.randomNames.get(spell));
descriptions.add(this.randomDescriptions.get(spell));
}
-
+
PacketGlyphData.Message msg = new PacketGlyphData.Message(names, descriptions);
-
+
WizardryPacketHandler.net.sendTo(msg, player);
Wizardry.logger.info("Synchronising spell glyph data for " + player.getName());
-
+
}
-
+
/** Helper method to retrieve the random glyph name for the given spell from the map stored in the given world. */
public static String getGlyphName(Spell spell, World world){
Map names = SpellGlyphData.get(world).randomNames;
return names == null ? "" : names.get(spell);
}
-
- /** Helper method to retrieve the random glyph description for the given spell from the map stored in the given world. */
+
+ /**
+ * Helper method to retrieve the random glyph description for the given spell from the map stored in the given
+ * world.
+ */
public static String getGlyphDescription(Spell spell, World world){
Map descriptions = SpellGlyphData.get(world).randomDescriptions;
return descriptions == null ? "" : descriptions.get(spell);
@@ -132,13 +143,13 @@ public class SpellGlyphData extends WorldSavedData {
@Override
public void readFromNBT(NBTTagCompound nbt){
-
+
this.randomNames = new HashMap();
this.randomDescriptions = new HashMap();
-
+
NBTTagList tagList = nbt.getTagList("spellGlyphData", NBT.TAG_COMPOUND);
-
- for(int i=0; i
- * Forge seems to have separate classes to hold the Capability<...> instance ('key') and
- * methods for getting the capability, but in my opinion there are already too many classes to deal with, so I'm not
- * adding any more than are necessary, meaning those constants and values are kept here instead.
+ * Forge seems to have separate classes to hold the Capability<...> instance ('key') and methods for getting the
+ * capability, but in my opinion there are already too many classes to deal with, so I'm not adding any more than are
+ * necessary, meaning those constants and values are kept here instead.
+ *
* @since Wizardry 1.2
- * @author Electroblob */
+ * @author Electroblob
+ */
// On the plus side, having to rethink this class allowed me to clean it up a lot.
@Mod.EventBusSubscriber
public class WizardData implements INBTSerializable {
@@ -85,14 +88,20 @@ public class WizardData implements INBTSerializable {
public boolean hasSpiritWolf;
public boolean hasSpiritHorse;
- /** Whether this player is currently casting a continuous spell via commands. Not saved over world reload
- * and reset on player death. */
+ /**
+ * Whether this player is currently casting a continuous spell via commands. Not saved over world reload and reset
+ * on player death.
+ */
private Spell currentlyCasting;
- /** The time for which this player has been casting a continuous spell via commands. Increments by 1 each tick.
- * Not saved over world reload and reset on player death. */
+ /**
+ * The time for which this player has been casting a continuous spell via commands. Increments by 1 each tick. Not
+ * saved over world reload and reset on player death.
+ */
private int castingTick;
- /** SpellModifiers object for the current continuous spell cast via commands. Not saved over world reload and
- * reset on player death. */
+ /**
+ * SpellModifiers object for the current continuous spell cast via commands. Not saved over world reload and reset
+ * on player death.
+ */
private SpellModifiers spellModifiers;
/** Coordinates for the saved transportation stone circle location. Will be null if no location is saved. */
private BlockPos stoneCircleLocation;
@@ -110,14 +119,18 @@ public class WizardData implements INBTSerializable {
public WeakReference selectedMinion;
- /** Set of this player's discovered spells. Do not write to this list directly , use
- * {@link WizardData#discoverSpell(Spell)} instead. */
+ /**
+ * Set of this player's discovered spells. Do not write to this list directly , use
+ * {@link WizardData#discoverSpell(Spell)} instead.
+ */
public Set spellsDiscovered;
private Set allies;
- /** List of usernames of this player's allies. May not be accurate 100% of the time. This is here so that a player
- * can view the usernames of their allies even when those allies are not online.
- * Do not use this for any other purpose than displaying the names! */
+ /**
+ * List of usernames of this player's allies. May not be accurate 100% of the time. This is here so that a player
+ * can view the usernames of their allies even when those allies are not online. Do not use this for any other
+ * purpose than displaying the names!
+ */
public Set allyNames;
private Set soulboundCreatures;
@@ -147,9 +160,10 @@ public class WizardData implements INBTSerializable {
}
/**
- * Adds the given spell to the list of discovered spells for this player. Automatically takes into account
- * whether the spell has been discovered. Use this method rather than adding directly to the list because it
- * handles achievements.
+ * Adds the given spell to the list of discovered spells for this player. Automatically takes into account whether
+ * the spell has been discovered. Use this method rather than adding directly to the list because it handles
+ * achievements.
+ *
* @param spell The spell to be discovered
* @return True if the spell had not already been discovered; false otherwise.
*/
@@ -168,7 +182,8 @@ public class WizardData implements INBTSerializable {
}
for(Element element : Element.values()){
- if(element != Element.MAGIC && spellsDiscovered.containsAll(Spell.getSpells(new Spell.TierElementFilter(null, element)))){
+ if(element != Element.MAGIC
+ && spellsDiscovered.containsAll(Spell.getSpells(new Spell.TierElementFilter(null, element)))){
this.player.addStat(WizardryAchievements.element_master);
}
}
@@ -183,13 +198,22 @@ public class WizardData implements INBTSerializable {
}
/** Returns the coordinates of the associated player's saved transportation stone circle. */
- public BlockPos getStoneCircleLocation(){ return stoneCircleLocation; }
+ public BlockPos getStoneCircleLocation(){
+ return stoneCircleLocation;
+ }
+
/** Returns the dimension ID of the associated player's saved transportation stone circle. */
- public int getStoneCircleDimension(){ return stoneCircleDimension; }
+ public int getStoneCircleDimension(){
+ return stoneCircleDimension;
+ }
- public int getTpCountdown() { return tpCountdown; }
+ public int getTpCountdown(){
+ return tpCountdown;
+ }
- public void setTpCountdown(int tpCountdown) { this.tpCountdown = tpCountdown; }
+ public void setTpCountdown(int tpCountdown){
+ this.tpCountdown = tpCountdown;
+ }
/** Sets the player's saved clairvoyance location. */
public void setClairvoyancePoint(BlockPos pos, int dimensionID){
@@ -198,46 +222,60 @@ public class WizardData implements INBTSerializable {
}
/** Returns the coordinates for the saved clairvoyance location. Will be null if no location is saved. */
- public BlockPos getClairvoyanceLocation(){ return clairvoyanceLocation; }
+ public BlockPos getClairvoyanceLocation(){
+ return clairvoyanceLocation;
+ }
/** Returns the dimension ID for the saved clairvoyance location. Will be null if no location is saved. */
- public int getClairvoyanceDimension(){ return clairvoyanceDimension; }
+ public int getClairvoyanceDimension(){
+ return clairvoyanceDimension;
+ }
- /** Overwrites the imbuement duration associated with the given imubement for this player, or creates it if there
- * was none previously.
- * @throws IllegalArgumentException if the given {@link Enchantment} is not an {@link Imbuement}. */
+ /**
+ * Overwrites the imbuement duration associated with the given imubement for this player, or creates it if there was
+ * none previously.
+ *
+ * @throws IllegalArgumentException if the given {@link Enchantment} is not an {@link Imbuement}.
+ */
public void setImbuementDuration(Enchantment enchantment, int duration){
- // It is best to throw an exception here, because otherwise the error would either go unnoticed (if non-imbuements
+ // It is best to throw an exception here, because otherwise the error would either go unnoticed (if
+ // non-imbuements
// were ignored) or cause a ClassCastException later (if non-imbuements were allowed to be added).
if(enchantment instanceof Imbuement){
- this.imbuementDurations.put((Imbuement) enchantment, duration);
+ this.imbuementDurations.put((Imbuement)enchantment, duration);
}else{
- throw new IllegalArgumentException("Attempted to set an imbuement duration for something that isn't an Imbuement! (This exception has been thrown now to prevent a ClassCastException from occurring later.)");
+ throw new IllegalArgumentException(
+ "Attempted to set an imbuement duration for something that isn't an Imbuement! (This exception has been thrown now to prevent a ClassCastException from occurring later.)");
}
}
- /** Returns the imbuement duration associated with the given imbuement for this player, or 0 if it does not exist. */
+ /**
+ * Returns the imbuement duration associated with the given imbuement for this player, or 0 if it does not exist.
+ */
@SuppressWarnings("unlikely-arg-type")
public int getImbuementDuration(Enchantment enchantment){
// Need to check that i is not null, otherwise it throws an NPE when Java auto-unboxes it.
- // What's nice here is that the map simply accepts objects as keys, so there's no need to cast or throw exceptions.
+ // What's nice here is that the map simply accepts objects as keys, so there's no need to cast or throw
+ // exceptions.
Integer i = this.imbuementDurations.get(enchantment);
// If i is null, returns 0; otherwise returns i, auto-unboxed to an int.
return i == null ? 0 : i;
}
- /** Decrements the duration for each conjured item by 1, and removes from the map any that are 0 or less or that
- * the player no longer has. Also deletes the item from the player's inventory if it runs out of time. */
+ /**
+ * Decrements the duration for each conjured item by 1, and removes from the map any that are 0 or less or that the
+ * player no longer has. Also deletes the item from the player's inventory if it runs out of time.
+ */
private void updateImbuedItems(){
-
+
Set activeImbuements = new HashSet();
// For each item in the player's inventory
for(ItemStack stack : player.inventory.mainInventory){
- if(stack != null && stack.isItemEnchanted()){
-
+ if(stack.isItemEnchanted()){
+
Map enchantments = EnchantmentHelper.getEnchantments(stack);
-
+
Iterator> iterator = enchantments.entrySet().iterator();
// For each of the item's enchantments
while(iterator.hasNext()){
@@ -248,10 +286,10 @@ public class WizardData implements INBTSerializable {
// If the imbuement is still active:
if(duration > 0){
// Decrements the timer
- this.imbuementDurations.put((Imbuement)enchantment, duration-1);
+ this.imbuementDurations.put((Imbuement)enchantment, duration - 1);
// Adds this imbuement to the set of imbuements that need to be kept
activeImbuements.add((Imbuement)enchantment);
- // Otherwise:
+ // Otherwise:
}else{
// Removes the enchantment from the enchantment map
iterator.remove();
@@ -266,8 +304,10 @@ public class WizardData implements INBTSerializable {
this.imbuementDurations.keySet().retainAll(activeImbuements);
}
- /** Adds the given player to the list of allies belonging to the associated player, or removes the player if
- * they are already in the list of allies. Returns true if the player was added, false if they were removed. */
+ /**
+ * Adds the given player to the list of allies belonging to the associated player, or removes the player if they are
+ * already in the list of allies. Returns true if the player was added, false if they were removed.
+ */
public boolean toggleAlly(EntityPlayer player){
if(this.isPlayerAlly(player)){
this.allies.remove(player.getUniqueID());
@@ -296,21 +336,24 @@ public class WizardData implements INBTSerializable {
return this.soulboundCreatures.contains(target.getUniqueID());
}
- /** Damages all creatures soulbound to this player by the given amount, and removes from the list any that no
- * longer exist. */
+ /**
+ * Damages all creatures soulbound to this player by the given amount, and removes from the list any that no longer
+ * exist.
+ */
public void damageAllSoulboundCreatures(float damage){
for(Iterator iterator = this.soulboundCreatures.iterator(); iterator.hasNext();){
- Entity entity = WizardryUtilities.getEntityByUUID(this.player.worldObj, iterator.next());
+ Entity entity = WizardryUtilities.getEntityByUUID(this.player.world, iterator.next());
if(entity == null) iterator.remove();
if(entity instanceof EntityLivingBase){
// Retaliatory effect
- if(entity.attackEntityFrom(MagicDamage.causeDirectMagicDamage(this.player, DamageType.MAGIC, true), damage)){
+ if(entity.attackEntityFrom(MagicDamage.causeDirectMagicDamage(this.player, DamageType.MAGIC, true),
+ damage)){
// Sound only plays if the damage succeeds
- player.playSound(SoundEvents.ENTITY_WITHER_HURT, 1.0F, player.worldObj.rand.nextFloat() * 0.2F + 1.0F);
+ player.playSound(SoundEvents.ENTITY_WITHER_HURT, 1.0F, player.world.rand.nextFloat() * 0.2F + 1.0F);
}
}
}
@@ -322,10 +365,10 @@ public class WizardData implements INBTSerializable {
this.currentlyCasting = spell;
this.spellModifiers = modifiers;
- if(!this.player.worldObj.isRemote){
+ if(!this.player.world.isRemote){
PacketCastContinuousSpell.Message message = new PacketCastContinuousSpell.Message(this.player.getEntityId(),
spell.id(), this.spellModifiers);
- WizardryPacketHandler.net.sendToDimension(message, this.player.worldObj.provider.getDimension());
+ WizardryPacketHandler.net.sendToDimension(message, this.player.world.provider.getDimension());
}
}
@@ -336,31 +379,33 @@ public class WizardData implements INBTSerializable {
this.castingTick = 0;
this.spellModifiers.reset();
- if(!this.player.worldObj.isRemote){
+ if(!this.player.world.isRemote){
PacketCastContinuousSpell.Message message = new PacketCastContinuousSpell.Message(this.player.getEntityId(),
Spells.none.id(), this.spellModifiers);
- WizardryPacketHandler.net.sendToDimension(message, this.player.worldObj.provider.getDimension());
+ WizardryPacketHandler.net.sendToDimension(message, this.player.world.provider.getDimension());
}
}
-
+
/** Casts the current continuous spell, fires relevant events and updates the castingTick field. */
public void updateContinuousSpellCasting(){
-
+
if(this.currentlyCasting != null && this.currentlyCasting.isContinuous){
-
- if(MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Tick(player, currentlyCasting, spellModifiers, Source.COMMAND, castingTick))){
+
+ if(MinecraftForge.EVENT_BUS.post(
+ new SpellCastEvent.Tick(player, currentlyCasting, spellModifiers, Source.COMMAND, castingTick))){
this.stopCastingContinuousSpell();
return;
}
-
- if(this.currentlyCasting.cast(player.worldObj, player, EnumHand.MAIN_HAND, castingTick, this.spellModifiers)
+
+ if(this.currentlyCasting.cast(player.world, player, EnumHand.MAIN_HAND, castingTick, this.spellModifiers)
&& this.castingTick == 0){
// On the first tick casting a continuous spell via commands, SpellCastEvent.Post is fired.
- MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Post(player, currentlyCasting, spellModifiers, Source.COMMAND));
+ MinecraftForge.EVENT_BUS
+ .post(new SpellCastEvent.Post(player, currentlyCasting, spellModifiers, Source.COMMAND));
}
-
+
castingTick++;
-
+
}else{
// Why is this here? Surely castingTick will always be 0 if currentlyCasting is null?
this.castingTick = 0;
@@ -372,8 +417,10 @@ public class WizardData implements INBTSerializable {
return this.currentlyCasting != null && this.currentlyCasting != Spells.none;
}
- /** Returns the continuous spell this player is currently casting via commands, or the 'none' spell if they aren't
- * casting anything. */
+ /**
+ * Returns the continuous spell this player is currently casting via commands, or the 'none' spell if they aren't
+ * casting anything.
+ */
public Spell currentlyCasting(){
return currentlyCasting;
}
@@ -387,20 +434,20 @@ public class WizardData implements INBTSerializable {
// functions, just for different enchantments.
updateImbuedItems();
- if(!player.worldObj.isRemote){
+ if(!player.world.isRemote){
if(getTpCountdown() == 1){
player.setPositionAndUpdate(this.stoneCircleLocation.getX() + 0.5, this.stoneCircleLocation.getY(),
this.stoneCircleLocation.getZ() + 0.5);
player.addPotionEffect(new PotionEffect(MobEffects.BLINDNESS, 50, 0));
IMessage msg = new PacketTransportation.Message(player.getEntityId());
- WizardryPacketHandler.net.sendToDimension(msg, player.worldObj.provider.getDimension());
+ WizardryPacketHandler.net.sendToDimension(msg, player.world.provider.getDimension());
}
if(getTpCountdown() > 0){
setTpCountdown(getTpCountdown() - 1);
}
}
-
+
updateContinuousSpellCasting();
}
@@ -411,11 +458,14 @@ public class WizardData implements INBTSerializable {
return player.getCapability(WIZARD_DATA_CAPABILITY, null);
}
- /** Called from the event handler each time the associated player entity is cloned, i.e. on respawn or when
- * travelling to a different dimension. Used to copy over any variables that should persist over player death.
- * This is the inverse of the old onPlayerDeath method, which reset the variables that shouldn't persist.
+ /**
+ * Called from the event handler each time the associated player entity is cloned, i.e. on respawn or when
+ * travelling to a different dimension. Used to copy over any variables that should persist over player death. This
+ * is the inverse of the old onPlayerDeath method, which reset the variables that shouldn't persist.
+ *
* @param data The old WizardData whose variables are to be copied over.
- * @param respawn True if the player died and is respawning, false if they are just travelling between dimensions. */
+ * @param respawn True if the player died and is respawning, false if they are just travelling between dimensions.
+ */
public void copyFrom(WizardData data, boolean respawn){
// TODO: What happens with spirit wolf and spirit horse?
this.hasSpiritHorse = data.hasSpiritHorse;
@@ -441,14 +491,15 @@ public class WizardData implements INBTSerializable {
public void sync(){
if(this.player instanceof EntityPlayerMP){
int id = -1;
- if(this.selectedMinion != null && this.selectedMinion.get() instanceof Entity) id = ((Entity)this.selectedMinion.get()).getEntityId();
+ if(this.selectedMinion != null && this.selectedMinion.get() instanceof Entity)
+ id = ((Entity)this.selectedMinion.get()).getEntityId();
IMessage msg = new PacketPlayerSync.Message(this.spellsDiscovered, id);
WizardryPacketHandler.net.sendTo(msg, (EntityPlayerMP)this.player);
}
}
@Override
- public NBTTagCompound serializeNBT() {
+ public NBTTagCompound serializeNBT(){
NBTTagCompound properties = new NBTTagCompound();
@@ -459,21 +510,24 @@ public class WizardData implements INBTSerializable {
properties.setBoolean("hasSpiritWolf", this.hasSpiritWolf);
properties.setBoolean("hasSpiritHorse", this.hasSpiritHorse);
- if(this.stoneCircleLocation != null) properties.setLong("stoneCircleLocation", this.stoneCircleLocation.toLong());
+ if(this.stoneCircleLocation != null)
+ properties.setLong("stoneCircleLocation", this.stoneCircleLocation.toLong());
properties.setInteger("stoneCircleDimension", this.stoneCircleDimension);
properties.setInteger("tpCountdown", this.tpCountdown);
- if(this.clairvoyanceLocation != null) properties.setLong("clairvoyanceLocation", this.clairvoyanceLocation.toLong());
+ if(this.clairvoyanceLocation != null)
+ properties.setLong("clairvoyanceLocation", this.clairvoyanceLocation.toLong());
properties.setInteger("clairvoyanceDimension", this.getClairvoyanceDimension());
// THIS is why I wrote the list/map <-> NBT methods. Look how neat this is!
properties.setTag("allies", WizardryUtilities.listToNBT(this.allies, WizardryUtilities::UUIDtoTagCompound));
properties.setTag("allyNames", WizardryUtilities.listToNBT(this.allyNames, NBTTagString::new));
- properties.setTag("soulboundCreatures", WizardryUtilities.listToNBT(this.soulboundCreatures, WizardryUtilities::UUIDtoTagCompound));
+ properties.setTag("soulboundCreatures",
+ WizardryUtilities.listToNBT(this.soulboundCreatures, WizardryUtilities::UUIDtoTagCompound));
// Might be worth converting this over to WizardryUtilities.listToNBT.
int[] spells = new int[this.spellsDiscovered.size()];
- int i=0;
+ int i = 0;
for(Spell spell : this.spellsDiscovered){
spells[i] = spell.id();
i++;
@@ -484,7 +538,7 @@ public class WizardData implements INBTSerializable {
}
@Override
- public void deserializeNBT(NBTTagCompound nbt) {
+ public void deserializeNBT(NBTTagCompound nbt){
if(nbt != null){
@@ -504,11 +558,11 @@ public class WizardData implements INBTSerializable {
this.allies = new HashSet(WizardryUtilities.NBTToList(nbt.getTagList("allies", NBT.TAG_COMPOUND),
WizardryUtilities::tagCompoundToUUID));
- this.allyNames = new HashSet(WizardryUtilities.NBTToList(nbt.getTagList("allyNames", NBT.TAG_STRING),
- NBTTagString::getString));
+ this.allyNames = new HashSet(
+ WizardryUtilities.NBTToList(nbt.getTagList("allyNames", NBT.TAG_STRING), NBTTagString::getString));
- this.soulboundCreatures = new HashSet(WizardryUtilities.NBTToList(nbt.getTagList("soulboundCreatures", NBT.TAG_COMPOUND),
- WizardryUtilities::tagCompoundToUUID));
+ this.soulboundCreatures = new HashSet(WizardryUtilities.NBTToList(
+ nbt.getTagList("soulboundCreatures", NBT.TAG_COMPOUND), WizardryUtilities::tagCompoundToUUID));
this.spellsDiscovered = new HashSet();
for(int id : nbt.getIntArray("discoveredSpells")){
@@ -516,20 +570,21 @@ public class WizardData implements INBTSerializable {
}
}
}
-
+
// Event handlers
-
+
@SubscribeEvent
// The type parameter here has to be Entity, not EntityPlayer, or the event won't get fired.
public static void onCapabilityLoad(AttachCapabilitiesEvent event){
if(event.getObject() instanceof EntityPlayer)
- event.addCapability(new ResourceLocation(Wizardry.MODID, "WizardData"), new WizardData.Provider((EntityPlayer)event.getObject()));
+ event.addCapability(new ResourceLocation(Wizardry.MODID, "WizardData"),
+ new WizardData.Provider((EntityPlayer)event.getObject()));
// This demonstrates why capabilities are badly structured: The following code compiles, but what it does is put
// a player into a CapabilityDispatcher, which is in turn stored in that very same player, which makes no sense
// at all!
- //event.addCapability(new ResourceLocation(Wizardry.MODID, "WizardData"), event.getObject());
+ // event.addCapability(new ResourceLocation(Wizardry.MODID, "WizardData"), event.getObject());
}
@SubscribeEvent
@@ -540,32 +595,34 @@ public class WizardData implements INBTSerializable {
newData.copyFrom(oldData, event.isWasDeath());
}
-
+
@SubscribeEvent
public static void onEntityJoinWorld(EntityJoinWorldEvent event){
- if(!event.getEntity().worldObj.isRemote && event.getEntity() instanceof EntityPlayerMP){
+ if(!event.getEntity().world.isRemote && event.getEntity() instanceof EntityPlayerMP){
// Synchronises wizard data after loading.
WizardData data = WizardData.get((EntityPlayer)event.getEntity());
if(data != null) data.sync();
}
}
-
+
@SubscribeEvent
public static void onLivingUpdateEvent(LivingUpdateEvent event){
-
+
if(event.getEntityLiving() instanceof EntityPlayer){
-
+
EntityPlayer player = (EntityPlayer)event.getEntityLiving();
-
+
if(WizardData.get(player) != null){
WizardData.get(player).update();
}
}
}
- /** This is a nested class for a few reasons: firstly, it makes sense because instances of this and WizardData go
+ /**
+ * This is a nested class for a few reasons: firstly, it makes sense because instances of this and WizardData go
* hand-in-hand; secondly, it's too short to be worth a separate file; and thirdly (and most importantly) it allows
- * me to access WIZARD_DATA_CAPABILITY while keeping it private. */
+ * me to access WIZARD_DATA_CAPABILITY while keeping it private.
+ */
public static class Provider implements ICapabilitySerializable {
private final WizardData data;
@@ -575,12 +632,12 @@ public class WizardData implements INBTSerializable {
}
@Override
- public boolean hasCapability(Capability> capability, EnumFacing facing) {
+ public boolean hasCapability(Capability> capability, EnumFacing facing){
return capability == WIZARD_DATA_CAPABILITY;
}
@Override
- public T getCapability(Capability capability, EnumFacing facing) {
+ public T getCapability(Capability capability, EnumFacing facing){
if(capability == WIZARD_DATA_CAPABILITY){
return WIZARD_DATA_CAPABILITY.cast(data);
@@ -590,12 +647,12 @@ public class WizardData implements INBTSerializable {
}
@Override
- public NBTTagCompound serializeNBT() {
+ public NBTTagCompound serializeNBT(){
return data.serializeNBT();
}
@Override
- public void deserializeNBT(NBTTagCompound nbt) {
+ public void deserializeNBT(NBTTagCompound nbt){
data.deserializeNBT(nbt);
}
@@ -611,50 +668,44 @@ public class WizardData implements INBTSerializable {
* "...without having to directly implement many interfaces." - Forge Docs. I still can't see what's wrong with
* implementing many interfaces; surely that's what Java interfaces are designed for?
*
- * Other things I find annoying:
- * - IStorage. It's completely redundant in the majority of cases, and I don't understand why we need yet another
- * separate class.
- * - Making an interface, only to implement it once and once only. This completely defeats the point of interfaces.
- * - The EnumFacing parameter, which is again redundant for everything that isn't a tile entity. So much for a clean,
- * neat system.
+ * Other things I find annoying: - IStorage. It's completely redundant in the majority of cases, and I don't
+ * understand why we need yet another separate class. - Making an interface, only to implement it once and once
+ * only. This completely defeats the point of interfaces. - The EnumFacing parameter, which is again redundant for
+ * everything that isn't a tile entity. So much for a clean, neat system.
*
* What Forge has effectively done is conflated two different functions: attaching data to stuff and cross-mod
- * integration/soft dependencies. I think this is bad design; it would have been better to keep the two features separate.
+ * integration/soft dependencies. I think this is bad design; it would have been better to keep the two features
+ * separate.
*
- * Here's my current understanding of how the capability system works:
- * - You make an interface which defines the things your capability can do (this class). I will call this the TEMPLATE.
- * - You implement that interface with your default implementation (WizardData). This is the closest analog to your old
- * IEEP implementation class. THIS CLASS STORES ALL THE VARIABLES, and hence has one instance for each instance of whatever
- * it is attached to. I will call this the DATA.
- * - The DATA class implements INBTSerializable (assuming you want it to be saved, which is nearly always the case)
- * - Despite its name, Capability does NOT represent a capability itself. Instead, it acts as a sort of identifier/key,
- * the idea being that you can access a particular instance of your DATA given the key (which tells forge that you want a
- * capability of type TEMPLATE) and the object you want the DATA for. This is what Entity.getCapability(...) does.
+ * Here's my current understanding of how the capability system works: - You make an interface which defines the
+ * things your capability can do (this class). I will call this the TEMPLATE. - You implement that interface with
+ * your default implementation (WizardData). This is the closest analog to your old IEEP implementation class. THIS
+ * CLASS STORES ALL THE VARIABLES, and hence has one instance for each instance of whatever it is attached to. I
+ * will call this the DATA. - The DATA class implements INBTSerializable (assuming you want it to be saved, which is
+ * nearly always the case) - Despite its name, Capability does NOT represent a capability itself. Instead, it
+ * acts as a sort of identifier/key, the idea being that you can access a particular instance of your DATA given the
+ * key (which tells forge that you want a capability of type TEMPLATE) and the object you want the DATA for. This is
+ * what Entity.getCapability(...) does.
*
- * To really understand what's going on though, you need to sift through Forge's verbose data structures and find where
- * capabilities are actually hooked into vanilla:
- * - Anything that implements ICapabilityProvider will have a private CapabilityDispatcher field. This holds other
- * ICapabilityProviders. (I know. This inheritance pattern DOES NOT MAKE SENSE, because these could, in theory, be OTHER
- * ENTITIES!)
- * - This field is assigned a value through Forge's event factory, which, as we are all familiar with, calls all the
- * methods marked with @SubscribeEvent. These methods add individual ICapabilityProviders to a Map stored in the event,
- * which the event factory then wraps in a CapabilityDispatcher (which is itself an ICapabilityProvider) for the object
- * that called it.
- * - In your event handler, you return a custom ICapabilityProvider which is effectively bolted on to the player, and
- * duplicates the ICapabilityProvider methods so you can hook into them and return an instance of your DATA class.
- * - Where before there was a simple collection of IEEPs stored in the player, there is now a tree of ICapabilityProviders:
+ * To really understand what's going on though, you need to sift through Forge's verbose data structures and find
+ * where capabilities are actually hooked into vanilla: - Anything that implements ICapabilityProvider will have a
+ * private CapabilityDispatcher field. This holds other ICapabilityProviders. (I know. This inheritance pattern DOES
+ * NOT MAKE SENSE, because these could, in theory, be OTHER ENTITIES!) - This field is assigned a value through
+ * Forge's event factory, which, as we are all familiar with, calls all the methods marked with @SubscribeEvent.
+ * These methods add individual ICapabilityProviders to a Map stored in the event, which the event factory then
+ * wraps in a CapabilityDispatcher (which is itself an ICapabilityProvider) for the object that called it. - In your
+ * event handler, you return a custom ICapabilityProvider which is effectively bolted on to the player, and
+ * duplicates the ICapabilityProvider methods so you can hook into them and return an instance of your DATA class. -
+ * Where before there was a simple collection of IEEPs stored in the player, there is now a tree of
+ * ICapabilityProviders:
*
- * - Entity/TileEntity/ItemStack
- * - Vanilla ICapabilityProviders, mostly IItemHandlers, stored as fields.
- * - CapabilityDispatcher, stored as a field.
- * - Custom ICapabilityProviders
- * - Custom CapabilityDispatchers
- * - ...
+ * - Entity/TileEntity/ItemStack - Vanilla ICapabilityProviders, mostly IItemHandlers, stored as fields. -
+ * CapabilityDispatcher, stored as a field. - Custom ICapabilityProviders - Custom CapabilityDispatchers - ...
*
* Most importantly, EACH PLAYER HOLDS THEIR OWN INSTANCE OF THIS TREE.
*
- * When a capability is retrieved, the following process happens:
- * 1. For the Entity/TileEntity/ItemStack instance, ICapabilityProvider.getCapability(...) is called.
- * 2. The request propogates through the tree and finds the requested capability. */
+ * When a capability is retrieved, the following process happens: 1. For the Entity/TileEntity/ItemStack instance,
+ * ICapabilityProvider.getCapability(...) is called. 2. The request propogates through the tree and finds the
+ * requested capability. */
}
diff --git a/src/main/java/electroblob/wizardry/Wizardry.java b/src/main/java/electroblob/wizardry/Wizardry.java
index 26d10ffd..80388ed0 100644
--- a/src/main/java/electroblob/wizardry/Wizardry.java
+++ b/src/main/java/electroblob/wizardry/Wizardry.java
@@ -37,17 +37,23 @@ import net.minecraftforge.fml.common.registry.GameRegistry.Type;
public class Wizardry {
/** Wizardry's mod ID. */
- public static final String MODID = "wizardry";
+ // This is going to have to change for 1.12 or it'll conflict with the other wizardry mod.
+ // They were there first, it's only fair... although I wonder if that will have unintended side-effects?
+ public static final String MODID = "wizardry"; // How about 'ebwizardry', to keep it short?
/** Wizardry's mod name, in readable form. */
public static final String NAME = "Electroblob's Wizardry";
- /** The version number for this version of wizardry. The following system is used for version numbers:
- *
[major Minecraft version].[major mod version].[minor mod version/patch]
- * The major mod version is consistent across Minecraft versions, i.e. Wizardry 1.1 has the same features as
- * Wizardry 2.1, but they are for different versions of Minecraft and have separate minor versioning. 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. */
- public static final String VERSION = "2.1.0";
-
+ /**
+ * The version number for this version of wizardry. The following system is used for version numbers:
+ *
+ *
[major Minecraft version].[major mod version].[minor mod version/patch]
+ *
+ *
The major mod version is consistent across Minecraft versions, i.e. Wizardry 1.1 has the same
+ * features as Wizardry 2.1, but they are for different versions of Minecraft and have separate minor versioning.
+ * 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.
+ */
+ public static final String VERSION = "3.1.0";
+
// IDEA: Improve the algorithm that finds a place to summon creatures to take walls into account.
// IDEA: Replace all uses of Math.cos and Math.sin with MathHelper versions
// IDEA: API feature that automatically injects custom wand upgrades into wizardry's loot tables
@@ -55,32 +61,44 @@ public class Wizardry {
// IDEA: Dispensers shooting spells from scrolls! Imagine the possibilities!
// == Rendering overhaul! ==
// IDEA: Make spirit animals fade away when dispelled
- // IDEA: Use your newfound knowledge of OpenGL to render animated boxes around entities being buffed, similar to creeper charge
+ // IDEA: Use your newfound knowledge of OpenGL to render animated boxes around entities being buffed, similar to
+ // creeper charge
// IDEA: Redo RenderArc so it looks like lightning (it's literally a load of translucent boxes inside each other)
// IDEA: The arcane workbench could use a few particles
// IDEA: Add a box to the wizard armour model so that the robes bend when the wearer is sneaking
// IDEA: Flash particle (I think it exists in vanilla somewhere) on spell impact
// IDEA: Dust particles spray out from projectiles as they move
// IDEA: Colour fading for particles
- // IDEA: Make lightning and other effects particles. There's no reason why you can't pass in a player argument and have the particles move with them!
-
+ // IDEA: Make lightning and other effects particles. There's no reason why you can't pass in a player argument and
+ // have the particles move with them!
+
/* Minor bugs that need fixing at some point:
- * - Player skin hat layer shows through wizard hats
- * - Wizard armour breaks rather than just running out of mana (I can't seem to replicate this bug, but I have had
- * it happen to me before...)
+ * - Player skin hat layer shows through wizard hats - Wizard armour breaks rather than just running out of mana (I
+ * can't seem to replicate this bug, but I have had it happen to me before...)
* - Shift-clicking a stack of special upgrades when in the arcane workbench causes the whole stack to be
- * transferred when it should be just one (this is a bug with vanilla as well - try putting a stack of bottles into
- * a brewing stand). I have at least made it so only one gets used now, so it has no impact on the game.
+ * transferred when it should be just one (this is a bug with vanilla as well - try putting a stack of bottles into
+ * a brewing stand). I have at least made it so only one gets used now, so it has no impact on the game.
* - When a spell is on cooldown, you can't break blocks when holding a wand. */
-
+
// TODO: So somehow I have managed to overlook the fact that health is actually a float. What this means is that
// I can make the healing spells use damage multipliers - hurrah!
// TODO: Switch from IInventory to IItemHandler (Or don't. It's only useful for automation really.)
// TODO: Triggering of inbuilt Forge events in relevant places?
- // TODO: Implement custom events
// TODO: Rearrange the config gui and file
-
+
+ // Updating:
+ // TODO: Make sure all obf reflection names are still correct
+ // ItemStacks can no longer be null, only empty, so:
+ // TODO: Replace all instances of stack = null with stack = ItemStack.EMPTY
+ // TODO: For each check, either replace with stack.isEmpty or simply remove it, depending on the use
+ // TODO: Go through each of the summoned creatures and check there are no extra vanilla methods to override
+ // TODO: Check whether Minecraft has added some methods that do the same job as my utilities, particularly in
+ // relation to itemstacks, hotbar, armour slots and inventory slots.
+ // TODO: Add wizard towers to the /locate command
+ // TODO: Fix cascading worldgen lag and backport (offset area into loaded chunks, possibly use WorldGenMinable)
+ // TODO: Change evil wizard sounds again to use illager sounds?
+
// TODO: Have particles obey Minecraft's particle setting where appropriate
// (see https://github.com/RootsTeam/Embers/blob/master/src/main/java/teamroots/embers/particle/ParticleUtil.java)
@@ -88,12 +106,12 @@ public class Wizardry {
/** Static instance of the {@link Settings} object for Wizardry. */
public static final Settings settings = new Settings();
-
+
/** Static instance of the {@link Logger} object for Wizardry. */
public static Logger logger;
-
- //private static Pattern entityNamePattern;
-
+
+ // private static Pattern entityNamePattern;
+
// EventManager
WizardryWorldGenerator generator = new WizardryWorldGenerator();
@@ -102,19 +120,19 @@ public class Wizardry {
public static Wizardry instance;
// Location of the proxy code, used by Forge.
- @SidedProxy(clientSide="electroblob.wizardry.client.ClientProxy", serverSide="electroblob.wizardry.CommonProxy")
+ @SidedProxy(clientSide = "electroblob.wizardry.client.ClientProxy", serverSide = "electroblob.wizardry.CommonProxy")
public static CommonProxy proxy;
@EventHandler
public void preInit(FMLPreInitializationEvent event){
-
+
logger = event.getModLog();
-
+
// The array in question no longer exists, so I'm pretty sure this isn't necessary any more.
// expandPotionTypesArray();
settings.initConfig(event);
-
+
// Yes - by the looks of it, having an interface is completely unnecessary in this case.
CapabilityManager.INSTANCE.register(WizardData.class, new IStorage(){
// These methods are only called by Capability.writeNBT() or Capability.readNBT(), which in turn are
@@ -122,8 +140,14 @@ public class Wizardry {
// to allow capabilities to be saved and loaded manually. What that would be useful for I don't know.
// (If an API forces most users to write redundant code for no reason, it's not user friendly, is it?)
// ... well, that's my rant for today!
- @Override public NBTBase writeNBT(Capability capability, WizardData instance, EnumFacing side){ return null; }
- @Override public void readNBT(Capability capability, WizardData instance, EnumFacing side, NBTBase nbt){}
+ @Override
+ public NBTBase writeNBT(Capability capability, WizardData instance, EnumFacing side){
+ return null;
+ }
+
+ @Override
+ public void readNBT(Capability capability, WizardData instance, EnumFacing side, NBTBase nbt){
+ }
}, WizardData.class);
WizardryRegistry.registerTileEntities();
@@ -131,10 +155,10 @@ public class Wizardry {
WizardryRegistry.registerEntities(this);
// The check for the generateLoot setting is now done within this method.
WizardryRegistry.registerLoot();
-
+
// NOTE: Will need to be moved to init for 1.12, as will anything that needs to be after the registry events.
WizardryTabs.sort();
-
+
// Moved to preInit, because apparently it has to be here now.
proxy.registerRenderers();
@@ -160,7 +184,7 @@ public class Wizardry {
// Recipes
WizardryRegistry.registerRecipes();
-
+
proxy.initMixedFontRenderer();
}
@@ -168,27 +192,20 @@ public class Wizardry {
public void postInit(FMLPostInitializationEvent event){
// This needs to be here or it won't necessarily include all the mods' entities.
// TODO: Re-implement this when the Forge bug is fixed.
- /* Doesn't seem to be doing anything...
- String entityNames = "";
- for(Object name : EntityList.classToStringMapping.values()){
- if(name instanceof String){
- entityNames = entityNames + name + '|';
- }
- }
- // Cuts off the last '|'
- entityNames = entityNames.substring(0, entityNames.length()-1);
- entityNamePattern = Pattern.compile(entityNames);
- */
+ /* Doesn't seem to be doing anything... String entityNames = ""; for(Object name :
+ * EntityList.classToStringMapping.values()){ if(name instanceof String){ entityNames = entityNames + name +
+ * '|'; } } // Cuts off the last '|' entityNames = entityNames.substring(0, entityNames.length()-1);
+ * entityNamePattern = Pattern.compile(entityNames); */
proxy.initialiseLayers();
}
-
+
@EventHandler
- public void serverStarting(FMLServerStartingEvent event){
- event.registerServerCommand(new CommandCastSpell());
- event.registerServerCommand(new CommandSetAlly());
- event.registerServerCommand(new CommandViewAllies());
- event.registerServerCommand(new CommandDiscoverSpell());
- }
+ public void serverStarting(FMLServerStartingEvent event){
+ event.registerServerCommand(new CommandCastSpell());
+ event.registerServerCommand(new CommandSetAlly());
+ event.registerServerCommand(new CommandViewAllies());
+ event.registerServerCommand(new CommandDiscoverSpell());
+ }
@SubscribeEvent
public void onConfigChanged(net.minecraftforge.fml.client.event.ConfigChangedEvent.OnConfigChangedEvent event){
@@ -206,58 +223,139 @@ public class Wizardry {
// Just get, not getAll, since the mod id didn't change!
for(FMLMissingMappingsEvent.MissingMapping mapping : event.get()){
if(mapping.type == Type.ITEM && mapping.resourceLocation.getResourceDomain().equals(Wizardry.MODID)){
-
+
Item replacement = null;
-
+
switch(mapping.resourceLocation.getResourcePath()){
-
- case "wand_basic": replacement = WizardryItems.magic_wand; break;
- case "wand_basic_fire": replacement = WizardryItems.basic_fire_wand; break;
- case "wand_basic_ice": replacement = WizardryItems.basic_ice_wand; break;
- case "wand_basic_lightning": replacement = WizardryItems.basic_lightning_wand; break;
- case "wand_basic_necromancy": replacement = WizardryItems.basic_necromancy_wand; break;
- case "wand_basic_earth": replacement = WizardryItems.basic_earth_wand; break;
- case "wand_basic_sorcery": replacement = WizardryItems.basic_sorcery_wand; break;
- case "wand_basic_healing": replacement = WizardryItems.basic_healing_wand; break;
- case "wand_apprentice": replacement = WizardryItems.apprentice_wand; break;
- case "wand_apprentice_fire": replacement = WizardryItems.apprentice_fire_wand; break;
- case "wand_apprentice_ice": replacement = WizardryItems.apprentice_ice_wand; break;
- case "wand_apprentice_lightning": replacement = WizardryItems.apprentice_lightning_wand; break;
- case "wand_apprentice_necromancy": replacement = WizardryItems.apprentice_necromancy_wand; break;
- case "wand_apprentice_earth": replacement = WizardryItems.apprentice_earth_wand; break;
- case "wand_apprentice_sorcery": replacement = WizardryItems.apprentice_sorcery_wand; break;
- case "wand_apprentice_healing": replacement = WizardryItems.apprentice_healing_wand; break;
- case "wand_advanced": replacement = WizardryItems.advanced_wand; break;
- case "wand_advanced_fire": replacement = WizardryItems.advanced_fire_wand; break;
- case "wand_advanced_ice": replacement = WizardryItems.advanced_ice_wand; break;
- case "wand_advanced_lightning": replacement = WizardryItems.advanced_lightning_wand; break;
- case "wand_advanced_necromancy": replacement = WizardryItems.advanced_necromancy_wand; break;
- case "wand_advanced_earth": replacement = WizardryItems.advanced_earth_wand; break;
- case "wand_advanced_sorcery": replacement = WizardryItems.advanced_sorcery_wand; break;
- case "wand_advanced_healing": replacement = WizardryItems.advanced_healing_wand; break;
- case "wand_master": replacement = WizardryItems.master_wand; break;
- case "wand_master_fire": replacement = WizardryItems.master_fire_wand; break;
- case "wand_master_ice": replacement = WizardryItems.master_ice_wand; break;
- case "wand_master_lightning": replacement = WizardryItems.master_lightning_wand; break;
- case "wand_master_necromancy": replacement = WizardryItems.master_necromancy_wand; break;
- case "wand_master_earth": replacement = WizardryItems.master_earth_wand; break;
- case "wand_master_sorcery": replacement = WizardryItems.master_sorcery_wand; break;
- case "wand_master_healing": replacement = WizardryItems.master_healing_wand; break;
- case "upgrade_storage": replacement = WizardryItems.storage_upgrade; break;
- case "upgrade_siphon": replacement = WizardryItems.siphon_upgrade; break;
- case "upgrade_condenser": replacement = WizardryItems.condenser_upgrade; break;
- case "upgrade_range": replacement = WizardryItems.range_upgrade; break;
- case "upgrade_duration": replacement = WizardryItems.duration_upgrade; break;
- case "upgrade_cooldown": replacement = WizardryItems.cooldown_upgrade; break;
- case "upgrade_blast": replacement = WizardryItems.blast_upgrade; break;
- case "upgrade_attunement": replacement = WizardryItems.attunement_upgrade; break;
+
+ case "wand_basic":
+ replacement = WizardryItems.magic_wand;
+ break;
+ case "wand_basic_fire":
+ replacement = WizardryItems.basic_fire_wand;
+ break;
+ case "wand_basic_ice":
+ replacement = WizardryItems.basic_ice_wand;
+ break;
+ case "wand_basic_lightning":
+ replacement = WizardryItems.basic_lightning_wand;
+ break;
+ case "wand_basic_necromancy":
+ replacement = WizardryItems.basic_necromancy_wand;
+ break;
+ case "wand_basic_earth":
+ replacement = WizardryItems.basic_earth_wand;
+ break;
+ case "wand_basic_sorcery":
+ replacement = WizardryItems.basic_sorcery_wand;
+ break;
+ case "wand_basic_healing":
+ replacement = WizardryItems.basic_healing_wand;
+ break;
+ case "wand_apprentice":
+ replacement = WizardryItems.apprentice_wand;
+ break;
+ case "wand_apprentice_fire":
+ replacement = WizardryItems.apprentice_fire_wand;
+ break;
+ case "wand_apprentice_ice":
+ replacement = WizardryItems.apprentice_ice_wand;
+ break;
+ case "wand_apprentice_lightning":
+ replacement = WizardryItems.apprentice_lightning_wand;
+ break;
+ case "wand_apprentice_necromancy":
+ replacement = WizardryItems.apprentice_necromancy_wand;
+ break;
+ case "wand_apprentice_earth":
+ replacement = WizardryItems.apprentice_earth_wand;
+ break;
+ case "wand_apprentice_sorcery":
+ replacement = WizardryItems.apprentice_sorcery_wand;
+ break;
+ case "wand_apprentice_healing":
+ replacement = WizardryItems.apprentice_healing_wand;
+ break;
+ case "wand_advanced":
+ replacement = WizardryItems.advanced_wand;
+ break;
+ case "wand_advanced_fire":
+ replacement = WizardryItems.advanced_fire_wand;
+ break;
+ case "wand_advanced_ice":
+ replacement = WizardryItems.advanced_ice_wand;
+ break;
+ case "wand_advanced_lightning":
+ replacement = WizardryItems.advanced_lightning_wand;
+ break;
+ case "wand_advanced_necromancy":
+ replacement = WizardryItems.advanced_necromancy_wand;
+ break;
+ case "wand_advanced_earth":
+ replacement = WizardryItems.advanced_earth_wand;
+ break;
+ case "wand_advanced_sorcery":
+ replacement = WizardryItems.advanced_sorcery_wand;
+ break;
+ case "wand_advanced_healing":
+ replacement = WizardryItems.advanced_healing_wand;
+ break;
+ case "wand_master":
+ replacement = WizardryItems.master_wand;
+ break;
+ case "wand_master_fire":
+ replacement = WizardryItems.master_fire_wand;
+ break;
+ case "wand_master_ice":
+ replacement = WizardryItems.master_ice_wand;
+ break;
+ case "wand_master_lightning":
+ replacement = WizardryItems.master_lightning_wand;
+ break;
+ case "wand_master_necromancy":
+ replacement = WizardryItems.master_necromancy_wand;
+ break;
+ case "wand_master_earth":
+ replacement = WizardryItems.master_earth_wand;
+ break;
+ case "wand_master_sorcery":
+ replacement = WizardryItems.master_sorcery_wand;
+ break;
+ case "wand_master_healing":
+ replacement = WizardryItems.master_healing_wand;
+ break;
+ case "upgrade_storage":
+ replacement = WizardryItems.storage_upgrade;
+ break;
+ case "upgrade_siphon":
+ replacement = WizardryItems.siphon_upgrade;
+ break;
+ case "upgrade_condenser":
+ replacement = WizardryItems.condenser_upgrade;
+ break;
+ case "upgrade_range":
+ replacement = WizardryItems.range_upgrade;
+ break;
+ case "upgrade_duration":
+ replacement = WizardryItems.duration_upgrade;
+ break;
+ case "upgrade_cooldown":
+ replacement = WizardryItems.cooldown_upgrade;
+ break;
+ case "upgrade_blast":
+ replacement = WizardryItems.blast_upgrade;
+ break;
+ case "upgrade_attunement":
+ replacement = WizardryItems.attunement_upgrade;
+ break;
// If it didn't match any of the ones that changed, do nothing.
- default: return;
+ default:
+ return;
}
// No need to log, Forge does that.
mapping.remap(replacement);
}
}
}
-
+
}
\ No newline at end of file
diff --git a/src/main/java/electroblob/wizardry/WizardryEventHandler.java b/src/main/java/electroblob/wizardry/WizardryEventHandler.java
index a91acd2b..f535960e 100644
--- a/src/main/java/electroblob/wizardry/WizardryEventHandler.java
+++ b/src/main/java/electroblob/wizardry/WizardryEventHandler.java
@@ -78,6 +78,7 @@ import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
* As of Wizardry 2.1, most of the code in this class has been relocated somewhere sensible, leaving only a few
* miscellaneous things that don't make much sense anywhere else, or that are better kept together. Previously, this was
* a gigantic class with about half of the entire mod's logic in it!
+ *
* @author Electroblob
* @since Wizardry 1.0
*/
@@ -85,16 +86,10 @@ import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
public final class WizardryEventHandler {
// IDEA: Config option allowing users to specify loot locations
- private static final String[] LOOT_INJECTION_LOCATIONS = {
- "minecraft:chests/simple_dungeon",
- "minecraft:chests/abandoned_mineshaft",
- "minecraft:chests/desert_pyramid",
- "minecraft:chests/jungle_temple",
- "minecraft:chests/stronghold_corridor",
- "minecraft:chests/stronghold_crossing",
- "minecraft:chests/stronghold_library",
- "minecraft:chests/igloo_chest"
- };
+ private static final String[] LOOT_INJECTION_LOCATIONS = {"minecraft:chests/simple_dungeon",
+ "minecraft:chests/abandoned_mineshaft", "minecraft:chests/desert_pyramid", "minecraft:chests/jungle_temple",
+ "minecraft:chests/stronghold_corridor", "minecraft:chests/stronghold_crossing",
+ "minecraft:chests/stronghold_library", "minecraft:chests/igloo_chest"};
@SubscribeEvent
public static void onLootTableLoadEvent(LootTableLoadEvent event){
@@ -108,61 +103,65 @@ public final class WizardryEventHandler {
}
private static LootPool getAdditive(String entryName){
- return new LootPool(new LootEntry[] { getAdditiveEntry(entryName, 1) }, new LootCondition[0], new RandomValueRange(1), new RandomValueRange(0, 1), Wizardry.MODID + "_additive_pool");
+ return new LootPool(new LootEntry[]{getAdditiveEntry(entryName, 1)}, new LootCondition[0],
+ new RandomValueRange(1), new RandomValueRange(0, 1), Wizardry.MODID + "_additive_pool");
}
private static LootEntryTable getAdditiveEntry(String name, int weight){
- return new LootEntryTable(new ResourceLocation(name), weight, 0, new LootCondition[0], Wizardry.MODID + "_additive_entry");
+ return new LootEntryTable(new ResourceLocation(name), weight, 0, new LootCondition[0],
+ Wizardry.MODID + "_additive_entry");
}
@SubscribeEvent
public static void onPlayerLoggedInEvent(PlayerLoggedInEvent event){
// When a player logs in, they are sent the glyph data and the server's settings.
if(event.player instanceof EntityPlayerMP){
- SpellGlyphData.get(event.player.worldObj).sync((EntityPlayerMP)event.player);
+ SpellGlyphData.get(event.player.world).sync((EntityPlayerMP)event.player);
Wizardry.settings.sync((EntityPlayerMP)event.player);
}
}
-
+
@SubscribeEvent
public static void onSpellCastPreEvent(SpellCastEvent.Pre event){
// If a spell is disabled in the config, it will not work.
if(!event.getSpell().isEnabled()){
- if(!event.getEntityLiving().worldObj.isRemote)
- event.getEntity().addChatMessage(new TextComponentTranslation("spell.disabled", event.getSpell().getNameForTranslationFormatted()));
+ if(!event.getEntityLiving().world.isRemote) event.getEntity().sendMessage(
+ new TextComponentTranslation("spell.disabled", event.getSpell().getNameForTranslationFormatted()));
event.setCanceled(true);
}
}
-
+
@SubscribeEvent
public static void onSpellCastPostEvent(SpellCastEvent.Post event){
// Spell discovery (only players can discover spells, obviously)
if(event.getEntity() instanceof EntityPlayer){
-
+
EntityPlayer player = (EntityPlayer)event.getEntity();
WizardData data = WizardData.get(player);
-
+
if(data != null){
// Data is updated on both sides (This line was added client-side to fix a bug back in 1.1.3, so now
// it's in common code, which is nice!)
// Short-circuiting AND means that discoverSpell is only called if the event isn't cancelled.
- if(!MinecraftForge.EVENT_BUS.post(new DiscoverSpellEvent(player, event.getSpell(),
- DiscoverSpellEvent.Source.CASTING)) && data.discoverSpell(event.getSpell())){
-
+ if(!MinecraftForge.EVENT_BUS
+ .post(new DiscoverSpellEvent(player, event.getSpell(), DiscoverSpellEvent.Source.CASTING))
+ && data.discoverSpell(event.getSpell())){
+
// If the spell wasn't already discovered, other stuff happens:
if(event.getSource() == SpellCastEvent.Source.COMMAND){
- // If the spell didn't send a packet itself, the extended player needs to be synced so the
- // spell discovery updates on the client.
- if(!event.getSpell().doesSpellRequirePacket()) data.sync();
-
- }else if(!event.getEntity().worldObj.isRemote && !player.capabilities.isCreativeMode
+ // If the spell didn't send a packet itself, the extended player needs to be synced so the
+ // spell discovery updates on the client.
+ if(!event.getSpell().doesSpellRequirePacket()) data.sync();
+
+ }else if(!event.getEntity().world.isRemote && !player.capabilities.isCreativeMode
&& Wizardry.settings.discoveryMode){
// Sound and text only happen server-side, in survival, with discovery mode on, and only when
// the spell wasn't cast using commands.
WizardryUtilities.playSoundAtPlayer(player, SoundEvents.ENTITY_PLAYER_LEVELUP, 1.25f, 1);
- player.addChatMessage(new TextComponentTranslation("spell.discover", event.getSpell().getNameForTranslationFormatted()));
+ player.sendMessage(new TextComponentTranslation("spell.discover",
+ event.getSpell().getNameForTranslationFormatted()));
}
}
}
@@ -172,32 +171,24 @@ public final class WizardryEventHandler {
/* There is a subtle but important difference between LivingAttackEvent and LivingHurtEvent - LivingAttackEvent
* fires immediately when attackEntityFrom is called, whereas LivingHurtEvent only fires if the attack actually
* succeeded, i.e. if the entity in question takes damage (though the event is fired before that so you can cancel
- * the damage). Things are processed in the following order:
- * * LivingAttackEvent *
- * - Invulnerability
- * - Already-dead-ness
- * - Fire resistance
- * - Helmets vs. falling things
- * - Hurt resistant time
- * - Invulnerability (again)
- * * LivingHurtEvent *
- * - Armour
- * - Potions
- * - Health is finally changed
- * Of course, there are no guarantees that other mods hooking into these two events will be called before or after
- * yours, but you can have some degree of control by choosing which event to use.
- * EDIT: Actually, there are. Firstly, you can set a priority in the @SubscribeEvent annotation which defines how
- * early (higher priority) or late (lower priority) the method is called. Methods with the same priority are sorted
- * alphabetically by mod id (so it's safe to assume wizardry would be fairly late on!). I wonder if there are any
- * conventions for what sort of things take what priority...? */
+ * the damage). Things are processed in the following order: * LivingAttackEvent * - Invulnerability -
+ * Already-dead-ness - Fire resistance - Helmets vs. falling things - Hurt resistant time - Invulnerability (again)
+ * * LivingHurtEvent * - Armour - Potions - Health is finally changed Of course, there are no guarantees that other
+ * mods hooking into these two events will be called before or after yours, but you can have some degree of control
+ * by choosing which event to use. EDIT: Actually, there are. Firstly, you can set a priority in the @SubscribeEvent
+ * annotation which defines how early (higher priority) or late (lower priority) the method is called. Methods with
+ * the same priority are sorted alphabetically by mod id (so it's safe to assume wizardry would be fairly late on!).
+ * I wonder if there are any conventions for what sort of things take what priority...? */
@SubscribeEvent
public static void onLivingAttackEvent(LivingAttackEvent event){
// Prevents any damage to allies from magic if friendly fire is enabled
- if(!Wizardry.settings.friendlyFire && event.getSource() != null && event.getSource().getEntity() instanceof EntityPlayer
- && event.getEntity() instanceof EntityPlayer && event.getSource() instanceof IElementalDamage){
- if(WizardryUtilities.isPlayerAlly((EntityPlayer)event.getSource().getEntity(), (EntityPlayer)event.getEntity())){
+ if(!Wizardry.settings.friendlyFire && event.getSource() != null
+ && event.getSource().getEntity() instanceof EntityPlayer && event.getEntity() instanceof EntityPlayer
+ && event.getSource() instanceof IElementalDamage){
+ if(WizardryUtilities.isPlayerAlly((EntityPlayer)event.getSource().getEntity(),
+ (EntityPlayer)event.getEntity())){
event.setCanceled(true);
// This needs to be here, since if the event is cancelled nothing else needs to happen.
return;
@@ -208,11 +199,11 @@ public final class WizardryEventHandler {
// These are better off here because the revenge effects are pretty similar, and I'd rather keep the (lengthy)
// if statement in one place.
if(event.getSource() != null && event.getSource().getEntity() instanceof EntityLivingBase
- && !event.getSource().isProjectile() && !(event.getSource() instanceof IElementalDamage &&
- ((IElementalDamage)event.getSource()).isRetaliatory())){
+ && !event.getSource().isProjectile() && !(event.getSource() instanceof IElementalDamage
+ && ((IElementalDamage)event.getSource()).isRetaliatory())){
EntityLivingBase attacker = (EntityLivingBase)event.getSource().getEntity();
- World world = event.getEntityLiving().worldObj;
+ World world = event.getEntityLiving().world;
// Fireskin
if(event.getEntityLiving().isPotionActive(WizardryPotions.fireskin)
@@ -220,8 +211,8 @@ public final class WizardryEventHandler {
attacker.setFire(5);
// Ice Shroud
- if(event.getEntityLiving().isPotionActive(WizardryPotions.ice_shroud) &&
- !MagicDamage.isEntityImmune(DamageType.FROST, event.getEntityLiving()))
+ if(event.getEntityLiving().isPotionActive(WizardryPotions.ice_shroud)
+ && !MagicDamage.isEntityImmune(DamageType.FROST, event.getEntityLiving()))
attacker.addPotionEffect(new PotionEffect(WizardryPotions.frost, 100, 0));
// Static Aura
@@ -229,17 +220,25 @@ public final class WizardryEventHandler {
if(!world.isRemote){
EntityArc arc = new EntityArc(world);
- arc.setEndpointCoords(event.getEntityLiving().posX, event.getEntityLiving().posY + 1, event.getEntityLiving().posZ,
- attacker.posX, attacker.posY + attacker.height/2, attacker.posZ);
- world.spawnEntityInWorld(arc);
+ arc.setEndpointCoords(event.getEntityLiving().posX, event.getEntityLiving().posY + 1,
+ event.getEntityLiving().posZ, attacker.posX, attacker.posY + attacker.height / 2,
+ attacker.posZ);
+ world.spawnEntity(arc);
}else{
- for(int i=0;i<8;i++){
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, world, attacker.posX + world.rand.nextFloat() - 0.5, attacker.getEntityBoundingBox().minY + attacker.height/2 + world.rand.nextFloat()*2 - 1, attacker.posZ + world.rand.nextFloat() - 0.5, 0, 0, 0, 3);
- world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, attacker.posX + world.rand.nextFloat() - 0.5, attacker.getEntityBoundingBox().minY + attacker.height/2 + world.rand.nextFloat()*2 - 1, attacker.posZ + world.rand.nextFloat() - 0.5, 0, 0, 0);
+ for(int i = 0; i < 8; i++){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, world,
+ attacker.posX + world.rand.nextFloat() - 0.5, attacker.getEntityBoundingBox().minY
+ + attacker.height / 2 + world.rand.nextFloat() * 2 - 1,
+ attacker.posZ + world.rand.nextFloat() - 0.5, 0, 0, 0, 3);
+ world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, attacker.posX + world.rand.nextFloat() - 0.5,
+ attacker.getEntityBoundingBox().minY + attacker.height / 2 + world.rand.nextFloat() * 2
+ - 1,
+ attacker.posZ + world.rand.nextFloat() - 0.5, 0, 0, 0);
}
}
- attacker.attackEntityFrom(MagicDamage.causeDirectMagicDamage(event.getEntityLiving(), DamageType.SHOCK, true), 4.0f);
+ attacker.attackEntityFrom(
+ MagicDamage.causeDirectMagicDamage(event.getEntityLiving(), DamageType.SHOCK, true), 4.0f);
attacker.playSound(WizardrySounds.SPELL_SPARK, 1.0F, world.rand.nextFloat() * 0.4F + 1.5F);
}
}
@@ -257,25 +256,29 @@ public final class WizardryEventHandler {
// Players can only ever attack with their main hand, so this is the right method to use here.
if(attacker.getHeldItemMainhand() != null && attacker.getHeldItemMainhand().getItem() instanceof ItemSword){
- int level = EnchantmentHelper.getEnchantmentLevel(WizardryEnchantments.flaming_weapon, attacker.getHeldItemMainhand());
+ int level = EnchantmentHelper.getEnchantmentLevel(WizardryEnchantments.flaming_weapon,
+ attacker.getHeldItemMainhand());
if(level > 0 && !MagicDamage.isEntityImmune(DamageType.FIRE, event.getEntityLiving()))
- event.getEntityLiving().setFire(level*4);
+ event.getEntityLiving().setFire(level * 4);
- level = EnchantmentHelper.getEnchantmentLevel(WizardryEnchantments.freezing_weapon, attacker.getHeldItemMainhand());
+ level = EnchantmentHelper.getEnchantmentLevel(WizardryEnchantments.freezing_weapon,
+ attacker.getHeldItemMainhand());
// Frost lasts for longer because it doesn't do any actual damage
if(level > 0 && !MagicDamage.isEntityImmune(DamageType.FROST, event.getEntityLiving()))
- event.getEntityLiving().addPotionEffect(new PotionEffect(WizardryPotions.frost, level*200, 0));
+ event.getEntityLiving().addPotionEffect(new PotionEffect(WizardryPotions.frost, level * 200, 0));
}
}
// Freezing bow
- if(event.getSource().getSourceOfDamage() instanceof EntityArrow && event.getSource().getSourceOfDamage().getEntityData() != null){
+ if(event.getSource().getSourceOfDamage() instanceof EntityArrow
+ && event.getSource().getSourceOfDamage().getEntityData() != null){
- int level = event.getSource().getSourceOfDamage().getEntityData().getInteger(FreezingWeapon.FREEZING_ARROW_NBT_KEY);
+ int level = event.getSource().getSourceOfDamage().getEntityData()
+ .getInteger(FreezingWeapon.FREEZING_ARROW_NBT_KEY);
if(level > 0 && !MagicDamage.isEntityImmune(DamageType.FROST, event.getEntityLiving()))
- event.getEntityLiving().addPotionEffect(new PotionEffect(WizardryPotions.frost, level*150, 0));
+ event.getEntityLiving().addPotionEffect(new PotionEffect(WizardryPotions.frost, level * 150, 0));
}
// Damage scaling
@@ -296,31 +299,28 @@ public final class WizardryEventHandler {
EntityPlayer player = (EntityPlayer)event.getEntityLiving();
- if(player.worldObj.isRemote) hackilyFixContinuousSpellCasting(player);
+ if(player.world.isRemote) hackilyFixContinuousSpellCasting(player);
+ // Mana flask crafting
if(player.openContainer instanceof ContainerWorkbench){
- craftingTableTick(player);
- }
-
- if(player.openContainer instanceof ContainerPlayer){
+
+ IInventory craftMatrix = ((ContainerWorkbench)player.openContainer).craftMatrix;
+ ItemStack output = ((ContainerWorkbench)player.openContainer).craftResult.getStackInSlot(0);
+ processManaFlaskCrafting(craftMatrix, output);
+
+ }else if(player.openContainer instanceof ContainerPlayer){
+
+ IInventory craftMatrix = ((ContainerPlayer)player.openContainer).craftMatrix;
+ ItemStack output = ((ContainerPlayer)player.openContainer).craftResult.getStackInSlot(0);
// Unfortunately I have no choice but to call this method every tick when the player isn't using another
// inventory, since the only thing tracking whether the player is looking at their inventory is the GUI
// itself, which is client-side only.
- playerInventoryTick(player);
- }
-
- testForArmourSet:{
- for(ItemStack stack : player.getArmorInventoryList()){
- if(stack == null || !(stack.getItem() instanceof ItemWizardArmour)){
- break testForArmourSet;
- }
- }
- player.addStat(WizardryAchievements.armour_set);
+ processManaFlaskCrafting(craftMatrix, output);
}
}
- if(event.getEntityLiving().worldObj.isRemote){
+ if(event.getEntityLiving().world.isRemote){
// Client-side continuous spell casting for NPCs
@@ -330,11 +330,11 @@ public final class WizardryEventHandler {
SpellModifiers modifiers = ((ISpellCaster)event.getEntity()).getModifiers();
if(spell != null && spell != Spells.none){
-
+
if(!MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Tick(event.getEntityLiving(), spell, modifiers,
SpellCastEvent.Source.NPC, 0))){
-
- spell.cast(event.getEntity().worldObj, (EntityLiving)event.getEntity(), EnumHand.MAIN_HAND, 0,
+
+ spell.cast(event.getEntity().world, (EntityLiving)event.getEntity(), EnumHand.MAIN_HAND, 0,
// TODO: This implementation of modifiers relies on them being accessible client-side.
((EntityLiving)event.getEntity()).getAttackTarget(), modifiers);
}
@@ -352,8 +352,12 @@ public final class WizardryEventHandler {
for(ItemStack stack : WizardryUtilities.getPrioritisedHotbarAndOffhand(player)){
- if(stack != null && stack.getItem() instanceof ItemWand && stack.isItemDamaged() && WandHelper.getUpgradeLevel(stack, WizardryItems.siphon_upgrade) > 0){
- int damage = stack.getItemDamage() - Constants.SIPHON_MANA_PER_LEVEL*WandHelper.getUpgradeLevel(stack, WizardryItems.siphon_upgrade) - player.worldObj.rand.nextInt(Constants.SIPHON_MANA_PER_LEVEL);
+ if(stack.getItem() instanceof ItemWand && stack.isItemDamaged()
+ && WandHelper.getUpgradeLevel(stack, WizardryItems.siphon_upgrade) > 0){
+ int damage = stack.getItemDamage()
+ - Constants.SIPHON_MANA_PER_LEVEL
+ * WandHelper.getUpgradeLevel(stack, WizardryItems.siphon_upgrade)
+ - player.world.rand.nextInt(Constants.SIPHON_MANA_PER_LEVEL);
if(damage < 0) damage = 0;
stack.setItemDamage(damage);
break;
@@ -373,17 +377,19 @@ public final class WizardryEventHandler {
// Evil wizards drop spell books themselves
if(event.getEntityLiving() instanceof IMob && !(event.getEntityLiving() instanceof EntityEvilWizard)
// TODO: Backport when you backport the new summoned creature system.
- && !(event.getEntityLiving() instanceof ISummonedCreature) && event.getSource().getEntity() instanceof EntityPlayer
- && Wizardry.settings.spellBookDropChance > 0){
+ && !(event.getEntityLiving() instanceof ISummonedCreature)
+ && event.getSource().getEntity() instanceof EntityPlayer && Wizardry.settings.spellBookDropChance > 0){
// This does exactly what the entity drop method does, but with a different random number so that the
// spell book doesn't always drop with other rare drops.
- int rareDropNumber = event.getEntity().worldObj.rand.nextInt(200) - event.getLootingLevel();
+ int rareDropNumber = event.getEntity().world.rand.nextInt(200) - event.getLootingLevel();
if(rareDropNumber < Wizardry.settings.spellBookDropChance){
// Drops a spell book
- int id = WizardryUtilities.getStandardWeightedRandomSpellId(event.getEntity().worldObj.rand);
+ int id = WizardryUtilities.getStandardWeightedRandomSpellId(event.getEntity().world.rand);
- event.getDrops().add(new EntityItem(event.getEntityLiving().worldObj, event.getEntityLiving().posX, event.getEntityLiving().posY, event.getEntityLiving().posZ,
+ event.getDrops()
+ .add(new EntityItem(event.getEntityLiving().world, event.getEntityLiving().posX,
+ event.getEntityLiving().posY, event.getEntityLiving().posZ,
new ItemStack(WizardryItems.spell_book, 1, id)));
}
}
@@ -395,13 +401,14 @@ public final class WizardryEventHandler {
event.getEntityPlayer().addStat(WizardryAchievements.crystal, 1);
}
}
-
+
// Private helper methods
// ================================================================================================================
/**
* Detects inconsistencies between player.getActiveItemStack and the actual itemstack and forces them to be equal.
* Fixes issue #25.
+ *
* @param player
*/
private static void hackilyFixContinuousSpellCasting(EntityPlayer player){
@@ -414,97 +421,47 @@ public final class WizardryEventHandler {
}
}
- private static void playerInventoryTick(EntityPlayer player){
+ private static void processManaFlaskCrafting(IInventory craftMatrix, ItemStack output){
// Charges wand using mana flask. It is here rather than in the crafting handler so the result displays
// the proper damage before it is actually crafted.
boolean flag = false;
- ItemStack wand = null;
- ItemStack armour = null;
- IInventory craftMatrix = ((ContainerPlayer)player.openContainer).craftMatrix;
- ItemStack outputItem = ((ContainerPlayer)player.openContainer).craftResult.getStackInSlot(0);
+ ItemStack wand = ItemStack.EMPTY;
+ ItemStack armour = ItemStack.EMPTY;
for(int i = 0; i < craftMatrix.getSizeInventory(); i++){
- if(craftMatrix.getStackInSlot(i) != null){
- ItemStack itemstack = craftMatrix.getStackInSlot(i);
+
+ ItemStack itemstack = craftMatrix.getStackInSlot(i);
- if(itemstack.getItem() == WizardryItems.mana_flask){
- flag = true;
- }
+ if(itemstack.getItem() == WizardryItems.mana_flask){
+ flag = true;
+ }
- if(itemstack.getItem() instanceof ItemWand){
- wand = itemstack;
- }
+ if(itemstack.getItem() instanceof ItemWand){
+ wand = itemstack;
+ }
- if(itemstack.getItem() instanceof ItemWizardArmour){
- armour = itemstack;
- }
+ if(itemstack.getItem() instanceof ItemWizardArmour){
+ armour = itemstack;
}
}
- if(outputItem != null && outputItem.getItem() instanceof ItemWand && flag && wand != null){
- outputItem.setTagCompound((wand.getTagCompound()));
- if(wand.getItemDamage()-Constants.MANA_PER_FLASK < 0){
- outputItem.setItemDamage(0);
+ if(output.getItem() instanceof ItemWand && flag && !wand.isEmpty()){
+ output.setTagCompound((wand.getTagCompound()));
+ if(wand.getItemDamage() - Constants.MANA_PER_FLASK < 0){
+ output.setItemDamage(0);
}else{
- outputItem.setItemDamage(wand.getItemDamage()-Constants.MANA_PER_FLASK);
+ output.setItemDamage(wand.getItemDamage() - Constants.MANA_PER_FLASK);
}
}
- if(outputItem != null && outputItem.getItem() instanceof ItemWizardArmour && flag && armour != null){
- outputItem.setTagCompound((armour.getTagCompound()));
- if(armour.getItemDamage()-Constants.MANA_PER_FLASK < 0){
- outputItem.setItemDamage(0);
+ if(output.getItem() instanceof ItemWizardArmour && flag && !armour.isEmpty()){
+ output.setTagCompound((armour.getTagCompound()));
+ if(armour.getItemDamage() - Constants.MANA_PER_FLASK < 0){
+ output.setItemDamage(0);
}else{
- outputItem.setItemDamage(wand.getItemDamage()-Constants.MANA_PER_FLASK);
- }
- }
- }
-
- private static void craftingTableTick(EntityPlayer player) {
-
- // Charges wand using mana flask
-
- boolean flag = false;
- ItemStack wand = null;
- ItemStack armour = null;
- IInventory craftMatrix = ((ContainerWorkbench)player.openContainer).craftMatrix;
- ItemStack outputItem = ((ContainerWorkbench)player.openContainer).craftResult.getStackInSlot(0);
-
- for (int i = 0; i < craftMatrix.getSizeInventory(); i++){
- if(craftMatrix.getStackInSlot(i) != null){
- ItemStack itemstack = craftMatrix.getStackInSlot(i);
-
- if(itemstack.getItem() == WizardryItems.mana_flask){
- flag = true;
- }
-
- if(itemstack.getItem() instanceof ItemWand){
- wand = itemstack;
- }
-
- if(itemstack.getItem() instanceof ItemWizardArmour){
- armour = itemstack;
- }
- }
- }
-
- if(outputItem != null && outputItem.getItem() instanceof ItemWand && flag && wand != null){
- outputItem.setTagCompound((wand.getTagCompound()));
- if(wand.getItemDamage()-Constants.MANA_PER_FLASK < 0){
- outputItem.setItemDamage(0);
- }else{
- outputItem.setItemDamage(wand.getItemDamage()-Constants.MANA_PER_FLASK);
- }
- }
-
- if(outputItem != null && outputItem.getItem() instanceof ItemWizardArmour && flag && armour != null){
- outputItem.setTagCompound((armour.getTagCompound()));
- if(armour.getItemDamage()-Constants.MANA_PER_FLASK < 0){
- outputItem.setItemDamage(0);
- }else{
- outputItem.setItemDamage(wand.getItemDamage()-Constants.MANA_PER_FLASK);
+ output.setItemDamage(wand.getItemDamage() - Constants.MANA_PER_FLASK);
}
}
}
diff --git a/src/main/java/electroblob/wizardry/WizardryGuiFactory.java b/src/main/java/electroblob/wizardry/WizardryGuiFactory.java
index 0f7c0161..6920e745 100644
--- a/src/main/java/electroblob/wizardry/WizardryGuiFactory.java
+++ b/src/main/java/electroblob/wizardry/WizardryGuiFactory.java
@@ -8,29 +8,34 @@ import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.fml.client.IModGuiFactory;
public class WizardryGuiFactory implements IModGuiFactory {
-
- @Override
- public void initialize(Minecraft minecraftInstance)
- {
-
- }
-
- @Override
- public Class extends GuiScreen> mainConfigGuiClass()
- {
- return GuiConfigWizardry.class;
- }
-
- @Override
- public Set runtimeGuiCategories()
- {
- return null;
- }
-
- @SuppressWarnings("deprecation") // It's a bit of Forge that hasn't been tidied up, but we have to implement it.
+
@Override
- public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element)
- {
- return null;
- }
+ public void initialize(Minecraft minecraftInstance){
+ }
+
+ @Override
+ public Class extends GuiScreen> mainConfigGuiClass(){
+ return GuiConfigWizardry.class;
+ }
+
+ @Override
+ public Set runtimeGuiCategories(){
+ return null;
+ }
+
+ @SuppressWarnings("deprecation") // It's a bit of Forge that hasn't been tidied up, but we have to implement it.
+ @Override
+ public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element){
+ return null;
+ }
+
+ @Override
+ public boolean hasConfigGui(){
+ return true;
+ }
+
+ @Override
+ public GuiScreen createConfigGui(GuiScreen parentScreen){
+ return new GuiConfigWizardry(parentScreen);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/electroblob/wizardry/WizardryGuiHandler.java b/src/main/java/electroblob/wizardry/WizardryGuiHandler.java
index ad17f45d..321c9df8 100644
--- a/src/main/java/electroblob/wizardry/WizardryGuiHandler.java
+++ b/src/main/java/electroblob/wizardry/WizardryGuiHandler.java
@@ -16,49 +16,48 @@ public class WizardryGuiHandler implements IGuiHandler {
/** Incrementable index for the gui ID */
private static int nextGuiId = 0;
-
+
public static final int SPELL_BOOK = nextGuiId++;
public static final int ARCANE_WORKBENCH = nextGuiId++;
public static final int WIZARD_HANDBOOK = nextGuiId++;
public static final int PORTABLE_CRAFTING = nextGuiId++;
@Override
- public Object getServerGuiElement(int id, EntityPlayer player, World world,
- int x, int y, int z) {
+ public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z){
if(id == ARCANE_WORKBENCH){
TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z));
if(tileEntity instanceof TileEntityArcaneWorkbench){
- return new ContainerArcaneWorkbench(player.inventory, (TileEntityArcaneWorkbench) tileEntity);
+ return new ContainerArcaneWorkbench(player.inventory, (TileEntityArcaneWorkbench)tileEntity);
}
- }
- else if(id == PORTABLE_CRAFTING){
+ }else if(id == PORTABLE_CRAFTING){
return new ContainerPortableWorkbench(player.inventory, world, new BlockPos(x, y, z));
}
return null;
}
@Override
- public Object getClientGuiElement(int id, EntityPlayer player, World world,
- int x, int y, int z) {
+ public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z){
if(id == ARCANE_WORKBENCH){
TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z));
if(tileEntity instanceof TileEntityArcaneWorkbench){
- return new electroblob.wizardry.client.GuiArcaneWorkbench(player.inventory, (TileEntityArcaneWorkbench) tileEntity);
+ return new electroblob.wizardry.client.GuiArcaneWorkbench(player.inventory,
+ (TileEntityArcaneWorkbench)tileEntity);
}
- }
- else if(id == WIZARD_HANDBOOK
- && ((player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemWizardHandbook)
- || (player.getHeldItemOffhand() != null && player.getHeldItemOffhand().getItem() instanceof ItemWizardHandbook))){
+ }else if(id == WIZARD_HANDBOOK && ((player.getHeldItemMainhand() != null
+ && player.getHeldItemMainhand().getItem() instanceof ItemWizardHandbook)
+ || (player.getHeldItemOffhand() != null
+ && player.getHeldItemOffhand().getItem() instanceof ItemWizardHandbook))){
return new electroblob.wizardry.client.GuiWizardHandbook();
- }
- else if(id == SPELL_BOOK){
+ }else if(id == SPELL_BOOK){
if(player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemSpellBook){
- return new electroblob.wizardry.client.GuiSpellBook(Spell.get(player.getHeldItemMainhand().getItemDamage()));
- }else if(player.getHeldItemOffhand() != null && player.getHeldItemOffhand().getItem() instanceof ItemSpellBook){
- return new electroblob.wizardry.client.GuiSpellBook(Spell.get(player.getHeldItemOffhand().getItemDamage()));
+ return new electroblob.wizardry.client.GuiSpellBook(
+ Spell.get(player.getHeldItemMainhand().getItemDamage()));
+ }else if(player.getHeldItemOffhand() != null
+ && player.getHeldItemOffhand().getItem() instanceof ItemSpellBook){
+ return new electroblob.wizardry.client.GuiSpellBook(
+ Spell.get(player.getHeldItemOffhand().getItemDamage()));
}
- }
- else if(id == PORTABLE_CRAFTING){
+ }else if(id == PORTABLE_CRAFTING){
return new electroblob.wizardry.client.GuiPortableCrafting(player.inventory, world, new BlockPos(x, y, z));
}
return null;
diff --git a/src/main/java/electroblob/wizardry/WizardryKeyHandler.java b/src/main/java/electroblob/wizardry/WizardryKeyHandler.java
index 9cfc7ab9..99852c4c 100644
--- a/src/main/java/electroblob/wizardry/WizardryKeyHandler.java
+++ b/src/main/java/electroblob/wizardry/WizardryKeyHandler.java
@@ -12,47 +12,48 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
public class WizardryKeyHandler {
- boolean NkeyPressed = false;
- boolean BkeyPressed = false;
- boolean NkeyAlreadyPressed = false;
- boolean BkeyAlreadyPressed = false;
-
- @SubscribeEvent
- public void onKeyInput(InputEvent.KeyInputEvent event) {
-
+ boolean NkeyPressed = false;
+ boolean BkeyPressed = false;
+ boolean NkeyAlreadyPressed = false;
+ boolean BkeyAlreadyPressed = false;
+
+ @SubscribeEvent
+ public void onKeyInput(InputEvent.KeyInputEvent event){
+
// Key pressed
if(Keyboard.getEventKeyState()){
-
+
if(Wizardry.proxy instanceof ClientProxy){
-
+
if(ClientProxy.NEXT_SPELL.isPressed() && Minecraft.getMinecraft().inGameHasFocus){
- if(!NkeyPressed){
- NkeyPressed = true;
- }else{
- NkeyAlreadyPressed = true;
- }
- if(!NkeyAlreadyPressed){
- // Packet building
- IMessage msg = new PacketControlInput.Message(PacketControlInput.ControlType.NEXT_SPELL_KEY);
- WizardryPacketHandler.net.sendToServer(msg);
- }
- }
-
- if(ClientProxy.PREVIOUS_SPELL.isPressed() && Minecraft.getMinecraft().inGameHasFocus){
- if(!BkeyPressed){
- BkeyPressed = true;
- }else{
- BkeyAlreadyPressed = true;
- }
- if(!BkeyAlreadyPressed){
- // Packet building
- IMessage msg = new PacketControlInput.Message(PacketControlInput.ControlType.PREVIOUS_SPELL_KEY);
- WizardryPacketHandler.net.sendToServer(msg);
- }
- }
+ if(!NkeyPressed){
+ NkeyPressed = true;
+ }else{
+ NkeyAlreadyPressed = true;
+ }
+ if(!NkeyAlreadyPressed){
+ // Packet building
+ IMessage msg = new PacketControlInput.Message(PacketControlInput.ControlType.NEXT_SPELL_KEY);
+ WizardryPacketHandler.net.sendToServer(msg);
+ }
+ }
+
+ if(ClientProxy.PREVIOUS_SPELL.isPressed() && Minecraft.getMinecraft().inGameHasFocus){
+ if(!BkeyPressed){
+ BkeyPressed = true;
+ }else{
+ BkeyAlreadyPressed = true;
+ }
+ if(!BkeyAlreadyPressed){
+ // Packet building
+ IMessage msg = new PacketControlInput.Message(
+ PacketControlInput.ControlType.PREVIOUS_SPELL_KEY);
+ WizardryPacketHandler.net.sendToServer(msg);
+ }
+ }
}
}
-
+
// Key released
else{
if(NkeyPressed){
diff --git a/src/main/java/electroblob/wizardry/WizardryWorldGenerator.java b/src/main/java/electroblob/wizardry/WizardryWorldGenerator.java
index 74fdab00..29d29ce9 100644
--- a/src/main/java/electroblob/wizardry/WizardryWorldGenerator.java
+++ b/src/main/java/electroblob/wizardry/WizardryWorldGenerator.java
@@ -16,8 +16,8 @@ import net.minecraft.block.BlockLeaves;
import net.minecraft.block.BlockLiquid;
import net.minecraft.block.BlockPlanks;
import net.minecraft.block.BlockSlab;
-import net.minecraft.block.BlockTorch;
import net.minecraft.block.BlockSlab.EnumBlockHalf;
+import net.minecraft.block.BlockTorch;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Biomes;
import net.minecraft.init.Blocks;
@@ -40,30 +40,35 @@ import net.minecraftforge.common.IPlantable;
import net.minecraftforge.fml.common.IWorldGenerator;
public class WizardryWorldGenerator implements IWorldGenerator {
-
+
/** The string identifier for wizard tower chests, used in ChestGenHooks. */
public static final String WIZARD_TOWER = Wizardry.MODID + "wizardTower";
@Override
- public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider){
+ public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator,
+ IChunkProvider chunkProvider){
for(int id : Wizardry.settings.oreDimensions){
- if(id == world.provider.getDimension()) this.addOreSpawn(WizardryBlocks.crystal_ore.getDefaultState(), world, random, chunkX * 16, chunkZ * 16, 16, 16, 5, 7, 5, 30);
+ if(id == world.provider.getDimension()) this.addOreSpawn(WizardryBlocks.crystal_ore.getDefaultState(),
+ world, random, chunkX * 16, chunkZ * 16, 16, 16, 5, 7, 5, 30);
}
for(int id : Wizardry.settings.flowerDimensions){
- if(id == world.provider.getDimension()) this.generatePlant(WizardryBlocks.crystal_flower.getDefaultState(), world, random, chunkX * 16, chunkZ * 16, 2, 20);
+ if(id == world.provider.getDimension()) this.generatePlant(WizardryBlocks.crystal_flower.getDefaultState(),
+ world, random, chunkX * 16, chunkZ * 16, 2, 20);
}
if(world.getWorldInfo().isMapFeaturesEnabled()){
for(int id : Wizardry.settings.towerDimensions){
- if(id == world.provider.getDimension()) this.generateWizardTower(world, random, chunkX * 16, chunkZ * 16);
+ if(id == world.provider.getDimension())
+ this.generateWizardTower(world, random, chunkX * 16, chunkZ * 16);
}
}
}
/**
- * Adds an Ore Spawn to Minecraft. Simply register all Ores to spawn with this method in your Generation method in your IWorldGeneration extending Class
+ * Adds an Ore Spawn to Minecraft. Simply register all Ores to spawn with this method in your Generation method in
+ * your IWorldGeneration extending Class
*
* @param The Block to spawn
* @param The World to spawn in
@@ -77,18 +82,17 @@ public class WizardryWorldGenerator implements IWorldGenerator {
* @param An int for the minimum Y-Coordinate height at which this block may spawn
* @param An int for the maximum Y-Coordinate height at which this block may spawn
**/
- public void addOreSpawn(IBlockState state, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, int chancesToSpawn, int minY, int maxY)
- {
- //int maxPossY = minY + (maxY - 1);
- assert maxY > minY: "The maximum Y must be greater than the Minimum Y";
- assert maxX > 0 && maxX <= 16: "addOreSpawn: The Maximum X must be greater than 0 and less than 16";
- assert minY > 0: "addOreSpawn: The Minimum Y must be greater than 0";
- assert maxY < 256 && maxY > 0: "addOreSpawn: The Maximum Y must be less than 256 but greater than 0";
- assert maxZ > 0 && maxZ <= 16: "addOreSpawn: The Maximum Z must be greater than 0 and less than 16";
+ public void addOreSpawn(IBlockState state, World world, Random random, int blockXPos, int blockZPos, int maxX,
+ int maxZ, int maxVeinSize, int chancesToSpawn, int minY, int maxY){
+ // int maxPossY = minY + (maxY - 1);
+ assert maxY > minY : "The maximum Y must be greater than the Minimum Y";
+ assert maxX > 0 && maxX <= 16 : "addOreSpawn: The Maximum X must be greater than 0 and less than 16";
+ assert minY > 0 : "addOreSpawn: The Minimum Y must be greater than 0";
+ assert maxY < 256 && maxY > 0 : "addOreSpawn: The Maximum Y must be less than 256 but greater than 0";
+ assert maxZ > 0 && maxZ <= 16 : "addOreSpawn: The Maximum Z must be greater than 0 and less than 16";
int diffBtwnMinMaxY = maxY - minY;
- for(int x = 0; x < chancesToSpawn; x++)
- {
+ for(int x = 0; x < chancesToSpawn; x++){
int posX = blockXPos + random.nextInt(maxX);
int posY = minY + random.nextInt(diffBtwnMinMaxY);
int posZ = blockZPos + random.nextInt(maxZ);
@@ -98,6 +102,7 @@ public class WizardryWorldGenerator implements IWorldGenerator {
/**
* Generates the specified plant randomly throughout the world.
+ *
* @param block The plant block
* @param world The world
* @param random A random instance
@@ -106,22 +111,23 @@ public class WizardryWorldGenerator implements IWorldGenerator {
* @param chancesToSpawn Number of chances to spawn a flower patch
* @param groupSize The number of times to try generating a flower per flower patch spawn
*/
- public void generatePlant(IBlockState state, World world, Random random, int x, int z, int chancesToSpawn, int groupSize){
-
+ public void generatePlant(IBlockState state, World world, Random random, int x, int z, int chancesToSpawn,
+ int groupSize){
+
for(int i = 0; i < chancesToSpawn; i++){
int randPosX = x + random.nextInt(16);
int randPosY = random.nextInt(256);
int randPosZ = z + random.nextInt(16);
- for (int l = 0; l < groupSize; ++l)
- {
+ for(int l = 0; l < groupSize; ++l){
int i1 = randPosX + random.nextInt(8) - random.nextInt(8);
int j1 = randPosY + random.nextInt(4) - random.nextInt(4);
int k1 = randPosZ + random.nextInt(8) - random.nextInt(8);
-
+
BlockPos pos = new BlockPos(i1, j1, k1);
- if(world.isBlockLoaded(pos) && world.isAirBlock(pos) && (!world.provider.getHasNoSky() || j1 < 127) && state.getBlock().canPlaceBlockOnSide(world, pos, EnumFacing.UP)){
-
+ if(world.isBlockLoaded(pos) && world.isAirBlock(pos) && (!world.provider.hasNoSky() || j1 < 127)
+ && state.getBlock().canPlaceBlockOnSide(world, pos, EnumFacing.UP)){
+
world.setBlockState(pos, state, 2);
}
}
@@ -135,92 +141,106 @@ public class WizardryWorldGenerator implements IWorldGenerator {
// Allows the config file to set the rarity value to 0 to disable tower generation completely.
if(Wizardry.settings.towerRarity == 0) return;
-
- // Compensates for the lack of space in forests. Math.max is required since treeless biomes have treesPerChunk = -999
- //double treeFactor = 70 - Math.max((double)world.getBiomeGenForCoords(chunkX, chunkZ).theBiomeDecorator.treesPerChunk, 0) * 1.5d;
+
+ // Compensates for the lack of space in forests. Math.max is required since treeless biomes have treesPerChunk =
+ // -999
+ // double treeFactor = 70 - Math.max((double)world.getBiomeGenForCoords(chunkX,
+ // chunkZ).theBiomeDecorator.treesPerChunk, 0) * 1.5d;
// Multiplied by 70 to (roughly) retain the old rarity scale
if(random.nextInt((int)(Wizardry.settings.towerRarity * 70)) == 0){
-
+
BlockPos origin = new BlockPos(chunkX + random.nextInt(16), 0, chunkZ + random.nextInt(16));
-
+
// Despite what its name suggests, this method does not return the position of a liquid. It is in fact
// exactly what is needed here since it is used for placing villages and stuff, and doesn't include leaves
// or other foliage.
origin = origin.up(world.getTopSolidOrLiquidBlock(origin).getY() - 1);
-
+
int[][][] towerBlueprint = towerBlueprintSmall;
-
+
switch(random.nextInt(4)){
- case 0: towerBlueprint = towerBlueprintSmall; break;
- case 1: towerBlueprint = towerBlueprintMedium; break;
- case 2: towerBlueprint = towerBlueprintTall; break;
- case 3: towerBlueprint = towerBlueprintDouble; break;
+ case 0:
+ towerBlueprint = towerBlueprintSmall;
+ break;
+ case 1:
+ towerBlueprint = towerBlueprintMedium;
+ break;
+ case 2:
+ towerBlueprint = towerBlueprintTall;
+ break;
+ case 3:
+ towerBlueprint = towerBlueprintDouble;
+ break;
}
-
+
// 0 = West, 1 = North, 2 = East, 3 = South (The way you would face when walking out of the door)
EnumFacing orientation = EnumFacing.getHorizontal(random.nextInt(4));
boolean flip = random.nextBoolean();
-
+
if(checkSpaceForTower(world, origin, towerBlueprint, orientation, flip)){
// == Setup ==
-
+
boolean evilWizard = random.nextInt(5) == 0;
-
+
IBlockState wallMaterial = Blocks.COBBLESTONE.getDefaultState();
BlockPlanks.EnumType woodType = BlockPlanks.EnumType.OAK;
-
+
Biome biome = world.getBiome(origin);
- // The order of these is somewhat important in that biomes can be many types, so the last of these checks
+ // The order of these is somewhat important in that biomes can be many types, so the last of these
+ // checks
// that is true gets priority. Generally speaking, the later the check, the more specific it is.
- if(BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.DENSE)) wallMaterial = Blocks.MOSSY_COBBLESTONE.getDefaultState();
- if(BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.SWAMP)) wallMaterial = Blocks.MOSSY_COBBLESTONE.getDefaultState();
- if(BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.SANDY)) wallMaterial = Blocks.SANDSTONE.getDefaultState();
- if(BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.NETHER)) wallMaterial = Blocks.NETHER_BRICK.getDefaultState();
- if(BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.MOUNTAIN)) wallMaterial = Blocks.STONEBRICK.getDefaultState();
- if(BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.MESA)) wallMaterial = Blocks.HARDENED_CLAY.getDefaultState();
+ if(BiomeDictionary.hasType(biome, BiomeDictionary.Type.DENSE))
+ wallMaterial = Blocks.MOSSY_COBBLESTONE.getDefaultState();
+ if(BiomeDictionary.hasType(biome, BiomeDictionary.Type.SWAMP))
+ wallMaterial = Blocks.MOSSY_COBBLESTONE.getDefaultState();
+ if(BiomeDictionary.hasType(biome, BiomeDictionary.Type.SANDY))
+ wallMaterial = Blocks.SANDSTONE.getDefaultState();
+ if(BiomeDictionary.hasType(biome, BiomeDictionary.Type.NETHER))
+ wallMaterial = Blocks.NETHER_BRICK.getDefaultState();
+ if(BiomeDictionary.hasType(biome, BiomeDictionary.Type.MOUNTAIN))
+ wallMaterial = Blocks.STONEBRICK.getDefaultState();
+ if(BiomeDictionary.hasType(biome, BiomeDictionary.Type.MESA))
+ wallMaterial = Blocks.HARDENED_CLAY.getDefaultState();
// Unfortunately, I can't check all the wood types with the biome dictionary
- if(BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.CONIFEROUS)) woodType = BlockPlanks.EnumType.SPRUCE;
- if(biome == Biomes.BIRCH_FOREST || biome == Biomes.BIRCH_FOREST_HILLS) woodType = BlockPlanks.EnumType.BIRCH;
- if(BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.JUNGLE)) woodType = BlockPlanks.EnumType.JUNGLE;
- if(BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.SAVANNA)) woodType = BlockPlanks.EnumType.ACACIA;
+ if(BiomeDictionary.hasType(biome, BiomeDictionary.Type.CONIFEROUS))
+ woodType = BlockPlanks.EnumType.SPRUCE;
+ if(biome == Biomes.BIRCH_FOREST || biome == Biomes.BIRCH_FOREST_HILLS)
+ woodType = BlockPlanks.EnumType.BIRCH;
+ if(BiomeDictionary.hasType(biome, BiomeDictionary.Type.JUNGLE)) woodType = BlockPlanks.EnumType.JUNGLE;
+ if(BiomeDictionary.hasType(biome, BiomeDictionary.Type.SAVANNA)) woodType = BlockPlanks.EnumType.ACACIA;
// Not technically a tree type, but I think it fits quite well anyway
- if(BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.SPOOKY)) woodType = BlockPlanks.EnumType.DARK_OAK;
-
- IBlockState[] blockStateList = new IBlockState[]{
- null,
- Blocks.AIR.getDefaultState(),
+ if(BiomeDictionary.hasType(biome, BiomeDictionary.Type.SPOOKY))
+ woodType = BlockPlanks.EnumType.DARK_OAK;
+
+ IBlockState[] blockStateList = new IBlockState[]{null, Blocks.AIR.getDefaultState(),
Blocks.PLANKS.getDefaultState().withProperty(BlockPlanks.VARIANT, woodType),
Blocks.BOOKSHELF.getDefaultState(),
Blocks.STAINED_HARDENED_CLAY.getDefaultState().withProperty(BlockColored.COLOR,
EnumDyeColor.values()[random.nextInt(EnumDyeColor.values().length)]),
Blocks.WOODEN_SLAB.getDefaultState().withProperty(BlockSlab.HALF, EnumBlockHalf.BOTTOM),
Blocks.WOODEN_SLAB.getDefaultState().withProperty(BlockSlab.HALF, EnumBlockHalf.TOP),
- wallMaterial,
- Blocks.GLASS_PANE.getDefaultState(),
- Blocks.OAK_DOOR.getDefaultState(),
- WizardryBlocks.arcane_workbench.getDefaultState(),
- Blocks.TORCH.getDefaultState(),
- evilWizard ? Blocks.CHEST.getDefaultState() : Blocks.BOOKSHELF.getDefaultState()
- };
-
+ wallMaterial, Blocks.GLASS_PANE.getDefaultState(), Blocks.OAK_DOOR.getDefaultState(),
+ WizardryBlocks.arcane_workbench.getDefaultState(), Blocks.TORCH.getDefaultState(),
+ evilWizard ? Blocks.CHEST.getDefaultState() : Blocks.BOOKSHELF.getDefaultState()};
+
Set blocksPlaced = new HashSet();
-
+
// == Foundations ==
-
+
// Fills in foundations. This is done first so the door always has something to be placed on.
boolean flag = true;
-
+
// BlockPos is immutable, so I'm not sure if simply saying pos1 = pos will be sufficient.
BlockPos layerCentre = new BlockPos(origin);
while(flag){
-
+
flag = false;
-
+
for(BlockPos offset : foundationLayer){
if(!world.isBlockNormalCube(layerCentre.add(offset), false)){
world.setBlockState(layerCentre.add(offset), wallMaterial);
@@ -229,57 +249,64 @@ public class WizardryWorldGenerator implements IWorldGenerator {
flag = true;
}
}
-
+
layerCentre = layerCentre.down();
}
// == Main Structure ==
-
- // It is assumed that the width of the blueprint is the same all the way up, and that the layers are square.
- int width = towerBlueprint[0].length-1;
+
+ // It is assumed that the width of the blueprint is the same all the way up, and that the layers are
+ // square.
+ int width = towerBlueprint[0].length - 1;
// x, y and z are the position the block is being put in.
// x1, y and z1 are the position in the blueprint which determines which block is being placed.
-
+
int x1 = 0, z1 = 0;
-
- for(int y=0; y 3 || world.getBlockState(pos1).getBlock() instanceof BlockLiquid)){
@@ -462,25 +499,15 @@ public class WizardryWorldGenerator implements IWorldGenerator {
}
}
}
-
+
return true;
}
-
+
/** Array of relative positions of each block in a layer of foundations. */
- private static final BlockPos[] foundationLayer = new BlockPos[]{
- new BlockPos(-2, 0, -1),
- new BlockPos(-2, 0, 0),
- new BlockPos(-2, 0, 1),
- new BlockPos(2, 0, -1),
- new BlockPos(2, 0, 0),
- new BlockPos(2, 0, 1),
- new BlockPos(-1, 0, -2),
- new BlockPos(0, 0, -2),
- new BlockPos(1, 0, -2),
- new BlockPos(-1, 0, 2),
- new BlockPos(0, 0, 2),
- new BlockPos(1, 0, 2),
- };
+ private static final BlockPos[] foundationLayer = new BlockPos[]{new BlockPos(-2, 0, -1), new BlockPos(-2, 0, 0),
+ new BlockPos(-2, 0, 1), new BlockPos(2, 0, -1), new BlockPos(2, 0, 0), new BlockPos(2, 0, 1),
+ new BlockPos(-1, 0, -2), new BlockPos(0, 0, -2), new BlockPos(1, 0, -2), new BlockPos(-1, 0, 2),
+ new BlockPos(0, 0, 2), new BlockPos(1, 0, 2),};
/**
* 3D matrix of integers representing the different blocks which make up the wizard tower. The blocks corresponding
@@ -502,189 +529,61 @@ public class WizardryWorldGenerator implements IWorldGenerator {
*/
private static final int[][][] towerBlueprintSmall = {
// x is horizontal, z is vertical, y is layers
- {
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 2, 2, 2, 0, 0, 0},
- {0, 0, 0, 2, 2, 2, 0, 0, 0},
- {0, 0, 0, 2, 2, 2, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 6, 5, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 9, 7, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 5, 1 ,1, 7, 0, 0},
- {0, 0, 7, 6, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 0, 7, 0, 0, 0},
- {0, 0, 0, 11,1, 11,0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 11,7, 0, 0},
- {0, 0, 7, 5, 6, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 6, 7, 0, 0},
- {0, 0, 7, 1, 1, 5, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 6, 5, 7, 0, 0},
- {0, 0, 7, 11,1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 5, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 2, 2, 2, 7, 0, 0},
- {0, 7, 1, 1, 1, 1, 2, 7, 0},
- {0, 7, 5, 2, 2, 6, 2, 7, 0},
- {0, 7, 2, 2, 2, 2, 2, 7, 0},
- {0, 0, 7, 2, 2, 2, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 3, 3, 3, 7, 0, 0},
- {0, 7, 1, 1, 1, 1, 3, 7, 0},
- {0, 7, 1, 1, 1, 1, 3, 7, 0},
- {0, 7, 1, 1, 10,1, 3, 7, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 7, 11,1, 11,7, 0, 0},
- {0, 7, 1, 1, 1, 1, 3, 7, 0},
- {0, 8, 1, 1, 1, 1, 3, 7, 0},
- {0, 7, 1, 1, 1, 1, 3, 7, 0},
- {0, 0, 7, 11,1, 11,7, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 4, 7, 7, 7, 4, 0, 0},
- {0, 4, 7, 1, 1, 1, 7, 4, 0},
- {4, 7, 1, 1, 1, 1, 3, 7, 4},
- {4, 7, 1, 1, 1, 1, 3, 7, 4},
- {4, 7, 1, 1, 1, 1, 12,7, 4},
- {0, 4, 7, 1, 1, 1, 7, 4, 0},
- {0, 0, 4, 7, 7, 7, 4, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 4, 1, 1, 1, 1, 1, 4, 0},
- {0, 4, 1, 1, 1, 1, 1, 4, 0},
- {0, 4, 1, 1, 1, 1, 1, 4, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 4, 1, 4, 0, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 0, 4, 1, 4, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 0, 4, 1, 4, 0, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 4, 1, 4, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- }
- };
-
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 2, 2, 2, 0, 0, 0}, {0, 0, 0, 2, 2, 2, 0, 0, 0}, {0, 0, 0, 2, 2, 2, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 6, 5, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 9, 7, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 5, 1, 1, 7, 0, 0}, {0, 0, 7, 6, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 0, 7, 0, 0, 0}, {0, 0, 0, 11, 1, 11, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 8, 7, 0, 0, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 11, 7, 0, 0}, {0, 0, 7, 5, 6, 1, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 6, 7, 0, 0}, {0, 0, 7, 1, 1, 5, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 6, 5, 7, 0, 0}, {0, 0, 7, 11, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 8, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 5, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 7, 2, 2, 2, 7, 0, 0},
+ {0, 7, 1, 1, 1, 1, 2, 7, 0}, {0, 7, 5, 2, 2, 6, 2, 7, 0}, {0, 7, 2, 2, 2, 2, 2, 7, 0},
+ {0, 0, 7, 2, 2, 2, 7, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 7, 3, 3, 3, 7, 0, 0},
+ {0, 7, 1, 1, 1, 1, 3, 7, 0}, {0, 7, 1, 1, 1, 1, 3, 7, 0}, {0, 7, 1, 1, 10, 1, 3, 7, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 8, 7, 0, 0, 0}, {0, 0, 7, 11, 1, 11, 7, 0, 0},
+ {0, 7, 1, 1, 1, 1, 3, 7, 0}, {0, 8, 1, 1, 1, 1, 3, 7, 0}, {0, 7, 1, 1, 1, 1, 3, 7, 0},
+ {0, 0, 7, 11, 1, 11, 7, 0, 0}, {0, 0, 0, 7, 8, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 4, 7, 7, 7, 4, 0, 0}, {0, 4, 7, 1, 1, 1, 7, 4, 0},
+ {4, 7, 1, 1, 1, 1, 3, 7, 4}, {4, 7, 1, 1, 1, 1, 3, 7, 4}, {4, 7, 1, 1, 1, 1, 12, 7, 4},
+ {0, 4, 7, 1, 1, 1, 7, 4, 0}, {0, 0, 4, 7, 7, 7, 4, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 4, 1, 1, 1, 4, 0, 0},
+ {0, 4, 1, 1, 1, 1, 1, 4, 0}, {0, 4, 1, 1, 1, 1, 1, 4, 0}, {0, 4, 1, 1, 1, 1, 1, 4, 0},
+ {0, 0, 4, 1, 1, 1, 4, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0},
+ {0, 0, 4, 1, 1, 1, 4, 0, 0}, {0, 0, 4, 1, 1, 1, 4, 0, 0}, {0, 0, 4, 1, 1, 1, 4, 0, 0},
+ {0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 4, 0, 0, 0, 0},
+ {0, 0, 0, 4, 1, 4, 0, 0, 0}, {0, 0, 4, 1, 1, 1, 4, 0, 0}, {0, 0, 0, 4, 1, 4, 0, 0, 0},
+ {0, 0, 0, 0, 4, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 0, 4, 1, 4, 0, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 4, 0, 0, 0, 0}, {0, 0, 0, 4, 1, 4, 0, 0, 0}, {0, 0, 0, 0, 4, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 4, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 4, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},}};
+
/**
* 3D matrix of integers representing the different blocks which make up the wizard tower. The blocks corresponding
* to each integer are as follows (note that some blocks change depending on the biome):
@@ -705,229 +604,73 @@ public class WizardryWorldGenerator implements IWorldGenerator {
*/
private static final int[][][] towerBlueprintMedium = {
// x is horizontal, z is vertical, y is layers
- {
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 2, 2, 2, 0, 0, 0},
- {0, 0, 0, 2, 2, 2, 0, 0, 0},
- {0, 0, 0, 2, 2, 2, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 6, 5, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 9, 7, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 5, 1 ,1, 7, 0, 0},
- {0, 0, 7, 6, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 0, 7, 0, 0, 0},
- {0, 0, 0, 11,1, 11,0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 11,7, 0, 0},
- {0, 0, 7, 5, 6, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 6, 7, 0, 0},
- {0, 0, 7, 1, 1, 5, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 6, 5, 7, 0, 0},
- {0, 0, 7, 11,1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 5, 1 ,1, 7, 0, 0},
- {0, 0, 7, 6, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 11,7, 0, 0},
- {0, 0, 7, 5, 6, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 6, 7, 0, 0},
- {0, 0, 7, 1, 1, 5, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 6, 5, 7, 0, 0},
- {0, 0, 7, 11,1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 5, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 2, 2, 2, 7, 0, 0},
- {0, 7, 1, 1, 1, 1, 2, 7, 0},
- {0, 7, 5, 2, 2, 6, 2, 7, 0},
- {0, 7, 2, 2, 2, 2, 2, 7, 0},
- {0, 0, 7, 2, 2, 2, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 3, 3, 3, 7, 0, 0},
- {0, 7, 1, 1, 1, 1, 3, 7, 0},
- {0, 7, 1, 1, 1, 1, 3, 7, 0},
- {0, 7, 1, 1, 10,1, 3, 7, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 7, 11,1, 11,7, 0, 0},
- {0, 7, 1, 1, 1, 1, 3, 7, 0},
- {0, 8, 1, 1, 1, 1, 3, 7, 0},
- {0, 7, 1, 1, 1, 1, 3, 7, 0},
- {0, 0, 7, 11,1, 11,7, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 4, 7, 7, 7, 4, 0, 0},
- {0, 4, 7, 1, 1, 1, 7, 4, 0},
- {4, 7, 1, 1, 1, 1, 3, 7, 4},
- {4, 7, 1, 1, 1, 1, 3, 7, 4},
- {4, 7, 1, 1, 1, 1, 12,7, 4},
- {0, 4, 7, 1, 1, 1, 7, 4, 0},
- {0, 0, 4, 7, 7, 7, 4, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 4, 1, 1, 1, 1, 1, 4, 0},
- {0, 4, 1, 1, 1, 1, 1, 4, 0},
- {0, 4, 1, 1, 1, 1, 1, 4, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 4, 1, 4, 0, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 0, 4, 1, 4, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 0, 4, 1, 4, 0, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 4, 1, 4, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- }
- };
-
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 2, 2, 2, 0, 0, 0}, {0, 0, 0, 2, 2, 2, 0, 0, 0}, {0, 0, 0, 2, 2, 2, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 6, 5, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 9, 7, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 5, 1, 1, 7, 0, 0}, {0, 0, 7, 6, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 0, 7, 0, 0, 0}, {0, 0, 0, 11, 1, 11, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 8, 7, 0, 0, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 11, 7, 0, 0}, {0, 0, 7, 5, 6, 1, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 6, 7, 0, 0}, {0, 0, 7, 1, 1, 5, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 6, 5, 7, 0, 0}, {0, 0, 7, 11, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 8, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 5, 1, 1, 7, 0, 0}, {0, 0, 7, 6, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 8, 7, 0, 0, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 11, 7, 0, 0}, {0, 0, 7, 5, 6, 1, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 6, 7, 0, 0}, {0, 0, 7, 1, 1, 5, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 6, 5, 7, 0, 0}, {0, 0, 7, 11, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 8, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 5, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 7, 2, 2, 2, 7, 0, 0},
+ {0, 7, 1, 1, 1, 1, 2, 7, 0}, {0, 7, 5, 2, 2, 6, 2, 7, 0}, {0, 7, 2, 2, 2, 2, 2, 7, 0},
+ {0, 0, 7, 2, 2, 2, 7, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 7, 3, 3, 3, 7, 0, 0},
+ {0, 7, 1, 1, 1, 1, 3, 7, 0}, {0, 7, 1, 1, 1, 1, 3, 7, 0}, {0, 7, 1, 1, 10, 1, 3, 7, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 8, 7, 0, 0, 0}, {0, 0, 7, 11, 1, 11, 7, 0, 0},
+ {0, 7, 1, 1, 1, 1, 3, 7, 0}, {0, 8, 1, 1, 1, 1, 3, 7, 0}, {0, 7, 1, 1, 1, 1, 3, 7, 0},
+ {0, 0, 7, 11, 1, 11, 7, 0, 0}, {0, 0, 0, 7, 8, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 4, 7, 7, 7, 4, 0, 0}, {0, 4, 7, 1, 1, 1, 7, 4, 0},
+ {4, 7, 1, 1, 1, 1, 3, 7, 4}, {4, 7, 1, 1, 1, 1, 3, 7, 4}, {4, 7, 1, 1, 1, 1, 12, 7, 4},
+ {0, 4, 7, 1, 1, 1, 7, 4, 0}, {0, 0, 4, 7, 7, 7, 4, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 4, 1, 1, 1, 4, 0, 0},
+ {0, 4, 1, 1, 1, 1, 1, 4, 0}, {0, 4, 1, 1, 1, 1, 1, 4, 0}, {0, 4, 1, 1, 1, 1, 1, 4, 0},
+ {0, 0, 4, 1, 1, 1, 4, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0},
+ {0, 0, 4, 1, 1, 1, 4, 0, 0}, {0, 0, 4, 1, 1, 1, 4, 0, 0}, {0, 0, 4, 1, 1, 1, 4, 0, 0},
+ {0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 4, 0, 0, 0, 0},
+ {0, 0, 0, 4, 1, 4, 0, 0, 0}, {0, 0, 4, 1, 1, 1, 4, 0, 0}, {0, 0, 0, 4, 1, 4, 0, 0, 0},
+ {0, 0, 0, 0, 4, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 0, 4, 1, 4, 0, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 4, 0, 0, 0, 0}, {0, 0, 0, 4, 1, 4, 0, 0, 0}, {0, 0, 0, 0, 4, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 4, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 4, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},}};
+
/**
* 3D matrix of integers representing the different blocks which make up the wizard tower. The blocks corresponding
* to each integer are as follows (note that some blocks change depending on the biome):
@@ -948,268 +691,84 @@ public class WizardryWorldGenerator implements IWorldGenerator {
*/
private static final int[][][] towerBlueprintTall = {
// x is horizontal, z is vertical, y is layers
- {
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 2, 2, 2, 0, 0, 0},
- {0, 0, 0, 2, 2, 2, 0, 0, 0},
- {0, 0, 0, 2, 2, 2, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 6, 5, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 9, 7, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 5, 1 ,1, 7, 0, 0},
- {0, 0, 7, 6, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 0, 7, 0, 0, 0},
- {0, 0, 0, 11,1, 11,0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 11,7, 0, 0},
- {0, 0, 7, 5, 6, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 6, 7, 0, 0},
- {0, 0, 7, 1, 1, 5, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- {0, 0, 0, 1, 1, 1, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 6, 5, 7, 0, 0},
- {0, 0, 7, 11,1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 5, 1 ,1, 7, 0, 0},
- {0, 0, 7, 6, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 11,7, 0, 0},
- {0, 0, 7, 5, 6, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 6, 7, 0, 0},
- {0, 0, 7, 1, 1, 5, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 6, 5, 7, 0, 0},
- {0, 0, 7, 11,1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 5, 1 ,1, 7, 0, 0},
- {0, 0, 7, 6, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 11,7, 0, 0},
- {0, 0, 7, 5, 6, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 6, 7, 0, 0},
- {0, 0, 7, 1, 1, 5, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 1, 6, 5, 7, 0, 0},
- {0, 0, 7, 11,1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 5, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 2, 2, 2, 7, 0, 0},
- {0, 7, 1, 1, 1, 1, 2, 7, 0},
- {0, 7, 5, 2, 2, 6, 2, 7, 0},
- {0, 7, 2, 2, 2, 2, 2, 7, 0},
- {0, 0, 7, 2, 2, 2, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 7, 3, 3, 3, 7, 0, 0},
- {0, 7, 1, 1, 1, 1, 3, 7, 0},
- {0, 7, 1, 1, 1, 1, 3, 7, 0},
- {0, 7, 1, 1, 10,1, 3, 7, 0},
- {0, 0, 7, 1, 1, 1, 7, 0, 0},
- {0, 0, 0, 7, 7, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 7, 11,1, 11,7, 0, 0},
- {0, 7, 1, 1, 1, 1, 3, 7, 0},
- {0, 8, 1, 1, 1, 1, 3, 7, 0},
- {0, 7, 1, 1, 1, 1, 3, 7, 0},
- {0, 0, 7, 11,1, 11,7, 0, 0},
- {0, 0, 0, 7, 8, 7, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 4, 7, 7, 7, 4, 0, 0},
- {0, 4, 7, 1, 1, 1, 7, 4, 0},
- {4, 7, 1, 1, 1, 1, 3, 7, 4},
- {4, 7, 1, 1, 1, 1, 3, 7, 4},
- {4, 7, 1, 1, 1, 1, 12,7, 4},
- {0, 4, 7, 1, 1, 1, 7, 4, 0},
- {0, 0, 4, 7, 7, 7, 4, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 4, 1, 1, 1, 1, 1, 4, 0},
- {0, 4, 1, 1, 1, 1, 1, 4, 0},
- {0, 4, 1, 1, 1, 1, 1, 4, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 4, 1, 4, 0, 0, 0},
- {0, 0, 4, 1, 1, 1, 4, 0, 0},
- {0, 0, 0, 4, 1, 4, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 0, 4, 1, 4, 0, 0, 0},
- {0, 0, 0, 4, 4, 4, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 4, 1, 4, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0},
- }
- };
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 2, 2, 2, 0, 0, 0}, {0, 0, 0, 2, 2, 2, 0, 0, 0}, {0, 0, 0, 2, 2, 2, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 6, 5, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 9, 7, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 5, 1, 1, 7, 0, 0}, {0, 0, 7, 6, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 0, 7, 0, 0, 0}, {0, 0, 0, 11, 1, 11, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 8, 7, 0, 0, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 11, 7, 0, 0}, {0, 0, 7, 5, 6, 1, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 6, 7, 0, 0}, {0, 0, 7, 1, 1, 5, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 6, 5, 7, 0, 0}, {0, 0, 7, 11, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 8, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 5, 1, 1, 7, 0, 0}, {0, 0, 7, 6, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 8, 7, 0, 0, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 11, 7, 0, 0}, {0, 0, 7, 5, 6, 1, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 6, 7, 0, 0}, {0, 0, 7, 1, 1, 5, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 6, 5, 7, 0, 0}, {0, 0, 7, 11, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 8, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 5, 1, 1, 7, 0, 0}, {0, 0, 7, 6, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 8, 7, 0, 0, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 11, 7, 0, 0}, {0, 0, 7, 5, 6, 1, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 6, 7, 0, 0}, {0, 0, 7, 1, 1, 5, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 1, 6, 5, 7, 0, 0}, {0, 0, 7, 11, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 8, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0},
+ {0, 0, 7, 5, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 7, 1, 1, 1, 7, 0, 0},
+ {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 7, 2, 2, 2, 7, 0, 0},
+ {0, 7, 1, 1, 1, 1, 2, 7, 0}, {0, 7, 5, 2, 2, 6, 2, 7, 0}, {0, 7, 2, 2, 2, 2, 2, 7, 0},
+ {0, 0, 7, 2, 2, 2, 7, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 7, 3, 3, 3, 7, 0, 0},
+ {0, 7, 1, 1, 1, 1, 3, 7, 0}, {0, 7, 1, 1, 1, 1, 3, 7, 0}, {0, 7, 1, 1, 10, 1, 3, 7, 0},
+ {0, 0, 7, 1, 1, 1, 7, 0, 0}, {0, 0, 0, 7, 7, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 7, 8, 7, 0, 0, 0}, {0, 0, 7, 11, 1, 11, 7, 0, 0},
+ {0, 7, 1, 1, 1, 1, 3, 7, 0}, {0, 8, 1, 1, 1, 1, 3, 7, 0}, {0, 7, 1, 1, 1, 1, 3, 7, 0},
+ {0, 0, 7, 11, 1, 11, 7, 0, 0}, {0, 0, 0, 7, 8, 7, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 4, 7, 7, 7, 4, 0, 0}, {0, 4, 7, 1, 1, 1, 7, 4, 0},
+ {4, 7, 1, 1, 1, 1, 3, 7, 4}, {4, 7, 1, 1, 1, 1, 3, 7, 4}, {4, 7, 1, 1, 1, 1, 12, 7, 4},
+ {0, 4, 7, 1, 1, 1, 7, 4, 0}, {0, 0, 4, 7, 7, 7, 4, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 4, 1, 1, 1, 4, 0, 0},
+ {0, 4, 1, 1, 1, 1, 1, 4, 0}, {0, 4, 1, 1, 1, 1, 1, 4, 0}, {0, 4, 1, 1, 1, 1, 1, 4, 0},
+ {0, 0, 4, 1, 1, 1, 4, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0},
+ {0, 0, 4, 1, 1, 1, 4, 0, 0}, {0, 0, 4, 1, 1, 1, 4, 0, 0}, {0, 0, 4, 1, 1, 1, 4, 0, 0},
+ {0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 4, 0, 0, 0, 0},
+ {0, 0, 0, 4, 1, 4, 0, 0, 0}, {0, 0, 4, 1, 1, 1, 4, 0, 0}, {0, 0, 0, 4, 1, 4, 0, 0, 0},
+ {0, 0, 0, 0, 4, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 4, 4, 4, 0, 0, 0}, {0, 0, 0, 4, 1, 4, 0, 0, 0}, {0, 0, 0, 4, 4, 4, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 4, 0, 0, 0, 0}, {0, 0, 0, 4, 1, 4, 0, 0, 0}, {0, 0, 0, 0, 4, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 4, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 4, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0},}};
/**
* 3D matrix of integers representing the different blocks which make up the wizard tower. The blocks corresponding
@@ -1231,316 +790,159 @@ public class WizardryWorldGenerator implements IWorldGenerator {
*/
private static final int[][][] towerBlueprintDouble = {
// x is horizontal, z is vertical, y is layers
- {
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 6, 5, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 9, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 5, 1 ,1, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 6, 1, 1, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 11,1, 11,0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 1, 11,7, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 5, 6, 1, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 1, 6, 7, 7, 7, 0, 0},
- {0, 0, 0, 0, 7, 1, 1, 5, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 6, 5, 7, 7, 7, 0, 0},
- {0, 0, 0, 0, 7, 11,1, 1, 1, 1, 1, 7, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 7, 7, 0, 0},
- {0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 5, 1 ,1, 7, 7, 8, 7, 0},
- {0, 0, 0, 0, 7, 6, 1, 1, 1, 1, 1, 8, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 7, 8, 7, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 8, 7, 0, 4, 4, 4, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 7, 7, 7, 4},
- {0, 0, 0, 0, 7, 1, 1, 11,7, 1, 1, 7, 4},
- {0, 0, 0, 0, 7, 5, 6, 1, 7, 7, 7, 7, 4},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 4, 4, 4, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 4, 4, 4, 0},
- {0, 0, 0, 0, 7, 1, 1, 6, 7, 4, 1, 4, 0},
- {0, 0, 0, 0, 7, 1, 1, 5, 7, 4, 4, 4, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 6, 5, 7, 0, 4, 0, 0},
- {0, 0, 0, 0, 7, 11,1, 1, 7, 4, 1, 4, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 4, 0, 0},
- {0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 5, 1, 1, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 4, 0, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 2, 2, 2, 7, 0, 0, 0, 0},
- {0, 0, 0, 7, 1, 1, 1, 1, 2, 7, 0, 0, 0},
- {0, 0, 0, 7, 5, 2, 2, 6, 2, 7, 4, 0, 0},
- {0, 0, 0, 7, 2, 2, 2, 2, 2, 7, 0, 0, 0},
- {0, 0, 0, 0, 7, 2, 2, 2, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 3, 3, 3, 7, 0, 0, 0, 0},
- {0, 0, 0, 7, 1, 1, 1, 1, 3, 7, 0, 0, 0},
- {0, 0, 0, 7, 1, 1, 1, 1, 3, 7, 0, 0, 0},
- {0, 0, 0, 7, 1, 1, 10,1, 3, 7, 0, 0, 0},
- {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 7, 11,1, 11,7, 0, 0, 0, 0},
- {0, 0, 0, 7, 1, 1, 1, 1, 3, 7, 0, 0, 0},
- {0, 0, 0, 8, 1, 1, 1, 1, 3, 7, 0, 0, 0},
- {0, 0, 0, 7, 1, 1, 1, 1, 3, 7, 0, 0, 0},
- {0, 0, 0, 0, 7, 11,1, 11,7, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 7, 7, 7, 4, 0, 0, 0, 0},
- {0, 0, 0, 4, 7, 1, 1, 1, 7, 4, 0, 0, 0},
- {0, 0, 4, 7, 1, 1, 1, 1, 3, 7, 4, 0, 0},
- {0, 0, 4, 7, 1, 1, 1, 1, 3, 7, 4, 0, 0},
- {0, 0, 4, 7, 1, 1, 1, 1, 12,7, 4, 0, 0},
- {0, 0, 0, 4, 7, 1, 1, 1, 7, 4, 0, 0, 0},
- {0, 0, 0, 0, 4, 7, 7, 7, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 1, 1, 1, 4, 0, 0, 0, 0},
- {0, 0, 0, 4, 1, 1, 1, 1, 1, 4, 0, 0, 0},
- {0, 0, 0, 4, 1, 1, 1, 1, 1, 4, 0, 0, 0},
- {0, 0, 0, 4, 1, 1, 1, 1, 1, 4, 0, 0, 0},
- {0, 0, 0, 0, 4, 1, 1, 1, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 1, 1, 1, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 1, 1, 1, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 1, 1, 1, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 4, 1, 1, 1, 4, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- },{
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- }
- };
-
-
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 1, 6, 5, 7, 0, 0, 0, 0},
+ {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 9, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 5, 1, 1, 7, 0, 0, 0, 0},
+ {0, 0, 0, 0, 7, 6, 1, 1, 7, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 11, 1, 11, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0},
+ {0, 0, 0, 0, 7, 1, 1, 11, 7, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 5, 6, 1, 7, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0},
+ {0, 0, 0, 0, 7, 1, 1, 6, 7, 7, 7, 0, 0}, {0, 0, 0, 0, 7, 1, 1, 5, 7, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 1, 6, 5, 7, 7, 7, 0, 0},
+ {0, 0, 0, 0, 7, 11, 1, 1, 1, 1, 1, 7, 0}, {0, 0, 0, 0, 7, 1, 1, 1, 7, 7, 7, 0, 0},
+ {0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 5, 1, 1, 7, 7, 8, 7, 0},
+ {0, 0, 0, 0, 7, 6, 1, 1, 1, 1, 1, 8, 0}, {0, 0, 0, 0, 7, 1, 1, 1, 7, 7, 8, 7, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 8, 7, 0, 4, 4, 4, 0}, {0, 0, 0, 0, 7, 1, 1, 1, 7, 7, 7, 7, 4},
+ {0, 0, 0, 0, 7, 1, 1, 11, 7, 1, 1, 7, 4}, {0, 0, 0, 0, 7, 5, 6, 1, 7, 7, 7, 7, 4},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 4, 4, 4, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 1, 1, 1, 7, 4, 4, 4, 0},
+ {0, 0, 0, 0, 7, 1, 1, 6, 7, 4, 1, 4, 0}, {0, 0, 0, 0, 7, 1, 1, 5, 7, 4, 4, 4, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 1, 6, 5, 7, 0, 4, 0, 0},
+ {0, 0, 0, 0, 7, 11, 1, 1, 7, 4, 1, 4, 0}, {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 4, 0, 0},
+ {0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 5, 1, 1, 7, 0, 0, 0, 0},
+ {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 4, 0, 0}, {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 7, 2, 2, 2, 7, 0, 0, 0, 0}, {0, 0, 0, 7, 1, 1, 1, 1, 2, 7, 0, 0, 0},
+ {0, 0, 0, 7, 5, 2, 2, 6, 2, 7, 4, 0, 0}, {0, 0, 0, 7, 2, 2, 2, 2, 2, 7, 0, 0, 0},
+ {0, 0, 0, 0, 7, 2, 2, 2, 7, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 7, 3, 3, 3, 7, 0, 0, 0, 0}, {0, 0, 0, 7, 1, 1, 1, 1, 3, 7, 0, 0, 0},
+ {0, 0, 0, 7, 1, 1, 1, 1, 3, 7, 0, 0, 0}, {0, 0, 0, 7, 1, 1, 10, 1, 3, 7, 0, 0, 0},
+ {0, 0, 0, 0, 7, 1, 1, 1, 7, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 7, 11, 1, 11, 7, 0, 0, 0, 0}, {0, 0, 0, 7, 1, 1, 1, 1, 3, 7, 0, 0, 0},
+ {0, 0, 0, 8, 1, 1, 1, 1, 3, 7, 0, 0, 0}, {0, 0, 0, 7, 1, 1, 1, 1, 3, 7, 0, 0, 0},
+ {0, 0, 0, 0, 7, 11, 1, 11, 7, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 7, 8, 7, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 4, 7, 7, 7, 4, 0, 0, 0, 0},
+ {0, 0, 0, 4, 7, 1, 1, 1, 7, 4, 0, 0, 0}, {0, 0, 4, 7, 1, 1, 1, 1, 3, 7, 4, 0, 0},
+ {0, 0, 4, 7, 1, 1, 1, 1, 3, 7, 4, 0, 0}, {0, 0, 4, 7, 1, 1, 1, 1, 12, 7, 4, 0, 0},
+ {0, 0, 0, 4, 7, 1, 1, 1, 7, 4, 0, 0, 0}, {0, 0, 0, 0, 4, 7, 7, 7, 4, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 4, 1, 1, 1, 4, 0, 0, 0, 0}, {0, 0, 0, 4, 1, 1, 1, 1, 1, 4, 0, 0, 0},
+ {0, 0, 0, 4, 1, 1, 1, 1, 1, 4, 0, 0, 0}, {0, 0, 0, 4, 1, 1, 1, 1, 1, 4, 0, 0, 0},
+ {0, 0, 0, 0, 4, 1, 1, 1, 4, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 4, 1, 1, 1, 4, 0, 0, 0, 0},
+ {0, 0, 0, 0, 4, 1, 1, 1, 4, 0, 0, 0, 0}, {0, 0, 0, 0, 4, 1, 1, 1, 4, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 4, 1, 1, 1, 4, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},},
+ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},}};
+
}
diff --git a/src/main/java/electroblob/wizardry/block/BlockArcaneWorkbench.java b/src/main/java/electroblob/wizardry/block/BlockArcaneWorkbench.java
index 4a0c3f8f..bb2a822a 100644
--- a/src/main/java/electroblob/wizardry/block/BlockArcaneWorkbench.java
+++ b/src/main/java/electroblob/wizardry/block/BlockArcaneWorkbench.java
@@ -22,99 +22,103 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockArcaneWorkbench extends BlockContainer {
-
- private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D);
+
+ private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D);
public BlockArcaneWorkbench(){
- super(Material.ROCK);
- this.setLightLevel(0.8f);
+ super(Material.ROCK);
+ this.setLightLevel(0.8f);
}
-
- @Override
- public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){
- return AABB;
- }
@Override
- public TileEntity createNewTileEntity(World world, int metadata) {
+ public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){
+ return AABB;
+ }
+
+ @Override
+ public TileEntity createNewTileEntity(World world, int metadata){
return new TileEntityArcaneWorkbench();
}
-
+
@Override
- public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) {
+ public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos){
return false;
}
-
+
@Override
- public EnumBlockRenderType getRenderType(IBlockState state) {
+ public EnumBlockRenderType getRenderType(IBlockState state){
return EnumBlockRenderType.MODEL;
}
-
+
@Override
- public boolean isOpaqueCube(IBlockState state) {
+ public boolean isOpaqueCube(IBlockState state){
return false;
}
-
+
@Override
- public boolean onBlockActivated(World world, BlockPos pos, IBlockState block, EntityPlayer player,
- EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ){
-
+ public boolean onBlockActivated(World world, BlockPos pos, IBlockState block, EntityPlayer player, EnumHand hand,
+ EnumFacing side, float hitX, float hitY, float hitZ){
+
TileEntity tileEntity = world.getTileEntity(pos);
-
+
if(tileEntity == null || player.isSneaking()){
return false;
}
-
- player.openGui(Wizardry.instance, WizardryGuiHandler.ARCANE_WORKBENCH, world, pos.getX(), pos.getY(), pos.getZ());
+
+ player.openGui(Wizardry.instance, WizardryGuiHandler.ARCANE_WORKBENCH, world, pos.getX(), pos.getY(),
+ pos.getZ());
return true;
}
-
+
@Override
- public void breakBlock(World world, BlockPos pos, IBlockState block)
- {
+ public void breakBlock(World world, BlockPos pos, IBlockState block){
+
Random random = new Random();
- TileEntityArcaneWorkbench tileentityarcaneworkbench = (TileEntityArcaneWorkbench)world.getTileEntity(pos);
+ TileEntityArcaneWorkbench tileentityarcaneworkbench = (TileEntityArcaneWorkbench)world.getTileEntity(pos);
- if (tileentityarcaneworkbench != null)
- {
- for (int j1 = 0; j1 < tileentityarcaneworkbench.getSizeInventory(); ++j1)
- {
- ItemStack itemstack = tileentityarcaneworkbench.getStackInSlot(j1);
+ if(tileentityarcaneworkbench != null){
- if (itemstack != null)
- {
- float f = random.nextFloat() * 0.8F + 0.1F;
- float f1 = random.nextFloat() * 0.8F + 0.1F;
- EntityItem entityitem;
+ for(int j1 = 0; j1 < tileentityarcaneworkbench.getSizeInventory(); ++j1){
- for (float f2 = random.nextFloat() * 0.8F + 0.1F; itemstack.stackSize > 0; world.spawnEntityInWorld(entityitem))
- {
- int k1 = random.nextInt(21) + 10;
+ ItemStack itemstack = tileentityarcaneworkbench.getStackInSlot(j1);
- if (k1 > itemstack.stackSize)
- {
- k1 = itemstack.stackSize;
- }
+ if(!itemstack.isEmpty()){
- itemstack.stackSize -= k1;
- entityitem = new EntityItem(world, (double)((float)pos.getX() + f), (double)((float)pos.getY() + f1), (double)((float)pos.getZ() + f2), new ItemStack(itemstack.getItem(), k1, itemstack.getItemDamage()));
- float f3 = 0.05F;
- entityitem.motionX = (double)((float)random.nextGaussian() * f3);
- entityitem.motionY = (double)((float)random.nextGaussian() * f3 + 0.2F);
- entityitem.motionZ = (double)((float)random.nextGaussian() * f3);
+ float f = random.nextFloat() * 0.8F + 0.1F;
+ float f1 = random.nextFloat() * 0.8F + 0.1F;
+ EntityItem entityitem;
- if (itemstack.hasTagCompound())
- {
- entityitem.getEntityItem().setTagCompound(((NBTTagCompound)itemstack.getTagCompound().copy()));
- }
- }
- }
- }
+ for(float f2 = random.nextFloat() * 0.8F + 0.1F; itemstack.getCount() > 0; world
+ .spawnEntity(entityitem)){
- //par1World.func_96440_m(par2, par3, par4, block);
- }
-
- super.breakBlock(world, pos, block);
- }
+ int k1 = random.nextInt(21) + 10;
+
+ if(k1 > itemstack.getCount()){
+ k1 = itemstack.getCount();
+ }
+
+ itemstack.shrink(k1);
+
+ entityitem = new EntityItem(world, (double)((float)pos.getX() + f),
+ (double)((float)pos.getY() + f1), (double)((float)pos.getZ() + f2),
+ new ItemStack(itemstack.getItem(), k1, itemstack.getItemDamage()));
+ float f3 = 0.05F;
+ entityitem.motionX = (double)((float)random.nextGaussian() * f3);
+ entityitem.motionY = (double)((float)random.nextGaussian() * f3 + 0.2F);
+ entityitem.motionZ = (double)((float)random.nextGaussian() * f3);
+
+ if(itemstack.hasTagCompound()){
+ entityitem.getEntityItem()
+ .setTagCompound(((NBTTagCompound)itemstack.getTagCompound().copy()));
+ }
+ }
+ }
+ }
+
+ // par1World.func_96440_m(par2, par3, par4, block);
+ }
+
+ super.breakBlock(world, pos, block);
+ }
}
diff --git a/src/main/java/electroblob/wizardry/block/BlockCrystalFlower.java b/src/main/java/electroblob/wizardry/block/BlockCrystalFlower.java
index 9aded57a..1998f0f5 100644
--- a/src/main/java/electroblob/wizardry/block/BlockCrystalFlower.java
+++ b/src/main/java/electroblob/wizardry/block/BlockCrystalFlower.java
@@ -22,31 +22,34 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
// Extending BlockBush allows me to remove nearly everything from this class.
@Mod.EventBusSubscriber
public class BlockCrystalFlower extends BlockBush {
-
- private static final AxisAlignedBB AABB = new AxisAlignedBB(0.5F - 0.2f, 0.0F, 0.5F - 0.2f, 0.5F + 0.2f, 0.2f * 3.0F, 0.5F + 0.2f);
- public BlockCrystalFlower(Material par2Material) {
+ private static final AxisAlignedBB AABB = new AxisAlignedBB(0.5F - 0.2f, 0.0F, 0.5F - 0.2f, 0.5F + 0.2f,
+ 0.2f * 3.0F, 0.5F + 0.2f);
+
+ public BlockCrystalFlower(Material par2Material){
super(par2Material);
this.setLightLevel(0.5f);
- this.setTickRandomly(true);
+ this.setTickRandomly(true);
this.setSoundType(SoundType.PLANT);
}
-
+
@Override
- public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
- {
- return AABB;
- }
-
+ public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){
+ return AABB;
+ }
+
@Override
public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random random){
if(world.isRemote && random.nextBoolean()){
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world, pos.getX()+random.nextDouble(), pos.getY()+random.nextDouble()/2+0.5, pos.getZ()+random.nextDouble(), 0d, 0.01, 0d, 20 + random.nextInt(10), 0.5f + (random.nextFloat()/2), 0.5f + (random.nextFloat()/2), 0.5f + (random.nextFloat()/2));
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world, pos.getX() + random.nextDouble(),
+ pos.getY() + random.nextDouble() / 2 + 0.5, pos.getZ() + random.nextDouble(), 0d, 0.01, 0d,
+ 20 + random.nextInt(10), 0.5f + (random.nextFloat() / 2), 0.5f + (random.nextFloat() / 2),
+ 0.5f + (random.nextFloat() / 2));
}
}
@Override
- public EnumPlantType getPlantType(IBlockAccess world, BlockPos pos) {
+ public EnumPlantType getPlantType(IBlockAccess world, BlockPos pos){
return EnumPlantType.Plains;
}
@@ -56,11 +59,12 @@ public class BlockCrystalFlower extends BlockBush {
if(event.getBlock().getBlock() == Blocks.GRASS){
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),
event.getWorld().rand.nextInt(8) - event.getWorld().rand.nextInt(8));
- if (event.getWorld().isAirBlock(new BlockPos(pos)) && (!event.getWorld().provider.getHasNoSky() || pos.getY() < 127) && WizardryBlocks.crystal_flower.canPlaceBlockAt(event.getWorld(), pos))
- {
+ if(event.getWorld().isAirBlock(new BlockPos(pos))
+ && (!event.getWorld().provider.hasNoSky() || pos.getY() < 127)
+ && WizardryBlocks.crystal_flower.canPlaceBlockAt(event.getWorld(), pos)){
event.getWorld().setBlockState(pos, WizardryBlocks.crystal_flower.getDefaultState(), 2);
}
}
diff --git a/src/main/java/electroblob/wizardry/block/BlockCrystalOre.java b/src/main/java/electroblob/wizardry/block/BlockCrystalOre.java
index dc594dc0..057162a2 100644
--- a/src/main/java/electroblob/wizardry/block/BlockCrystalOre.java
+++ b/src/main/java/electroblob/wizardry/block/BlockCrystalOre.java
@@ -11,23 +11,22 @@ import net.minecraft.item.Item;
public class BlockCrystalOre extends Block {
- public BlockCrystalOre(Material material) {
+ public BlockCrystalOre(Material material){
super(material);
this.setSoundType(SoundType.STONE);
setResistance(5.0F);
setHarvestLevel("pickaxe", 2);
}
-
+
@Override
- public int quantityDropped(IBlockState state, int fortune, Random random)
- {
+ public int quantityDropped(IBlockState state, int fortune, Random random){
if(fortune > 0){
return random.nextInt(2) + 1 + random.nextInt(fortune);
}else{
return random.nextInt(2) + 1;
}
- }
-
+ }
+
@Override
public Item getItemDropped(IBlockState state, Random random, int fortune){
return WizardryItems.magic_crystal;
diff --git a/src/main/java/electroblob/wizardry/block/BlockMagicLight.java b/src/main/java/electroblob/wizardry/block/BlockMagicLight.java
index c3ef8499..77974eec 100644
--- a/src/main/java/electroblob/wizardry/block/BlockMagicLight.java
+++ b/src/main/java/electroblob/wizardry/block/BlockMagicLight.java
@@ -12,47 +12,48 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockMagicLight extends BlockContainer {
-
- private static final AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 0, 0, 0);
- public BlockMagicLight(Material par2Material) {
+ private static final AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 0, 0, 0);
+
+ public BlockMagicLight(Material par2Material){
super(par2Material);
this.setLightLevel(1.0f);
}
-
+
@Override
- public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos){
- // The other two bounding box methods in Block aren't nullable, so this is the only one that can return NULL_AABB.
+ public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos){
+ // The other two bounding box methods in Block aren't nullable, so this is the
+ // only one that can return NULL_AABB.
return NULL_AABB;
}
-
+
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){
- return AABB;
- }
+ return AABB;
+ }
@Override
public boolean isCollidable(){
return false;
}
-
+
@Override
- public TileEntity createNewTileEntity(World world, int metadata) {
+ public TileEntity createNewTileEntity(World world, int metadata){
return new TileEntityMagicLight(600);
}
-
+
@Override
- public boolean isOpaqueCube(IBlockState state) {
+ public boolean isOpaqueCube(IBlockState state){
return false;
}
-
+
@Override
- public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) {
+ public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos){
return false;
}
-
+
@Override
- public EnumBlockRenderType getRenderType(IBlockState state) {
+ public EnumBlockRenderType getRenderType(IBlockState state){
return EnumBlockRenderType.ENTITYBLOCK_ANIMATED;
}
}
diff --git a/src/main/java/electroblob/wizardry/block/BlockSnare.java b/src/main/java/electroblob/wizardry/block/BlockSnare.java
index d020a580..036e378a 100644
--- a/src/main/java/electroblob/wizardry/block/BlockSnare.java
+++ b/src/main/java/electroblob/wizardry/block/BlockSnare.java
@@ -24,86 +24,88 @@ import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
+
// TODO: Apparently you shouldn't extend BlockContainer. I feel like BlockArcaneWorkbench should, but what about the rest?
public class BlockSnare extends BlockContainer {
- private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0f, 0.0f, 0.0f, 1.0f, 0.0625f, 1.0f);
+ private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0f, 0.0f, 0.0f, 1.0f, 0.0625f, 1.0f);
- public BlockSnare(Material par2Material){
- super(par2Material);
+ public BlockSnare(Material material){
+ super(material);
this.setSoundType(SoundType.PLANT);
}
-
+
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){
- return AABB;
- }
-
+ return AABB;
+ }
+
@Override
- public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos){
- return NULL_AABB;
- }
-
+ public AxisAlignedBB getCollisionBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos){
+ return NULL_AABB;
+ }
+
@Override
public boolean hasTileEntity(IBlockState state){
return true;
}
-
+
@Override
- public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState state, Entity entity) {
-
+ public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState state, Entity entity){
+
if(!world.isRemote && entity instanceof EntityLivingBase){
if(world.getTileEntity(pos) instanceof TileEntityPlayerSave){
-
+
TileEntityPlayerSave tileentity = (TileEntityPlayerSave)world.getTileEntity(pos);
-
+
if(WizardryUtilities.isValidTarget(tileentity.getCaster(), entity)){
- ((EntityLivingBase)entity).attackEntityFrom(MagicDamage.causeDirectMagicDamage(tileentity.getCaster(), DamageType.MAGIC), 6);
+ ((EntityLivingBase)entity).attackEntityFrom(
+ MagicDamage.causeDirectMagicDamage(tileentity.getCaster(), DamageType.MAGIC), 6);
((EntityLivingBase)entity).addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 100, 2));
-
+
world.destroyBlock(pos, false);
}
}
}
}
-
+
// The similarly named onNeighborChange method does NOT do the same thing.
@SuppressWarnings("deprecation")
@Override
- public void neighborChanged(IBlockState state, World world, BlockPos pos, Block blockIn){
- super.neighborChanged(state, world, pos, blockIn);
- if(!world.isSideSolid(pos.down(), EnumFacing.UP, false)){
- world.setBlockToAir(pos);
- }
- }
-
+ public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos){
+ super.neighborChanged(state, world, pos, block, fromPos);
+ if(!world.isSideSolid(pos.down(), EnumFacing.UP, false)){
+ world.setBlockToAir(pos);
+ }
+ }
+
@Override
public BlockRenderLayer getBlockLayer(){
return BlockRenderLayer.CUTOUT;
}
-
+
@Override
public EnumBlockRenderType getRenderType(IBlockState state){
return EnumBlockRenderType.MODEL;
}
-
- @Override
+
+ @Override
public boolean isOpaqueCube(IBlockState state){
- return false;
- }
-
- @Override
- public boolean isFullCube(IBlockState state){
- return false;
- }
-
+ return false;
+ }
+
+ @Override
+ public boolean isFullCube(IBlockState state){
+ return false;
+ }
+
@Override
public Item getItemDropped(IBlockState state, Random rand, int fortune){
return null;
}
@Override
- public TileEntity createNewTileEntity(World world, int metadata) {
+ public TileEntity createNewTileEntity(World world, int metadata){
return new TileEntityPlayerSave();
}
diff --git a/src/main/java/electroblob/wizardry/block/BlockSpectral.java b/src/main/java/electroblob/wizardry/block/BlockSpectral.java
index 23837eea..d4c91f1a 100644
--- a/src/main/java/electroblob/wizardry/block/BlockSpectral.java
+++ b/src/main/java/electroblob/wizardry/block/BlockSpectral.java
@@ -29,79 +29,87 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@Mod.EventBusSubscriber
public class BlockSpectral extends BlockContainer {
- public BlockSpectral(Material material) {
+ public BlockSpectral(Material material){
super(material);
this.setSoundType(SoundType.GLASS);
}
-
+
// Replaces getRenderBlockPass
@Override
public BlockRenderLayer getBlockLayer(){
return BlockRenderLayer.TRANSLUCENT;
}
-
+
@Override
- public EnumBlockRenderType getRenderType(IBlockState state) {
+ public EnumBlockRenderType getRenderType(IBlockState state){
return EnumBlockRenderType.MODEL;
}
-
- // Apparently it's OK to override this, despite it being deprecated. More importantly, it being deprecated is not
- // Forge's doing, rather it is Mojang themselves misusing the @Deprecated annotation to mean 'internal, don't call'.
+
+ // Apparently it's OK to override this, despite it being deprecated. More
+ // importantly, it being deprecated is not
+ // Forge's doing, rather it is Mojang themselves misusing the @Deprecated
+ // annotation to mean 'internal, don't call'.
@Override
public boolean isOpaqueCube(IBlockState state){
- return false;
- }
-
- @Override
- public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) {
return false;
}
-
+
@Override
- public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random random) {
- // Middle of block
- Wizardry.proxy.spawnParticle(WizardryParticleType.DUST, world, pos.getX()+random.nextDouble(), pos.getY()+random.nextDouble(), pos.getZ()+random.nextDouble(), 0, 0, 0, (int)(16.0D / (Math.random() * 0.8D + 0.2D)),
- 0.4f + random.nextFloat()*0.2f, 0.6f + random.nextFloat()*0.4f, 0.6f + random.nextFloat()*0.4f);
- // Top surface
- Wizardry.proxy.spawnParticle(WizardryParticleType.DUST, world, pos.getX()+random.nextDouble(), pos.getY()+1, pos.getZ()+random.nextDouble(), 0, 0, 0, (int)(16.0D / (Math.random() * 0.8D + 0.2D)),
- 0.4f + random.nextFloat()*0.2f, 0.6f + random.nextFloat()*0.4f, 0.6f + random.nextFloat()*0.4f);
- Wizardry.proxy.spawnParticle(WizardryParticleType.DUST, world, pos.getX()+random.nextDouble(), pos.getY()+1, pos.getZ()+random.nextDouble(), 0, 0, 0, (int)(16.0D / (Math.random() * 0.8D + 0.2D)),
- 0.4f + random.nextFloat()*0.2f, 0.6f + random.nextFloat()*0.4f, 0.6f + random.nextFloat()*0.4f);
+ public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos){
+ return false;
}
- // Overriden to make the block always look full brightness despite not emitting full light.
@Override
- public int getPackedLightmapCoords(IBlockState state, IBlockAccess source, BlockPos pos) {
+ public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random random){
+ // Middle of block
+ Wizardry.proxy.spawnParticle(WizardryParticleType.DUST, world, pos.getX() + random.nextDouble(),
+ pos.getY() + random.nextDouble(), pos.getZ() + random.nextDouble(), 0, 0, 0,
+ (int)(16.0D / (Math.random() * 0.8D + 0.2D)), 0.4f + random.nextFloat() * 0.2f,
+ 0.6f + random.nextFloat() * 0.4f, 0.6f + random.nextFloat() * 0.4f);
+ // Top surface
+ Wizardry.proxy.spawnParticle(WizardryParticleType.DUST, world, pos.getX() + random.nextDouble(), pos.getY() + 1,
+ pos.getZ() + random.nextDouble(), 0, 0, 0, (int)(16.0D / (Math.random() * 0.8D + 0.2D)),
+ 0.4f + random.nextFloat() * 0.2f, 0.6f + random.nextFloat() * 0.4f, 0.6f + random.nextFloat() * 0.4f);
+ Wizardry.proxy.spawnParticle(WizardryParticleType.DUST, world, pos.getX() + random.nextDouble(), pos.getY() + 1,
+ pos.getZ() + random.nextDouble(), 0, 0, 0, (int)(16.0D / (Math.random() * 0.8D + 0.2D)),
+ 0.4f + random.nextFloat() * 0.2f, 0.6f + random.nextFloat() * 0.4f, 0.6f + random.nextFloat() * 0.4f);
+ }
+
+ // Overriden to make the block always look full brightness despite not emitting
+ // full light.
+ @Override
+ public int getPackedLightmapCoords(IBlockState state, IBlockAccess source, BlockPos pos){
return 15;
}
-
- @Override
- public TileEntity createNewTileEntity(World world, int metadata) {
+
+ @Override
+ public TileEntity createNewTileEntity(World world, int metadata){
return new TileEntityTimer(1200);
}
-
- @Override
+
+ @Override
public int quantityDropped(Random par1Random){
- return 0;
- }
-
- @SuppressWarnings("deprecation")
+ return 0;
+ }
+
+ @SuppressWarnings("deprecation")
@SideOnly(Side.CLIENT)
@Override
- public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side){
-
- IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side));
- Block block = iblockstate.getBlock();
+ public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos,
+ EnumFacing side){
- return block == this ? false : super.shouldSideBeRendered(blockState, blockAccess, pos, side);
- }
-
- @SubscribeEvent
+ IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side));
+ Block block = iblockstate.getBlock();
+
+ return block == this ? false : super.shouldSideBeRendered(blockState, blockAccess, pos, side);
+ }
+
+ @SubscribeEvent
public static void onBlockPlaceEvent(BlockEvent.PlaceEvent event){
// Spectral blocks cannot be built on
if(event.getPlacedAgainst() == WizardryBlocks.spectral_block){
event.setCanceled(true);
}
}
-
+
}
diff --git a/src/main/java/electroblob/wizardry/block/BlockStatue.java b/src/main/java/electroblob/wizardry/block/BlockStatue.java
index 3b3e9b5e..597f2656 100644
--- a/src/main/java/electroblob/wizardry/block/BlockStatue.java
+++ b/src/main/java/electroblob/wizardry/block/BlockStatue.java
@@ -24,7 +24,7 @@ public class BlockStatue extends BlockContainer {
private boolean isIce;
- public BlockStatue(Material material) {
+ public BlockStatue(Material material){
super(material);
this.isIce = material == Material.ICE;
if(this.isIce){
@@ -32,7 +32,7 @@ public class BlockStatue extends BlockContainer {
this.setSoundType(SoundType.GLASS);
}
}
-
+
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos){
// Not a good idea to call getBlockBoundsMinX() or whatever from in here, since this method changes those!
@@ -43,49 +43,71 @@ public class BlockStatue extends BlockContainer {
TileEntityStatue statue = (TileEntityStatue)world.getTileEntity(pos);
if(statue.creature != null){
-
+
// Block bounds are set to match the width and height of the entity, clamped to within 1 block.
- return new AxisAlignedBB((float)Math.max(0.5 - statue.creature.width/2, 0), 0,
- (float)Math.max(0.5 - statue.creature.width/2, 0),
- (float)Math.min(0.5 + statue.creature.width/2, 1),
- // This checks if the block is the top one and if so reduces its height so the top lines up with
+ return new AxisAlignedBB((float)Math.max(0.5 - statue.creature.width / 2, 0), 0,
+ (float)Math.max(0.5 - statue.creature.width / 2, 0),
+ (float)Math.min(0.5 + statue.creature.width / 2, 1),
+ // This checks if the block is the top one and if so reduces its height so the top lines up
+ // with
// the top of the entity model.
- statue.position == statue.parts ? (float)Math.min(statue.creature.height - statue.parts + 1, 1) : 1,
- (float)Math.min(0.5 + statue.creature.width/2, 1));
+ statue.position == statue.parts
+ ? (float)Math.min(statue.creature.height - statue.parts + 1, 1)
+ : 1,
+ (float)Math.min(0.5 + statue.creature.width / 2, 1));
}
}
}
-
+
return FULL_BLOCK_AABB;
}
-
+
// getCollisionBoundingBox eventually calls getBoundingBox anyway, and since I want the collision box and the block
// outline to be the same here, I've removed that getCollisionBoundingBox entirely.
// The number of these methods is quite simply ridiculous. This one seems to be for placement logic and block
// connections (fences, glass panes, etc.)...
- @Override public boolean isFullCube(IBlockState state) { return false; }
+ @Override
+ public boolean isFullCube(IBlockState state){
+ return false;
+ }
+
// ...this one isn't used much but has something to do with redstone...
- @Override public boolean isBlockNormalCube(IBlockState state) { return false; }
+ @Override
+ public boolean isBlockNormalCube(IBlockState state){
+ return false;
+ }
+
// ... this one is for most other game logic...
- @Override public boolean isNormalCube(IBlockState state) { return false; }
+ @Override
+ public boolean isNormalCube(IBlockState state){
+ return false;
+ }
+
// Forge version of the above method. I still need to override both though because vanilla uses the other one.
- @Override public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { return false; }
+ @Override
+ public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos){
+ return false;
+ }
+
// ... and this one is for rendering.
- @Override public boolean isOpaqueCube(IBlockState state){ return false; }
-
+ @Override
+ public boolean isOpaqueCube(IBlockState state){
+ return false;
+ }
+
@Override
public BlockRenderLayer getBlockLayer(){
return this.isIce ? BlockRenderLayer.TRANSLUCENT : BlockRenderLayer.SOLID;
}
-
+
@Override
public EnumBlockRenderType getRenderType(IBlockState state){
return this.isIce ? EnumBlockRenderType.MODEL : EnumBlockRenderType.ENTITYBLOCK_ANIMATED;
}
@Override
- public TileEntity createNewTileEntity(World world, int metadata) {
+ public TileEntity createNewTileEntity(World world, int metadata){
return new TileEntityStatue(this.isIce);
}
@@ -93,14 +115,14 @@ public class BlockStatue extends BlockContainer {
public int quantityDropped(Random random){
return 0;
}
-
+
@Override
public void breakBlock(World world, BlockPos pos, IBlockState state){
-
+
if(!world.isRemote){
-
+
TileEntityStatue tileentity = (TileEntityStatue)world.getTileEntity(pos);
-
+
if(tileentity != null){
if(tileentity.parts == 2){
if(tileentity.position == 2){
@@ -126,21 +148,22 @@ public class BlockStatue extends BlockContainer {
if(tileentity != null && tileentity.position == 1 && tileentity.creature != null){
tileentity.creature.getEntityData().removeTag(Petrify.NBT_KEY);
tileentity.creature.isDead = false;
- world.spawnEntityInWorld(tileentity.creature);
+ world.spawnEntity(tileentity.creature);
}
}
-
+
super.breakBlock(world, pos, state);
}
-
+
@SuppressWarnings("deprecation")
@SideOnly(Side.CLIENT)
@Override
- public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side){
-
- IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side));
- Block block = iblockstate.getBlock();
+ public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos,
+ EnumFacing side){
- return this.isIce && block == this ? false : super.shouldSideBeRendered(blockState, blockAccess, pos, side);
- }
+ IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side));
+ Block block = iblockstate.getBlock();
+
+ return this.isIce && block == this ? false : super.shouldSideBeRendered(blockState, blockAccess, pos, side);
+ }
}
diff --git a/src/main/java/electroblob/wizardry/block/BlockTransportationStone.java b/src/main/java/electroblob/wizardry/block/BlockTransportationStone.java
index 681d5266..a7c017ca 100644
--- a/src/main/java/electroblob/wizardry/block/BlockTransportationStone.java
+++ b/src/main/java/electroblob/wizardry/block/BlockTransportationStone.java
@@ -20,96 +20,121 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockTransportationStone extends Block {
-
- private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0625f*5, 0, 0.0625f*5, 0.0625f*11, 0.0625f*6, 0.0625f*11);
+
+ private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0625f * 5, 0, 0.0625f * 5, 0.0625f * 11, 0.0625f * 6,
+ 0.0625f * 11);
public BlockTransportationStone(Material material){
super(material);
- this.setTickRandomly(true);
+ this.setTickRandomly(true);
}
-
+
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){
return AABB;
}
-
+
// The number of these methods is quite simply ridiculous. This one seems to be for placement logic and block
// connections (fences, glass panes, etc.)...
- @Override public boolean isFullCube(IBlockState state) { return false; }
+ @Override
+ public boolean isFullCube(IBlockState state){
+ return false;
+ }
+
// ...this one isn't used much but has something to do with redstone...
- @Override public boolean isBlockNormalCube(IBlockState state) { return false; }
+ @Override
+ public boolean isBlockNormalCube(IBlockState state){
+ return false;
+ }
+
// ... this one is for most other game logic...
- @Override public boolean isNormalCube(IBlockState state) { return false; }
+ @Override
+ public boolean isNormalCube(IBlockState state){
+ return false;
+ }
+
// Forge version of the above method. I still need to override both though because vanilla uses the other one.
- @Override public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { return false; }
+ @Override
+ public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos){
+ return false;
+ }
+
// ... and this one is for rendering.
- @Override public boolean isOpaqueCube(IBlockState state){ return false; }
-
+ @Override
+ public boolean isOpaqueCube(IBlockState state){
+ return false;
+ }
+
@Override
public void onNeighborChange(IBlockAccess world, BlockPos pos, BlockPos neighbor){
-
- super.onNeighborChange(world, pos, neighbor);
-
- if(!world.isSideSolid(pos.down(), EnumFacing.UP, false) && world instanceof World){
- this.dropBlockAsItem((World) world, pos, world.getBlockState(pos), 0);
- ((World)world).setBlockToAir(pos);
- }
- }
-
- @Override
- public void updateTick(World world, BlockPos pos, IBlockState state, Random random) {
- if(!world.isSideSolid(pos.down(), EnumFacing.UP)){
- this.dropBlockAsItem(world, pos, world.getBlockState(pos), 0);
- world.setBlockToAir(pos);
- }
+ super.onNeighborChange(world, pos, neighbor);
+
+ if(!world.isSideSolid(pos.down(), EnumFacing.UP, false) && world instanceof World){
+ this.dropBlockAsItem((World)world, pos, world.getBlockState(pos), 0);
+ ((World)world).setBlockToAir(pos);
+ }
}
-
+
+ @Override
+ public void updateTick(World world, BlockPos pos, IBlockState state, Random random){
+
+ if(!world.isSideSolid(pos.down(), EnumFacing.UP)){
+ this.dropBlockAsItem(world, pos, world.getBlockState(pos), 0);
+ world.setBlockToAir(pos);
+ }
+ }
+
@Override
public boolean canPlaceBlockAt(World world, BlockPos pos){
- return super.canPlaceBlockAt(world, pos) && world.isSideSolid(pos.down(), EnumFacing.UP);
+ return super.canPlaceBlockAt(world, pos) && world.isSideSolid(pos.down(), EnumFacing.UP);
}
-
+
@Override
- public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player,
- EnumHand hand, ItemStack stack, EnumFacing side, float hitX, float hitY, float hitZ) {
-
- if(stack != null && stack.getItem() instanceof ItemWand){
+ public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand,
+ EnumFacing side, float hitX, float hitY, float hitZ){
+
+ ItemStack stack = player.getHeldItem(hand);
+
+ if(stack.getItem() instanceof ItemWand){
if(WizardData.get(player) != null){
-
+
WizardData data = WizardData.get(player);
-
- for(int x=-1; x<=1; x++){
- for(int z=-1; z<=1; z++){
+
+ for(int x = -1; x <= 1; x++){
+ for(int z = -1; z <= 1; z++){
BlockPos pos1 = pos.add(x, 0, z);
if(testForCircle(world, pos1)){
data.setStoneCircleLocation(pos1, world.provider.getDimension());
- if(!world.isRemote) player.addChatMessage(new TextComponentTranslation("tile.wizardry:transportation_stone.confirm", Spells.transportation.getNameForTranslationFormatted()));
+ if(!world.isRemote) player.sendMessage(
+ new TextComponentTranslation("tile.wizardry:transportation_stone.confirm",
+ Spells.transportation.getNameForTranslationFormatted()));
return true;
}
}
}
-
- if(!world.isRemote) player.addChatMessage(new TextComponentTranslation("tile.wizardry:transportation_stone.invalid"));
+
+ if(!world.isRemote)
+ player.sendMessage(new TextComponentTranslation("tile.wizardry:transportation_stone.invalid"));
return true;
}
}
- return false;
+ return false;
}
-
+
/** Returns whether the specified location is surrounded by a complete cicle of 8 transportation stones. */
public static boolean testForCircle(World world, BlockPos pos){
-
+
if(world.getBlockState(pos).getMaterial().blocksMovement()) return false;
-
- for(int x=-1; x<=1; x++){
- for(int z=-1; z<=1; z++){
+
+ for(int x = -1; x <= 1; x++){
+ for(int z = -1; z <= 1; z++){
if(world.getBlockState(pos.add(x, 0, z)).getBlock() != WizardryBlocks.transportation_stone){
if(x != 0 || z != 0) return false;
}
}
}
-
+
return true;
}
}
diff --git a/src/main/java/electroblob/wizardry/block/BlockVanishingCobweb.java b/src/main/java/electroblob/wizardry/block/BlockVanishingCobweb.java
index 3dcc77cd..8300834e 100644
--- a/src/main/java/electroblob/wizardry/block/BlockVanishingCobweb.java
+++ b/src/main/java/electroblob/wizardry/block/BlockVanishingCobweb.java
@@ -12,6 +12,7 @@ import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumBlockRenderType;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -19,52 +20,48 @@ import net.minecraftforge.fml.relauncher.SideOnly;
// For future reference - extend BlockContainer whenever possible because it has methods for removing tile entities on block break.
public class BlockVanishingCobweb extends BlockContainer {
- public BlockVanishingCobweb(Material material) {
+ public BlockVanishingCobweb(Material material){
super(material);
}
-
+
@SideOnly(Side.CLIENT)
- public BlockRenderLayer getBlockLayer()
- {
- return BlockRenderLayer.CUTOUT;
- }
-
+ public BlockRenderLayer getBlockLayer(){
+ return BlockRenderLayer.CUTOUT;
+ }
+
@Override
public EnumBlockRenderType getRenderType(IBlockState state){
return EnumBlockRenderType.MODEL;
}
-
- @Override
- public boolean isOpaqueCube(IBlockState state)
- {
- return false;
- }
@Override
- public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos)
- {
- return NULL_AABB;
- }
-
+ public boolean isOpaqueCube(IBlockState state){
+ return false;
+ }
+
@Override
- public boolean isFullCube(IBlockState state)
- {
- return false;
- }
-
- @Override
- public TileEntity createNewTileEntity(World world, int metadata) {
+ public AxisAlignedBB getCollisionBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos){
+ return NULL_AABB;
+ }
+
+ @Override
+ public boolean isFullCube(IBlockState state){
+ return false;
+ }
+
+ @Override
+ public TileEntity createNewTileEntity(World world, int metadata){
return new TileEntityTimer(400);
}
-
- @Override
- public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState state, Entity entity){
- entity.setInWeb();
- }
-
- @Override
+
+ @Override
+ public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState state, Entity entity){
+ entity.setInWeb();
+ }
+
+ @Override
public int quantityDropped(Random par1Random){
- return 0;
- }
-
+ return 0;
+ }
+
}
diff --git a/src/main/java/electroblob/wizardry/client/ClientProxy.java b/src/main/java/electroblob/wizardry/client/ClientProxy.java
index fa6bb170..2ca0bc20 100644
--- a/src/main/java/electroblob/wizardry/client/ClientProxy.java
+++ b/src/main/java/electroblob/wizardry/client/ClientProxy.java
@@ -145,6 +145,7 @@ import net.minecraftforge.fml.client.registry.RenderingRegistry;
/**
* The client proxy for wizardry.
+ *
* @author Electroblob
* @since Wizardry 1.0
*/
@@ -152,155 +153,168 @@ public class ClientProxy extends CommonProxy {
/** Static instance of the mixed font renderer */
public static MixedFontRenderer mixedFontRenderer;
-
+
// Key Bindings
- public static final KeyBinding NEXT_SPELL = new KeyBinding("key.wizardry:next_spell", Keyboard.KEY_N, "key.categories.wizardry");
- public static final KeyBinding PREVIOUS_SPELL = new KeyBinding("key.wizardry:previous_spell", Keyboard.KEY_B, "key.categories.wizardry");
+ public static final KeyBinding NEXT_SPELL = new KeyBinding("key.wizardry:next_spell", Keyboard.KEY_N,
+ "key.categories.wizardry");
+ public static final KeyBinding PREVIOUS_SPELL = new KeyBinding("key.wizardry:previous_spell", Keyboard.KEY_B,
+ "key.categories.wizardry");
// Armour Model
public static final ModelBiped WIZARD_ARMOUR_MODEL = new ModelWizardArmour(0.75f);
-
+
// SECTION Registry
// ===============================================================================================================
-
+
@Override
public ModelBiped getWizardArmourModel(){
return WIZARD_ARMOUR_MODEL;
}
-
+
@Override
- public void registerKeyBindings(){
- ClientRegistry.registerKeyBinding(NEXT_SPELL);
- ClientRegistry.registerKeyBinding(PREVIOUS_SPELL);
+ public void registerKeyBindings(){
+ ClientRegistry.registerKeyBinding(NEXT_SPELL);
+ ClientRegistry.registerKeyBinding(PREVIOUS_SPELL);
}
-
+
@Override
- public void registerSpellHUD(){
+ public void registerSpellHUD(){
MinecraftForge.EVENT_BUS.register(new GuiSpellDisplay(Minecraft.getMinecraft()));
}
-
+
@Override
public void initMixedFontRenderer(){
mixedFontRenderer = new MixedFontRenderer(Minecraft.getMinecraft().gameSettings,
new ResourceLocation("textures/font/ascii.png"), Minecraft.getMinecraft().renderEngine, false);
}
-
+
// SECTION Misc
// ===============================================================================================================
-
+
@Override
- public void setToNumberSliderEntry(Property property) {
+ public void setToNumberSliderEntry(Property property){
property.setConfigEntryClass(NumberSliderEntry.class);
}
-
+
@Override
- public World getTheWorld() {
- return Minecraft.getMinecraft().theWorld;
+ public World getTheWorld(){
+ return Minecraft.getMinecraft().world;
}
@Override
public void playMovingSound(Entity entity, SoundEvent sound, float volume, float pitch, boolean repeat){
- Minecraft.getMinecraft().getSoundHandler().playSound(new MovingSoundEntity(entity, sound, volume, pitch, repeat));
+ Minecraft.getMinecraft().getSoundHandler()
+ .playSound(new MovingSoundEntity(entity, sound, volume, pitch, repeat));
}
-
+
// SECTION Items
// ===============================================================================================================
-
+
@Override
public FontRenderer getFontRenderer(ItemStack stack){
-
+
Spell spell = Spells.none;
-
+
if(stack.getItem() instanceof ItemWand){
spell = WandHelper.getCurrentSpell(stack);
}else if(stack.getItem() instanceof ItemSpellBook || stack.getItem() instanceof ItemScroll){
spell = Spell.get(stack.getItemDamage());
}
-
- if(Minecraft.getMinecraft().thePlayer != null && Wizardry.settings.discoveryMode
- && WizardData.get(Minecraft.getMinecraft().thePlayer) != null
- && !Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode
- && !WizardData.get(Minecraft.getMinecraft().thePlayer).hasSpellBeenDiscovered(spell)){
+
+ if(Minecraft.getMinecraft().player != null && Wizardry.settings.discoveryMode
+ && WizardData.get(Minecraft.getMinecraft().player) != null
+ && !Minecraft.getMinecraft().player.capabilities.isCreativeMode
+ && !WizardData.get(Minecraft.getMinecraft().player).hasSpellBeenDiscovered(spell)){
return mixedFontRenderer;
}
-
+
return null;
}
-
+
@Override
public String getScrollDisplayName(ItemStack scroll){
// Displays [Empty slot] if spell is continuous.
Spell spell = Spell.get(scroll.getItemDamage());
if(spell.isContinuous) spell = Spells.none;
-
- EntityPlayer player = Minecraft.getMinecraft().thePlayer;
-
- boolean discovered = true;
- // It seems that this method is called when the world is loading, before thePlayer has been initialised.
- // If the player is null, the spell is assumed to be discovered.
+
+ EntityPlayer player = Minecraft.getMinecraft().player;
+
+ boolean discovered = true;
+ // It seems that this method is called when the world is loading, before thePlayer has been initialised.
+ // If the player is null, the spell is assumed to be discovered.
if(player != null && Wizardry.settings.discoveryMode && !player.capabilities.isCreativeMode
&& WizardData.get(player) != null && !WizardData.get(player).hasSpellBeenDiscovered(spell)){
discovered = false;
}
-
+
if(discovered){
return I18n.format("item.wizardry:scroll.name", spell.getDisplayName()).trim();
}else{
- return I18n.format("item.wizardry:scroll.undiscovered.name", "#" + SpellGlyphData.getGlyphName(spell, player.worldObj) + "#").trim();
+ return I18n.format("item.wizardry:scroll.undiscovered.name",
+ "#" + SpellGlyphData.getGlyphName(spell, player.world) + "#").trim();
}
}
-
+
@Override
public double getConjuredBowDurability(ItemStack stack){
- EntityPlayer player = Minecraft.getMinecraft().thePlayer;
+ EntityPlayer player = Minecraft.getMinecraft().player;
if(player.getActiveItemStack() == stack){
- return (double)(stack.getItemDamage() + (player.getItemInUseMaxCount()) ) / (double)stack.getMaxDamage();
+ return (double)(stack.getItemDamage() + (player.getItemInUseMaxCount())) / (double)stack.getMaxDamage();
}
return super.getConjuredBowDurability(stack);
}
-
+
// SECTION Particles
// ===============================================================================================================
-
+
@Override
- public void spawnParticle(WizardryParticleType type, World world, double x, double y, double z, double velX, double velY, double velZ, int maxAge, float r, float g, float b, boolean doGravity, double radius){
-
+ public void spawnParticle(WizardryParticleType type, World world, double x, double y, double z, double velX,
+ double velY, double velZ, int maxAge, float r, float g, float b, boolean doGravity, double radius){
+
// Colour values are now automatically clamped to between 0 and 1, as values outside this range seem to
// cause strange effects in 1.10 (or more specifically, particles that are bright pink!)
// TODO: This is a terrible dirty fix, but it'll do for now. Find a nicer way in future.
- if(type != WizardryParticleType.MAGIC_FIRE) r = MathHelper.clamp_float(r, 0, 1);
- g = MathHelper.clamp_float(g, 0, 1);
- b = MathHelper.clamp_float(b, 0, 1);
-
+ if(type != WizardryParticleType.MAGIC_FIRE) r = MathHelper.clamp(r, 0, 1);
+ g = MathHelper.clamp(g, 0, 1);
+ b = MathHelper.clamp(b, 0, 1);
+
switch(type){
-
+
case BLIZZARD:
Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleBlizzard(world, maxAge, x, z, radius, y));
break;
case BRIGHT_DUST:
- Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleDust(world, x, y, z, velX, velY, velZ, r, g, b, false));
+ Minecraft.getMinecraft().effectRenderer
+ .addEffect(new ParticleDust(world, x, y, z, velX, velY, velZ, r, g, b, false));
break;
case DARK_MAGIC:
- Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleDarkMagic(world, x, y, z, velX, velY, velZ, r, g, b));
+ Minecraft.getMinecraft().effectRenderer
+ .addEffect(new ParticleDarkMagic(world, x, y, z, velX, velY, velZ, r, g, b));
break;
case DUST:
- Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleDust(world, x, y, z, velX, velY, velZ, r, g, b, true));
+ Minecraft.getMinecraft().effectRenderer
+ .addEffect(new ParticleDust(world, x, y, z, velX, velY, velZ, r, g, b, true));
break;
case ICE:
- Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleIce(world, x, y, z, velX, velY, velZ, maxAge));
+ Minecraft.getMinecraft().effectRenderer
+ .addEffect(new ParticleIce(world, x, y, z, velX, velY, velZ, maxAge));
break;
case LEAF:
- Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleLeaf(world, x, y, z, velX, velY, velZ, maxAge));
+ Minecraft.getMinecraft().effectRenderer
+ .addEffect(new ParticleLeaf(world, x, y, z, velX, velY, velZ, maxAge));
break;
case MAGIC_BUBBLE:
- Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleGiantBubble(world, x, y, z, velX, velY, velZ));
+ Minecraft.getMinecraft().effectRenderer
+ .addEffect(new ParticleGiantBubble(world, x, y, z, velX, velY, velZ));
break;
case MAGIC_FIRE:
- Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleMagicFlame(world, x, y, z, velX, velY, velZ, maxAge, r == 0 ? 1 + world.rand.nextFloat() : r));
+ Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleMagicFlame(world, x, y, z, velX, velY, velZ,
+ maxAge, r == 0 ? 1 + world.rand.nextFloat() : r));
break;
case PATH:
- Minecraft.getMinecraft().effectRenderer.addEffect(new ParticlePath(world, x, y, z, velX, velY, velZ, r, g, b, maxAge));
+ Minecraft.getMinecraft().effectRenderer
+ .addEffect(new ParticlePath(world, x, y, z, velX, velY, velZ, r, g, b, maxAge));
break;
case SNOW:
Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleSnow(world, x, y, z, velX, velY, velZ));
@@ -309,41 +323,46 @@ public class ClientProxy extends CommonProxy {
Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleSpark(world, x, y, z, velX, velY, velZ));
break;
case SPARKLE:
- Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleSparkle(world, x, y, z, velX, velY, velZ, r, g, b, maxAge, doGravity));
+ Minecraft.getMinecraft().effectRenderer
+ .addEffect(new ParticleSparkle(world, x, y, z, velX, velY, velZ, r, g, b, maxAge, doGravity));
break;
case SPARKLE_ROTATING:
- Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleRotatingSparkle(world, maxAge, x, z, radius, y, r, g, b));
+ Minecraft.getMinecraft().effectRenderer
+ .addEffect(new ParticleRotatingSparkle(world, maxAge, x, z, radius, y, r, g, b));
break;
default:
break;
}
}
-
+
@Override
- public void spawnTornadoParticle(World world, double x, double y, double z, double velX, double velZ, double radius, int maxAge, IBlockState block, BlockPos pos){
- Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleTornado(world, maxAge, x, z, radius, y, velX, velZ, block).setBlockPos(pos));//, world.rand.nextInt(6)));
- }
-
+ public void spawnTornadoParticle(World world, double x, double y, double z, double velX, double velZ, double radius,
+ int maxAge, IBlockState block, BlockPos pos){
+ Minecraft.getMinecraft().effectRenderer
+ .addEffect(new ParticleTornado(world, maxAge, x, z, radius, y, velX, velZ, block).setBlockPos(pos));// ,
+ // world.rand.nextInt(6)));
+ }
+
// SECTION Packet Handlers
// ===============================================================================================================
-
+
@Override
public void handleCastSpellPacket(PacketCastSpell.Message message){
- World world = Minecraft.getMinecraft().theWorld;
+ World world = Minecraft.getMinecraft().world;
Entity caster = world.getEntityByID(message.casterID);
Spell spell = Spell.get(message.spellID);
// Should always be true
if(caster instanceof EntityPlayer){
-
+
((EntityPlayer)caster).setActiveHand(message.hand);
-
+
// Duration isn't needed because it only ever affects things server-side, and anything that is
// seen client-side gets synced elsewhere.
spell.cast(world, (EntityPlayer)caster, message.hand, 0, message.modifiers);
-
+
Source source = Source.OTHER;
-
+
if(((EntityPlayer)caster).getHeldItem(message.hand) != null){
Item item = ((EntityPlayer)caster).getHeldItem(message.hand).getItem();
if(item instanceof ItemWand){
@@ -352,56 +371,59 @@ public class ClientProxy extends CommonProxy {
source = Source.SCROLL;
}
}
-
+
// No need to check if the spell succeeded, because the packet is only ever sent when it succeeds.
// The handler for this event now deals with discovery.
- MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Post((EntityPlayer)caster, spell, message.modifiers, source));
-
+ MinecraftForge.EVENT_BUS
+ .post(new SpellCastEvent.Post((EntityPlayer)caster, spell, message.modifiers, source));
+
}else{
Wizardry.logger.warn("Recieved a PacketCastSpell, but the caster ID was not the ID of a player");
}
}
-
+
@Override
public void handleCastContinuousSpellPacket(PacketCastContinuousSpell.Message message){
-
- World world = Minecraft.getMinecraft().theWorld;
+
+ World world = Minecraft.getMinecraft().world;
Entity caster = world.getEntityByID(message.casterID);
Spell spell = Spell.get(message.spellID);
// Should always be true
if(caster instanceof EntityPlayer){
-
+
WizardData data = WizardData.get((EntityPlayer)caster);
-
+
if(data != null){
- if(data.isCasting()){
- WizardData.get((EntityPlayer)caster).stopCastingContinuousSpell();
- }else{
- WizardData.get((EntityPlayer)caster).startCastingContinuousSpell(spell, message.modifiers);
- }
- }
+ if(data.isCasting()){
+ WizardData.get((EntityPlayer)caster).stopCastingContinuousSpell();
+ }else{
+ WizardData.get((EntityPlayer)caster).startCastingContinuousSpell(spell, message.modifiers);
+ }
+ }
}else{
Wizardry.logger.warn("Recieved a PacketCastContinuousSpell, but the caster ID was not the ID of a player");
}
}
-
+
@Override
public void handleNPCCastSpellPacket(PacketNPCCastSpell.Message message){
- World world = Minecraft.getMinecraft().theWorld;
+ World world = Minecraft.getMinecraft().world;
Entity caster = world.getEntityByID(message.casterID);
Entity target = message.targetID == -1 ? null : world.getEntityByID(message.targetID);
Spell spell = Spell.get(message.spellID);
// Should always be true
if(caster instanceof EntityLiving){
-
+
if(target instanceof EntityLivingBase){
-
+
spell.cast(world, (EntityLiving)caster, message.hand, 0, (EntityLivingBase)target, message.modifiers);
- // Again, no need to check if the spell succeeded, because the packet is only ever sent when it succeeds.
- MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Post((EntityLiving)caster, spell, message.modifiers, Source.NPC));
+ // Again, no need to check if the spell succeeded, because the packet is only ever sent when it
+ // succeeds.
+ MinecraftForge.EVENT_BUS
+ .post(new SpellCastEvent.Post((EntityLiving)caster, spell, message.modifiers, Source.NPC));
}
-
+
if(caster instanceof ISpellCaster){
if(spell.isContinuous || spell instanceof None){
((ISpellCaster)caster).setContinuousSpell(spell);
@@ -412,55 +434,56 @@ public class ClientProxy extends CommonProxy {
Wizardry.logger.warn("Recieved a PacketNPCCastSpell, but the caster ID was not the ID of an EntityLiving");
}
}
-
+
@Override
public void handleTransportationPacket(PacketTransportation.Message message){
-
- World world = Minecraft.getMinecraft().theWorld;
+
+ World world = Minecraft.getMinecraft().world;
Entity caster = world.getEntityByID(message.casterID);
// Moved from when the packet is sent to when it is received; fixes the sound not playing in first person.
caster.playSound(SoundEvents.BLOCK_PORTAL_TRAVEL, 1, 1);
-
- for(int i=0; i<20; i++){
+
+ for(int i = 0; i < 20; i++){
double radius = 1;
- double angle = world.rand.nextDouble()*Math.PI*2;
- double x = caster.posX + radius*Math.cos(angle);
- double y = caster.getEntityBoundingBox().minY + world.rand.nextDouble()*2;
- double z = caster.posZ + radius*Math.sin(angle);
- Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleSparkle(world, x, y, z, 0, 0.02, 0, 0.6f, 1.0f, 0.6f, 80 + world.rand.nextInt(10)));
+ double angle = world.rand.nextDouble() * Math.PI * 2;
+ double x = caster.posX + radius * Math.cos(angle);
+ double y = caster.getEntityBoundingBox().minY + world.rand.nextDouble() * 2;
+ double z = caster.posZ + radius * Math.sin(angle);
+ Minecraft.getMinecraft().effectRenderer.addEffect(
+ new ParticleSparkle(world, x, y, z, 0, 0.02, 0, 0.6f, 1.0f, 0.6f, 80 + world.rand.nextInt(10)));
}
- for(int i=0; i<20; i++){
+ for(int i = 0; i < 20; i++){
double radius = 1;
- double angle = world.rand.nextDouble()*Math.PI*2;
- double x = caster.posX + radius*Math.cos(angle);
- double y = caster.getEntityBoundingBox().minY + world.rand.nextDouble()*2;
- double z = caster.posZ + radius*Math.sin(angle);
- world.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, x, y, z, 0, 0.02, 0);
+ double angle = world.rand.nextDouble() * Math.PI * 2;
+ double x = caster.posX + radius * Math.cos(angle);
+ double y = caster.getEntityBoundingBox().minY + world.rand.nextDouble() * 2;
+ double z = caster.posZ + radius * Math.sin(angle);
+ world.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, x, y, z, 0, 0.02, 0);
}
- for(int i=0; i<20; i++){
+ for(int i = 0; i < 20; i++){
double radius = 1;
- double angle = world.rand.nextDouble()*Math.PI*2;
- double x = caster.posX + radius*Math.cos(angle);
- double y = caster.getEntityBoundingBox().minY + world.rand.nextDouble()*2;
- double z = caster.posZ + radius*Math.sin(angle);
- world.spawnParticle(EnumParticleTypes.ENCHANTMENT_TABLE, x, y, z, 0, 0.02, 0);
+ double angle = world.rand.nextDouble() * Math.PI * 2;
+ double x = caster.posX + radius * Math.cos(angle);
+ double y = caster.getEntityBoundingBox().minY + world.rand.nextDouble() * 2;
+ double z = caster.posZ + radius * Math.sin(angle);
+ world.spawnParticle(EnumParticleTypes.ENCHANTMENT_TABLE, x, y, z, 0, 0.02, 0);
}
}
-
+
@Override
public void handlePlayerSyncPacket(Message message){
-
- WizardData properties = WizardData.get(Minecraft.getMinecraft().thePlayer);
-
+
+ WizardData properties = WizardData.get(Minecraft.getMinecraft().player);
+
if(properties != null){
-
+
properties.spellsDiscovered = message.spellsDiscovered;
-
+
if(message.selectedMinionID == -1){
properties.selectedMinion = null;
}else{
- Entity entity = Minecraft.getMinecraft().theWorld.getEntityByID(message.selectedMinionID);
-
+ Entity entity = Minecraft.getMinecraft().world.getEntityByID(message.selectedMinionID);
+
if(entity instanceof ISummonedCreature){
properties.selectedMinion = new WeakReference((ISummonedCreature)entity);
}else{
@@ -469,92 +492,119 @@ public class ClientProxy extends CommonProxy {
}
}
}
-
+
@Override
public void handleGlyphDataPacket(electroblob.wizardry.packet.PacketGlyphData.Message message){
- SpellGlyphData data = SpellGlyphData.get(Minecraft.getMinecraft().theWorld);
-
+ SpellGlyphData data = SpellGlyphData.get(Minecraft.getMinecraft().world);
+
data.randomNames = new HashMap();
data.randomDescriptions = new HashMap();
-
+
for(Spell spell : Spell.getSpells(Spell.allSpells)){
// -1 because the none spell isn't included
data.randomNames.put(spell, message.names.get(spell.id() - 1));
data.randomDescriptions.put(spell, message.descriptions.get(spell.id() - 1));
}
}
-
+
@Override
- public void handleClairvoyancePacket(electroblob.wizardry.packet.PacketClairvoyance.Message message) {
- Clairvoyance.spawnPathPaticles(Minecraft.getMinecraft().theWorld, message.path, message.durationMultiplier);
+ public void handleClairvoyancePacket(electroblob.wizardry.packet.PacketClairvoyance.Message message){
+ Clairvoyance.spawnPathPaticles(Minecraft.getMinecraft().world, message.path, message.durationMultiplier);
}
-
+
// SECTION Rendering
// ===============================================================================================================
-
- private static final ResourceLocation ICE_WRAITH_TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/entity/ice_wraith.png");
- private static final ResourceLocation LIGHTNING_WRAITH_TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/entity/lightning_wraith.png");
+
+ private static final ResourceLocation ICE_WRAITH_TEXTURE = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/ice_wraith.png");
+ private static final ResourceLocation LIGHTNING_WRAITH_TEXTURE = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/lightning_wraith.png");
/** Static instance of the statue renderer, used to access the block breaking texture. */
public static RenderStatue renderStatue;
-
+
@Override
public void initialiseLayers(){
LayerStone.initialiseLayers();
}
-
+
@Override
public void registerRenderers(){
-
+
// Minions
// Yet another advantage to the new system: turns out you don't even need to register the renderer if you
// just want the vanilla one for the mob you're extending.
-
+
// An anonymous class in a lambda expression! No point writing a separate class really, is there?
- RenderingRegistry.registerEntityRenderingHandler(EntityLightningWraith.class, manager -> new RenderBlaze(manager){
- @Override
- protected ResourceLocation getEntityTexture(EntityBlaze entity){
- return LIGHTNING_WRAITH_TEXTURE;
- }
- });
-
+ RenderingRegistry.registerEntityRenderingHandler(EntityLightningWraith.class,
+ manager -> new RenderBlaze(manager){
+ @Override
+ protected ResourceLocation getEntityTexture(EntityBlaze entity){
+ return LIGHTNING_WRAITH_TEXTURE;
+ }
+ });
+
RenderingRegistry.registerEntityRenderingHandler(EntityIceWraith.class, manager -> new RenderBlaze(manager){
@Override
protected ResourceLocation getEntityTexture(EntityBlaze entity){
return ICE_WRAITH_TEXTURE;
}
});
-
+
RenderingRegistry.registerEntityRenderingHandler(EntityIceGiant.class, RenderIceGiant::new);
RenderingRegistry.registerEntityRenderingHandler(EntityPhoenix.class, RenderPhoenix::new);
// Projectiles
- RenderingRegistry.registerEntityRenderingHandler(EntityMagicMissile.class, manager -> new RenderMagicArrow(manager, new ResourceLocation(Wizardry.MODID, "textures/entity/magic_missile.png"), false, 8.0, 4.0, 16, 9, false));
- RenderingRegistry.registerEntityRenderingHandler(EntityIceShard.class, manager -> new RenderMagicArrow(manager, new ResourceLocation(Wizardry.MODID, "textures/entity/ice_shard.png"), false, 8.0, 2.0, 16, 5, false));
- RenderingRegistry.registerEntityRenderingHandler(EntityLightningArrow.class, manager -> new RenderMagicArrow(manager, new ResourceLocation(Wizardry.MODID, "textures/entity/lightning_arrow.png"), true, 8.0, 2.0, 16, 5, false));
- RenderingRegistry.registerEntityRenderingHandler(EntityDart.class, manager -> new RenderMagicArrow(manager, new ResourceLocation(Wizardry.MODID, "textures/entity/dart.png"), false, 8.0, 2.0, 16, 5, true));
- RenderingRegistry.registerEntityRenderingHandler(EntityIceLance.class, manager -> new RenderMagicArrow(manager, new ResourceLocation(Wizardry.MODID, "textures/entity/ice_lance.png"), false, 16.0, 3.0, 22, 5, true));
+ RenderingRegistry.registerEntityRenderingHandler(EntityMagicMissile.class,
+ manager -> new RenderMagicArrow(manager,
+ new ResourceLocation(Wizardry.MODID, "textures/entity/magic_missile.png"), false, 8.0, 4.0, 16,
+ 9, false));
+ RenderingRegistry.registerEntityRenderingHandler(EntityIceShard.class, manager -> new RenderMagicArrow(manager,
+ new ResourceLocation(Wizardry.MODID, "textures/entity/ice_shard.png"), false, 8.0, 2.0, 16, 5, false));
+ RenderingRegistry.registerEntityRenderingHandler(EntityLightningArrow.class,
+ manager -> new RenderMagicArrow(manager,
+ new ResourceLocation(Wizardry.MODID, "textures/entity/lightning_arrow.png"), true, 8.0, 2.0, 16,
+ 5, false));
+ RenderingRegistry.registerEntityRenderingHandler(EntityDart.class, manager -> new RenderMagicArrow(manager,
+ new ResourceLocation(Wizardry.MODID, "textures/entity/dart.png"), false, 8.0, 2.0, 16, 5, true));
+ RenderingRegistry.registerEntityRenderingHandler(EntityIceLance.class, manager -> new RenderMagicArrow(manager,
+ new ResourceLocation(Wizardry.MODID, "textures/entity/ice_lance.png"), false, 16.0, 3.0, 22, 5, true));
RenderingRegistry.registerEntityRenderingHandler(EntityForceArrow.class, RenderForceArrow::new);
// Creatures
- RenderingRegistry.registerEntityRenderingHandler(EntitySpiritWolf.class, manager -> new RenderSpiritWolf(manager, 0.5f));
- RenderingRegistry.registerEntityRenderingHandler(EntitySpiritHorse.class, manager -> new RenderSpiritHorse(manager, 0.5f));
+ RenderingRegistry.registerEntityRenderingHandler(EntitySpiritWolf.class,
+ manager -> new RenderSpiritWolf(manager));
+ RenderingRegistry.registerEntityRenderingHandler(EntitySpiritHorse.class,
+ manager -> new RenderSpiritHorse(manager));
RenderingRegistry.registerEntityRenderingHandler(EntityWizard.class, RenderWizard::new);
RenderingRegistry.registerEntityRenderingHandler(EntityEvilWizard.class, RenderEvilWizard::new);
RenderingRegistry.registerEntityRenderingHandler(EntityDecoy.class, RenderDecoy::new);
// Throwables
- RenderingRegistry.registerEntityRenderingHandler(EntitySparkBomb.class, manager -> new RenderProjectile(manager, 0.6f, new ResourceLocation(Wizardry.MODID, "textures/entity/spark_bomb.png"), false));
- RenderingRegistry.registerEntityRenderingHandler(EntityFirebomb.class, manager -> new RenderProjectile(manager, 0.6f, new ResourceLocation(Wizardry.MODID, "textures/items/firebomb.png"), false));
- RenderingRegistry.registerEntityRenderingHandler(EntityPoisonBomb.class, manager -> new RenderProjectile(manager, 0.6f, new ResourceLocation(Wizardry.MODID, "textures/items/poison_bomb.png"), false));
- RenderingRegistry.registerEntityRenderingHandler(EntityIceCharge.class, manager -> new RenderProjectile(manager, 0.6f, new ResourceLocation(Wizardry.MODID, "textures/entity/ice_charge.png"), false));
- RenderingRegistry.registerEntityRenderingHandler(EntityForceOrb.class, manager -> new RenderProjectile(manager, 0.7f, new ResourceLocation(Wizardry.MODID, "textures/entity/force_orb.png"), true));
- RenderingRegistry.registerEntityRenderingHandler(EntitySpark.class, manager -> new RenderProjectile(manager, 0.4f, new ResourceLocation(Wizardry.MODID, "textures/entity/spark.png"), true));
- RenderingRegistry.registerEntityRenderingHandler(EntityDarknessOrb.class, manager -> new RenderProjectile(manager, 0.6f, new ResourceLocation(Wizardry.MODID, "textures/entity/darkness_orb.png"), true));
- RenderingRegistry.registerEntityRenderingHandler(EntityFirebolt.class, manager -> new RenderProjectile(manager, 0.2f, new ResourceLocation(Wizardry.MODID, "textures/entity/firebolt.png"), false));
- RenderingRegistry.registerEntityRenderingHandler(EntityLightningDisc.class, manager -> new RenderLightningDisc(manager, new ResourceLocation(Wizardry.MODID, "textures/entity/lightning_sigil.png"), 2.0f));
- RenderingRegistry.registerEntityRenderingHandler(EntitySmokeBomb.class, manager -> new RenderProjectile(manager, 0.6f, new ResourceLocation(Wizardry.MODID, "textures/items/smoke_bomb.png"), false));
+ RenderingRegistry.registerEntityRenderingHandler(EntitySparkBomb.class, manager -> new RenderProjectile(manager,
+ 0.6f, new ResourceLocation(Wizardry.MODID, "textures/entity/spark_bomb.png"), false));
+ RenderingRegistry.registerEntityRenderingHandler(EntityFirebomb.class, manager -> new RenderProjectile(manager,
+ 0.6f, new ResourceLocation(Wizardry.MODID, "textures/items/firebomb.png"), false));
+ RenderingRegistry.registerEntityRenderingHandler(EntityPoisonBomb.class,
+ manager -> new RenderProjectile(manager, 0.6f,
+ new ResourceLocation(Wizardry.MODID, "textures/items/poison_bomb.png"), false));
+ RenderingRegistry.registerEntityRenderingHandler(EntityIceCharge.class, manager -> new RenderProjectile(manager,
+ 0.6f, new ResourceLocation(Wizardry.MODID, "textures/entity/ice_charge.png"), false));
+ RenderingRegistry.registerEntityRenderingHandler(EntityForceOrb.class, manager -> new RenderProjectile(manager,
+ 0.7f, new ResourceLocation(Wizardry.MODID, "textures/entity/force_orb.png"), true));
+ RenderingRegistry.registerEntityRenderingHandler(EntitySpark.class, manager -> new RenderProjectile(manager,
+ 0.4f, new ResourceLocation(Wizardry.MODID, "textures/entity/spark.png"), true));
+ RenderingRegistry.registerEntityRenderingHandler(EntityDarknessOrb.class,
+ manager -> new RenderProjectile(manager, 0.6f,
+ new ResourceLocation(Wizardry.MODID, "textures/entity/darkness_orb.png"), true));
+ RenderingRegistry.registerEntityRenderingHandler(EntityFirebolt.class, manager -> new RenderProjectile(manager,
+ 0.2f, new ResourceLocation(Wizardry.MODID, "textures/entity/firebolt.png"), false));
+ RenderingRegistry.registerEntityRenderingHandler(EntityLightningDisc.class,
+ manager -> new RenderLightningDisc(manager,
+ new ResourceLocation(Wizardry.MODID, "textures/entity/lightning_sigil.png"), 2.0f));
+ RenderingRegistry.registerEntityRenderingHandler(EntitySmokeBomb.class, manager -> new RenderProjectile(manager,
+ 0.6f, new ResourceLocation(Wizardry.MODID, "textures/items/smoke_bomb.png"), false));
// Effects and constructs
RenderingRegistry.registerEntityRenderingHandler(EntityArc.class, RenderArc::new);
@@ -576,13 +626,19 @@ public class ClientProxy extends CommonProxy {
RenderingRegistry.registerEntityRenderingHandler(EntityHailstorm.class, RenderBlank::new);
// Runes on ground
- RenderingRegistry.registerEntityRenderingHandler(EntityHealAura.class, manager -> new RenderSigil(manager, new ResourceLocation(Wizardry.MODID, "textures/entity/healing_aura.png"), 5.0f, false));
- RenderingRegistry.registerEntityRenderingHandler(EntityFireSigil.class, manager -> new RenderSigil(manager, new ResourceLocation(Wizardry.MODID, "textures/entity/fire_sigil.png"), 2.0f, true));
- RenderingRegistry.registerEntityRenderingHandler(EntityFrostSigil.class, manager -> new RenderSigil(manager, new ResourceLocation(Wizardry.MODID, "textures/entity/frost_sigil.png"), 2.0f, true));
- RenderingRegistry.registerEntityRenderingHandler(EntityLightningSigil.class, manager -> new RenderSigil(manager, new ResourceLocation(Wizardry.MODID, "textures/entity/lightning_sigil.png"), 2.0f, true));
- RenderingRegistry.registerEntityRenderingHandler(EntityFireRing.class, manager -> new RenderFireRing(manager, new ResourceLocation(Wizardry.MODID, "textures/entity/ring_of_fire.png"), 5.0f));
+ RenderingRegistry.registerEntityRenderingHandler(EntityHealAura.class, manager -> new RenderSigil(manager,
+ new ResourceLocation(Wizardry.MODID, "textures/entity/healing_aura.png"), 5.0f, false));
+ RenderingRegistry.registerEntityRenderingHandler(EntityFireSigil.class, manager -> new RenderSigil(manager,
+ new ResourceLocation(Wizardry.MODID, "textures/entity/fire_sigil.png"), 2.0f, true));
+ RenderingRegistry.registerEntityRenderingHandler(EntityFrostSigil.class, manager -> new RenderSigil(manager,
+ new ResourceLocation(Wizardry.MODID, "textures/entity/frost_sigil.png"), 2.0f, true));
+ RenderingRegistry.registerEntityRenderingHandler(EntityLightningSigil.class, manager -> new RenderSigil(manager,
+ new ResourceLocation(Wizardry.MODID, "textures/entity/lightning_sigil.png"), 2.0f, true));
+ RenderingRegistry.registerEntityRenderingHandler(EntityFireRing.class, manager -> new RenderFireRing(manager,
+ new ResourceLocation(Wizardry.MODID, "textures/entity/ring_of_fire.png"), 5.0f));
RenderingRegistry.registerEntityRenderingHandler(EntityDecay.class, RenderDecay::new);
- RenderingRegistry.registerEntityRenderingHandler(EntityLightningPulse.class, manager -> new RenderLightningPulse(manager, 8.0f));
+ RenderingRegistry.registerEntityRenderingHandler(EntityLightningPulse.class,
+ manager -> new RenderLightningPulse(manager, 8.0f));
// TESRs
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityArcaneWorkbench.class, new RenderArcaneWorkbench());
diff --git a/src/main/java/electroblob/wizardry/client/EntityNameEntry.java b/src/main/java/electroblob/wizardry/client/EntityNameEntry.java
index 3221e189..597df57e 100644
--- a/src/main/java/electroblob/wizardry/client/EntityNameEntry.java
+++ b/src/main/java/electroblob/wizardry/client/EntityNameEntry.java
@@ -1,76 +1,81 @@
package electroblob.wizardry.client;
-import java.util.HashMap;
import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n;
-import net.minecraft.entity.EntityList;
+import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.client.config.GuiButtonExt;
import net.minecraftforge.fml.client.config.GuiEditArray;
import net.minecraftforge.fml.client.config.GuiEditArrayEntries;
import net.minecraftforge.fml.client.config.GuiEditArrayEntries.StringEntry;
import net.minecraftforge.fml.client.config.GuiSelectString;
import net.minecraftforge.fml.client.config.IConfigElement;
+import net.minecraftforge.fml.common.registry.EntityEntry;
+import net.minecraftforge.fml.common.registry.ForgeRegistries;
-/** [NYI] Intended as a way of choosing entities by name from all those currently registered, within the config file, so
- * that users don't have to look up the entity IDs. I can't get this to work correctly at the moment. */
+/**
+ * [NYI] Intended as a way of choosing entities by name from all those currently registered, within the config file, so
+ * that users don't have to look up the entity IDs. I can't get this to work correctly at the moment.
+ */
public class EntityNameEntry extends StringEntry {
protected final GuiButtonExt btnValue;
protected Object entityClass;
- public EntityNameEntry(GuiEditArray owningScreen, GuiEditArrayEntries owningEntryList, IConfigElement configElement, Object value)
- {
- super(owningScreen, owningEntryList, configElement, value);
- this.btnValue = new GuiButtonExt(0, 0, 0, owningEntryList.controlWidth, 18, I18n.format(this.textFieldValue.getText()));
- //this.btnValue.enabled = owningScreen.enabled;
- }
-
- @Override
- public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected)
- {
- //super.drawEntry(slotIndex, x, y, listWidth, slotHeight, tessellator, mouseX, mouseY, isSelected);
- this.btnValue.xPosition = listWidth / 4;
- this.btnValue.yPosition = y;
+ public EntityNameEntry(GuiEditArray owningScreen, GuiEditArrayEntries owningEntryList, IConfigElement configElement,
+ Object value){
+ super(owningScreen, owningEntryList, configElement, value);
+ this.btnValue = new GuiButtonExt(0, 0, 0, owningEntryList.controlWidth, 18,
+ I18n.format(this.textFieldValue.getText()));
+ // this.btnValue.enabled = owningScreen.enabled;
+ }
- String trans = I18n.format(this.textFieldValue.getText());
- if (!trans.equals(this.textFieldValue.getText()))
- this.btnValue.displayString = trans;
- else
- this.btnValue.displayString = this.textFieldValue.getText();
- //btnValue.packedFGColour = value ? GuiUtils.getColorCode('2', true) : GuiUtils.getColorCode('4', true);
+ @Override
+ public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY,
+ boolean isSelected){
+ // super.drawEntry(slotIndex, x, y, listWidth, slotHeight, tessellator, mouseX, mouseY, isSelected);
+ this.btnValue.xPosition = listWidth / 4;
+ this.btnValue.yPosition = y;
- this.btnValue.drawButton(owningEntryList.getMC(), mouseX, mouseY);
- }
+ String trans = I18n.format(this.textFieldValue.getText());
+ if(!trans.equals(this.textFieldValue.getText()))
+ this.btnValue.displayString = trans;
+ else
+ this.btnValue.displayString = this.textFieldValue.getText();
+ // btnValue.packedFGColour = value ? GuiUtils.getColorCode('2', true) : GuiUtils.getColorCode('4', true);
- @Override
- public boolean mousePressed(int index, int x, int y, int mouseEvent, int relativeX, int relativeY)
- {
- if (this.btnValue.mousePressed(owningEntryList.getMC(), x, y))
- {
- btnValue.playPressSound(owningEntryList.getMC().getSoundHandler());
- // Some sort of type incompatiblity meant that I had to do this first.
- Map map = new HashMap(EntityList.CLASS_TO_NAME);
- Minecraft.getMinecraft().displayGuiScreen(new GuiSelectString(this.owningScreen, configElement, index, map, this.getValue(), true));
- owningEntryList.recalculateState();
- return true;
- }
+ this.btnValue.drawButton(owningEntryList.getMC(), mouseX, mouseY);
+ }
- return super.mousePressed(index, x, y, mouseEvent, relativeX, relativeY);
- }
+ @Override
+ public boolean mousePressed(int index, int x, int y, int mouseEvent, int relativeX, int relativeY){
+ if(this.btnValue.mousePressed(owningEntryList.getMC(), x, y)){
+ btnValue.playPressSound(owningEntryList.getMC().getSoundHandler());
+ // Goodness only knows if this works, but the class is unimplemented right now so it doesn't really matter.
+ Map map = ForgeRegistries.ENTITIES.getEntries().stream().collect(
+ Collectors., Object, String>toMap(e -> e.getValue().getClass(),
+ e -> e.getValue().getName()));
+ Minecraft.getMinecraft().displayGuiScreen(
+ new GuiSelectString(this.owningScreen, configElement, index, map, this.getValue(), true));
+ owningEntryList.recalculateState();
+ return true;
+ }
- @Override
- public void mouseReleased(int index, int x, int y, int mouseEvent, int relativeX, int relativeY)
- {
- this.btnValue.mouseReleased(x, y);
- super.mouseReleased(index, x, y, mouseEvent, relativeX, relativeY);
- }
+ return super.mousePressed(index, x, y, mouseEvent, relativeX, relativeY);
+ }
- @Override
- public Object getValue()
- {
- return this.textFieldValue.getText();
- }
+ @Override
+ public void mouseReleased(int index, int x, int y, int mouseEvent, int relativeX, int relativeY){
+ this.btnValue.mouseReleased(x, y);
+ super.mouseReleased(index, x, y, mouseEvent, relativeX, relativeY);
+ }
+
+ @Override
+ public Object getValue(){
+ return this.textFieldValue.getText();
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/GuiArcaneWorkbench.java b/src/main/java/electroblob/wizardry/client/GuiArcaneWorkbench.java
index 43f0470a..2455ee8a 100644
--- a/src/main/java/electroblob/wizardry/client/GuiArcaneWorkbench.java
+++ b/src/main/java/electroblob/wizardry/client/GuiArcaneWorkbench.java
@@ -30,14 +30,15 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
public class GuiArcaneWorkbench extends GuiContainer {
private GuiButton applyBtn;
- private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/gui/arcane_workbench.png");
+ private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID,
+ "textures/gui/arcane_workbench.png");
private IInventory playerInventory;
private IInventory arcaneWorkbenchInventory;
private final int tooltipWidth = 164;
- public GuiArcaneWorkbench(InventoryPlayer invPlayer, TileEntityArcaneWorkbench entity) {
+ public GuiArcaneWorkbench(InventoryPlayer invPlayer, TileEntityArcaneWorkbench entity){
super(new ContainerArcaneWorkbench(invPlayer, entity));
this.playerInventory = invPlayer;
this.arcaneWorkbenchInventory = entity;
@@ -49,12 +50,13 @@ public class GuiArcaneWorkbench extends GuiContainer {
public void drawScreen(int p_73863_1_, int p_73863_2_, float p_73863_3_){
// Tests if there is a wand in the workbench and edits the positioning accordingly
- if(this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getHasStack() && this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack().getItem() instanceof ItemWand){
- guiLeft = (this.width - this.xSize - tooltipWidth)/2;
- this.applyBtn.xPosition = (this.width - tooltipWidth)/2 + 48;
+ if(this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getHasStack() && this.inventorySlots
+ .getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack().getItem() instanceof ItemWand){
+ guiLeft = (this.width - this.xSize - tooltipWidth) / 2;
+ this.applyBtn.xPosition = (this.width - tooltipWidth) / 2 + 48;
}else{
- guiLeft = (this.width - this.xSize)/2;
- this.applyBtn.xPosition = this.width/2 + 48;
+ guiLeft = (this.width - this.xSize) / 2;
+ this.applyBtn.xPosition = this.width / 2 + 48;
}
if(this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getHasStack()){
@@ -67,10 +69,10 @@ public class GuiArcaneWorkbench extends GuiContainer {
}
@Override
- public void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) {
+ public void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY){
GlStateManager.pushAttrib();
-
+
GlStateManager.color(1F, 1F, 1F, 1F);
Minecraft.getMinecraft().renderEngine.bindTexture(texture);
@@ -78,55 +80,58 @@ public class GuiArcaneWorkbench extends GuiContainer {
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
// Changing slots
- for(int i=0; i=0 && slot.yDisplayPosition >= 0)
- this.drawTexturedModalRect(guiLeft + slot.xDisplayPosition - 10, guiTop + slot.yDisplayPosition - 10,
- 0, 220, 36, 36);
+ if(slot.xPos >= 0 && slot.yPos >= 0)
+ this.drawTexturedModalRect(guiLeft + slot.xPos - 10, guiTop + slot.yPos - 10, 0, 220, 36, 36);
}
// Tooltip only drawn if there is a wand
- if(this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getHasStack() && this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack().getItem() instanceof ItemWand){
+ if(this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getHasStack() && this.inventorySlots
+ .getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack().getItem() instanceof ItemWand){
// Tooltip box
drawTexturedModalRect(guiLeft + xSize, guiTop, xSize, 0, 256 - xSize - 4, ySize);
- drawTexturedModalRect(guiLeft + 252, guiTop, xSize + 4, 0, tooltipWidth - 2*(256 - xSize - 4), ySize);
- drawTexturedModalRect(guiLeft + xSize + tooltipWidth - (256 - xSize - 4), guiTop, xSize + 4, 0, 256 - xSize - 4, ySize);
+ drawTexturedModalRect(guiLeft + 252, guiTop, xSize + 4, 0, tooltipWidth - 2 * (256 - xSize - 4), ySize);
+ drawTexturedModalRect(guiLeft + xSize + tooltipWidth - (256 - xSize - 4), guiTop, xSize + 4, 0,
+ 256 - xSize - 4, ySize);
ItemStack wand = this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack();
Spell[] spells = WandHelper.getSpells(wand);
- int i=0;
+ int i = 0;
for(Spell spell : spells){
boolean discovered = true;
- if(!this.mc.thePlayer.capabilities.isCreativeMode && WizardData.get(this.mc.thePlayer) != null){
- discovered = WizardData.get(this.mc.thePlayer).hasSpellBeenDiscovered(spell);
+ if(!this.mc.player.capabilities.isCreativeMode && WizardData.get(this.mc.player) != null){
+ discovered = WizardData.get(this.mc.player).hasSpellBeenDiscovered(spell);
}
// As of Wizardry 1.2, the icons have been split off into their own texture files to allow for add-on
// mods to add their own.
- Minecraft.getMinecraft().renderEngine.bindTexture(discovered ? spell.element.getIcon() : Element.MAGIC.getIcon());
+ Minecraft.getMinecraft().renderEngine
+ .bindTexture(discovered ? spell.element.getIcon() : Element.MAGIC.getIcon());
// Renders the little element icon
- WizardryUtilities.drawTexturedRect(guiLeft + xSize + 5, guiTop + 34 + 10*i++, 8, 8);
+ WizardryUtilities.drawTexturedRect(guiLeft + xSize + 5, guiTop + 34 + 10 * i++, 8, 8);
}
int x = 0;
- int y = guiTop + 50 + spells.length*10;
-
+ int y = guiTop + 50 + spells.length * 10;
+
// Look how much shorter this is with the WandHelper class!
for(Item item : WandHelper.getSpecialUpgrades()){
-
+
int level = WandHelper.getUpgradeLevel(wand, item);
-
+
if(level > 0){
ItemStack stack = new ItemStack(item, level);
GlStateManager.enableDepth();
this.itemRender.renderItemAndEffectIntoGUI(stack, guiLeft + xSize + 6 + x, y);
- this.itemRender.renderItemOverlayIntoGUI(this.fontRendererObj, stack, guiLeft + xSize + 6 + x, y, null);
+ this.itemRender.renderItemOverlayIntoGUI(this.fontRendererObj, stack, guiLeft + xSize + 6 + x, y,
+ null);
x += 18;
GlStateManager.disableDepth();
}
@@ -134,26 +139,33 @@ public class GuiArcaneWorkbench extends GuiContainer {
}
Minecraft.getMinecraft().renderEngine.bindTexture(texture);
-
+
// Fixes the bug that caused the slot hightlight to render opaque. I don't know why it works, it just works!
GlStateManager.disableBlend();
GlStateManager.enableAlpha();
-
+
GlStateManager.popAttrib();
}
@Override
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY){
- this.fontRendererObj.drawString(this.arcaneWorkbenchInventory.hasCustomName() ? this.arcaneWorkbenchInventory.getName() : I18n.format(this.arcaneWorkbenchInventory.getName()), 8, 6, 4210752);
- this.fontRendererObj.drawString(this.playerInventory.hasCustomName() ? this.playerInventory.getName() : I18n.format(this.playerInventory.getName()), 8, this.ySize - 96 + 2, 4210752);
+ this.fontRendererObj
+ .drawString(this.arcaneWorkbenchInventory.hasCustomName() ? this.arcaneWorkbenchInventory.getName()
+ : I18n.format(this.arcaneWorkbenchInventory.getName()), 8, 6, 4210752);
+ this.fontRendererObj.drawString(this.playerInventory.hasCustomName() ? this.playerInventory.getName()
+ : I18n.format(this.playerInventory.getName()), 8, this.ySize - 96 + 2, 4210752);
- if(this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getHasStack() && this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack().getItem() instanceof ItemWand){
+ if(this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getHasStack() && this.inventorySlots
+ .getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack().getItem() instanceof ItemWand){
ItemStack wand = this.inventorySlots.getSlot(ContainerArcaneWorkbench.WAND_SLOT).getStack();
this.fontRendererObj.drawStringWithShadow("\u00A7f" + wand.getDisplayName(), xSize + 6, 6, 0);
- this.fontRendererObj.drawStringWithShadow("\u00A77" + I18n.format("container.wizardry:arcane_workbench.mana") + " " + (wand.getMaxDamage() - wand.getItemDamage()) + "/" + wand.getMaxDamage(), xSize + 6, 20, 0);
+ this.fontRendererObj.drawStringWithShadow(
+ "\u00A77" + I18n.format("container.wizardry:arcane_workbench.mana") + " "
+ + (wand.getMaxDamage() - wand.getItemDamage()) + "/" + wand.getMaxDamage(),
+ xSize + 6, 20, 0);
Spell[] spells = WandHelper.getSpells(wand);
@@ -163,29 +175,31 @@ public class GuiArcaneWorkbench extends GuiContainer {
boolean discovered = true;
- if(!this.mc.thePlayer.capabilities.isCreativeMode && WizardData.get(this.mc.thePlayer) != null){
- discovered = WizardData.get(this.mc.thePlayer).hasSpellBeenDiscovered(spell);
+ if(!this.mc.player.capabilities.isCreativeMode && WizardData.get(this.mc.player) != null){
+ discovered = WizardData.get(this.mc.player).hasSpellBeenDiscovered(spell);
}
if(discovered){
this.fontRendererObj.drawStringWithShadow(spell.getDisplayNameWithFormatting(), xSize + 16, y, 0);
}else{
- this.mc.standardGalacticFontRenderer.drawStringWithShadow("\u00A79" + SpellGlyphData.getGlyphName(spell, this.mc.theWorld), xSize + 16, y, 0);
+ this.mc.standardGalacticFontRenderer.drawStringWithShadow(
+ "\u00A79" + SpellGlyphData.getGlyphName(spell, this.mc.world), xSize + 16, y, 0);
}
y += 10;
}
-
+
if(WandHelper.getTotalUpgrades(wand) > 0){
-
- this.fontRendererObj.drawStringWithShadow("\u00A7f" + I18n.format("container.wizardry:arcane_workbench.upgrades"), xSize + 6, y + 6, 0);
-
+
+ this.fontRendererObj.drawStringWithShadow(
+ "\u00A7f" + I18n.format("container.wizardry:arcane_workbench.upgrades"), xSize + 6, y + 6, 0);
+
int x = 0;
- y = 50 + spells.length*10;
+ y = 50 + spells.length * 10;
// Wand upgrade tooltips
for(Item item : WandHelper.getSpecialUpgrades()){
-
+
int level = WandHelper.getUpgradeLevel(wand, item);
-
+
if(level > 0){
// The javadoc for isPointInRegion is ambiguous; what it means is that the REGION is
// relative to the GUI but the POINT isn't.
@@ -202,12 +216,12 @@ public class GuiArcaneWorkbench extends GuiContainer {
@Override
public void initGui(){
- this.mc.thePlayer.openContainer = this.inventorySlots;
+ this.mc.player.openContainer = this.inventorySlots;
this.guiLeft = (this.width - this.xSize) / 2;
this.guiTop = (this.height - this.ySize) / 2;
Keyboard.enableRepeatEvents(true);
this.buttonList.clear();
- this.buttonList.add(this.applyBtn = new GuiButtonApply(0, this.width/2 + 48, this.height/2 + 3));
+ this.buttonList.add(this.applyBtn = new GuiButtonApply(0, this.width / 2 + 48, this.height / 2 + 3));
}
@Override
diff --git a/src/main/java/electroblob/wizardry/client/GuiButtonApply.java b/src/main/java/electroblob/wizardry/client/GuiButtonApply.java
index fd54d344..dc6223e7 100644
--- a/src/main/java/electroblob/wizardry/client/GuiButtonApply.java
+++ b/src/main/java/electroblob/wizardry/client/GuiButtonApply.java
@@ -10,32 +10,34 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
class GuiButtonApply extends GuiButton {
- public GuiButtonApply(int id, int x, int y){
-
- super(id, x, y, 32, 16, I18n.format("container.wizardry:arcane_workbench.apply"));
- }
+ public GuiButtonApply(int id, int x, int y){
+
+ super(id, x, y, 32, 16, I18n.format("container.wizardry:arcane_workbench.apply"));
+ }
@Override
- public void drawButton(Minecraft minecraft, int mouseX, int mouseY){
-
- // Whether the button is highlighted
- this.hovered = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height;
-
- int k = 36;
- int l = 220;
- int colour = 14737632;
-
- if(this.enabled){
- if(this.hovered){
- k += this.width*2;
- colour = 16777120;
- }
- }else{
- k += this.width;
- colour = 10526880;
- }
-
- WizardryUtilities.drawTexturedRect(this.xPosition, this.yPosition, k, l, this.width, this.height, 256, 256);
- this.drawCenteredString(minecraft.fontRendererObj, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, colour);
- }
+ public void drawButton(Minecraft minecraft, int mouseX, int mouseY){
+
+ // Whether the button is highlighted
+ this.hovered = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width
+ && mouseY < this.yPosition + this.height;
+
+ int k = 36;
+ int l = 220;
+ int colour = 14737632;
+
+ if(this.enabled){
+ if(this.hovered){
+ k += this.width * 2;
+ colour = 16777120;
+ }
+ }else{
+ k += this.width;
+ colour = 10526880;
+ }
+
+ WizardryUtilities.drawTexturedRect(this.xPosition, this.yPosition, k, l, this.width, this.height, 256, 256);
+ this.drawCenteredString(minecraft.fontRendererObj, this.displayString, this.xPosition + this.width / 2,
+ this.yPosition + (this.height - 8) / 2, colour);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/electroblob/wizardry/client/GuiButtonInvisible.java b/src/main/java/electroblob/wizardry/client/GuiButtonInvisible.java
index 3cc2f12e..a839b0bc 100644
--- a/src/main/java/electroblob/wizardry/client/GuiButtonInvisible.java
+++ b/src/main/java/electroblob/wizardry/client/GuiButtonInvisible.java
@@ -8,16 +8,17 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
class GuiButtonInvisible extends GuiButton {
- public GuiButtonInvisible(int id, int x, int y, int width, int height){
-
- super(id, x, y, width, height, "");
- }
+ public GuiButtonInvisible(int id, int x, int y, int width, int height){
+
+ super(id, x, y, width, height, "");
+ }
/**
- * Draws this button to the screen.
- */
- public void drawButton(Minecraft par1Minecraft, int par2, int par3){
- this.hovered = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height;
- }
-
+ * Draws this button to the screen.
+ */
+ public void drawButton(Minecraft par1Minecraft, int par2, int par3){
+ this.hovered = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width
+ && par3 < this.yPosition + this.height;
+ }
+
}
diff --git a/src/main/java/electroblob/wizardry/client/GuiButtonTurnPage.java b/src/main/java/electroblob/wizardry/client/GuiButtonTurnPage.java
index b4b7e68b..a9fae985 100644
--- a/src/main/java/electroblob/wizardry/client/GuiButtonTurnPage.java
+++ b/src/main/java/electroblob/wizardry/client/GuiButtonTurnPage.java
@@ -12,41 +12,37 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
class GuiButtonTurnPage extends GuiButton {
- /** True for pointing right (next page), false for pointing left (previous page). */
- private final boolean nextPage;
-
- private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/gui/handbook.png");
+ /** True for pointing right (next page), false for pointing left (previous page). */
+ private final boolean nextPage;
- public GuiButtonTurnPage(int id, int x, int y, boolean isNextPage)
- {
- super(id, x, y, 23, 13, "");
- this.nextPage = isNextPage;
- }
+ private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/gui/handbook.png");
+
+ public GuiButtonTurnPage(int id, int x, int y, boolean isNextPage){
+ super(id, x, y, 23, 13, "");
+ this.nextPage = isNextPage;
+ }
/**
- * Draws this button to the screen.
- */
- public void drawButton(Minecraft par1Minecraft, int par2, int par3)
- {
- if (this.visible)
- {
- boolean flag = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height;
- GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
- par1Minecraft.getTextureManager().bindTexture(texture);
- int k = 0;
- int l = 192;
+ * Draws this button to the screen.
+ */
+ public void drawButton(Minecraft par1Minecraft, int par2, int par3){
+ if(this.visible){
+ boolean flag = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width
+ && par3 < this.yPosition + this.height;
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ par1Minecraft.getTextureManager().bindTexture(texture);
+ int k = 0;
+ int l = 192;
- if (flag)
- {
- k += 23;
- }
+ if(flag){
+ k += 23;
+ }
- if (!this.nextPage)
- {
- l += 13;
- }
+ if(!this.nextPage){
+ l += 13;
+ }
- WizardryUtilities.drawTexturedRect(this.xPosition, this.yPosition, k, l, 23, 13, 288, 256);
- }
- }
+ WizardryUtilities.drawTexturedRect(this.xPosition, this.yPosition, k, l, 23, 13, 288, 256);
+ }
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/GuiConfigWizardry.java b/src/main/java/electroblob/wizardry/client/GuiConfigWizardry.java
index 587a8603..68f375d9 100644
--- a/src/main/java/electroblob/wizardry/client/GuiConfigWizardry.java
+++ b/src/main/java/electroblob/wizardry/client/GuiConfigWizardry.java
@@ -18,63 +18,63 @@ import net.minecraftforge.fml.client.config.IConfigElement;
public class GuiConfigWizardry extends GuiConfig {
public GuiConfigWizardry(GuiScreen parent){
- super(parent, getConfigEntries(), Wizardry.MODID, false, false, Wizardry.NAME + " - " + I18n.format("config.wizardry.title.general"));
- //this.titleLine2 = "File location: " + Wizardry.config.getConfigFile().getAbsolutePath();
+ super(parent, getConfigEntries(), Wizardry.MODID, false, false,
+ Wizardry.NAME + " - " + I18n.format("config.wizardry.title.general"));
+ // this.titleLine2 = "File location: " + Wizardry.config.getConfigFile().getAbsolutePath();
}
-
+
private static List getConfigEntries(){
List configList = new ArrayList(1);
- configList.add(new DummyCategoryElement("spellsConfig", "config.wizardry.category." + Settings.SPELLS_CATEGORY, SpellsCategory.class));
- configList.add(new DummyCategoryElement("resistancesConfig", "config.wizardry.category." + Settings.RESISTANCES_CATEGORY, ResistancesCategory.class));
- configList.addAll(new ConfigElement(Wizardry.settings.getConfigCategory(Configuration.CATEGORY_GENERAL)).getChildElements());
+ configList.add(new DummyCategoryElement("spellsConfig", "config.wizardry.category." + Settings.SPELLS_CATEGORY,
+ SpellsCategory.class));
+ configList.add(new DummyCategoryElement("resistancesConfig",
+ "config.wizardry.category." + Settings.RESISTANCES_CATEGORY, ResistancesCategory.class));
+ configList.addAll(new ConfigElement(Wizardry.settings.getConfigCategory(Configuration.CATEGORY_GENERAL))
+ .getChildElements());
return configList;
}
-
+
/** Spells category of the config gui. This adds a button which opens up the spells category config. */
- public static class SpellsCategory extends CategoryEntry
- {
- public SpellsCategory(GuiConfig owningScreen, GuiConfigEntries owningEntryList, IConfigElement prop)
- {
- super(owningScreen, owningEntryList, prop);
- }
-
- @Override
- protected GuiScreen buildChildScreen()
- {
- // This GuiConfig object specifies the configID of the object and as such will force-save when it is closed.
- // The parent GuiConfig object's entryList will also be refreshed to reflect the changes.
- GuiConfig spellsMenu = new GuiConfig(this.owningScreen,
- (new ConfigElement(Wizardry.settings.getConfigCategory(Settings.SPELLS_CATEGORY))).getChildElements(),
- this.owningScreen.modID, Settings.SPELLS_CATEGORY, false, false,
- Wizardry.NAME + " - " + I18n.format("config.wizardry.title." + Settings.SPELLS_CATEGORY));
-
- spellsMenu.titleLine2 = I18n.format("config.wizardry.subtitle." + Settings.SPELLS_CATEGORY);
-
- return spellsMenu;
- }
- }
-
- /** Resistances category of the config gui. */
- public static class ResistancesCategory extends CategoryEntry
- {
- public ResistancesCategory(GuiConfig owningScreen, GuiConfigEntries owningEntryList, IConfigElement prop)
- {
- super(owningScreen, owningEntryList, prop);
- }
-
- @Override
- protected GuiScreen buildChildScreen()
- {
- // This GuiConfig object specifies the configID of the object and as such will force-save when it is closed.
- // The parent GuiConfig object's entryList will also be refreshed to reflect the changes.
- GuiConfig idsMenu = new GuiConfig(this.owningScreen,
- (new ConfigElement(Wizardry.settings.getConfigCategory(Settings.RESISTANCES_CATEGORY))).getChildElements(),
- this.owningScreen.modID, Settings.RESISTANCES_CATEGORY, false, false,
- Wizardry.NAME + " - " + I18n.format("config.wizardry.title." + Settings.RESISTANCES_CATEGORY));
-
- idsMenu.titleLine2 = I18n.format("config.wizardry.subtitle." + Settings.RESISTANCES_CATEGORY);
-
- return idsMenu;
- }
- }
+ public static class SpellsCategory extends CategoryEntry {
+ public SpellsCategory(GuiConfig owningScreen, GuiConfigEntries owningEntryList, IConfigElement prop){
+ super(owningScreen, owningEntryList, prop);
+ }
+
+ @Override
+ protected GuiScreen buildChildScreen(){
+ // This GuiConfig object specifies the configID of the object and as such will force-save when it is closed.
+ // The parent GuiConfig object's entryList will also be refreshed to reflect the changes.
+ GuiConfig spellsMenu = new GuiConfig(this.owningScreen,
+ (new ConfigElement(Wizardry.settings.getConfigCategory(Settings.SPELLS_CATEGORY)))
+ .getChildElements(),
+ this.owningScreen.modID, Settings.SPELLS_CATEGORY, false, false,
+ Wizardry.NAME + " - " + I18n.format("config.wizardry.title." + Settings.SPELLS_CATEGORY));
+
+ spellsMenu.titleLine2 = I18n.format("config.wizardry.subtitle." + Settings.SPELLS_CATEGORY);
+
+ return spellsMenu;
+ }
+ }
+
+ /** Resistances category of the config gui. */
+ public static class ResistancesCategory extends CategoryEntry {
+ public ResistancesCategory(GuiConfig owningScreen, GuiConfigEntries owningEntryList, IConfigElement prop){
+ super(owningScreen, owningEntryList, prop);
+ }
+
+ @Override
+ protected GuiScreen buildChildScreen(){
+ // This GuiConfig object specifies the configID of the object and as such will force-save when it is closed.
+ // The parent GuiConfig object's entryList will also be refreshed to reflect the changes.
+ GuiConfig idsMenu = new GuiConfig(this.owningScreen,
+ (new ConfigElement(Wizardry.settings.getConfigCategory(Settings.RESISTANCES_CATEGORY)))
+ .getChildElements(),
+ this.owningScreen.modID, Settings.RESISTANCES_CATEGORY, false, false,
+ Wizardry.NAME + " - " + I18n.format("config.wizardry.title." + Settings.RESISTANCES_CATEGORY));
+
+ idsMenu.titleLine2 = I18n.format("config.wizardry.subtitle." + Settings.RESISTANCES_CATEGORY);
+
+ return idsMenu;
+ }
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/GuiPortableCrafting.java b/src/main/java/electroblob/wizardry/client/GuiPortableCrafting.java
index d4f8e225..c31f5fa1 100644
--- a/src/main/java/electroblob/wizardry/client/GuiPortableCrafting.java
+++ b/src/main/java/electroblob/wizardry/client/GuiPortableCrafting.java
@@ -11,29 +11,27 @@ import net.minecraft.world.World;
/** Crafting table GUI that doesn't require a crafting table container object. */
public class GuiPortableCrafting extends GuiContainer {
-
- private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation("textures/gui/container/crafting_table.png");
-
- public GuiPortableCrafting(InventoryPlayer p_i1084_1_, World p_i1084_2_, BlockPos pos)
- {
- super(new ContainerWorkbench(p_i1084_1_, p_i1084_2_, pos));
- }
- /**
- * Draw the foreground layer for the GuiContainer (everything in front of the items)
- */
- protected void drawGuiContainerForegroundLayer(int p_146979_1_, int p_146979_2_)
- {
- this.fontRendererObj.drawString(I18n.format("container.crafting"), 28, 6, 4210752);
- this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
- }
+ private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation(
+ "textures/gui/container/crafting_table.png");
- protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_)
- {
- GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
- this.mc.getTextureManager().bindTexture(craftingTableGuiTextures);
- int k = (this.width - this.xSize) / 2;
- int l = (this.height - this.ySize) / 2;
- this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
- }
+ public GuiPortableCrafting(InventoryPlayer p_i1084_1_, World p_i1084_2_, BlockPos pos){
+ super(new ContainerWorkbench(p_i1084_1_, p_i1084_2_, pos));
+ }
+
+ /**
+ * Draw the foreground layer for the GuiContainer (everything in front of the items)
+ */
+ protected void drawGuiContainerForegroundLayer(int p_146979_1_, int p_146979_2_){
+ this.fontRendererObj.drawString(I18n.format("container.crafting"), 28, 6, 4210752);
+ this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
+ }
+
+ protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_){
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ this.mc.getTextureManager().bindTexture(craftingTableGuiTextures);
+ int k = (this.width - this.xSize) / 2;
+ int l = (this.height - this.ySize) / 2;
+ this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/GuiSpellBook.java b/src/main/java/electroblob/wizardry/client/GuiSpellBook.java
index c7a90cb2..5737db8b 100644
--- a/src/main/java/electroblob/wizardry/client/GuiSpellBook.java
+++ b/src/main/java/electroblob/wizardry/client/GuiSpellBook.java
@@ -15,113 +15,98 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
public class GuiSpellBook extends GuiScreen {
-
+
private int xSize, ySize;
private Spell spell;
-
+
private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/gui/spellbook.png");
-
- public GuiSpellBook(Spell spell) {
+
+ public GuiSpellBook(Spell spell){
super();
xSize = 288;
ySize = 180;
this.spell = spell;
}
-
+
/**
- * Draws the screen and all the components in it.
- */
- public void drawScreen(int par1, int par2, float par3) {
-
- int xPos = this.width/2 - xSize/2;
- int yPos = this.height/2 - this.ySize/2;
-
- EntityPlayer player = Minecraft.getMinecraft().thePlayer;
-
- boolean discovered = true;
+ * Draws the screen and all the components in it.
+ */
+ public void drawScreen(int par1, int par2, float par3){
+
+ int xPos = this.width / 2 - xSize / 2;
+ int yPos = this.height / 2 - this.ySize / 2;
+
+ EntityPlayer player = Minecraft.getMinecraft().player;
+
+ boolean discovered = true;
if(Wizardry.settings.discoveryMode && !player.capabilities.isCreativeMode && WizardData.get(player) != null
&& !WizardData.get(player).hasSpellBeenDiscovered(spell)){
discovered = false;
}
- // Draws spell illustration on opposite page, underneath the book so it shows through the hole.
+ // Draws spell illustration on opposite page, underneath the book so it shows through the hole.
Minecraft.getMinecraft().renderEngine.bindTexture(discovered ? spell.getIcon() : Spells.none.getIcon());
WizardryUtilities.drawTexturedRect(xPos + 145, yPos + 20, 0, 0, 128, 128, 128, 128);
-
- Minecraft.getMinecraft().renderEngine.bindTexture(texture);
- WizardryUtilities.drawTexturedRect(xPos, yPos, 0, 0, xSize, ySize, xSize, 256);
-
- super.drawScreen(par1, par2, par3);
-
+
+ Minecraft.getMinecraft().renderEngine.bindTexture(texture);
+ WizardryUtilities.drawTexturedRect(xPos, yPos, 0, 0, xSize, ySize, xSize, 256);
+
+ super.drawScreen(par1, par2, par3);
+
if(discovered){
- this.fontRendererObj.drawString(spell.getDisplayName(), xPos+17, yPos+14, 0);
- this.fontRendererObj.drawString(spell.type.getDisplayName(), xPos+17, yPos+25, 0x777777);
+ this.fontRendererObj.drawString(spell.getDisplayName(), xPos + 17, yPos + 14, 0);
+ this.fontRendererObj.drawString(spell.type.getDisplayName(), xPos + 17, yPos + 25, 0x777777);
}else{
- this.mc.standardGalacticFontRenderer.drawString(SpellGlyphData.getGlyphName(spell, player.worldObj), xPos+17, yPos+14, 0);
- this.mc.standardGalacticFontRenderer.drawString(spell.type.getDisplayName(), xPos+17, yPos+25, 0x777777);
+ this.mc.standardGalacticFontRenderer.drawString(SpellGlyphData.getGlyphName(spell, player.world), xPos + 17,
+ yPos + 14, 0);
+ this.mc.standardGalacticFontRenderer.drawString(spell.type.getDisplayName(), xPos + 17, yPos + 25,
+ 0x777777);
}
-
- this.fontRendererObj.drawString("-------------------", xPos+17, yPos+34, 0);
-
- if(spell.tier == Tier.BASIC){
- // Basic is usually white but this doesn't show up.
- this.fontRendererObj.drawString("Tier: \u00A77" + Tier.BASIC.getDisplayName(), xPos+17, yPos+44, 0);
- }else{
- this.fontRendererObj.drawString("Tier: " + spell.tier.getDisplayNameWithFormatting(), xPos+17, yPos+44, 0);
- }
-
- String element = "Element: " + spell.element.getFormattingCode() + spell.element.getDisplayName();
- if(!discovered) element = "Element: ?";
- this.fontRendererObj.drawString(element, xPos+17, yPos+56, 0);
-
- String manaCost = "Mana Cost: " + spell.cost;
- if(spell.isContinuous) manaCost = "Mana Cost: " + spell.cost + "/second";
- if(!discovered) manaCost = "Mana Cost: ?";
- this.fontRendererObj.drawString(manaCost, xPos+17, yPos+68, 0);
-
- if(discovered){
- this.fontRendererObj.drawSplitString(spell.getDescription(), xPos+17, yPos+82, 118, 0);
- }else{
- this.mc.standardGalacticFontRenderer.drawSplitString(SpellGlyphData.getGlyphDescription(spell, player.worldObj), xPos+17, yPos+82, 118, 0);
- }
-
- /*
- // Word wrapping
- int charNumber = 0;
- int lineNumber = 0;
-
- while(charNumber < spell.desc.length()){
- int lineLength = 0;
- String line;
- if(spell.desc.length() - charNumber > 22){
- for(int i = charNumber; i < charNumber+23; i++){
- if(spell.desc.charAt(i) == ' '){
- lineLength = i - charNumber;
- }
- }
- line = spell.desc.substring(charNumber, charNumber + lineLength);
- }else{
- line = spell.desc.substring(charNumber, spell.desc.length());
- charNumber = spell.desc.length();
- }
- this.fontRendererObj.drawString("\u00A7o" + line, xPos+17, yPos+82+10*lineNumber, 0);
- charNumber+=(lineLength+1);
- lineNumber++;
- }
- */
- }
- public void initGui()
- {
+ this.fontRendererObj.drawString("-------------------", xPos + 17, yPos + 34, 0);
+
+ if(spell.tier == Tier.BASIC){
+ // Basic is usually white but this doesn't show up.
+ this.fontRendererObj.drawString("Tier: \u00A77" + Tier.BASIC.getDisplayName(), xPos + 17, yPos + 44, 0);
+ }else{
+ this.fontRendererObj.drawString("Tier: " + spell.tier.getDisplayNameWithFormatting(), xPos + 17, yPos + 44,
+ 0);
+ }
+
+ String element = "Element: " + spell.element.getFormattingCode() + spell.element.getDisplayName();
+ if(!discovered) element = "Element: ?";
+ this.fontRendererObj.drawString(element, xPos + 17, yPos + 56, 0);
+
+ String manaCost = "Mana Cost: " + spell.cost;
+ if(spell.isContinuous) manaCost = "Mana Cost: " + spell.cost + "/second";
+ if(!discovered) manaCost = "Mana Cost: ?";
+ this.fontRendererObj.drawString(manaCost, xPos + 17, yPos + 68, 0);
+
+ if(discovered){
+ this.fontRendererObj.drawSplitString(spell.getDescription(), xPos + 17, yPos + 82, 118, 0);
+ }else{
+ this.mc.standardGalacticFontRenderer.drawSplitString(
+ SpellGlyphData.getGlyphDescription(spell, player.world), xPos + 17, yPos + 82, 118, 0);
+ }
+
+ /* // Word wrapping int charNumber = 0; int lineNumber = 0;
+ *
+ * while(charNumber < spell.desc.length()){ int lineLength = 0; String line; if(spell.desc.length() - charNumber
+ * > 22){ for(int i = charNumber; i < charNumber+23; i++){ if(spell.desc.charAt(i) == ' '){ lineLength = i -
+ * charNumber; } } line = spell.desc.substring(charNumber, charNumber + lineLength); }else{ line =
+ * spell.desc.substring(charNumber, spell.desc.length()); charNumber = spell.desc.length(); }
+ * this.fontRendererObj.drawString("\u00A7o" + line, xPos+17, yPos+82+10*lineNumber, 0);
+ * charNumber+=(lineLength+1); lineNumber++; } */
+ }
+
+ public void initGui(){
super.initGui();
- Keyboard.enableRepeatEvents(true);
- this.buttonList.clear();
- }
-
- public void onGuiClosed()
- {
- super.onGuiClosed();
- Keyboard.enableRepeatEvents(false);
- }
-}
+ Keyboard.enableRepeatEvents(true);
+ this.buttonList.clear();
+ }
+ public void onGuiClosed(){
+ super.onGuiClosed();
+ Keyboard.enableRepeatEvents(false);
+ }
+}
diff --git a/src/main/java/electroblob/wizardry/client/GuiSpellDisplay.java b/src/main/java/electroblob/wizardry/client/GuiSpellDisplay.java
index dc27a3eb..1dc07bf9 100644
--- a/src/main/java/electroblob/wizardry/client/GuiSpellDisplay.java
+++ b/src/main/java/electroblob/wizardry/client/GuiSpellDisplay.java
@@ -30,9 +30,10 @@ public class GuiSpellDisplay extends Gui {
private Minecraft mc;
- private static final ResourceLocation hudTexture = new ResourceLocation(Wizardry.MODID, "textures/gui/spell_hud.png");
+ private static final ResourceLocation hudTexture = new ResourceLocation(Wizardry.MODID,
+ "textures/gui/spell_hud.png");
- public GuiSpellDisplay(Minecraft par1Minecraft) {
+ public GuiSpellDisplay(Minecraft par1Minecraft){
super();
this.mc = par1Minecraft;
}
@@ -40,7 +41,7 @@ public class GuiSpellDisplay extends Gui {
@SubscribeEvent
public void draw(RenderGameOverlayEvent event){
- EntityPlayer player = this.mc.thePlayer;
+ EntityPlayer player = this.mc.player;
// If the player has a wand in each hand, only displays for the one in the main hand.
@@ -58,7 +59,8 @@ public class GuiSpellDisplay extends Gui {
Spell spell = WandHelper.getCurrentSpell(wand);
int cooldown = WandHelper.getCurrentCooldown(wand);
- float cooldownMultiplier = 1.0f - WandHelper.getUpgradeLevel(wand, WizardryItems.cooldown_upgrade)*Constants.COOLDOWN_REDUCTION_PER_LEVEL;
+ float cooldownMultiplier = 1.0f - WandHelper.getUpgradeLevel(wand, WizardryItems.cooldown_upgrade)
+ * Constants.COOLDOWN_REDUCTION_PER_LEVEL;
if(player.isPotionActive(WizardryPotions.font_of_mana)){
// Dividing by this rather than setting it takes upgrades and font of mana into account simultaneously
@@ -72,17 +74,17 @@ public class GuiSpellDisplay extends Gui {
if(Wizardry.settings.spellHUDPosition == GuiPosition.BOTTOM_LEFT){
left = 0;
- top = height-36;
+ top = height - 36;
}else if(Wizardry.settings.spellHUDPosition == GuiPosition.TOP_LEFT){
left = 0;
top = 0;
}else if(Wizardry.settings.spellHUDPosition == GuiPosition.TOP_RIGHT){
- left = width-128;
+ left = width - 128;
top = 0;
mirror = true;
}else if(Wizardry.settings.spellHUDPosition == GuiPosition.BOTTOM_RIGHT){
- left = width-128;
- top = height-36;
+ left = width - 128;
+ top = height - 36;
mirror = true;
}
@@ -95,16 +97,17 @@ public class GuiSpellDisplay extends Gui {
if(event.getType() == RenderGameOverlayEvent.ElementType.TEXT){
// Makes spells greyed out if they are in cooldown or if the player has the arcane jammer effect
- String colour = cooldown > 0 || player.isPotionActive(WizardryPotions.arcane_jammer) ? "\u00A78" : spell.element.getFormattingCode();
+ String colour = cooldown > 0 || player.isPotionActive(WizardryPotions.arcane_jammer) ? "\u00A78"
+ : spell.element.getFormattingCode();
if(!discovered) colour = "\u00A79";
- String spellName = discovered ? spell.getDisplayName() : SpellGlyphData.getGlyphName(spell, player.worldObj);
+ String spellName = discovered ? spell.getDisplayName() : SpellGlyphData.getGlyphName(spell, player.world);
FontRenderer font = discovered ? this.mc.fontRendererObj : this.mc.standardGalacticFontRenderer;
int maxWidth = 90;
if(font.getStringWidth(spellName) <= maxWidth){
// Single line is rendered more centrally
- font.drawStringWithShadow(colour + spellName, mirror ? left+5 : left+41, top+13, 0xffffffff);
+ font.drawStringWithShadow(colour + spellName, mirror ? left + 5 : left + 41, top + 13, 0xffffffff);
}else{
@@ -114,20 +117,21 @@ public class GuiSpellDisplay extends Gui {
for(Object line : lines){
if(line instanceof String){
- font.drawStringWithShadow(colour + (String)line, mirror ? left+5 : left+41, top+6 + 11*lineNumber, 0xffffffff);
+ font.drawStringWithShadow(colour + (String)line, mirror ? left + 5 : left + 41,
+ top + 6 + 11 * lineNumber, 0xffffffff);
}
lineNumber++;
}
}
}else if(event.getType() == RenderGameOverlayEvent.ElementType.HOTBAR){
-
+
GlStateManager.pushAttrib();
-
+
GlStateManager.enableBlend();
GlStateManager.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA);
GlStateManager.color(1, 1, 1);
-
+
this.mc.renderEngine.bindTexture(hudTexture);
// Background of spell hud
@@ -135,18 +139,18 @@ public class GuiSpellDisplay extends Gui {
// Cooldown bar
if(cooldown > 0){
- this.drawTexturedModalRect(mirror ? left+5 : left+41, height-8, 128, 6, 82, 6);
+ this.drawTexturedModalRect(mirror ? left + 5 : left + 41, height - 8, 128, 6, 82, 6);
int l = (int)(((double)(spell.cooldown * cooldownMultiplier - cooldown)
/ (double)(spell.cooldown * cooldownMultiplier)) * 82);
- this.drawTexturedModalRect(mirror ? left+5 : left+41, height-8, 128, 0, l, 6);
+ this.drawTexturedModalRect(mirror ? left + 5 : left + 41, height - 8, 128, 0, l, 6);
}
// Spell illustration
this.mc.renderEngine.bindTexture(discovered ? spell.getIcon() : Spells.none.getIcon());
- WizardryUtilities.drawTexturedRect(mirror ? left+94 : left+2, top+2, 0, 0, 32, 32, 32, 32);
+ WizardryUtilities.drawTexturedRect(mirror ? left + 94 : left + 2, top + 2, 0, 0, 32, 32, 32, 32);
GlStateManager.popAttrib();
}
diff --git a/src/main/java/electroblob/wizardry/client/GuiWizardHandbook.java b/src/main/java/electroblob/wizardry/client/GuiWizardHandbook.java
index 5cb8ee9e..6a035d36 100644
--- a/src/main/java/electroblob/wizardry/client/GuiWizardHandbook.java
+++ b/src/main/java/electroblob/wizardry/client/GuiWizardHandbook.java
@@ -36,23 +36,29 @@ public class GuiWizardHandbook extends GuiScreen {
private int pageNumber = 0;
private static final int PAGE_WIDTH = 120;
- /** The integer colour for black passed into the font renderer methods. This used to be 0 but that's now white
- * for some reason, so I've made a it a constant in case it changes again. */
+ /**
+ * The integer colour for black passed into the font renderer methods. This used to be 0 but that's now white for
+ * some reason, so I've made a it a constant in case it changes again.
+ */
// I think this is actually ever-so-slightly lighter than pure black, but the difference is unnoticeable.
private static final int BLACK = 1;
- public static final ResourceLocation regularHandbook = new ResourceLocation(Wizardry.MODID, "textures/gui/handbook.png");
+ public static final ResourceLocation regularHandbook = new ResourceLocation(Wizardry.MODID,
+ "textures/gui/handbook.png");
public static final ResourceLocation ore = new ResourceLocation(Wizardry.MODID, "textures/gui/ore_picture.png");
- public static final ResourceLocation crystal = new ResourceLocation(Wizardry.MODID, "textures/items/magic_crystal.png");
- public static final ResourceLocation workbenchGui = new ResourceLocation(Wizardry.MODID, "textures/gui/arcane_workbench.png");
- public static final ResourceLocation craftingGrids = new ResourceLocation(Wizardry.MODID, "textures/gui/handbook_recipes.png");
+ public static final ResourceLocation crystal = new ResourceLocation(Wizardry.MODID,
+ "textures/items/magic_crystal.png");
+ public static final ResourceLocation workbenchGui = new ResourceLocation(Wizardry.MODID,
+ "textures/gui/arcane_workbench.png");
+ public static final ResourceLocation craftingGrids = new ResourceLocation(Wizardry.MODID,
+ "textures/gui/handbook_recipes.png");
private ArrayList> text;
private ArrayList sections;
-
+
private int guiPage, imagePage;
- public GuiWizardHandbook() {
+ public GuiWizardHandbook(){
super();
xSize = 288;
ySize = 180;
@@ -60,43 +66,47 @@ public class GuiWizardHandbook extends GuiScreen {
@Override
public void drawScreen(int mouseX, int mouseY, float par3){
-
- int xPos = this.width/2 - xSize/2;
- int yPos = this.height/2 - this.ySize/2;
+
+ int xPos = this.width / 2 - xSize / 2;
+ int yPos = this.height / 2 - this.ySize / 2;
// Tests for crafting recipes section
- if(pageNumber >= (sections.get(sections.size()-1).pageNumber-1)/2 && pageNumber < (sections.get(sections.size()-1).pageNumber-1)/2 + 4){
+ if(pageNumber >= (sections.get(sections.size() - 1).pageNumber - 1) / 2
+ && pageNumber < (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 4){
Minecraft.getMinecraft().renderEngine.bindTexture(craftingGrids);
}else{
Minecraft.getMinecraft().renderEngine.bindTexture(regularHandbook);
}
WizardryUtilities.drawTexturedRect(xPos, yPos, 0, 0, xSize, ySize, xSize, 256);
-
+
// Arcane workbench gui picture
- if(pageNumber == (this.guiPage-1)/2){
+ if(pageNumber == (this.guiPage - 1) / 2){
Minecraft.getMinecraft().renderEngine.bindTexture(workbenchGui);
- this.drawTexturedModalRect(this.guiPage % 2 == 1 ? xPos + 17 : this.width/2 + 7, yPos + 14, 28, 12, 120, 118);
+ this.drawTexturedModalRect(this.guiPage % 2 == 1 ? xPos + 17 : this.width / 2 + 7, yPos + 14, 28, 12, 120,
+ 118);
}
-
+
// Magic crystal and crystal ore images
- if(pageNumber == (this.imagePage-1)/2){
-
+ if(pageNumber == (this.imagePage - 1) / 2){
+
Minecraft.getMinecraft().renderEngine.bindTexture(ore);
- WizardryUtilities.drawTexturedRect(this.imagePage % 2 == 1 ? xPos + 17 : this.width/2 + 7, yPos + 80, 0, 0, 64, 64, 64, 64);
-
+ WizardryUtilities.drawTexturedRect(this.imagePage % 2 == 1 ? xPos + 17 : this.width / 2 + 7, yPos + 80, 0,
+ 0, 64, 64, 64, 64);
+
Minecraft.getMinecraft().renderEngine.bindTexture(crystal);
- drawTexturedStretchedRect(this.imagePage % 2 == 1 ? xPos + 17 + 64 : this.width/2 + 7 + 62, yPos + 80, 0, 0, 64, 64, 1, 1);
+ drawTexturedStretchedRect(this.imagePage % 2 == 1 ? xPos + 17 + 64 : this.width / 2 + 7 + 62, yPos + 80, 0,
+ 0, 64, 64, 1, 1);
}
-
- this.fontRendererObj.drawString("" + (pageNumber*2 + 1), xPos + xSize/4 - 3, yPos + ySize - 20, 0);
- this.fontRendererObj.drawString("" + (pageNumber*2 + 2), xPos + 3*xSize/4 - 5, yPos + ySize - 20, 0);
+
+ this.fontRendererObj.drawString("" + (pageNumber * 2 + 1), xPos + xSize / 4 - 3, yPos + ySize - 20, 0);
+ this.fontRendererObj.drawString("" + (pageNumber * 2 + 2), xPos + 3 * xSize / 4 - 5, yPos + ySize - 20, 0);
super.drawScreen(mouseX, mouseY, par3);
int lineNumber = 0;
-
+
if(pageNumber == 1){
for(Section s : sections){
s.drawContents();
@@ -107,11 +117,13 @@ public class GuiWizardHandbook extends GuiScreen {
}
}
- for(String paragraph : text.get(pageNumber*2)){
+ for(String paragraph : text.get(pageNumber * 2)){
- this.fontRendererObj.drawSplitString(paragraph, xPos + 17, yPos + 14 + lineNumber*this.fontRendererObj.FONT_HEIGHT, PAGE_WIDTH, BLACK);
+ this.fontRendererObj.drawSplitString(paragraph, xPos + 17,
+ yPos + 14 + lineNumber * this.fontRendererObj.FONT_HEIGHT, PAGE_WIDTH, BLACK);
- List list = new ArrayList(this.fontRendererObj.listFormattedStringToWidth(paragraph, GuiWizardHandbook.PAGE_WIDTH));
+ List list = new ArrayList(
+ this.fontRendererObj.listFormattedStringToWidth(paragraph, GuiWizardHandbook.PAGE_WIDTH));
lineNumber += list.size();
}
@@ -119,19 +131,23 @@ public class GuiWizardHandbook extends GuiScreen {
lineNumber = 0;
// Prevents crash when the last page is blank (and hence is not in the list of pages)
- if(text.size() > pageNumber*2 + 1){
- for(String paragraph : text.get(pageNumber*2 + 1)){
+ if(text.size() > pageNumber * 2 + 1){
+ for(String paragraph : text.get(pageNumber * 2 + 1)){
// First page is centred
if(pageNumber == 0){
- int startX = this.width/2 + 7 + PAGE_WIDTH/2 - this.fontRendererObj.getStringWidth(paragraph)/2;
- this.fontRendererObj.drawSplitString(paragraph, startX, yPos + 14 + lineNumber*this.fontRendererObj.FONT_HEIGHT, PAGE_WIDTH, BLACK);
+ int startX = this.width / 2 + 7 + PAGE_WIDTH / 2
+ - this.fontRendererObj.getStringWidth(paragraph) / 2;
+ this.fontRendererObj.drawSplitString(paragraph, startX,
+ yPos + 14 + lineNumber * this.fontRendererObj.FONT_HEIGHT, PAGE_WIDTH, BLACK);
}else{
- this.fontRendererObj.drawSplitString(paragraph, this.width/2 + 7, yPos + 14 + lineNumber*this.fontRendererObj.FONT_HEIGHT, PAGE_WIDTH, BLACK);
+ this.fontRendererObj.drawSplitString(paragraph, this.width / 2 + 7,
+ yPos + 14 + lineNumber * this.fontRendererObj.FONT_HEIGHT, PAGE_WIDTH, BLACK);
}
-
- List list = new ArrayList(this.fontRendererObj.listFormattedStringToWidth(paragraph, GuiWizardHandbook.PAGE_WIDTH));
-
+
+ List list = new ArrayList(
+ this.fontRendererObj.listFormattedStringToWidth(paragraph, GuiWizardHandbook.PAGE_WIDTH));
+
lineNumber += list.size();
}
}
@@ -140,7 +156,7 @@ public class GuiWizardHandbook extends GuiScreen {
ItemStack craftingResult;
// Tooltips are rendered after recipes to prevent tooltips on the left appearing behind items on the right.
- if(pageNumber == (sections.get(sections.size()-1).pageNumber-1)/2){
+ if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2){
craftingGrid = new ItemStack[3][3];
craftingGrid[0][0] = new ItemStack(Items.GOLD_NUGGET);
@@ -177,7 +193,7 @@ public class GuiWizardHandbook extends GuiScreen {
craftingResult = new ItemStack(WizardryItems.wizard_handbook);
this.renderCraftingRecipe(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult);
- }else if(pageNumber == (sections.get(sections.size()-1).pageNumber-1)/2 + 1){
+ }else if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 1){
craftingGrid = new ItemStack[3][3];
craftingGrid[0][0] = new ItemStack(WizardryBlocks.crystal_flower);
@@ -215,7 +231,7 @@ public class GuiWizardHandbook extends GuiScreen {
craftingResult = new ItemStack(WizardryItems.magic_silk, 2);
this.renderCraftingRecipe(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult);
- }else if(pageNumber == (sections.get(sections.size()-1).pageNumber-1)/2 + 2){
+ }else if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 2){
craftingGrid = new ItemStack[3][3];
craftingGrid[0][0] = new ItemStack(WizardryItems.magic_silk);
@@ -257,7 +273,7 @@ public class GuiWizardHandbook extends GuiScreen {
craftingResult = new ItemStack(WizardryItems.wizard_boots);
this.renderCraftingRecipe(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult);
- }else if(pageNumber == (sections.get(sections.size()-1).pageNumber-1)/2 + 3){
+ }else if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 3){
if(Wizardry.settings.useAlternateScrollRecipe){
craftingGrid = new ItemStack[3][3];
@@ -273,7 +289,7 @@ public class GuiWizardHandbook extends GuiScreen {
craftingResult = new ItemStack(WizardryItems.blank_scroll);
this.renderCraftingRecipe(xPos + 23, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult);
}
-
+
if(Wizardry.settings.firebombIsCraftable){
craftingGrid = new ItemStack[3][3];
craftingGrid[0][0] = new ItemStack(Items.BLAZE_POWDER);
@@ -303,10 +319,10 @@ public class GuiWizardHandbook extends GuiScreen {
craftingResult = new ItemStack(WizardryItems.smoke_bomb, 3);
this.renderCraftingRecipe(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult);
}
-
+
}
- if(pageNumber == (sections.get(sections.size()-1).pageNumber-1)/2){
+ if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2){
craftingGrid = new ItemStack[3][3];
craftingGrid[0][0] = new ItemStack(Items.GOLD_NUGGET);
@@ -343,7 +359,7 @@ public class GuiWizardHandbook extends GuiScreen {
craftingResult = new ItemStack(WizardryItems.wizard_handbook);
this.renderCraftingTooltips(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult);
- }else if(pageNumber == (sections.get(sections.size()-1).pageNumber-1)/2 + 1){
+ }else if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 1){
craftingGrid = new ItemStack[3][3];
craftingGrid[0][0] = new ItemStack(WizardryBlocks.crystal_flower);
@@ -381,7 +397,7 @@ public class GuiWizardHandbook extends GuiScreen {
craftingResult = new ItemStack(WizardryItems.magic_silk, 2);
this.renderCraftingTooltips(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult);
- }else if(pageNumber == (sections.get(sections.size()-1).pageNumber-1)/2 + 2){
+ }else if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 2){
craftingGrid = new ItemStack[3][3];
craftingGrid[0][0] = new ItemStack(WizardryItems.magic_silk);
@@ -423,7 +439,7 @@ public class GuiWizardHandbook extends GuiScreen {
craftingResult = new ItemStack(WizardryItems.wizard_boots);
this.renderCraftingTooltips(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult);
- }else if(pageNumber == (sections.get(sections.size()-1).pageNumber-1)/2 + 3){
+ }else if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 3){
if(Wizardry.settings.useAlternateScrollRecipe){
craftingGrid = new ItemStack[3][3];
@@ -439,7 +455,7 @@ public class GuiWizardHandbook extends GuiScreen {
craftingResult = new ItemStack(WizardryItems.blank_scroll);
this.renderCraftingTooltips(xPos + 23, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult);
}
-
+
if(Wizardry.settings.firebombIsCraftable){
craftingGrid = new ItemStack[3][3];
craftingGrid[0][0] = new ItemStack(Items.BLAZE_POWDER);
@@ -469,11 +485,12 @@ public class GuiWizardHandbook extends GuiScreen {
craftingResult = new ItemStack(WizardryItems.smoke_bomb, 3);
this.renderCraftingTooltips(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult);
}
-
+
}
}
- private void renderCraftingRecipe(int xPos, int yPos, int mouseX, int mouseY, ItemStack[][] craftingGrid, ItemStack craftingResult) {
+ private void renderCraftingRecipe(int xPos, int yPos, int mouseX, int mouseY, ItemStack[][] craftingGrid,
+ ItemStack craftingResult){
GlStateManager.pushMatrix();
RenderHelper.enableGUIStandardItemLighting();
@@ -483,11 +500,12 @@ public class GuiWizardHandbook extends GuiScreen {
GlStateManager.enableLighting();
itemRender.zLevel = 100.0F;
- for(int i=0; i>(1);
sections = new ArrayList(1);
-
- BufferedReader bufferedreader = null;
-
- String textFilepath = "wizardry:texts/handbook_" + Minecraft.getMinecraft().getLanguageManager().getCurrentLanguage().getLanguageCode() + ".txt";
-
- try {
-
- bufferedreader = new BufferedReader(new InputStreamReader(this.mc.getResourceManager().getResource(new ResourceLocation(textFilepath)).getInputStream(), Charsets.UTF_8));
- } catch (IOException e){
-
- Wizardry.logger.info("Wizard handbook text file missing for the current language. Using default (English - US) instead.");
+ BufferedReader bufferedreader = null;
+
+ String textFilepath = "wizardry:texts/handbook_"
+ + Minecraft.getMinecraft().getLanguageManager().getCurrentLanguage().getLanguageCode() + ".txt";
+
+ try{
+
+ bufferedreader = new BufferedReader(new InputStreamReader(
+ this.mc.getResourceManager().getResource(new ResourceLocation(textFilepath)).getInputStream(),
+ Charsets.UTF_8));
+
+ }catch (IOException e){
+
+ Wizardry.logger.info(
+ "Wizard handbook text file missing for the current language. Using default (English - US) instead.");
textFilepath = "wizardry:texts/handbook_en_US.txt";
-
- try {
-
- bufferedreader = new BufferedReader(new InputStreamReader(this.mc.getResourceManager().getResource(new ResourceLocation(textFilepath)).getInputStream(), Charsets.UTF_8));
- } catch (IOException x){
+ try{
+
+ bufferedreader = new BufferedReader(new InputStreamReader(
+ this.mc.getResourceManager().getResource(new ResourceLocation(textFilepath)).getInputStream(),
+ Charsets.UTF_8));
+
+ }catch (IOException x){
Wizardry.logger.error("Couldn't find file: wizardry:assets/texts/handbook_en_US.txt. The file may be"
+ "missing; please try re-downloading and reinstalling Wizardry.", x);
}
}
-
+
if(bufferedreader != null){
-
- try {
-
+
+ try{
+
String paragraph = bufferedreader.readLine();
ArrayList page = new ArrayList(1);
-
+
int linesPerPage = 16;
-
+
int lineNumber = 0;
-
+
while(paragraph != null){
-
- //System.out.println(paragraph);
-
+
+ // System.out.println(paragraph);
+
if(paragraph.contains("PAGEBREAK") || lineNumber >= linesPerPage){
-
+
text.add(page);
-
+
page = new ArrayList(1);
-
+
lineNumber = 0;
-
+
if(paragraph.contains("PAGEBREAK")) paragraph = bufferedreader.readLine();
-
+
}else if(paragraph.contains("LINEBREAK")){
-
+
lineNumber++;
-
+
page.add("");
-
+
paragraph = bufferedreader.readLine();
-
+
}else if(paragraph.contains("SECTION")){
-
- sections.add(new Section(paragraph.replace("SECTION ", ""), text.size() + 1, this.width/2 + 7,
- this.height/2 - this.ySize/2 + 14 + (sections.size()+2)*this.fontRendererObj.FONT_HEIGHT, nextButtonId++));
+
+ sections.add(
+ new Section(paragraph.replace("SECTION ", ""), text.size() + 1, this.width / 2 + 7,
+ this.height / 2 - this.ySize / 2 + 14
+ + (sections.size() + 2) * this.fontRendererObj.FONT_HEIGHT,
+ nextButtonId++));
paragraph = bufferedreader.readLine();
-
+
}else if(paragraph.contains("IMAGE")){
-
+
if(paragraph.contains("WORKBENCH")){
this.guiPage = text.size() + 1;
}else if(paragraph.contains("CRYSTAL")){
this.imagePage = text.size() + 1;
}
-
+
paragraph = bufferedreader.readLine();
-
+
}else{
-
- paragraph = paragraph.replaceAll("NEXT_SPELL_KEY", Keyboard.getKeyName(ClientProxy.NEXT_SPELL.getKeyCode()));
- paragraph = paragraph.replaceAll("PREVIOUS_SPELL_KEY", Keyboard.getKeyName(ClientProxy.PREVIOUS_SPELL.getKeyCode()));
- paragraph = paragraph.replaceAll("MANA_PER_CRYSTAL_MINUS_30", "" + (Constants.MANA_PER_CRYSTAL - 30));
+
+ paragraph = paragraph.replaceAll("NEXT_SPELL_KEY",
+ Keyboard.getKeyName(ClientProxy.NEXT_SPELL.getKeyCode()));
+ paragraph = paragraph.replaceAll("PREVIOUS_SPELL_KEY",
+ Keyboard.getKeyName(ClientProxy.PREVIOUS_SPELL.getKeyCode()));
+ paragraph = paragraph.replaceAll("MANA_PER_CRYSTAL_MINUS_30",
+ "" + (Constants.MANA_PER_CRYSTAL - 30));
paragraph = paragraph.replaceAll("MANA_PER_CRYSTAL", "" + Constants.MANA_PER_CRYSTAL);
paragraph = paragraph.replaceAll("BASIC_MAX_CHARGE", "" + Tier.BASIC.maxCharge);
paragraph = paragraph.replaceAll("APPRENTICE_MAX_CHARGE", "" + Tier.APPRENTICE.maxCharge);
@@ -647,35 +681,37 @@ public class GuiWizardHandbook extends GuiScreen {
paragraph = paragraph.replaceAll("HEALING_COLOUR", Element.HEALING.getFormattingCode());
paragraph = paragraph.replaceAll("RESET_COLOUR", "\u00A70");
paragraph = paragraph.replaceAll("VERSION", Wizardry.VERSION);
-
- int linesInParagraph = this.fontRendererObj.listFormattedStringToWidth(paragraph, GuiWizardHandbook.PAGE_WIDTH).size();
-
+
+ int linesInParagraph = this.fontRendererObj
+ .listFormattedStringToWidth(paragraph, GuiWizardHandbook.PAGE_WIDTH).size();
+
// Ignores empty lines at the top of a page.
if(paragraph.isEmpty() && lineNumber == 0){
-
+
paragraph = bufferedreader.readLine();
-
- // Normal paragraph, all on one page
+
+ // Normal paragraph, all on one page
}else if(lineNumber + linesInParagraph <= linesPerPage){
-
+
page.add(paragraph);
-
+
lineNumber += linesInParagraph;
-
+
paragraph = bufferedreader.readLine();
-
- // Paragraphs split across two pages (or more?)
+
+ // Paragraphs split across two pages (or more?)
}else{
-
+
int linesInFirstPart = linesPerPage - lineNumber;
-
+
String paragraphFirstPart = "";
String paragraphLastPart = "";
-
+
int i = 0;
-
- List strings = this.fontRendererObj.listFormattedStringToWidth(paragraph, GuiWizardHandbook.PAGE_WIDTH);
-
+
+ List strings = this.fontRendererObj.listFormattedStringToWidth(paragraph,
+ GuiWizardHandbook.PAGE_WIDTH);
+
for(Object s : strings){
if(i < linesInFirstPart){
paragraphFirstPart = paragraphFirstPart.concat((String)s + " ");
@@ -684,23 +720,24 @@ public class GuiWizardHandbook extends GuiScreen {
}
i++;
}
-
- //System.out.println("Paragraph crosses page boundary; string split into: \"" + paragraphFirstPart + "\" and \"" + paragraphLastPart + "\"");
-
+
+ // System.out.println("Paragraph crosses page boundary; string split into: \"" +
+ // paragraphFirstPart + "\" and \"" + paragraphLastPart + "\"");
+
page.add(paragraphFirstPart);
-
+
lineNumber += linesInFirstPart;
-
+
paragraph = paragraphLastPart;
}
}
}
-
+
text.add(page);
-
- } catch (IOException e){
- Wizardry.logger.error("Something went wrong reading file: " + textFilepath + ". The file may be damaged;"
- + "please try re-downloading and reinstalling wizardry.", e);
+
+ }catch (IOException e){
+ Wizardry.logger.error("Something went wrong reading file: " + textFilepath
+ + ". The file may be damaged;" + "please try re-downloading and reinstalling wizardry.", e);
}
}
}
@@ -709,7 +746,7 @@ public class GuiWizardHandbook extends GuiScreen {
/** The integer text colour used for the section when it is moused over. Currently orange. */
private static final int HIGHLIGHT_COLOUR = 0xdd4c1d;
-
+
String name;
int pageNumber;
int x, y;
@@ -721,7 +758,8 @@ public class GuiWizardHandbook extends GuiScreen {
this.x = x;
this.y = y;
this.buttonId = id;
- GuiWizardHandbook.this.buttonList.add(new GuiButtonInvisible(id, x, y, GuiWizardHandbook.PAGE_WIDTH, GuiWizardHandbook.this.fontRendererObj.FONT_HEIGHT));
+ GuiWizardHandbook.this.buttonList.add(new GuiButtonInvisible(id, x, y, GuiWizardHandbook.PAGE_WIDTH,
+ GuiWizardHandbook.this.fontRendererObj.FONT_HEIGHT));
}
void hideButton(){
@@ -729,26 +767,28 @@ public class GuiWizardHandbook extends GuiScreen {
}
void drawContents(){
-
+
GuiWizardHandbook.this.buttonList.get(buttonId).visible = true;
- GuiWizardHandbook.this.fontRendererObj.drawString(name, x, y, GuiWizardHandbook.this.buttonList.get(buttonId).isMouseOver() ? HIGHLIGHT_COLOUR : BLACK);
+ GuiWizardHandbook.this.fontRendererObj.drawString(name, x, y,
+ GuiWizardHandbook.this.buttonList.get(buttonId).isMouseOver() ? HIGHLIGHT_COLOUR : BLACK);
int nameWidth = GuiWizardHandbook.this.fontRendererObj.getStringWidth(name);
String dotsAndNumber = " " + this.pageNumber;
- while(GuiWizardHandbook.this.fontRendererObj.getStringWidth(dotsAndNumber) < GuiWizardHandbook.PAGE_WIDTH - nameWidth - 2){
+ while(GuiWizardHandbook.this.fontRendererObj.getStringWidth(dotsAndNumber) < GuiWizardHandbook.PAGE_WIDTH
+ - nameWidth - 2){
dotsAndNumber = "." + dotsAndNumber;
}
- GuiWizardHandbook.this.fontRendererObj.drawString(dotsAndNumber, x + GuiWizardHandbook.PAGE_WIDTH - GuiWizardHandbook.this.fontRendererObj.getStringWidth(dotsAndNumber), y, BLACK);
+ GuiWizardHandbook.this.fontRendererObj.drawString(dotsAndNumber, x + GuiWizardHandbook.PAGE_WIDTH
+ - GuiWizardHandbook.this.fontRendererObj.getStringWidth(dotsAndNumber), y, BLACK);
}
}
@Override
- public void onGuiClosed()
- {
+ public void onGuiClosed(){
super.onGuiClosed();
Keyboard.enableRepeatEvents(false);
}
@@ -761,11 +801,11 @@ public class GuiWizardHandbook extends GuiScreen {
if(par1GuiButton.enabled){
if(par1GuiButton.id == 0){
- if(pageNumber < (text.size()-1)/2) pageNumber++;
+ if(pageNumber < (text.size() - 1) / 2) pageNumber++;
}else if(par1GuiButton.id == 1){
if(pageNumber > 0) pageNumber--;
}else{
- if(pageNumber == 1) pageNumber = (sections.get(par1GuiButton.id - 2).pageNumber-1)/2;
+ if(pageNumber == 1) pageNumber = (sections.get(par1GuiButton.id - 2).pageNumber - 1) / 2;
}
}
}
@@ -774,36 +814,39 @@ public class GuiWizardHandbook extends GuiScreen {
* Args: left, top, width, height, pointX, pointY. Note: left, top are local to Gui, pointX, pointY are local to
* screen
*/
- protected boolean isPointInRegion(int par1, int par2, int par3, int par4, int par5, int par6)
- {
- int k1 = this.width/2 - xSize/2;
- int l1 = this.height/2 - this.ySize/2;
+ protected boolean isPointInRegion(int par1, int par2, int par3, int par4, int par5, int par6){
+ int k1 = this.width / 2 - xSize / 2;
+ int l1 = this.height / 2 - this.ySize / 2;
par5 -= k1;
par6 -= l1;
return par5 >= par1 - 1 && par5 < par1 + par3 + 1 && par6 >= par2 - 1 && par6 < par2 + par4 + 1;
}
-
+
/**
* Draws a textured rectangle, stretching the section of the image to fit the size given.
+ *
* @param x The x position of the rectangle
* @param y The y position of the rectangle
- * @param u The x position of the top left corner of the section of the image wanted, expressed as a fraction of the image width
- * @param v The y position of the top left corner of the section of the image wanted, expressed as a fraction of the image width
+ * @param u The x position of the top left corner of the section of the image wanted, expressed as a fraction of the
+ * image width
+ * @param v The y position of the top left corner of the section of the image wanted, expressed as a fraction of the
+ * image width
* @param finalWidth The width as rendered
* @param finalHeight The height as rendered
* @param width The width of the section, expressed as a fraction of the image width
* @param height The height of the section, expressed as a fraction of the image width
*/
- public static void drawTexturedStretchedRect(int x, int y, int u, int v, int finalWidth, int finalHeight, int width, int height){
-
- Tessellator tessellator = Tessellator.getInstance();
- VertexBuffer buffer = tessellator.getBuffer();
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- buffer.pos((x), y + finalHeight, 0).tex(u, v + height).endVertex();
- buffer.pos(x + finalWidth, y + finalHeight, 0).tex(u + width, v + height).endVertex();
- buffer.pos(x + finalWidth, (y), 0).tex(u + width, v).endVertex();
- buffer.pos((x), (y), 0).tex(u, v).endVertex();
- tessellator.draw();
+ public static void drawTexturedStretchedRect(int x, int y, int u, int v, int finalWidth, int finalHeight, int width,
+ int height){
+
+ Tessellator tessellator = Tessellator.getInstance();
+ VertexBuffer buffer = tessellator.getBuffer();
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ buffer.pos((x), y + finalHeight, 0).tex(u, v + height).endVertex();
+ buffer.pos(x + finalWidth, y + finalHeight, 0).tex(u + width, v + height).endVertex();
+ buffer.pos(x + finalWidth, (y), 0).tex(u + width, v).endVertex();
+ buffer.pos((x), (y), 0).tex(u, v).endVertex();
+ tessellator.draw();
}
}
\ No newline at end of file
diff --git a/src/main/java/electroblob/wizardry/client/MixedFontRenderer.java b/src/main/java/electroblob/wizardry/client/MixedFontRenderer.java
index 43b51f8b..da27bb2a 100644
--- a/src/main/java/electroblob/wizardry/client/MixedFontRenderer.java
+++ b/src/main/java/electroblob/wizardry/client/MixedFontRenderer.java
@@ -8,87 +8,91 @@ import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
-/** Font renderer that renders parts of strings surrounded by '#' (without quotes) in the SGA instead of normal text.
- * @since Wizardry 1.1 */
+/**
+ * Font renderer that renders parts of strings surrounded by '#' (without quotes) in the SGA instead of normal text.
+ *
+ * @since Wizardry 1.1
+ */
@SideOnly(Side.CLIENT)
public class MixedFontRenderer extends FontRenderer {
-
+
public MixedFontRenderer(GameSettings p_i1035_1_, ResourceLocation p_i1035_2_, TextureManager p_i1035_3_,
- boolean p_i1035_4_) {
+ boolean p_i1035_4_){
super(p_i1035_1_, p_i1035_2_, p_i1035_3_, p_i1035_4_);
}
-
+
@Override
- public int drawString(String string, float x, float y, int colour, boolean shadow){
-
+ public int drawString(String string, float x, float y, int colour, boolean shadow){
+
int l = 0;
-
+
boolean sga = false;
-
+
while(string.indexOf('#') > -1){
-
+
String section = string.substring(0, string.indexOf('#'));
-
+
if(sga){
- l += Minecraft.getMinecraft().standardGalacticFontRenderer.drawString(section, x, y, colour, shadow);
+ l += Minecraft.getMinecraft().standardGalacticFontRenderer.drawString(section, x, y, colour, shadow);
x += Minecraft.getMinecraft().standardGalacticFontRenderer.getStringWidth(section);
- }else{
- l += Minecraft.getMinecraft().fontRendererObj.drawString(section, x, y, colour, shadow);
+ }else{
+ l += Minecraft.getMinecraft().fontRendererObj.drawString(section, x, y, colour, shadow);
x += Minecraft.getMinecraft().fontRendererObj.getStringWidth(section);
- }
-
+ }
+
string = string.substring(string.indexOf('#') + 1);
sga = !sga;
}
-
+
if(sga){
- l += Minecraft.getMinecraft().standardGalacticFontRenderer.drawString(string, x, y, colour, shadow);
- }else{
- l += Minecraft.getMinecraft().fontRendererObj.drawString(string, x, y, colour, shadow);
- }
-
- return l;
- }
-
+ l += Minecraft.getMinecraft().standardGalacticFontRenderer.drawString(string, x, y, colour, shadow);
+ }else{
+ l += Minecraft.getMinecraft().fontRendererObj.drawString(string, x, y, colour, shadow);
+ }
+
+ return l;
+ }
+
@Override
public int getStringWidth(String string){
-
+
int l = 0;
-
+
boolean sga = false;
-
+
while(string.indexOf('#') > -1){
-
+
String section = string.substring(0, string.indexOf('#'));
-
+
if(sga){
- l += Minecraft.getMinecraft().standardGalacticFontRenderer.getStringWidth(section);
- }else{
- l += Minecraft.getMinecraft().fontRendererObj.getStringWidth(section);
- }
-
+ l += Minecraft.getMinecraft().standardGalacticFontRenderer.getStringWidth(section);
+ }else{
+ l += Minecraft.getMinecraft().fontRendererObj.getStringWidth(section);
+ }
+
string = string.substring(string.indexOf('#') + 1);
sga = !sga;
}
-
+
if(sga){
- l += Minecraft.getMinecraft().standardGalacticFontRenderer.getStringWidth(string);
- }else{
- l += Minecraft.getMinecraft().fontRendererObj.getStringWidth(string);
- }
-
- return l;
+ l += Minecraft.getMinecraft().standardGalacticFontRenderer.getStringWidth(string);
+ }else{
+ l += Minecraft.getMinecraft().fontRendererObj.getStringWidth(string);
+ }
+
+ return l;
}
-
+
// This doesn't work the same way yet
@Override
- public void drawSplitString(String string, int x, int y, int width, int colour){
-
+ public void drawSplitString(String string, int x, int y, int width, int colour){
+
if(string.contains("#")){
- Minecraft.getMinecraft().standardGalacticFontRenderer.drawSplitString(string.substring(1), x, y, width, colour);
- }else{
- Minecraft.getMinecraft().fontRendererObj.drawSplitString(string, x, y, width, colour);
- }
- }
+ Minecraft.getMinecraft().standardGalacticFontRenderer.drawSplitString(string.substring(1), x, y, width,
+ colour);
+ }else{
+ Minecraft.getMinecraft().fontRendererObj.drawSplitString(string, x, y, width, colour);
+ }
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/MovingSoundEntity.java b/src/main/java/electroblob/wizardry/client/MovingSoundEntity.java
index 3696e866..0fdd1165 100644
--- a/src/main/java/electroblob/wizardry/client/MovingSoundEntity.java
+++ b/src/main/java/electroblob/wizardry/client/MovingSoundEntity.java
@@ -10,50 +10,43 @@ import net.minecraftforge.fml.relauncher.SideOnly;
// Copied from MovingSoundMinecart; if it ever breaks between updates take a look at that.
@SideOnly(Side.CLIENT)
-public class MovingSoundEntity extends MovingSound
-{
- private final Entity source;
- private float distance = 0.0F;
+public class MovingSoundEntity extends MovingSound {
+ private final Entity source;
+ private float distance = 0.0F;
- public MovingSoundEntity(Entity entity, SoundEvent sound, float volume, float pitch, boolean repeat)
- {
- // Uses BLOCKS because that's the closest thing to inanimate entities. Could use NEUTRAL like MovingSoundMinecart.
- super(sound, SoundCategory.BLOCKS);
- this.source = entity;
- this.repeat = repeat;
- this.volume = volume;
- this.pitch = pitch;
- this.repeatDelay = 0;
- }
+ public MovingSoundEntity(Entity entity, SoundEvent sound, float volume, float pitch, boolean repeat){
+ // Uses BLOCKS because that's the closest thing to inanimate entities. Could use NEUTRAL like
+ // MovingSoundMinecart.
+ super(sound, SoundCategory.BLOCKS);
+ this.source = entity;
+ this.repeat = repeat;
+ this.volume = volume;
+ this.pitch = pitch;
+ this.repeatDelay = 0;
+ }
- /**
- * Updates the JList with a new model.
- */
- @Override
- public void update()
- {
- if (this.source.isDead && repeat)
- {
- this.donePlaying = true;
- }
- else
- {
- this.xPosF = (float)this.source.posX;
- this.yPosF = (float)this.source.posY;
- this.zPosF = (float)this.source.posZ;
- float f = MathHelper.sqrt_double(this.source.motionX * this.source.motionX + this.source.motionY * this.source.motionY + this.source.motionZ * this.source.motionZ);
+ /**
+ * Updates the JList with a new model.
+ */
+ @Override
+ public void update(){
+ if(this.source.isDead && repeat){
+ this.donePlaying = true;
+ }else{
+ this.xPosF = (float)this.source.posX;
+ this.yPosF = (float)this.source.posY;
+ this.zPosF = (float)this.source.posZ;
+ float f = MathHelper.sqrt(this.source.motionX * this.source.motionX
+ + this.source.motionY * this.source.motionY + this.source.motionZ * this.source.motionZ);
- // Is this something to do with the Doppler effect?
- if ((double)f >= 0.01D)
- {
- this.distance = MathHelper.clamp_float(this.distance + 0.0025F, 0.0F, 1.0F);
- this.volume = 0.0F + MathHelper.clamp_float(f, 0.0F, 0.5F) * 0.7F;
- }
- else
- {
- //this.pitch = 0.0F;
- //this.volume = 0.0F;
- }
- }
- }
+ // Is this something to do with the Doppler effect?
+ if((double)f >= 0.01D){
+ this.distance = MathHelper.clamp(this.distance + 0.0025F, 0.0F, 1.0F);
+ this.volume = 0.0F + MathHelper.clamp(f, 0.0F, 0.5F) * 0.7F;
+ }else{
+ // this.pitch = 0.0F;
+ // this.volume = 0.0F;
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java b/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java
index 84b0d552..a8fa9616 100644
--- a/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java
+++ b/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java
@@ -42,20 +42,29 @@ import net.minecraftforge.fml.relauncher.Side;
/**
* Event handler responsible for all client-side only events, mostly rendering.
+ *
* @author Electroblob
* @since Wizardry 1.0
*/
@Mod.EventBusSubscriber(Side.CLIENT)
public final class WizardryClientEventHandler {
- private static final ResourceLocation shieldTexture = new ResourceLocation(Wizardry.MODID, "textures/entity/shield.png");
- private static final ResourceLocation wingTexture = new ResourceLocation(Wizardry.MODID, "textures/entity/wing.png");
- private static final ResourceLocation shadowWardTexture = new ResourceLocation(Wizardry.MODID, "textures/entity/shadow_ward.png");
- private static final ResourceLocation sixthSenseTexture = new ResourceLocation(Wizardry.MODID, "textures/entity/sixth_sense.png");
- private static final ResourceLocation sixthSenseOverlayTexture = new ResourceLocation(Wizardry.MODID, "textures/gui/sixth_sense_overlay.png");
- private static final ResourceLocation frostOverlayTexture = new ResourceLocation(Wizardry.MODID, "textures/gui/frost_overlay.png");
- private static final ResourceLocation pointerTexture = new ResourceLocation(Wizardry.MODID, "textures/entity/pointer.png");
- private static final ResourceLocation targetPointerTexture = new ResourceLocation(Wizardry.MODID, "textures/entity/target_pointer.png");
+ private static final ResourceLocation shieldTexture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/shield.png");
+ private static final ResourceLocation wingTexture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/wing.png");
+ private static final ResourceLocation shadowWardTexture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/shadow_ward.png");
+ private static final ResourceLocation sixthSenseTexture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/sixth_sense.png");
+ private static final ResourceLocation sixthSenseOverlayTexture = new ResourceLocation(Wizardry.MODID,
+ "textures/gui/sixth_sense_overlay.png");
+ private static final ResourceLocation frostOverlayTexture = new ResourceLocation(Wizardry.MODID,
+ "textures/gui/frost_overlay.png");
+ private static final ResourceLocation pointerTexture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/pointer.png");
+ private static final ResourceLocation targetPointerTexture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/target_pointer.png");
@SubscribeEvent
public static void onTextureStitchEvent(TextureStitchEvent.Pre event){
@@ -66,8 +75,8 @@ public final class WizardryClientEventHandler {
// Shift-scrolling to change spells
@SubscribeEvent
public static void onMouseEvent(MouseEvent event){
-
- EntityPlayer player = Minecraft.getMinecraft().thePlayer;
+
+ EntityPlayer player = Minecraft.getMinecraft().player;
ItemStack wand = player.getHeldItemMainhand();
if(wand == null || !(wand.getItem() instanceof ItemWand)){
@@ -75,7 +84,7 @@ public final class WizardryClientEventHandler {
// If the player isn't holding a wand, then nothing else needs to be done.
if(wand == null || !(wand.getItem() instanceof ItemWand)) return;
}
-
+
if(Minecraft.getMinecraft().inGameHasFocus && wand != null && event.getDwheel() != 0 && player.isSneaking()
&& Wizardry.settings.enableShiftScrolling){
@@ -100,19 +109,19 @@ public final class WizardryClientEventHandler {
// Bow zoom. Taken directly from AbstractClientPlayer so it works exactly like vanilla.
if(event.getEntity().isHandActive() && event.getEntity().getActiveItemStack() != null
&& event.getEntity().getActiveItemStack().getItem() instanceof ItemSpectralBow){
-
- int maxUseTicks = event.getEntity().getItemInUseMaxCount();
-
- float maxUseSeconds = (float)maxUseTicks / 20.0F;
- if(maxUseSeconds > 1.0F){
- maxUseSeconds = 1.0F;
- }else{
- maxUseSeconds = maxUseSeconds * maxUseSeconds;
- }
+ int maxUseTicks = event.getEntity().getItemInUseMaxCount();
- event.setNewfov(event.getFov() * 1.0F - maxUseSeconds * 0.15F);
- }
+ float maxUseSeconds = (float)maxUseTicks / 20.0F;
+
+ if(maxUseSeconds > 1.0F){
+ maxUseSeconds = 1.0F;
+ }else{
+ maxUseSeconds = maxUseSeconds * maxUseSeconds;
+ }
+
+ event.setNewfov(event.getFov() * 1.0F - maxUseSeconds * 0.15F);
+ }
}
// Third person
@@ -128,126 +137,101 @@ public final class WizardryClientEventHandler {
public static void onRenderWorldLastEvent(RenderWorldLastEvent event){
// Now only fires in first person.
if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 0){
- renderShieldFirstPerson(Minecraft.getMinecraft().thePlayer);
- renderShadowWardFirstPerson(Minecraft.getMinecraft().thePlayer);
+ renderShieldFirstPerson(Minecraft.getMinecraft().player);
+ renderShadowWardFirstPerson(Minecraft.getMinecraft().player);
}
}
@SubscribeEvent
public static void onRenderLivingEvent(RenderLivingEvent.Post event){
- /*
- // Frost effect
- if(event.entity.isPotionActive(Wizardry.frost)){
+ /* // Frost effect if(event.entity.isPotionActive(Wizardry.frost)){
+ *
+ * GlStateManager.pushMatrix(); GL11.glDisable(GL11.GL_TEXTURE_2D); GlStateManager.enableBlend();
+ * GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ *
+ * float someScalingFactor = 0.0625f;
+ *
+ * float yaw = event.entity.prevRotationYaw;
+ *
+ * //int brightness = event.entity.getBrightnessForRender(0);
+ *
+ * //int j = brightness % 65536; //int k = brightness / 65536;
+ * //OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j / 1.0F, (float)k / 1.0F);
+ * //GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ *
+ *
+ * GlStateManager.translate(event.x, event.y, event.z);
+ *
+ * GlStateManager.rotate(-yaw + 180, 0F, 1F, 0F);
+ *
+ * Render render = renderManager.getEntityRenderObject(event.entity);
+ *
+ * RenderLiving renderliving = event.renderer;
+ *
+ * // Reflection
+ *
+ * try {
+ *
+ * Timer timer = ReflectionHelper.getPrivateValue(Minecraft.class, Minecraft.getMinecraft(), "timer");
+ *
+ * // Chooses the appropriate zombie model, normal or villager // Fixed by moving before the model fields are
+ * accessed if(render instanceof RenderZombie && event.entity instanceof EntityZombie){ // The second argument
+ * is never used... ReflectionHelper.findMethod(RenderZombie.class, (RenderZombie)render, new
+ * String[]{"func_82427_a"}, EntityZombie.class) .invoke(renderliving, (EntityZombie)event.entity); }
+ *
+ * // Turns out that java automatically infers the type parameter T in this method from the type // I am
+ * assigning the returned value to. Neat! ModelBase mainModel =
+ * ReflectionHelper.getPrivateValue(RenderLiving.class, renderliving, "mainModel");
+ *
+ * mainModel.isRiding = event.entity.isRiding(); mainModel.isChild = event.entity.isChild();
+ *
+ * GlStateManager.enableRescaleNormal(); GlStateManager.scale(-1.0F, -1.0F, 1.0F);
+ *
+ * // The second argument is never used... ReflectionHelper.findMethod(RenderLiving.class, renderliving, new
+ * String[]{"preRenderCallback"}, EntityLivingBase.class, float.class) .invoke(renderliving, event.entity,
+ * someScalingFactor);
+ *
+ * // Why is this -1.5f? No idea! GlStateManager.translate(0, -1.5f, 0);
+ *
+ * float f6 = event.entity.prevLimbSwingAmount + (event.entity.limbSwingAmount -
+ * event.entity.prevLimbSwingAmount) * timer.renderPartialTicks; float f7 = event.entity.limbSwing -
+ * event.entity.limbSwingAmount * (1.0F - timer.renderPartialTicks);
+ *
+ * if (event.entity.isChild()) { f7 *= 3.0F; }
+ *
+ * if (f6 > 1.0F) { f6 = 1.0F; }
+ *
+ * mainModel.setLivingAnimations(event.entity, f7, f6, timer.renderPartialTicks);
+ *
+ * GlStateManager.enableAlpha(); GlStateManager.color(0.5f, 0.7f, 1, 0.5f);
+ *
+ * mainModel.render(event.entity, f7, f6, 0, 0, 0, someScalingFactor);
+ *
+ * GL11.glDepthMask(true);
+ *
+ * // 'Pokemon' exception handling... Because why not?! } catch (Exception e) {
+ * System.err.println("Something went very wrong! Error while rendering frost effect:"); e.printStackTrace(); }
+ *
+ * GlStateManager.disableAlpha(); GlStateManager.disableBlend(); GlStateManager.blendFunc(GL11.GL_SRC_ALPHA,
+ * GL11.GL_ONE_MINUS_SRC_ALPHA); GlStateManager.disableRescaleNormal(); GL11.glEnable(GL11.GL_TEXTURE_2D);
+ * GlStateManager.popMatrix(); } */
- GlStateManager.pushMatrix();
- GL11.glDisable(GL11.GL_TEXTURE_2D);
- GlStateManager.enableBlend();
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
-
- float someScalingFactor = 0.0625f;
-
- float yaw = event.entity.prevRotationYaw;
-
- //int brightness = event.entity.getBrightnessForRender(0);
-
- //int j = brightness % 65536;
- //int k = brightness / 65536;
- //OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j / 1.0F, (float)k / 1.0F);
- //GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
-
-
- GlStateManager.translate(event.x, event.y, event.z);
-
- GlStateManager.rotate(-yaw + 180, 0F, 1F, 0F);
-
- Render render = renderManager.getEntityRenderObject(event.entity);
-
- RenderLiving renderliving = event.renderer;
-
- // Reflection
-
- try {
-
- Timer timer = ReflectionHelper.getPrivateValue(Minecraft.class, Minecraft.getMinecraft(), "timer");
-
- // Chooses the appropriate zombie model, normal or villager
- // Fixed by moving before the model fields are accessed
- if(render instanceof RenderZombie && event.entity instanceof EntityZombie){
- // The second argument is never used...
- ReflectionHelper.findMethod(RenderZombie.class, (RenderZombie)render, new String[]{"func_82427_a"}, EntityZombie.class)
- .invoke(renderliving, (EntityZombie)event.entity);
- }
-
- // Turns out that java automatically infers the type parameter T in this method from the type
- // I am assigning the returned value to. Neat!
- ModelBase mainModel = ReflectionHelper.getPrivateValue(RenderLiving.class, renderliving, "mainModel");
-
- mainModel.isRiding = event.entity.isRiding();
- mainModel.isChild = event.entity.isChild();
-
- GlStateManager.enableRescaleNormal();
- GlStateManager.scale(-1.0F, -1.0F, 1.0F);
-
- // The second argument is never used...
- ReflectionHelper.findMethod(RenderLiving.class, renderliving, new String[]{"preRenderCallback"}, EntityLivingBase.class, float.class)
- .invoke(renderliving, event.entity, someScalingFactor);
-
- // Why is this -1.5f? No idea!
- GlStateManager.translate(0, -1.5f, 0);
-
- float f6 = event.entity.prevLimbSwingAmount + (event.entity.limbSwingAmount - event.entity.prevLimbSwingAmount) * timer.renderPartialTicks;
- float f7 = event.entity.limbSwing - event.entity.limbSwingAmount * (1.0F - timer.renderPartialTicks);
-
- if (event.entity.isChild())
- {
- f7 *= 3.0F;
- }
-
- if (f6 > 1.0F)
- {
- f6 = 1.0F;
- }
-
- mainModel.setLivingAnimations(event.entity, f7, f6, timer.renderPartialTicks);
-
- GlStateManager.enableAlpha();
- GlStateManager.color(0.5f, 0.7f, 1, 0.5f);
-
- mainModel.render(event.entity, f7, f6, 0, 0, 0, someScalingFactor);
-
- GL11.glDepthMask(true);
-
- // 'Pokemon' exception handling... Because why not?!
- } catch (Exception e) {
- System.err.println("Something went very wrong! Error while rendering frost effect:");
- e.printStackTrace();
- }
-
- GlStateManager.disableAlpha();
- GlStateManager.disableBlend();
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
- GlStateManager.disableRescaleNormal();
- GL11.glEnable(GL11.GL_TEXTURE_2D);
- GlStateManager.popMatrix();
- }
- */
-
Minecraft mc = Minecraft.getMinecraft();
- WizardData properties = WizardData.get(mc.thePlayer);
- RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(mc.theWorld, mc.thePlayer, 16);
+ WizardData properties = WizardData.get(mc.player);
+ RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(mc.world, mc.player, 16);
RenderManager renderManager = event.getRenderer().getRenderManager();
-
- ItemStack wand = mc.thePlayer.getHeldItemMainhand();
+
+ ItemStack wand = mc.player.getHeldItemMainhand();
if(wand == null || !(wand.getItem() instanceof ItemWand)){
- wand = mc.thePlayer.getHeldItemOffhand();
+ wand = mc.player.getHeldItemOffhand();
}
-
+
// Target selection pointer
- if(mc.thePlayer.isSneaking() && wand != null && wand.getItem() instanceof ItemWand && rayTrace != null
+ if(mc.player.isSneaking() && wand != null && wand.getItem() instanceof ItemWand && rayTrace != null
&& rayTrace.entityHit instanceof EntityLivingBase && rayTrace.entityHit == event.getEntity()
&& properties != null && properties.selectedMinion != null){
-
+
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
@@ -273,9 +257,9 @@ public final class WizardryClientEventHandler {
mc.renderEngine.bindTexture(targetPointerTexture);
buffer.pos(-0.2, 0.24, 0).tex(0, 0).endVertex();
- buffer.pos(0.2, 0.24, 0).tex(9f/16f, 0).endVertex();
- buffer.pos(0.2, -0.24, 0).tex(9f/16f, 11f/16f).endVertex();
- buffer.pos(-0.2, -0.24, 0).tex(0, 11f/16f).endVertex();
+ buffer.pos(0.2, 0.24, 0).tex(9f / 16f, 0).endVertex();
+ buffer.pos(0.2, -0.24, 0).tex(9f / 16f, 11f / 16f).endVertex();
+ buffer.pos(-0.2, -0.24, 0).tex(0, 11f / 16f).endVertex();
tessellator.draw();
@@ -287,8 +271,9 @@ public final class WizardryClientEventHandler {
}
// Summoned creature selection pointer
- if(properties != null && properties.selectedMinion != null && properties.selectedMinion.get() == event.getEntity()){
-
+ if(properties != null && properties.selectedMinion != null
+ && properties.selectedMinion.get() == event.getEntity()){
+
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
@@ -314,9 +299,9 @@ public final class WizardryClientEventHandler {
mc.renderEngine.bindTexture(pointerTexture);
buffer.pos(-0.2, 0.24, 0).tex(0, 0).endVertex();
- buffer.pos(0.2, 0.24, 0).tex(9f/16f, 0).endVertex();
- buffer.pos(0.2, -0.24, 0).tex(9f/16f, 11f/16f).endVertex();
- buffer.pos(-0.2, -0.24, 0).tex(0, 11f/16f).endVertex();
+ buffer.pos(0.2, 0.24, 0).tex(9f / 16f, 0).endVertex();
+ buffer.pos(0.2, -0.24, 0).tex(9f / 16f, 11f / 16f).endVertex();
+ buffer.pos(-0.2, -0.24, 0).tex(0, 11f / 16f).endVertex();
tessellator.draw();
@@ -326,11 +311,13 @@ public final class WizardryClientEventHandler {
GlStateManager.popMatrix();
}
-
+
// Sixth sense
- if(mc.thePlayer.isPotionActive(WizardryPotions.sixth_sense) && event.getEntity() != mc.thePlayer
- && mc.thePlayer.getActivePotionEffect(WizardryPotions.sixth_sense) != null
- && event.getEntity().getDistanceToEntity(mc.thePlayer) < 20*(1+mc.thePlayer.getActivePotionEffect(WizardryPotions.sixth_sense).getAmplifier()*Constants.RANGE_INCREASE_PER_LEVEL)){
+ if(mc.player.isPotionActive(WizardryPotions.sixth_sense) && event.getEntity() != mc.player
+ && mc.player.getActivePotionEffect(WizardryPotions.sixth_sense) != null
+ && event.getEntity().getDistanceToEntity(mc.player) < 20
+ * (1 + mc.player.getActivePotionEffect(WizardryPotions.sixth_sense).getAmplifier()
+ * Constants.RANGE_INCREASE_PER_LEVEL)){
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
@@ -375,9 +362,9 @@ public final class WizardryClientEventHandler {
@SubscribeEvent
public static void onRenderGameOverlayEvent(RenderGameOverlayEvent.Post event){
-
+
if(event.getType() == RenderGameOverlayEvent.ElementType.HELMET
- && Minecraft.getMinecraft().thePlayer.isPotionActive(WizardryPotions.sixth_sense)){
+ && Minecraft.getMinecraft().player.isPotionActive(WizardryPotions.sixth_sense)){
GlStateManager.pushMatrix();
@@ -387,17 +374,18 @@ public final class WizardryClientEventHandler {
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.disableAlpha();
Minecraft.getMinecraft().renderEngine.bindTexture(sixthSenseOverlayTexture);
-
+
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
-
+
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
buffer.pos(0.0D, (double)event.getResolution().getScaledHeight(), -90.0D).tex(0.0D, 1.0D).endVertex();
- buffer.pos((double)event.getResolution().getScaledWidth(), (double)event.getResolution().getScaledHeight(), -90.0D).tex(1.0D, 1.0D).endVertex();
+ buffer.pos((double)event.getResolution().getScaledWidth(), (double)event.getResolution().getScaledHeight(),
+ -90.0D).tex(1.0D, 1.0D).endVertex();
buffer.pos((double)event.getResolution().getScaledWidth(), 0.0D, -90.0D).tex(1.0D, 0.0D).endVertex();
buffer.pos(0.0D, 0.0D, -90.0D).tex(0.0D, 0.0D).endVertex();
tessellator.draw();
-
+
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GlStateManager.enableAlpha();
@@ -407,7 +395,7 @@ public final class WizardryClientEventHandler {
}
if(event.getType() == RenderGameOverlayEvent.ElementType.HELMET
- && Minecraft.getMinecraft().thePlayer.isPotionActive(WizardryPotions.frost)){
+ && Minecraft.getMinecraft().player.isPotionActive(WizardryPotions.frost)){
GlStateManager.pushMatrix();
@@ -417,16 +405,17 @@ public final class WizardryClientEventHandler {
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.disableAlpha();
Minecraft.getMinecraft().renderEngine.bindTexture(frostOverlayTexture);
-
+
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
-
+
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
buffer.pos(0.0D, (double)event.getResolution().getScaledHeight(), -90.0D).tex(0.0D, 1.0D).endVertex();
- buffer.pos((double)event.getResolution().getScaledWidth(), (double)event.getResolution().getScaledHeight(), -90.0D).tex(1.0D, 1.0D).endVertex();
+ buffer.pos((double)event.getResolution().getScaledWidth(), (double)event.getResolution().getScaledHeight(),
+ -90.0D).tex(1.0D, 1.0D).endVertex();
buffer.pos((double)event.getResolution().getScaledWidth(), 0.0D, -90.0D).tex(1.0D, 0.0D).endVertex();
buffer.pos(0.0D, 0.0D, -90.0D).tex(0.0D, 0.0D).endVertex();
-
+
tessellator.draw();
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_DEPTH_TEST);
@@ -440,8 +429,10 @@ public final class WizardryClientEventHandler {
// FIXME: Something in here is making the first person shadow ward rather translucent.
private static void renderShadowWardFirstPerson(EntityPlayer entityplayer){
ItemStack wand = entityplayer.getActiveItemStack();
- if(WizardData.get(entityplayer) != null && WizardData.get(entityplayer).currentlyCasting() instanceof ShadowWard || (entityplayer.isHandActive() && wand != null && wand.getItemDamage() < wand.getMaxDamage()
- && wand.getItem() instanceof ItemWand && WandHelper.getCurrentSpell(wand) instanceof ShadowWard)){
+ if(WizardData.get(entityplayer) != null && WizardData.get(entityplayer).currentlyCasting() instanceof ShadowWard
+ || (entityplayer.isHandActive() && wand != null && wand.getItemDamage() < wand.getMaxDamage()
+ && wand.getItem() instanceof ItemWand
+ && WandHelper.getCurrentSpell(wand) instanceof ShadowWard)){
GlStateManager.pushMatrix();
@@ -455,18 +446,18 @@ public final class WizardryClientEventHandler {
GlStateManager.translate(0, 1.2, 0);
GlStateManager.rotate(-entityplayer.rotationYaw, 0, 1, 0);
GlStateManager.rotate(entityplayer.rotationPitch, 1, 0, 0);
-
+
Minecraft.getMinecraft().renderEngine.bindTexture(shadowWardTexture);
GlStateManager.pushMatrix();
GlStateManager.translate(0, 0, 1.2);
- GlStateManager.rotate(entityplayer.worldObj.getWorldTime()*-2, 0, 0, 1);
+ GlStateManager.rotate(entityplayer.world.getWorldTime() * -2, 0, 0, 1);
GlStateManager.scale(1.1, 1.1, 1.1);
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
-
+
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
buffer.pos(-0.5, 0.5, -0.5).tex(0, 0).endVertex();
@@ -498,8 +489,9 @@ public final class WizardryClientEventHandler {
private static void renderShadowWardIfActive(EntityPlayer entityplayer){
ItemStack wand = entityplayer.getActiveItemStack();
- if(WizardData.get(entityplayer).currentlyCasting() instanceof ShadowWard || (entityplayer.isHandActive() && wand != null
- && wand.getItemDamage() < wand.getMaxDamage() && wand.getItem() instanceof ItemWand && WandHelper.getCurrentSpell(wand) instanceof ShadowWard)){
+ if(WizardData.get(entityplayer).currentlyCasting() instanceof ShadowWard || (entityplayer.isHandActive()
+ && wand != null && wand.getItemDamage() < wand.getMaxDamage() && wand.getItem() instanceof ItemWand
+ && WandHelper.getCurrentSpell(wand) instanceof ShadowWard)){
GlStateManager.pushMatrix();
@@ -510,14 +502,14 @@ public final class WizardryClientEventHandler {
GlStateManager.rotate(180, 0, 1, 0);
GlStateManager.rotate(-entityplayer.renderYawOffset, 0, 1, 0);
-
+
Minecraft.getMinecraft().renderEngine.bindTexture(shadowWardTexture);
-
+
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
GlStateManager.translate(0, 1.2, 0);
- GlStateManager.rotate(entityplayer.worldObj.getWorldTime()*-2, 0, 0, 1);
+ GlStateManager.rotate(entityplayer.world.getWorldTime() * -2, 0, 0, 1);
GlStateManager.scale(1.1, 1.1, 1.1);
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
@@ -548,8 +540,9 @@ public final class WizardryClientEventHandler {
private static void renderWingsIfActive(EntityPlayer entityplayer, float partialTickTime){
ItemStack wand = entityplayer.getActiveItemStack();
- if(WizardData.get(entityplayer).currentlyCasting() instanceof Flight || (entityplayer.isHandActive() && wand != null
- && wand.getItemDamage() < wand.getMaxDamage() && wand.getItem() instanceof ItemWand && WandHelper.getCurrentSpell(wand) instanceof Flight)){
+ if(WizardData.get(entityplayer).currentlyCasting() instanceof Flight
+ || (entityplayer.isHandActive() && wand != null && wand.getItemDamage() < wand.getMaxDamage()
+ && wand.getItem() instanceof ItemWand && WandHelper.getCurrentSpell(wand) instanceof Flight)){
GlStateManager.pushMatrix();
@@ -558,9 +551,9 @@ public final class WizardryClientEventHandler {
GlStateManager.disableLighting();
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
- //GlStateManager.rotate(-entityplayer.rotationYawHead, 0, 1, 0);
+ // GlStateManager.rotate(-entityplayer.rotationYawHead, 0, 1, 0);
GlStateManager.rotate(-entityplayer.renderYawOffset, 0, 1, 0);
- //GlStateManager.rotate(180, 1, 0, 0);
+ // GlStateManager.rotate(180, 1, 0, 0);
Minecraft.getMinecraft().renderEngine.bindTexture(wingTexture);
Tessellator tessellator = Tessellator.getInstance();
@@ -569,7 +562,7 @@ public final class WizardryClientEventHandler {
GlStateManager.pushMatrix();
GlStateManager.translate(0.1, 0.4, -0.15);
- GlStateManager.rotate(20 + 20*(float)Math.sin(entityplayer.worldObj.getWorldTime()*0.3), 0, 1, 0);
+ GlStateManager.rotate(20 + 20 * (float)Math.sin(entityplayer.world.getWorldTime() * 0.3), 0, 1, 0);
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
@@ -594,7 +587,7 @@ public final class WizardryClientEventHandler {
GlStateManager.pushMatrix();
GlStateManager.translate(-0.1, 0.4, -0.15);
- GlStateManager.rotate(-200 - 20*(float)Math.sin(entityplayer.worldObj.getWorldTime()*0.3), 0, 1, 0);
+ GlStateManager.rotate(-200 - 20 * (float)Math.sin(entityplayer.world.getWorldTime() * 0.3), 0, 1, 0);
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
@@ -625,8 +618,10 @@ public final class WizardryClientEventHandler {
private static void renderShieldFirstPerson(EntityPlayer entityplayer){
ItemStack wand = entityplayer.getActiveItemStack();
- if(WizardData.get(entityplayer) != null && WizardData.get(entityplayer).shield != null && (WizardData.get(entityplayer).currentlyCasting() instanceof Shield || (entityplayer.isHandActive() && wand != null
- && wand.getItemDamage() < wand.getMaxDamage() && wand.getItem() instanceof ItemWand && WandHelper.getCurrentSpell(wand) instanceof Shield))){
+ if(WizardData.get(entityplayer) != null && WizardData.get(entityplayer).shield != null
+ && (WizardData.get(entityplayer).currentlyCasting() instanceof Shield || (entityplayer.isHandActive()
+ && wand != null && wand.getItemDamage() < wand.getMaxDamage()
+ && wand.getItem() instanceof ItemWand && WandHelper.getCurrentSpell(wand) instanceof Shield))){
GlStateManager.pushMatrix();
@@ -649,13 +644,13 @@ public final class WizardryClientEventHandler {
Minecraft.getMinecraft().renderEngine.bindTexture(shieldTexture);
renderShield(tessellator);
-
+
GlStateManager.enableLighting();
GlStateManager.shadeModel(GL11.GL_FLAT);
GlStateManager.enableCull();
GlStateManager.disableBlend();
- //RenderHelper.enableStandardItemLighting();
+ // RenderHelper.enableStandardItemLighting();
GlStateManager.popMatrix();
}
@@ -663,8 +658,10 @@ public final class WizardryClientEventHandler {
private static void renderShieldIfActive(EntityPlayer entityplayer){
ItemStack wand = entityplayer.getActiveItemStack();
- if(WizardData.get(entityplayer).shield != null && (WizardData.get(entityplayer).currentlyCasting() instanceof Shield || (entityplayer.isHandActive() && wand != null
- && wand.getItemDamage() < wand.getMaxDamage() && wand.getItem() instanceof ItemWand && WandHelper.getCurrentSpell(wand) instanceof Shield))){
+ if(WizardData.get(entityplayer).shield != null
+ && (WizardData.get(entityplayer).currentlyCasting() instanceof Shield || (entityplayer.isHandActive()
+ && wand != null && wand.getItemDamage() < wand.getMaxDamage()
+ && wand.getItem() instanceof ItemWand && WandHelper.getCurrentSpell(wand) instanceof Shield))){
GlStateManager.pushMatrix();
@@ -679,9 +676,9 @@ public final class WizardryClientEventHandler {
GlStateManager.translate(0, 1.3, 0);
- //GlStateManager.rotate(180, 0, 1, 0);
+ // GlStateManager.rotate(180, 0, 1, 0);
GlStateManager.rotate(-entityplayer.renderYawOffset, 0, 1, 0);
- //GlStateManager.rotate(-entityplayer.rotationPitch, 1, 0, 0);
+ // GlStateManager.rotate(-entityplayer.rotationPitch, 1, 0, 0);
GlStateManager.translate(0, 0, 0.8);
@@ -696,7 +693,7 @@ public final class WizardryClientEventHandler {
GlStateManager.shadeModel(GL11.GL_FLAT);
GlStateManager.enableCull();
GlStateManager.disableBlend();
- //RenderHelper.enableStandardItemLighting();
+ // RenderHelper.enableStandardItemLighting();
GlStateManager.popMatrix();
}
diff --git a/src/main/java/electroblob/wizardry/client/model/ModelHammer.java b/src/main/java/electroblob/wizardry/client/model/ModelHammer.java
index e1445f05..85a164f7 100644
--- a/src/main/java/electroblob/wizardry/client/model/ModelHammer.java
+++ b/src/main/java/electroblob/wizardry/client/model/ModelHammer.java
@@ -4,80 +4,75 @@ import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
-public class ModelHammer extends ModelBase
-{
- ModelRenderer Shape1;
- ModelRenderer Shape2;
- ModelRenderer Shape3;
- ModelRenderer Shape4;
- ModelRenderer Shape5;
- ModelRenderer Shape6;
-
- public ModelHammer()
- {
- textureWidth = 64;
- textureHeight = 64;
-
- Shape1 = new ModelRenderer(this, 0, 0);
- Shape1.addBox(0F, 0F, 0F, 20, 12, 12);
- Shape1.setRotationPoint(-10F, 12F, -6F);
- Shape1.setTextureSize(64, 64);
- Shape1.mirror = true;
- setRotation(Shape1, 0F, 0F, 0F);
- Shape2 = new ModelRenderer(this, 0, 24);
- Shape2.addBox(0F, 0F, 0F, 4, 14, 4);
- Shape2.setRotationPoint(-2F, -2F, -2F);
- Shape2.setTextureSize(64, 64);
- Shape2.mirror = true;
- setRotation(Shape2, 0F, 0F, 0F);
- Shape3 = new ModelRenderer(this, 0, 49);
- Shape3.addBox(0F, 0F, 0F, 5, 5, 5);
- Shape3.setRotationPoint(-2.5F, -7F, -2.5F);
- Shape3.setTextureSize(64, 64);
- Shape3.mirror = true;
- setRotation(Shape3, 0F, 0F, 0F);
- Shape4 = new ModelRenderer(this, 0, 42);
- Shape4.addBox(0F, 0F, 0F, 5, 2, 5);
- Shape4.setRotationPoint(-2.5F, 10F, -2.5F);
- Shape4.setTextureSize(64, 64);
- Shape4.mirror = true;
- setRotation(Shape4, 0F, 0F, 0F);
- Shape5 = new ModelRenderer(this, 20, 24);
- Shape5.addBox(0F, 0F, 0F, 2, 14, 14);
- Shape5.setRotationPoint(-8F, 11F, -7F);
- Shape5.setTextureSize(64, 64);
- Shape5.mirror = true;
- setRotation(Shape5, 0F, 0F, 0F);
- Shape6 = new ModelRenderer(this, 20, 24);
- Shape6.addBox(0F, 0F, 0F, 2, 14, 14);
- Shape6.setRotationPoint(6F, 11F, -7F);
- Shape6.setTextureSize(64, 64);
- Shape6.mirror = true;
- setRotation(Shape6, 0F, 0F, 0F);
- }
-
- public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
- {
- super.render(entity, f, f1, f2, f3, f4, f5);
- setRotationAngles(f, f1, f2, f3, f4, f5, entity);
- Shape1.render(f5);
- Shape2.render(f5);
- Shape3.render(f5);
- Shape4.render(f5);
- Shape5.render(f5);
- Shape6.render(f5);
- }
-
- private void setRotation(ModelRenderer model, float x, float y, float z)
- {
- model.rotateAngleX = x;
- model.rotateAngleY = y;
- model.rotateAngleZ = z;
- }
-
- public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
- {
- super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
- }
+public class ModelHammer extends ModelBase {
+ ModelRenderer Shape1;
+ ModelRenderer Shape2;
+ ModelRenderer Shape3;
+ ModelRenderer Shape4;
+ ModelRenderer Shape5;
+ ModelRenderer Shape6;
+
+ public ModelHammer(){
+ textureWidth = 64;
+ textureHeight = 64;
+
+ Shape1 = new ModelRenderer(this, 0, 0);
+ Shape1.addBox(0F, 0F, 0F, 20, 12, 12);
+ Shape1.setRotationPoint(-10F, 12F, -6F);
+ Shape1.setTextureSize(64, 64);
+ Shape1.mirror = true;
+ setRotation(Shape1, 0F, 0F, 0F);
+ Shape2 = new ModelRenderer(this, 0, 24);
+ Shape2.addBox(0F, 0F, 0F, 4, 14, 4);
+ Shape2.setRotationPoint(-2F, -2F, -2F);
+ Shape2.setTextureSize(64, 64);
+ Shape2.mirror = true;
+ setRotation(Shape2, 0F, 0F, 0F);
+ Shape3 = new ModelRenderer(this, 0, 49);
+ Shape3.addBox(0F, 0F, 0F, 5, 5, 5);
+ Shape3.setRotationPoint(-2.5F, -7F, -2.5F);
+ Shape3.setTextureSize(64, 64);
+ Shape3.mirror = true;
+ setRotation(Shape3, 0F, 0F, 0F);
+ Shape4 = new ModelRenderer(this, 0, 42);
+ Shape4.addBox(0F, 0F, 0F, 5, 2, 5);
+ Shape4.setRotationPoint(-2.5F, 10F, -2.5F);
+ Shape4.setTextureSize(64, 64);
+ Shape4.mirror = true;
+ setRotation(Shape4, 0F, 0F, 0F);
+ Shape5 = new ModelRenderer(this, 20, 24);
+ Shape5.addBox(0F, 0F, 0F, 2, 14, 14);
+ Shape5.setRotationPoint(-8F, 11F, -7F);
+ Shape5.setTextureSize(64, 64);
+ Shape5.mirror = true;
+ setRotation(Shape5, 0F, 0F, 0F);
+ Shape6 = new ModelRenderer(this, 20, 24);
+ Shape6.addBox(0F, 0F, 0F, 2, 14, 14);
+ Shape6.setRotationPoint(6F, 11F, -7F);
+ Shape6.setTextureSize(64, 64);
+ Shape6.mirror = true;
+ setRotation(Shape6, 0F, 0F, 0F);
+ }
+
+ public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5){
+ super.render(entity, f, f1, f2, f3, f4, f5);
+ setRotationAngles(f, f1, f2, f3, f4, f5, entity);
+ Shape1.render(f5);
+ Shape2.render(f5);
+ Shape3.render(f5);
+ Shape4.render(f5);
+ Shape5.render(f5);
+ Shape6.render(f5);
+ }
+
+ private void setRotation(ModelRenderer model, float x, float y, float z){
+ model.rotateAngleX = x;
+ model.rotateAngleY = y;
+ model.rotateAngleZ = z;
+ }
+
+ public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity){
+ super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/model/ModelIceGiant.java b/src/main/java/electroblob/wizardry/client/model/ModelIceGiant.java
index 4a8591d7..798cfcb4 100644
--- a/src/main/java/electroblob/wizardry/client/model/ModelIceGiant.java
+++ b/src/main/java/electroblob/wizardry/client/model/ModelIceGiant.java
@@ -13,309 +13,299 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
-public class ModelIceGiant extends ModelBase
-{
- /** The head model for the iron golem. */
- public ModelRenderer iceGiantHead;
+public class ModelIceGiant extends ModelBase {
+ /** The head model for the iron golem. */
+ public ModelRenderer iceGiantHead;
- /** The body model for the iron golem. */
- public ModelRenderer iceGiantBody;
+ /** The body model for the iron golem. */
+ public ModelRenderer iceGiantBody;
- /** The right arm model for the iron golem. */
- public ModelRenderer iceGiantRightArm;
+ /** The right arm model for the iron golem. */
+ public ModelRenderer iceGiantRightArm;
- /** The left arm model for the iron golem. */
- public ModelRenderer iceGiantLeftArm;
+ /** The left arm model for the iron golem. */
+ public ModelRenderer iceGiantLeftArm;
- /** The left leg model for the Iron Golem. */
- public ModelRenderer iceGiantLeftLeg;
+ /** The left leg model for the Iron Golem. */
+ public ModelRenderer iceGiantLeftLeg;
- /** The right leg model for the Iron Golem. */
- public ModelRenderer iceGiantRightLeg;
-
- ModelRenderer headSpike1;
- ModelRenderer headSpike2;
- ModelRenderer headSpike3;
- ModelRenderer headSpike4;
- ModelRenderer headSpike5;
- ModelRenderer headSpike6;
- ModelRenderer headSpike7;
- ModelRenderer rightArmSpike1;
- ModelRenderer rightArmSpike2;
- ModelRenderer leftArmSpike1;
- ModelRenderer leftArmSpike2;
- ModelRenderer bodySpike1;
- ModelRenderer bodySpike2;
- ModelRenderer bodySpike3;
- ModelRenderer bodySpike4;
- ModelRenderer bodySpike5;
+ /** The right leg model for the Iron Golem. */
+ public ModelRenderer iceGiantRightLeg;
- public ModelIceGiant()
- {
- this(0.0F);
- }
+ ModelRenderer headSpike1;
+ ModelRenderer headSpike2;
+ ModelRenderer headSpike3;
+ ModelRenderer headSpike4;
+ ModelRenderer headSpike5;
+ ModelRenderer headSpike6;
+ ModelRenderer headSpike7;
+ ModelRenderer rightArmSpike1;
+ ModelRenderer rightArmSpike2;
+ ModelRenderer leftArmSpike1;
+ ModelRenderer leftArmSpike2;
+ ModelRenderer bodySpike1;
+ ModelRenderer bodySpike2;
+ ModelRenderer bodySpike3;
+ ModelRenderer bodySpike4;
+ ModelRenderer bodySpike5;
- public ModelIceGiant(float par1)
- {
- this(par1, -7.0F);
- }
+ public ModelIceGiant(){
+ this(0.0F);
+ }
- public ModelIceGiant(float par1, float par2)
- {
- short short1 = 128;
- short short2 = 128;
-
- this.iceGiantHead = (new ModelRenderer(this)).setTextureSize(short1, short2);
- this.iceGiantHead.setRotationPoint(0.0F, 0.0F + par2, -1.0F);
- this.iceGiantHead.setTextureOffset(0, 10).addBox(-6.0F, -14.0F, -6.5F, 12, 12, 12, par1);
-
- this.iceGiantBody = (new ModelRenderer(this)).setTextureSize(short1, short2);
- this.iceGiantBody.setRotationPoint(0.0F, 0.0F + par2, 0.0F);
- this.iceGiantBody.setTextureOffset(0, 40).addBox(-9.0F, -2.0F, -6.0F, 18, 12, 11, par1);
- this.iceGiantBody.setTextureOffset(0, 70).addBox(-4.5F, 10.0F, -3.0F, 9, 5, 6, par1 + 0.5F);
-
- this.iceGiantRightArm = (new ModelRenderer(this)).setTextureSize(short1, short2);
- this.iceGiantRightArm.setRotationPoint(0.0F, -7.0F, 0.0F);
- this.iceGiantRightArm.setTextureOffset(60, 21).addBox(-13.0F, -2.5F, -3.0F, 4, 30, 6, par1);
-
- this.iceGiantLeftArm = (new ModelRenderer(this)).setTextureSize(short1, short2);
- this.iceGiantLeftArm.setRotationPoint(0.0F, -7.0F, 0.0F);
- this.iceGiantLeftArm.setTextureOffset(60, 58).addBox(9.0F, -2.5F, -3.0F, 4, 30, 6, par1);
-
- this.iceGiantLeftLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(short1, short2);
- this.iceGiantLeftLeg.setRotationPoint(-4.0F, 18.0F + par2, 0.0F);
- this.iceGiantLeftLeg.setTextureOffset(37, 0).addBox(-3.5F, -3.0F, -3.0F, 6, 16, 5, par1);
-
- this.iceGiantRightLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(short1, short2);
- this.iceGiantRightLeg.mirror = true;
- this.iceGiantRightLeg.setTextureOffset(60, 0).setRotationPoint(5.0F, 18.0F + par2, 0.0F);
- this.iceGiantRightLeg.addBox(-3.5F, -3.0F, -3.0F, 6, 16, 5, par1);
-
- headSpike1 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- headSpike1.addBox(-4F, -4F, 0F, 4, 4, 4);
- headSpike1.setRotationPoint(-4F, -10F, -5F);
- headSpike1.mirror = true;
- setRotationWithEulerYzx(headSpike1, -0.1047198F, -0.5235988F, 0.9599311F);
-
- headSpike2 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- headSpike2.addBox(0F, -4F, 0F, 4, 4, 4);
- headSpike2.setRotationPoint(4F, -16F, 0F);
- headSpike2.mirror = true;
- setRotationWithEulerYzx(headSpike2, 0.5585054F, 0.9250245F, -0.5235988F);
-
- headSpike3 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- headSpike3.addBox(-2F, -2F, -2F, 4, 4, 4);
- headSpike3.setRotationPoint(4F, -13F, 4F);
- headSpike3.mirror = true;
- setRotationWithEulerYzx(headSpike3, 0.7853982F, -1.396263F, 0.7853982F);
-
- headSpike4 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- headSpike4.addBox(-4F, -4F, 0F, 4, 4, 4);
- headSpike4.setRotationPoint(-4F, -16F, 0F);
- headSpike4.mirror = true;
- setRotationWithEulerYzx(headSpike4, 0.5585054F, -0.9250245F, 0.5235988F);
-
- headSpike5 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- headSpike5.addBox(0F, -4F, 0F, 4, 4, 4);
- headSpike5.setRotationPoint(4F, -10F, -5F);
- headSpike5.mirror = true;
- setRotationWithEulerYzx(headSpike5, 0.5235988F, -0.9599311F, 0.1047198F);
-
- rightArmSpike1 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- rightArmSpike1.addBox(-2F, -2F, -2F, 4, 4, 4);
- rightArmSpike1.setRotationPoint(-11F, -8F, 0F);
- rightArmSpike1.mirror = true;
- setRotationWithEulerYzx(rightArmSpike1, 0.7853982F, 1.134464F, 0.9599311F);
-
- headSpike6 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- headSpike6.addBox(-2F, -2F, -2F, 4, 4, 4);
- headSpike6.setRotationPoint(-4F, -13F, 4F);
- headSpike6.mirror = true;
- setRotationWithEulerYzx(headSpike6, 0.7853982F, -1.745329F, 0.7853982F);
-
- leftArmSpike1 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- leftArmSpike1.addBox(-2F, -2F, -2F, 4, 4, 4);
- leftArmSpike1.setRotationPoint(11F, -8F, 0F);
- leftArmSpike1.mirror = true;
- setRotationWithEulerYzx(leftArmSpike1, 0.7853982F, -1.134464F, -0.9599311F);
-
- leftArmSpike2 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- leftArmSpike2.addBox(-2F, -2F, -2F, 4, 4, 4);
- leftArmSpike2.setRotationPoint(12F, -4F, 0F);
- leftArmSpike2.mirror = true;
- setRotationWithEulerYzx(leftArmSpike2, 0.7853982F, 0F, -0.9599311F);
-
- bodySpike1 = new ModelRenderer(this, 32, 69).setTextureSize(short1, short2);
- bodySpike1.addBox(-3F, -3F, -3F, 6, 6, 6);
- bodySpike1.setRotationPoint(-4F, -4F, 3F);
- bodySpike1.mirror = true;
- setRotationWithEulerYzx(bodySpike1, 0.2808018F, 0.8096675F, 0.8339369F);
-
- rightArmSpike2 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- rightArmSpike2.addBox(-2F, -2F, -2F, 4, 4, 4);
- rightArmSpike2.setRotationPoint(-12F, -4F, 0F);
- rightArmSpike2.mirror = true;
- setRotationWithEulerYzx(rightArmSpike2, 0.7853982F, 0F, 0.9599311F);
-
- bodySpike2 = new ModelRenderer(this, 32, 69).setTextureSize(short1, short2);
- bodySpike2.addBox(-3F, -3F, -3F, 6, 6, 6);
- bodySpike2.setRotationPoint(4F, -4F, 3F);
- bodySpike2.mirror = true;
- setRotationWithEulerYzx(bodySpike2, 0.2808018F, -0.8096757F, -0.8339358F);
-
- bodySpike3 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- bodySpike3.addBox(-2F, -2F, -2F, 4, 4, 4);
- bodySpike3.setRotationPoint(6F, -2F, -5F);
- bodySpike3.mirror = true;
- setRotationWithEulerYzx(bodySpike3, 1.120006F, -1.347726F, -0.8969422F);
-
- bodySpike4 = new ModelRenderer(this, 32, 69).setTextureSize(short1, short2);
- bodySpike4.addBox(-3F, -3F, -3F, 6, 6, 6);
- bodySpike4.setRotationPoint(0F, -4F, -4F);
- bodySpike4.mirror = true;
- setRotationWithEulerYzx(bodySpike4, 0.7853982F, -1.570796F, 0.9599311F);
-
- headSpike7 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- headSpike7.addBox(-2F, -2F, -2F, 4, 4, 4);
- headSpike7.setRotationPoint(0F, -20F, 4F);
- headSpike7.mirror = true;
- setRotationWithEulerYzx(headSpike7, 0.7853982F, 1.570796F, 0.7853982F);
-
- bodySpike5 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
- bodySpike5.addBox(-2F, -2F, -2F, 4, 4, 4);
- bodySpike5.setRotationPoint(-6F, -2F, -5F);
- bodySpike5.mirror = true;
- setRotationWithEulerYzx(bodySpike5, 1.120006F, 1.347725F, 0.896934F);
-
- this.convertToChild(this.iceGiantHead, headSpike1);
- this.convertToChild(this.iceGiantHead, headSpike2);
- this.convertToChild(this.iceGiantHead, headSpike3);
- this.convertToChild(this.iceGiantHead, headSpike4);
- this.convertToChild(this.iceGiantHead, headSpike5);
- this.convertToChild(this.iceGiantHead, headSpike6);
- this.convertToChild(this.iceGiantHead, headSpike7);
- this.convertToChild(this.iceGiantRightArm, rightArmSpike1);
- this.convertToChild(this.iceGiantRightArm, rightArmSpike2);
- this.convertToChild(this.iceGiantLeftArm, leftArmSpike1);
- this.convertToChild(this.iceGiantLeftArm, leftArmSpike2);
- this.convertToChild(this.iceGiantBody, bodySpike1);
- this.convertToChild(this.iceGiantBody, bodySpike2);
- this.convertToChild(this.iceGiantBody, bodySpike3);
- this.convertToChild(this.iceGiantBody, bodySpike4);
- this.convertToChild(this.iceGiantBody, bodySpike5);
-
- }
+ public ModelIceGiant(float par1){
+ this(par1, -7.0F);
+ }
- /**
- * Sets the models various rotation angles then renders the model.
- */
- public void render(Entity par1Entity, float par2, float par3, float par4, float par5, float par6, float par7)
- {
- this.setRotationAngles(par2, par3, par4, par5, par6, par7, par1Entity);
- this.iceGiantHead.render(par7);
- this.iceGiantBody.render(par7);
- this.iceGiantLeftLeg.render(par7);
- this.iceGiantRightLeg.render(par7);
- this.iceGiantRightArm.render(par7);
- this.iceGiantLeftArm.render(par7);
- }
+ public ModelIceGiant(float par1, float par2){
+ short short1 = 128;
+ short short2 = 128;
- /**
- * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms
- * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how
- * "far" arms and legs can swing at most.
- */
- public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity par7Entity)
- {
- this.iceGiantHead.rotateAngleY = par4 / (180F / (float)Math.PI);
- this.iceGiantHead.rotateAngleX = par5 / (180F / (float)Math.PI);
- this.iceGiantLeftLeg.rotateAngleX = -1.5F * this.func_78172_a(par1, 13.0F) * par2;
- this.iceGiantRightLeg.rotateAngleX = 1.5F * this.func_78172_a(par1, 13.0F) * par2;
- this.iceGiantLeftLeg.rotateAngleY = 0.0F;
- this.iceGiantRightLeg.rotateAngleY = 0.0F;
- }
+ this.iceGiantHead = (new ModelRenderer(this)).setTextureSize(short1, short2);
+ this.iceGiantHead.setRotationPoint(0.0F, 0.0F + par2, -1.0F);
+ this.iceGiantHead.setTextureOffset(0, 10).addBox(-6.0F, -14.0F, -6.5F, 12, 12, 12, par1);
- /**
- * Used for easily adding entity-dependent animations. The second and third float params here are the same second
- * and third as in the setRotationAngles method.
- */
- public void setLivingAnimations(EntityLivingBase par1EntityLivingBase, float par2, float par3, float par4)
- {
- EntityIceGiant entityicegiant = (EntityIceGiant)par1EntityLivingBase;
- int i = entityicegiant.getAttackTimer();
+ this.iceGiantBody = (new ModelRenderer(this)).setTextureSize(short1, short2);
+ this.iceGiantBody.setRotationPoint(0.0F, 0.0F + par2, 0.0F);
+ this.iceGiantBody.setTextureOffset(0, 40).addBox(-9.0F, -2.0F, -6.0F, 18, 12, 11, par1);
+ this.iceGiantBody.setTextureOffset(0, 70).addBox(-4.5F, 10.0F, -3.0F, 9, 5, 6, par1 + 0.5F);
- if (i > 0)
- {
- this.iceGiantRightArm.rotateAngleX = -2.0F + 1.5F * this.func_78172_a((float)i - par4, 10.0F);
- this.iceGiantLeftArm.rotateAngleX = -2.0F + 1.5F * this.func_78172_a((float)i - par4, 10.0F);
- }
- else
- {
- this.iceGiantRightArm.rotateAngleX = (-0.2F + 1.5F * this.func_78172_a(par2, 13.0F)) * par3;
- this.iceGiantLeftArm.rotateAngleX = (-0.2F - 1.5F * this.func_78172_a(par2, 13.0F)) * par3;
- }
- }
+ this.iceGiantRightArm = (new ModelRenderer(this)).setTextureSize(short1, short2);
+ this.iceGiantRightArm.setRotationPoint(0.0F, -7.0F, 0.0F);
+ this.iceGiantRightArm.setTextureOffset(60, 21).addBox(-13.0F, -2.5F, -3.0F, 4, 30, 6, par1);
- private float func_78172_a(float par1, float par2)
- {
- return (Math.abs(par1 % par2 - par2 * 0.5F) - par2 * 0.25F) / (par2 * 0.25F);
- }
-
- /** This is really useful for converting the source from a Techne model export
- * which will have absolute rotation points that need to be converted before
- * creating the addChild() relationship. [Courtesy of jabelar] */
- protected void convertToChild(ModelRenderer parent, ModelRenderer child)
- {
- // move child rotation point to be relative to parent
- child.rotationPointX -= parent.rotationPointX;
- child.rotationPointY -= parent.rotationPointY;
- child.rotationPointZ -= parent.rotationPointZ;
- // make rotations relative to parent
- child.rotateAngleX -= parent.rotateAngleX;
- child.rotateAngleY -= parent.rotateAngleY;
- child.rotateAngleZ -= parent.rotateAngleZ;
- // create relationship
- parent.addChild(child);
- }
-
- /** Fixes the Techne rotation order bug. [Courtesy of tprk77] */
- private Vector3f ConvertEulerYzxToZyx(Vector3f eulerYzx) {
- // Create a matrix from YZX ordered Euler angles
- float a = MathHelper.cos(eulerYzx.x);
- float b = MathHelper.sin(eulerYzx.x);
- float c = MathHelper.cos(eulerYzx.y);
- float d = MathHelper.sin(eulerYzx.y);
- float e = MathHelper.cos(eulerYzx.z);
- float f = MathHelper.sin(eulerYzx.z);
- Matrix4f matrix = new Matrix4f();
- matrix.m00 = c * e;
- matrix.m01 = b * d - a * c * f;
- matrix.m02 = b * c * f + a * d;
- matrix.m10 = f;
- matrix.m11 = a * e;
- matrix.m12 = -b * e;
- matrix.m20 = -d * e;
- matrix.m21 = a * d * f + b * c;
- matrix.m22 = a * c - b * d * f;
- matrix.m33 = 1.0F;
- // Create ZYX ordered Euler angles from the matrix
- Vector3f eulerZyx = new Vector3f();
- eulerZyx.y = (float) Math.asin(MathHelper.clamp_float(-matrix.m20, -1, 1));
- if (MathHelper.abs(matrix.m20) < 0.99999) {
- eulerZyx.x = (float) Math.atan2(matrix.m21, matrix.m22);
- eulerZyx.z = (float) Math.atan2(matrix.m10, matrix.m00);
- } else {
- eulerZyx.x = 0.0F;
- eulerZyx.z = (float) Math.atan2(-matrix.m01, matrix.m11);
- }
- return eulerZyx;
- }
-
- private void setRotationWithEulerYzx(ModelRenderer model, float x, float y, float z) {
- Vector3f eulerYzx = new Vector3f(x, y, z);
- Vector3f eulerZyx = ConvertEulerYzxToZyx(eulerYzx);
- model.rotateAngleX = eulerZyx.x;
- model.rotateAngleY = eulerZyx.y;
- model.rotateAngleZ = eulerZyx.z;
- }
+ this.iceGiantLeftArm = (new ModelRenderer(this)).setTextureSize(short1, short2);
+ this.iceGiantLeftArm.setRotationPoint(0.0F, -7.0F, 0.0F);
+ this.iceGiantLeftArm.setTextureOffset(60, 58).addBox(9.0F, -2.5F, -3.0F, 4, 30, 6, par1);
+
+ this.iceGiantLeftLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(short1, short2);
+ this.iceGiantLeftLeg.setRotationPoint(-4.0F, 18.0F + par2, 0.0F);
+ this.iceGiantLeftLeg.setTextureOffset(37, 0).addBox(-3.5F, -3.0F, -3.0F, 6, 16, 5, par1);
+
+ this.iceGiantRightLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(short1, short2);
+ this.iceGiantRightLeg.mirror = true;
+ this.iceGiantRightLeg.setTextureOffset(60, 0).setRotationPoint(5.0F, 18.0F + par2, 0.0F);
+ this.iceGiantRightLeg.addBox(-3.5F, -3.0F, -3.0F, 6, 16, 5, par1);
+
+ headSpike1 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ headSpike1.addBox(-4F, -4F, 0F, 4, 4, 4);
+ headSpike1.setRotationPoint(-4F, -10F, -5F);
+ headSpike1.mirror = true;
+ setRotationWithEulerYzx(headSpike1, -0.1047198F, -0.5235988F, 0.9599311F);
+
+ headSpike2 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ headSpike2.addBox(0F, -4F, 0F, 4, 4, 4);
+ headSpike2.setRotationPoint(4F, -16F, 0F);
+ headSpike2.mirror = true;
+ setRotationWithEulerYzx(headSpike2, 0.5585054F, 0.9250245F, -0.5235988F);
+
+ headSpike3 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ headSpike3.addBox(-2F, -2F, -2F, 4, 4, 4);
+ headSpike3.setRotationPoint(4F, -13F, 4F);
+ headSpike3.mirror = true;
+ setRotationWithEulerYzx(headSpike3, 0.7853982F, -1.396263F, 0.7853982F);
+
+ headSpike4 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ headSpike4.addBox(-4F, -4F, 0F, 4, 4, 4);
+ headSpike4.setRotationPoint(-4F, -16F, 0F);
+ headSpike4.mirror = true;
+ setRotationWithEulerYzx(headSpike4, 0.5585054F, -0.9250245F, 0.5235988F);
+
+ headSpike5 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ headSpike5.addBox(0F, -4F, 0F, 4, 4, 4);
+ headSpike5.setRotationPoint(4F, -10F, -5F);
+ headSpike5.mirror = true;
+ setRotationWithEulerYzx(headSpike5, 0.5235988F, -0.9599311F, 0.1047198F);
+
+ rightArmSpike1 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ rightArmSpike1.addBox(-2F, -2F, -2F, 4, 4, 4);
+ rightArmSpike1.setRotationPoint(-11F, -8F, 0F);
+ rightArmSpike1.mirror = true;
+ setRotationWithEulerYzx(rightArmSpike1, 0.7853982F, 1.134464F, 0.9599311F);
+
+ headSpike6 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ headSpike6.addBox(-2F, -2F, -2F, 4, 4, 4);
+ headSpike6.setRotationPoint(-4F, -13F, 4F);
+ headSpike6.mirror = true;
+ setRotationWithEulerYzx(headSpike6, 0.7853982F, -1.745329F, 0.7853982F);
+
+ leftArmSpike1 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ leftArmSpike1.addBox(-2F, -2F, -2F, 4, 4, 4);
+ leftArmSpike1.setRotationPoint(11F, -8F, 0F);
+ leftArmSpike1.mirror = true;
+ setRotationWithEulerYzx(leftArmSpike1, 0.7853982F, -1.134464F, -0.9599311F);
+
+ leftArmSpike2 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ leftArmSpike2.addBox(-2F, -2F, -2F, 4, 4, 4);
+ leftArmSpike2.setRotationPoint(12F, -4F, 0F);
+ leftArmSpike2.mirror = true;
+ setRotationWithEulerYzx(leftArmSpike2, 0.7853982F, 0F, -0.9599311F);
+
+ bodySpike1 = new ModelRenderer(this, 32, 69).setTextureSize(short1, short2);
+ bodySpike1.addBox(-3F, -3F, -3F, 6, 6, 6);
+ bodySpike1.setRotationPoint(-4F, -4F, 3F);
+ bodySpike1.mirror = true;
+ setRotationWithEulerYzx(bodySpike1, 0.2808018F, 0.8096675F, 0.8339369F);
+
+ rightArmSpike2 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ rightArmSpike2.addBox(-2F, -2F, -2F, 4, 4, 4);
+ rightArmSpike2.setRotationPoint(-12F, -4F, 0F);
+ rightArmSpike2.mirror = true;
+ setRotationWithEulerYzx(rightArmSpike2, 0.7853982F, 0F, 0.9599311F);
+
+ bodySpike2 = new ModelRenderer(this, 32, 69).setTextureSize(short1, short2);
+ bodySpike2.addBox(-3F, -3F, -3F, 6, 6, 6);
+ bodySpike2.setRotationPoint(4F, -4F, 3F);
+ bodySpike2.mirror = true;
+ setRotationWithEulerYzx(bodySpike2, 0.2808018F, -0.8096757F, -0.8339358F);
+
+ bodySpike3 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ bodySpike3.addBox(-2F, -2F, -2F, 4, 4, 4);
+ bodySpike3.setRotationPoint(6F, -2F, -5F);
+ bodySpike3.mirror = true;
+ setRotationWithEulerYzx(bodySpike3, 1.120006F, -1.347726F, -0.8969422F);
+
+ bodySpike4 = new ModelRenderer(this, 32, 69).setTextureSize(short1, short2);
+ bodySpike4.addBox(-3F, -3F, -3F, 6, 6, 6);
+ bodySpike4.setRotationPoint(0F, -4F, -4F);
+ bodySpike4.mirror = true;
+ setRotationWithEulerYzx(bodySpike4, 0.7853982F, -1.570796F, 0.9599311F);
+
+ headSpike7 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ headSpike7.addBox(-2F, -2F, -2F, 4, 4, 4);
+ headSpike7.setRotationPoint(0F, -20F, 4F);
+ headSpike7.mirror = true;
+ setRotationWithEulerYzx(headSpike7, 0.7853982F, 1.570796F, 0.7853982F);
+
+ bodySpike5 = new ModelRenderer(this, 0, 0).setTextureSize(short1, short2);
+ bodySpike5.addBox(-2F, -2F, -2F, 4, 4, 4);
+ bodySpike5.setRotationPoint(-6F, -2F, -5F);
+ bodySpike5.mirror = true;
+ setRotationWithEulerYzx(bodySpike5, 1.120006F, 1.347725F, 0.896934F);
+
+ this.convertToChild(this.iceGiantHead, headSpike1);
+ this.convertToChild(this.iceGiantHead, headSpike2);
+ this.convertToChild(this.iceGiantHead, headSpike3);
+ this.convertToChild(this.iceGiantHead, headSpike4);
+ this.convertToChild(this.iceGiantHead, headSpike5);
+ this.convertToChild(this.iceGiantHead, headSpike6);
+ this.convertToChild(this.iceGiantHead, headSpike7);
+ this.convertToChild(this.iceGiantRightArm, rightArmSpike1);
+ this.convertToChild(this.iceGiantRightArm, rightArmSpike2);
+ this.convertToChild(this.iceGiantLeftArm, leftArmSpike1);
+ this.convertToChild(this.iceGiantLeftArm, leftArmSpike2);
+ this.convertToChild(this.iceGiantBody, bodySpike1);
+ this.convertToChild(this.iceGiantBody, bodySpike2);
+ this.convertToChild(this.iceGiantBody, bodySpike3);
+ this.convertToChild(this.iceGiantBody, bodySpike4);
+ this.convertToChild(this.iceGiantBody, bodySpike5);
+
+ }
+
+ /**
+ * Sets the models various rotation angles then renders the model.
+ */
+ public void render(Entity par1Entity, float par2, float par3, float par4, float par5, float par6, float par7){
+ this.setRotationAngles(par2, par3, par4, par5, par6, par7, par1Entity);
+ this.iceGiantHead.render(par7);
+ this.iceGiantBody.render(par7);
+ this.iceGiantLeftLeg.render(par7);
+ this.iceGiantRightLeg.render(par7);
+ this.iceGiantRightArm.render(par7);
+ this.iceGiantLeftArm.render(par7);
+ }
+
+ /**
+ * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms
+ * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how
+ * "far" arms and legs can swing at most.
+ */
+ public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6,
+ Entity par7Entity){
+ this.iceGiantHead.rotateAngleY = par4 / (180F / (float)Math.PI);
+ this.iceGiantHead.rotateAngleX = par5 / (180F / (float)Math.PI);
+ this.iceGiantLeftLeg.rotateAngleX = -1.5F * this.func_78172_a(par1, 13.0F) * par2;
+ this.iceGiantRightLeg.rotateAngleX = 1.5F * this.func_78172_a(par1, 13.0F) * par2;
+ this.iceGiantLeftLeg.rotateAngleY = 0.0F;
+ this.iceGiantRightLeg.rotateAngleY = 0.0F;
+ }
+
+ /**
+ * Used for easily adding entity-dependent animations. The second and third float params here are the same second
+ * and third as in the setRotationAngles method.
+ */
+ public void setLivingAnimations(EntityLivingBase par1EntityLivingBase, float par2, float par3, float par4){
+ EntityIceGiant entityicegiant = (EntityIceGiant)par1EntityLivingBase;
+ int i = entityicegiant.getAttackTimer();
+
+ if(i > 0){
+ this.iceGiantRightArm.rotateAngleX = -2.0F + 1.5F * this.func_78172_a((float)i - par4, 10.0F);
+ this.iceGiantLeftArm.rotateAngleX = -2.0F + 1.5F * this.func_78172_a((float)i - par4, 10.0F);
+ }else{
+ this.iceGiantRightArm.rotateAngleX = (-0.2F + 1.5F * this.func_78172_a(par2, 13.0F)) * par3;
+ this.iceGiantLeftArm.rotateAngleX = (-0.2F - 1.5F * this.func_78172_a(par2, 13.0F)) * par3;
+ }
+ }
+
+ private float func_78172_a(float par1, float par2){
+ return (Math.abs(par1 % par2 - par2 * 0.5F) - par2 * 0.25F) / (par2 * 0.25F);
+ }
+
+ /**
+ * This is really useful for converting the source from a Techne model export which will have absolute rotation
+ * points that need to be converted before creating the addChild() relationship. [Courtesy of jabelar]
+ */
+ protected void convertToChild(ModelRenderer parent, ModelRenderer child){
+ // move child rotation point to be relative to parent
+ child.rotationPointX -= parent.rotationPointX;
+ child.rotationPointY -= parent.rotationPointY;
+ child.rotationPointZ -= parent.rotationPointZ;
+ // make rotations relative to parent
+ child.rotateAngleX -= parent.rotateAngleX;
+ child.rotateAngleY -= parent.rotateAngleY;
+ child.rotateAngleZ -= parent.rotateAngleZ;
+ // create relationship
+ parent.addChild(child);
+ }
+
+ /** Fixes the Techne rotation order bug. [Courtesy of tprk77] */
+ private Vector3f ConvertEulerYzxToZyx(Vector3f eulerYzx){
+ // Create a matrix from YZX ordered Euler angles
+ float a = MathHelper.cos(eulerYzx.x);
+ float b = MathHelper.sin(eulerYzx.x);
+ float c = MathHelper.cos(eulerYzx.y);
+ float d = MathHelper.sin(eulerYzx.y);
+ float e = MathHelper.cos(eulerYzx.z);
+ float f = MathHelper.sin(eulerYzx.z);
+ Matrix4f matrix = new Matrix4f();
+ matrix.m00 = c * e;
+ matrix.m01 = b * d - a * c * f;
+ matrix.m02 = b * c * f + a * d;
+ matrix.m10 = f;
+ matrix.m11 = a * e;
+ matrix.m12 = -b * e;
+ matrix.m20 = -d * e;
+ matrix.m21 = a * d * f + b * c;
+ matrix.m22 = a * c - b * d * f;
+ matrix.m33 = 1.0F;
+ // Create ZYX ordered Euler angles from the matrix
+ Vector3f eulerZyx = new Vector3f();
+ eulerZyx.y = (float)Math.asin(MathHelper.clamp(-matrix.m20, -1, 1));
+ if(MathHelper.abs(matrix.m20) < 0.99999){
+ eulerZyx.x = (float)Math.atan2(matrix.m21, matrix.m22);
+ eulerZyx.z = (float)Math.atan2(matrix.m10, matrix.m00);
+ }else{
+ eulerZyx.x = 0.0F;
+ eulerZyx.z = (float)Math.atan2(-matrix.m01, matrix.m11);
+ }
+ return eulerZyx;
+ }
+
+ private void setRotationWithEulerYzx(ModelRenderer model, float x, float y, float z){
+ Vector3f eulerYzx = new Vector3f(x, y, z);
+ Vector3f eulerZyx = ConvertEulerYzxToZyx(eulerYzx);
+ model.rotateAngleX = eulerZyx.x;
+ model.rotateAngleY = eulerZyx.y;
+ model.rotateAngleZ = eulerZyx.z;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/model/ModelPhoenix.java b/src/main/java/electroblob/wizardry/client/model/ModelPhoenix.java
index 568b580c..e664bcd2 100644
--- a/src/main/java/electroblob/wizardry/client/model/ModelPhoenix.java
+++ b/src/main/java/electroblob/wizardry/client/model/ModelPhoenix.java
@@ -6,134 +6,126 @@ import net.minecraft.entity.Entity;
import net.minecraft.util.math.MathHelper;
public class ModelPhoenix extends ModelBase {
-
- ModelRenderer body;
- ModelRenderer rightWing;
- ModelRenderer leftWing;
- ModelRenderer tailFeathers;
- ModelRenderer tail;
- ModelRenderer head;
- ModelRenderer neck;
- ModelRenderer beak;
- ModelRenderer plume;
-
- public ModelPhoenix()
- {
- textureWidth = 64;
- textureHeight = 64;
-
- /* For future reference:
- * - setRotationPoint sets the origin of a part relative to that of its parent.
- * - The first 3 arguments of addBox set the position of a part relative to its rotation point, and the last
- * 3 arguments are the size of the part.
- * (This means that rotation point and position seem to be the wrong way round, since changing the rotation point
- * will move the component without changing which point on the component it rotates about.)
- * - The two integer arguments in the ModelRenderer constructor are the texture offset.
- * - Mirror does nothing unless you set it before addBox.
- * - Rotation is the usual pitch, yaw, roll.
- */
-
- body = new ModelRenderer(this, 0, 34);
- body.addBox(0F, 0F, -3F, 6, 15, 6);
- body.setRotationPoint(-3F, 0F, -5F);
- body.setTextureSize(64, 64);
- body.mirror = true;
- setRotation(body, 0.296706F, 0F, 0F);
-
- rightWing = new ModelRenderer(this, 0, 0);
- rightWing.mirror = true;
- rightWing.addBox(-27F, -27F, 0F, 27, 34, 0);
- rightWing.setRotationPoint(0F, 5F, 0F);
- rightWing.setTextureSize(64, 64);
- setRotation(rightWing, 0.1745329F, 0F, 0F);
-
- leftWing = new ModelRenderer(this, 0, 0);
- leftWing.addBox(0F, -27F, 0F, 27, 34, 0);
- leftWing.setRotationPoint(6F, 5F, 0F);
- leftWing.setTextureSize(64, 64);
- setRotation(leftWing, 0.1745329F, 0F, 0F);
-
- tailFeathers = new ModelRenderer(this, 0, 57);
- tailFeathers.addBox(-5F, 0F, 0F, 10, 7, 0);
- tailFeathers.setRotationPoint(0F, 7F, 1F);
- tailFeathers.setTextureSize(64, 64);
- tailFeathers.mirror = true;
- setRotation(tailFeathers, 0.5235988F, 0F, 0F);
-
- tail = new ModelRenderer(this, 20, 55);
- tail.addBox(-1F, 0F, -1F, 2, 7, 2);
- tail.setRotationPoint(3F, 15F, 2F);
- tail.setTextureSize(64, 64);
- tail.mirror = true;
- setRotation(tail, 0.4014257F, 0F, 0F);
-
- head = new ModelRenderer(this, 24, 34);
- head.addBox(-2F, -4F, -5F, 4, 4, 6);
- head.setRotationPoint(0F, -4F, 0F);
- head.setTextureSize(64, 64);
- head.mirror = true;
- setRotation(head, 0F, 0F, 0F);
-
- neck = new ModelRenderer(this, 24, 44);
- neck.addBox(-1F, -4F, -1F, 2, 4, 2);
- neck.setRotationPoint(0F, 0F, -4F);
- neck.setTextureSize(64, 64);
- neck.mirror = true;
- setRotation(neck, 0.2443461F, 0F, 0F);
-
- beak = new ModelRenderer(this, 32, 44);
- beak.addBox(-0.5F, 4F, -1F, 1, 2, 3);
- beak.setRotationPoint(0F, -5F, -8F);
- beak.setTextureSize(64, 64);
- beak.mirror = true;
- setRotation(beak, 0.2792527F, 0F, 0F);
-
- plume = new ModelRenderer(this, 28, 50);
- plume.addBox(-0.03333334F, 1F, 0F, 0, 5, 5);
- plume.setRotationPoint(0F, -7F, 0F);
- plume.setTextureSize(64, 64);
- plume.mirror = true;
- setRotation(plume, 0F, 0F, 0F);
-
- neck.addChild(head);
- head.addChild(plume);
- head.addChild(beak);
- tail.addChild(tailFeathers);
- body.addChild(tail);
- body.addChild(rightWing);
- body.addChild(leftWing);
- }
-
- public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
- {
- super.render(entity, f, f1, f2, f3, f4, f5);
- setRotationAngles(f, f1, f2, f3, f4, f5, entity);
-
- //float f6 = (180F / (float)Math.PI);
- this.neck.rotateAngleX = f4 / (180F / (float)Math.PI);
- this.neck.rotateAngleY = f3 / (180F / (float)Math.PI);
- this.neck.rotateAngleZ = 0.0F;
- this.body.rotateAngleX = 0.3f + MathHelper.cos(f2 * 0.1F) * 0.15F;
- this.body.rotateAngleY = 0.0F;
- this.tail.rotateAngleX = this.body.rotateAngleX * 1.1f;
- this.tailFeathers.rotateAngleX = this.body.rotateAngleX * 1.2f;
- this.rightWing.rotateAngleY = MathHelper.cos(f2 * 0.3F) * (float)Math.PI * 0.15F;
- this.leftWing.rotateAngleY = -this.rightWing.rotateAngleY;
-
- body.render(f5);
- neck.render(f5);
- }
-
- private void setRotation(ModelRenderer model, float x, float y, float z)
- {
- model.rotateAngleX = x;
- model.rotateAngleY = y;
- model.rotateAngleZ = z;
- }
-
- public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
- {
- super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
- }
+
+ ModelRenderer body;
+ ModelRenderer rightWing;
+ ModelRenderer leftWing;
+ ModelRenderer tailFeathers;
+ ModelRenderer tail;
+ ModelRenderer head;
+ ModelRenderer neck;
+ ModelRenderer beak;
+ ModelRenderer plume;
+
+ public ModelPhoenix(){
+ textureWidth = 64;
+ textureHeight = 64;
+
+ /* For future reference: - setRotationPoint sets the origin of a part relative to that of its parent. - The
+ * first 3 arguments of addBox set the position of a part relative to its rotation point, and the last 3
+ * arguments are the size of the part. (This means that rotation point and position seem to be the wrong way
+ * round, since changing the rotation point will move the component without changing which point on the
+ * component it rotates about.) - The two integer arguments in the ModelRenderer constructor are the texture
+ * offset. - Mirror does nothing unless you set it before addBox. - Rotation is the usual pitch, yaw, roll. */
+
+ body = new ModelRenderer(this, 0, 34);
+ body.addBox(0F, 0F, -3F, 6, 15, 6);
+ body.setRotationPoint(-3F, 0F, -5F);
+ body.setTextureSize(64, 64);
+ body.mirror = true;
+ setRotation(body, 0.296706F, 0F, 0F);
+
+ rightWing = new ModelRenderer(this, 0, 0);
+ rightWing.mirror = true;
+ rightWing.addBox(-27F, -27F, 0F, 27, 34, 0);
+ rightWing.setRotationPoint(0F, 5F, 0F);
+ rightWing.setTextureSize(64, 64);
+ setRotation(rightWing, 0.1745329F, 0F, 0F);
+
+ leftWing = new ModelRenderer(this, 0, 0);
+ leftWing.addBox(0F, -27F, 0F, 27, 34, 0);
+ leftWing.setRotationPoint(6F, 5F, 0F);
+ leftWing.setTextureSize(64, 64);
+ setRotation(leftWing, 0.1745329F, 0F, 0F);
+
+ tailFeathers = new ModelRenderer(this, 0, 57);
+ tailFeathers.addBox(-5F, 0F, 0F, 10, 7, 0);
+ tailFeathers.setRotationPoint(0F, 7F, 1F);
+ tailFeathers.setTextureSize(64, 64);
+ tailFeathers.mirror = true;
+ setRotation(tailFeathers, 0.5235988F, 0F, 0F);
+
+ tail = new ModelRenderer(this, 20, 55);
+ tail.addBox(-1F, 0F, -1F, 2, 7, 2);
+ tail.setRotationPoint(3F, 15F, 2F);
+ tail.setTextureSize(64, 64);
+ tail.mirror = true;
+ setRotation(tail, 0.4014257F, 0F, 0F);
+
+ head = new ModelRenderer(this, 24, 34);
+ head.addBox(-2F, -4F, -5F, 4, 4, 6);
+ head.setRotationPoint(0F, -4F, 0F);
+ head.setTextureSize(64, 64);
+ head.mirror = true;
+ setRotation(head, 0F, 0F, 0F);
+
+ neck = new ModelRenderer(this, 24, 44);
+ neck.addBox(-1F, -4F, -1F, 2, 4, 2);
+ neck.setRotationPoint(0F, 0F, -4F);
+ neck.setTextureSize(64, 64);
+ neck.mirror = true;
+ setRotation(neck, 0.2443461F, 0F, 0F);
+
+ beak = new ModelRenderer(this, 32, 44);
+ beak.addBox(-0.5F, 4F, -1F, 1, 2, 3);
+ beak.setRotationPoint(0F, -5F, -8F);
+ beak.setTextureSize(64, 64);
+ beak.mirror = true;
+ setRotation(beak, 0.2792527F, 0F, 0F);
+
+ plume = new ModelRenderer(this, 28, 50);
+ plume.addBox(-0.03333334F, 1F, 0F, 0, 5, 5);
+ plume.setRotationPoint(0F, -7F, 0F);
+ plume.setTextureSize(64, 64);
+ plume.mirror = true;
+ setRotation(plume, 0F, 0F, 0F);
+
+ neck.addChild(head);
+ head.addChild(plume);
+ head.addChild(beak);
+ tail.addChild(tailFeathers);
+ body.addChild(tail);
+ body.addChild(rightWing);
+ body.addChild(leftWing);
+ }
+
+ public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5){
+ super.render(entity, f, f1, f2, f3, f4, f5);
+ setRotationAngles(f, f1, f2, f3, f4, f5, entity);
+
+ // float f6 = (180F / (float)Math.PI);
+ this.neck.rotateAngleX = f4 / (180F / (float)Math.PI);
+ this.neck.rotateAngleY = f3 / (180F / (float)Math.PI);
+ this.neck.rotateAngleZ = 0.0F;
+ this.body.rotateAngleX = 0.3f + MathHelper.cos(f2 * 0.1F) * 0.15F;
+ this.body.rotateAngleY = 0.0F;
+ this.tail.rotateAngleX = this.body.rotateAngleX * 1.1f;
+ this.tailFeathers.rotateAngleX = this.body.rotateAngleX * 1.2f;
+ this.rightWing.rotateAngleY = MathHelper.cos(f2 * 0.3F) * (float)Math.PI * 0.15F;
+ this.leftWing.rotateAngleY = -this.rightWing.rotateAngleY;
+
+ body.render(f5);
+ neck.render(f5);
+ }
+
+ private void setRotation(ModelRenderer model, float x, float y, float z){
+ model.rotateAngleX = x;
+ model.rotateAngleY = y;
+ model.rotateAngleZ = z;
+ }
+
+ public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity){
+ super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/model/ModelWizard.java b/src/main/java/electroblob/wizardry/client/model/ModelWizard.java
index e10cf45e..0204c86a 100644
--- a/src/main/java/electroblob/wizardry/client/model/ModelWizard.java
+++ b/src/main/java/electroblob/wizardry/client/model/ModelWizard.java
@@ -3,172 +3,127 @@ package electroblob.wizardry.client.model;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.model.ModelRenderer;
-public class ModelWizard extends ModelBiped
-{
- //fields
- ModelRenderer Shape5;
- ModelRenderer Shape8;
- ModelRenderer Shape9;
- ModelRenderer Shape10;
- ModelRenderer Shape7;
- ModelRenderer Shape11;
- ModelRenderer Shape12;
- ModelRenderer beard;
- ModelRenderer Shape13;
-
- public ModelWizard()
- {
- //super(0, 0, 64, 32);
- /*
- bipedRightLeg = new ModelRenderer(this, 32, 0); // 32 and 0 are the x and y texture offsets respectively.
- bipedRightLeg.addBox(-2F, 0F, -2F, 4, 12, 4); // x, y, z, u, v, w.
- bipedRightLeg.setRotationPoint(-2F, 12F, 0F); // Rotation point xyz (absolute, not relative)
- bipedRightLeg.setTextureSize(64, 64);
- bipedRightLeg.mirror = true;
- setRotation(bipedRightLeg, 0F, 0F, 0F);
-
- bipedLeftLeg.mirror = true;
- bipedLeftLeg = new ModelRenderer(this, 32, 0);
- bipedLeftLeg.addBox(-2F, 0F, -2F, 4, 12, 4);
- bipedLeftLeg.setRotationPoint(2F, 12F, 0F);
- bipedLeftLeg.setTextureSize(64, 64);
- bipedLeftLeg.mirror = true;
- setRotation(bipedLeftLeg, 0F, 0F, 0F);
- bipedLeftLeg.mirror = false;
-
- bipedBody = new ModelRenderer(this, 0, 16);
- bipedBody.addBox(0F, 0F, 0F, 8, 12, 4);
- bipedBody.setRotationPoint(-4F, 0F, -2F);
- bipedBody.setTextureSize(64, 64);
- bipedBody.mirror = true;
- setRotation(bipedBody, 0F, 0F, 0F);
-
- bipedLeftArm.mirror = true;
- bipedLeftArm = new ModelRenderer(this, 48, 0);
- bipedLeftArm.addBox(-1F, 0F, -2F, 4, 12, 4);
- bipedLeftArm.setRotationPoint(4F, 0F, 0F);
- bipedLeftArm.setTextureSize(64, 64);
- bipedLeftArm.mirror = true;
- setRotation(bipedLeftArm, 0F, 0F, 0F);
- bipedLeftArm.mirror = false;
-
- bipedRightArm = new ModelRenderer(this, 48, 0);
- bipedRightArm.addBox(-3F, 0F, -2F, 4, 12, 4);
- bipedRightArm.setRotationPoint(-4F, 0F, 0F);
- bipedRightArm.setTextureSize(64, 64);
- bipedRightArm.mirror = true;
- setRotation(bipedRightArm, 0F, 0F, 0F);
-
- bipedHead = new ModelRenderer(this, 0, 0);
- bipedHead.addBox(-4F, -8F, -4F, 8, 8, 8);
- bipedHead.setRotationPoint(0F, 0F, 0F);
- bipedHead.setTextureSize(64, 64);
- bipedHead.mirror = true;
- setRotation(bipedHead, 0F, 0F, 0F);
- */
- Shape5 = new ModelRenderer(this, 0, 51);
- Shape5.addBox(0F, 0F, 0F, 12, 1, 12);
- Shape5.setRotationPoint(-6F, -7F, -6F);
- Shape5.setTextureSize(64, 64);
- Shape5.mirror = true;
- setRotation(Shape5, 0F, 0F, 0F);
- Shape8 = new ModelRenderer(this, 0, 32);
- Shape8.addBox(0F, 0F, 0F, 6, 1, 6);
- Shape8.setRotationPoint(-3F, -9F, -3F);
- Shape8.setTextureSize(64, 64);
- Shape8.mirror = true;
- setRotation(Shape8, -0.0349066F, 0F, 0F);
- Shape9 = new ModelRenderer(this, 24, 32);
- Shape9.addBox(0F, 0F, 0F, 3, 3, 3);
- Shape9.setRotationPoint(-1.5F, -13F, -0.5F);
- Shape9.setTextureSize(64, 64);
- Shape9.mirror = true;
- setRotation(Shape9, -0.2511622F, 0F, 0F);
- Shape10 = new ModelRenderer(this, 0, 39);
- Shape10.addBox(0F, 0F, 0F, 5, 1, 5);
- Shape10.setRotationPoint(-2.5F, -10F, -2.5F);
- Shape10.setTextureSize(64, 64);
- Shape10.mirror = true;
- setRotation(Shape10, -0.0698132F, 0F, 0F);
- Shape7 = new ModelRenderer(this, 0, 45);
- Shape7.addBox(0F, 0F, 0F, 4, 2, 4);
- Shape7.setRotationPoint(-2F, -11F, -1.5F);
- Shape7.setTextureSize(64, 64);
- Shape7.mirror = true;
- setRotation(Shape7, -0.1396263F, 0F, 0F);
- Shape11 = new ModelRenderer(this, 20, 39);
- Shape11.addBox(0F, 0F, 0F, 2, 3, 2);
- Shape11.setRotationPoint(-1F, -15F, 1F);
- Shape11.setTextureSize(64, 64);
- Shape11.mirror = true;
- setRotation(Shape11, -0.4363323F, 0F, 0F);
- Shape12 = new ModelRenderer(this, 28, 39);
- Shape12.addBox(0F, 0F, 0F, 1, 2, 1);
- Shape12.setRotationPoint(-0.5F, -16F, 2.5F);
- Shape12.setTextureSize(64, 64);
- Shape12.mirror = true;
- setRotation(Shape12, -0.715585F, 0F, 0F);
- beard = new ModelRenderer(this, 32, 0);
- beard.addBox(0F, 0F, 0F, 8, 5, 0);
- beard.setRotationPoint(-4F, 0F, -4F);
- beard.setTextureSize(64, 64);
- beard.mirror = true;
- setRotation(beard, 0F, 0F, 0F);
- Shape13 = new ModelRenderer(this, 36, 16);
- Shape13.addBox(4F, 0F, 2F, 8, 20, 6);
- Shape13.setRotationPoint(-4F, 0F, -3F);
- Shape13.setTextureSize(64, 64);
- Shape13.mirror = true;
- setRotation(Shape13, 0F, 0F, 0F);
-
- // Makes head bits move with head
- //bipedHead.addChild(Shape5);
- bipedHead.addChild(beard);
- //bipedHead.addChild(Shape7);
- //bipedHead.addChild(Shape8);
- //bipedHead.addChild(Shape9);
- //bipedHead.addChild(Shape10);
- //bipedHead.addChild(Shape11);
- //bipedHead.addChild(Shape12);
-
- // Makes cloak attached to body
- //bipedBody.addChild(Shape13);
-
- // No outer head layer
- this.bipedHeadwear.isHidden = true;
- }
- /*
- public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
- {
- super.render(entity, f, f1, f2, f3, f4, f5);
- setRotationAngles(f, f1, f2, f3, f4, f5, entity);
- bipedRightLeg.render(f5);
- bipedLeftLeg.render(f5);
- bipedBody.render(f5);
- bipedLeftArm.render(f5);
- bipedRightArm.render(f5);
- bipedHead.render(f5);
- Shape5.render(f5);
- Shape8.render(f5);
- Shape9.render(f5);
- Shape10.render(f5);
- Shape7.render(f5);
- Shape11.render(f5);
- Shape12.render(f5);
- Shape6.render(f5);
- Shape13.render(f5);
- }
- */
- private void setRotation(ModelRenderer model, float x, float y, float z)
- {
- model.rotateAngleX = x;
- model.rotateAngleY = y;
- model.rotateAngleZ = z;
- }
- /*
- public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
- {
- super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
- }
-*/
+public class ModelWizard extends ModelBiped {
+ // fields
+ ModelRenderer Shape5;
+ ModelRenderer Shape8;
+ ModelRenderer Shape9;
+ ModelRenderer Shape10;
+ ModelRenderer Shape7;
+ ModelRenderer Shape11;
+ ModelRenderer Shape12;
+ ModelRenderer beard;
+ ModelRenderer Shape13;
+
+ public ModelWizard(){
+ // super(0, 0, 64, 32);
+ /* bipedRightLeg = new ModelRenderer(this, 32, 0); // 32 and 0 are the x and y texture offsets respectively.
+ * bipedRightLeg.addBox(-2F, 0F, -2F, 4, 12, 4); // x, y, z, u, v, w. bipedRightLeg.setRotationPoint(-2F, 12F,
+ * 0F); // Rotation point xyz (absolute, not relative) bipedRightLeg.setTextureSize(64, 64);
+ * bipedRightLeg.mirror = true; setRotation(bipedRightLeg, 0F, 0F, 0F);
+ *
+ * bipedLeftLeg.mirror = true; bipedLeftLeg = new ModelRenderer(this, 32, 0); bipedLeftLeg.addBox(-2F, 0F, -2F,
+ * 4, 12, 4); bipedLeftLeg.setRotationPoint(2F, 12F, 0F); bipedLeftLeg.setTextureSize(64, 64);
+ * bipedLeftLeg.mirror = true; setRotation(bipedLeftLeg, 0F, 0F, 0F); bipedLeftLeg.mirror = false;
+ *
+ * bipedBody = new ModelRenderer(this, 0, 16); bipedBody.addBox(0F, 0F, 0F, 8, 12, 4);
+ * bipedBody.setRotationPoint(-4F, 0F, -2F); bipedBody.setTextureSize(64, 64); bipedBody.mirror = true;
+ * setRotation(bipedBody, 0F, 0F, 0F);
+ *
+ * bipedLeftArm.mirror = true; bipedLeftArm = new ModelRenderer(this, 48, 0); bipedLeftArm.addBox(-1F, 0F, -2F,
+ * 4, 12, 4); bipedLeftArm.setRotationPoint(4F, 0F, 0F); bipedLeftArm.setTextureSize(64, 64);
+ * bipedLeftArm.mirror = true; setRotation(bipedLeftArm, 0F, 0F, 0F); bipedLeftArm.mirror = false;
+ *
+ * bipedRightArm = new ModelRenderer(this, 48, 0); bipedRightArm.addBox(-3F, 0F, -2F, 4, 12, 4);
+ * bipedRightArm.setRotationPoint(-4F, 0F, 0F); bipedRightArm.setTextureSize(64, 64); bipedRightArm.mirror =
+ * true; setRotation(bipedRightArm, 0F, 0F, 0F);
+ *
+ * bipedHead = new ModelRenderer(this, 0, 0); bipedHead.addBox(-4F, -8F, -4F, 8, 8, 8);
+ * bipedHead.setRotationPoint(0F, 0F, 0F); bipedHead.setTextureSize(64, 64); bipedHead.mirror = true;
+ * setRotation(bipedHead, 0F, 0F, 0F); */
+ Shape5 = new ModelRenderer(this, 0, 51);
+ Shape5.addBox(0F, 0F, 0F, 12, 1, 12);
+ Shape5.setRotationPoint(-6F, -7F, -6F);
+ Shape5.setTextureSize(64, 64);
+ Shape5.mirror = true;
+ setRotation(Shape5, 0F, 0F, 0F);
+ Shape8 = new ModelRenderer(this, 0, 32);
+ Shape8.addBox(0F, 0F, 0F, 6, 1, 6);
+ Shape8.setRotationPoint(-3F, -9F, -3F);
+ Shape8.setTextureSize(64, 64);
+ Shape8.mirror = true;
+ setRotation(Shape8, -0.0349066F, 0F, 0F);
+ Shape9 = new ModelRenderer(this, 24, 32);
+ Shape9.addBox(0F, 0F, 0F, 3, 3, 3);
+ Shape9.setRotationPoint(-1.5F, -13F, -0.5F);
+ Shape9.setTextureSize(64, 64);
+ Shape9.mirror = true;
+ setRotation(Shape9, -0.2511622F, 0F, 0F);
+ Shape10 = new ModelRenderer(this, 0, 39);
+ Shape10.addBox(0F, 0F, 0F, 5, 1, 5);
+ Shape10.setRotationPoint(-2.5F, -10F, -2.5F);
+ Shape10.setTextureSize(64, 64);
+ Shape10.mirror = true;
+ setRotation(Shape10, -0.0698132F, 0F, 0F);
+ Shape7 = new ModelRenderer(this, 0, 45);
+ Shape7.addBox(0F, 0F, 0F, 4, 2, 4);
+ Shape7.setRotationPoint(-2F, -11F, -1.5F);
+ Shape7.setTextureSize(64, 64);
+ Shape7.mirror = true;
+ setRotation(Shape7, -0.1396263F, 0F, 0F);
+ Shape11 = new ModelRenderer(this, 20, 39);
+ Shape11.addBox(0F, 0F, 0F, 2, 3, 2);
+ Shape11.setRotationPoint(-1F, -15F, 1F);
+ Shape11.setTextureSize(64, 64);
+ Shape11.mirror = true;
+ setRotation(Shape11, -0.4363323F, 0F, 0F);
+ Shape12 = new ModelRenderer(this, 28, 39);
+ Shape12.addBox(0F, 0F, 0F, 1, 2, 1);
+ Shape12.setRotationPoint(-0.5F, -16F, 2.5F);
+ Shape12.setTextureSize(64, 64);
+ Shape12.mirror = true;
+ setRotation(Shape12, -0.715585F, 0F, 0F);
+ beard = new ModelRenderer(this, 32, 0);
+ beard.addBox(0F, 0F, 0F, 8, 5, 0);
+ beard.setRotationPoint(-4F, 0F, -4F);
+ beard.setTextureSize(64, 64);
+ beard.mirror = true;
+ setRotation(beard, 0F, 0F, 0F);
+ Shape13 = new ModelRenderer(this, 36, 16);
+ Shape13.addBox(4F, 0F, 2F, 8, 20, 6);
+ Shape13.setRotationPoint(-4F, 0F, -3F);
+ Shape13.setTextureSize(64, 64);
+ Shape13.mirror = true;
+ setRotation(Shape13, 0F, 0F, 0F);
+
+ // Makes head bits move with head
+ // bipedHead.addChild(Shape5);
+ bipedHead.addChild(beard);
+ // bipedHead.addChild(Shape7);
+ // bipedHead.addChild(Shape8);
+ // bipedHead.addChild(Shape9);
+ // bipedHead.addChild(Shape10);
+ // bipedHead.addChild(Shape11);
+ // bipedHead.addChild(Shape12);
+
+ // Makes cloak attached to body
+ // bipedBody.addChild(Shape13);
+
+ // No outer head layer
+ this.bipedHeadwear.isHidden = true;
+ }
+
+ /* public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {
+ * super.render(entity, f, f1, f2, f3, f4, f5); setRotationAngles(f, f1, f2, f3, f4, f5, entity);
+ * bipedRightLeg.render(f5); bipedLeftLeg.render(f5); bipedBody.render(f5); bipedLeftArm.render(f5);
+ * bipedRightArm.render(f5); bipedHead.render(f5); Shape5.render(f5); Shape8.render(f5); Shape9.render(f5);
+ * Shape10.render(f5); Shape7.render(f5); Shape11.render(f5); Shape12.render(f5); Shape6.render(f5);
+ * Shape13.render(f5); } */
+ private void setRotation(ModelRenderer model, float x, float y, float z){
+ model.rotateAngleX = x;
+ model.rotateAngleY = y;
+ model.rotateAngleZ = z;
+ }
+ /* public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) {
+ * super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); } */
}
diff --git a/src/main/java/electroblob/wizardry/client/model/ModelWizardArmour.java b/src/main/java/electroblob/wizardry/client/model/ModelWizardArmour.java
index 3829f103..650f5d2c 100644
--- a/src/main/java/electroblob/wizardry/client/model/ModelWizardArmour.java
+++ b/src/main/java/electroblob/wizardry/client/model/ModelWizardArmour.java
@@ -4,8 +4,7 @@ import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
-public class ModelWizardArmour extends ModelBiped
-{
+public class ModelWizardArmour extends ModelBiped {
ModelRenderer Shape1;
ModelRenderer Shape2;
ModelRenderer Shape3;
@@ -90,7 +89,7 @@ public class ModelWizardArmour extends ModelBiped
bipedHead.addChild(Shape6);
bipedHead.addChild(Shape7);
// Makes the robe move with the body
- //bipedBody.addChild(robe);
+ // bipedBody.addChild(robe);
}
public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5){
diff --git a/src/main/java/electroblob/wizardry/client/model/WizardryItemModels.java b/src/main/java/electroblob/wizardry/client/model/WizardryItemModels.java
index a1d678ab..ecfac381 100644
--- a/src/main/java/electroblob/wizardry/client/model/WizardryItemModels.java
+++ b/src/main/java/electroblob/wizardry/client/model/WizardryItemModels.java
@@ -1,13 +1,11 @@
package electroblob.wizardry.client.model;
-import java.util.ArrayList;
-import java.util.List;
-
import electroblob.wizardry.registry.WizardryBlocks;
import electroblob.wizardry.registry.WizardryItems;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
+import net.minecraft.util.NonNullList;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.Mod;
@@ -18,6 +16,7 @@ import net.minecraftforge.oredict.OreDictionary;
/**
* Class responsible for registering all of wizardry's item (and itemblock) models.
+ *
* @author Electroblob
* @since Wizardry 2.1
*/
@@ -27,166 +26,173 @@ public final class WizardryItemModels {
@SubscribeEvent
public static void register(ModelRegistryEvent event){
-
+
// ItemBlocks
-
+
registerItemModel(Item.getItemFromBlock(WizardryBlocks.arcane_workbench));
registerItemModel(Item.getItemFromBlock(WizardryBlocks.crystal_ore));
registerItemModel(Item.getItemFromBlock(WizardryBlocks.crystal_flower));
registerItemModel(Item.getItemFromBlock(WizardryBlocks.transportation_stone));
registerItemModel(Item.getItemFromBlock(WizardryBlocks.crystal_block));
-
+
// Items
-
+
registerItemModel(WizardryItems.magic_crystal);
- registerItemModel(WizardryItems.magic_wand);
- registerItemModel(WizardryItems.apprentice_wand);
- registerItemModel(WizardryItems.advanced_wand);
- registerItemModel(WizardryItems.master_wand);
+ registerItemModel(WizardryItems.magic_wand);
+ registerItemModel(WizardryItems.apprentice_wand);
+ registerItemModel(WizardryItems.advanced_wand);
+ registerItemModel(WizardryItems.master_wand);
- registerItemModel(WizardryItems.spell_book);
- // Wildcard registered for wizard trades.
- registerItemModel(WizardryItems.spell_book, OreDictionary.WILDCARD_VALUE, "normal");
- registerItemModel(WizardryItems.arcane_tome);
- registerItemModel(WizardryItems.wizard_handbook);
-
- registerItemModel(WizardryItems.basic_fire_wand);
- registerItemModel(WizardryItems.basic_ice_wand);
- registerItemModel(WizardryItems.basic_lightning_wand);
- registerItemModel(WizardryItems.basic_necromancy_wand);
- registerItemModel(WizardryItems.basic_earth_wand);
- registerItemModel(WizardryItems.basic_sorcery_wand);
- registerItemModel(WizardryItems.basic_healing_wand);
+ registerItemModel(WizardryItems.spell_book);
+ // Wildcard registered for wizard trades.
+ registerItemModel(WizardryItems.spell_book, OreDictionary.WILDCARD_VALUE, "normal");
+ registerItemModel(WizardryItems.arcane_tome);
+ registerItemModel(WizardryItems.wizard_handbook);
- 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);
+ registerItemModel(WizardryItems.basic_fire_wand);
+ registerItemModel(WizardryItems.basic_ice_wand);
+ registerItemModel(WizardryItems.basic_lightning_wand);
+ registerItemModel(WizardryItems.basic_necromancy_wand);
+ registerItemModel(WizardryItems.basic_earth_wand);
+ registerItemModel(WizardryItems.basic_sorcery_wand);
+ registerItemModel(WizardryItems.basic_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);
+ 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);
- 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);
+ 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);
- registerItemModel(WizardryItems.spectral_sword);
- registerItemModel(WizardryItems.spectral_pickaxe);
- registerItemModel(WizardryItems.spectral_bow);
+ 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);
- registerItemModel(WizardryItems.mana_flask);
+ registerItemModel(WizardryItems.spectral_sword);
+ registerItemModel(WizardryItems.spectral_pickaxe);
+ registerItemModel(WizardryItems.spectral_bow);
- registerItemModel(WizardryItems.storage_upgrade);
- registerItemModel(WizardryItems.siphon_upgrade);
- registerItemModel(WizardryItems.condenser_upgrade);
- registerItemModel(WizardryItems.range_upgrade);
- registerItemModel(WizardryItems.duration_upgrade);
- registerItemModel(WizardryItems.cooldown_upgrade);
- registerItemModel(WizardryItems.blast_upgrade);
- registerItemModel(WizardryItems.attunement_upgrade);
+ registerItemModel(WizardryItems.mana_flask);
- registerItemModel(WizardryItems.flaming_axe);
- registerItemModel(WizardryItems.frost_axe);
+ registerItemModel(WizardryItems.storage_upgrade);
+ registerItemModel(WizardryItems.siphon_upgrade);
+ registerItemModel(WizardryItems.condenser_upgrade);
+ registerItemModel(WizardryItems.range_upgrade);
+ registerItemModel(WizardryItems.duration_upgrade);
+ registerItemModel(WizardryItems.cooldown_upgrade);
+ registerItemModel(WizardryItems.blast_upgrade);
+ registerItemModel(WizardryItems.attunement_upgrade);
- registerItemModel(WizardryItems.firebomb);
- registerItemModel(WizardryItems.poison_bomb);
-
- registerItemModel(WizardryItems.blank_scroll);
- registerItemModel(WizardryItems.scroll);
+ registerItemModel(WizardryItems.flaming_axe);
+ registerItemModel(WizardryItems.frost_axe);
- registerItemModel(WizardryItems.armour_upgrade);
-
- registerItemModel(WizardryItems.magic_silk);
-
- registerItemModel(WizardryItems.wizard_hat);
- registerItemModel(WizardryItems.wizard_robe);
- registerItemModel(WizardryItems.wizard_leggings);
- registerItemModel(WizardryItems.wizard_boots);
+ registerItemModel(WizardryItems.firebomb);
+ registerItemModel(WizardryItems.poison_bomb);
- registerItemModel(WizardryItems.wizard_hat_fire);
- registerItemModel(WizardryItems.wizard_robe_fire);
- registerItemModel(WizardryItems.wizard_leggings_fire);
- registerItemModel(WizardryItems.wizard_boots_fire);
+ registerItemModel(WizardryItems.blank_scroll);
+ registerItemModel(WizardryItems.scroll);
- registerItemModel(WizardryItems.wizard_hat_ice);
- registerItemModel(WizardryItems.wizard_robe_ice);
- registerItemModel(WizardryItems.wizard_leggings_ice);
- registerItemModel(WizardryItems.wizard_boots_ice);
+ registerItemModel(WizardryItems.armour_upgrade);
- registerItemModel(WizardryItems.wizard_hat_lightning);
- registerItemModel(WizardryItems.wizard_robe_lightning);
- registerItemModel(WizardryItems.wizard_leggings_lightning);
- registerItemModel(WizardryItems.wizard_boots_lightning);
+ registerItemModel(WizardryItems.magic_silk);
- registerItemModel(WizardryItems.wizard_hat_necromancy);
- registerItemModel(WizardryItems.wizard_robe_necromancy);
- registerItemModel(WizardryItems.wizard_leggings_necromancy);
- registerItemModel(WizardryItems.wizard_boots_necromancy);
+ registerItemModel(WizardryItems.wizard_hat);
+ registerItemModel(WizardryItems.wizard_robe);
+ registerItemModel(WizardryItems.wizard_leggings);
+ registerItemModel(WizardryItems.wizard_boots);
- registerItemModel(WizardryItems.wizard_hat_earth);
- registerItemModel(WizardryItems.wizard_robe_earth);
- registerItemModel(WizardryItems.wizard_leggings_earth);
- registerItemModel(WizardryItems.wizard_boots_earth);
-
- registerItemModel(WizardryItems.wizard_hat_sorcery);
- registerItemModel(WizardryItems.wizard_robe_sorcery);
- registerItemModel(WizardryItems.wizard_leggings_sorcery);
- registerItemModel(WizardryItems.wizard_boots_sorcery);
+ registerItemModel(WizardryItems.wizard_hat_fire);
+ registerItemModel(WizardryItems.wizard_robe_fire);
+ registerItemModel(WizardryItems.wizard_leggings_fire);
+ registerItemModel(WizardryItems.wizard_boots_fire);
- registerItemModel(WizardryItems.wizard_hat_healing);
- registerItemModel(WizardryItems.wizard_robe_healing);
- registerItemModel(WizardryItems.wizard_leggings_healing);
- registerItemModel(WizardryItems.wizard_boots_healing);
+ registerItemModel(WizardryItems.wizard_hat_ice);
+ registerItemModel(WizardryItems.wizard_robe_ice);
+ registerItemModel(WizardryItems.wizard_leggings_ice);
+ registerItemModel(WizardryItems.wizard_boots_ice);
- registerItemModel(WizardryItems.spectral_helmet);
- registerItemModel(WizardryItems.spectral_chestplate);
- registerItemModel(WizardryItems.spectral_leggings);
- registerItemModel(WizardryItems.spectral_boots);
-
- registerItemModel(WizardryItems.smoke_bomb);
-
- registerItemModel(WizardryItems.identification_scroll);
+ registerItemModel(WizardryItems.wizard_hat_lightning);
+ registerItemModel(WizardryItems.wizard_robe_lightning);
+ registerItemModel(WizardryItems.wizard_leggings_lightning);
+ registerItemModel(WizardryItems.wizard_boots_lightning);
+
+ registerItemModel(WizardryItems.wizard_hat_necromancy);
+ registerItemModel(WizardryItems.wizard_robe_necromancy);
+ registerItemModel(WizardryItems.wizard_leggings_necromancy);
+ registerItemModel(WizardryItems.wizard_boots_necromancy);
+
+ registerItemModel(WizardryItems.wizard_hat_earth);
+ registerItemModel(WizardryItems.wizard_robe_earth);
+ registerItemModel(WizardryItems.wizard_leggings_earth);
+ registerItemModel(WizardryItems.wizard_boots_earth);
+
+ registerItemModel(WizardryItems.wizard_hat_sorcery);
+ registerItemModel(WizardryItems.wizard_robe_sorcery);
+ registerItemModel(WizardryItems.wizard_leggings_sorcery);
+ registerItemModel(WizardryItems.wizard_boots_sorcery);
+
+ registerItemModel(WizardryItems.wizard_hat_healing);
+ registerItemModel(WizardryItems.wizard_robe_healing);
+ registerItemModel(WizardryItems.wizard_leggings_healing);
+ registerItemModel(WizardryItems.wizard_boots_healing);
+
+ registerItemModel(WizardryItems.spectral_helmet);
+ registerItemModel(WizardryItems.spectral_chestplate);
+ registerItemModel(WizardryItems.spectral_leggings);
+ registerItemModel(WizardryItems.spectral_boots);
+
+ registerItemModel(WizardryItems.smoke_bomb);
+
+ registerItemModel(WizardryItems.identification_scroll);
}
-
+
// Moved from the proxies
-
- /** Registers an item model, using the item's registry name as the model name (this
- * convention makes it easier to keep track of everything). Variant defaults to "normal". Registers the model
- * for metadata 0 automatically, plus all the other metadata values that the item can take, as defined in
+
+ /**
+ * Registers an item model, using the item's registry name as the model name (this convention makes it easier to
+ * keep track of everything). Variant defaults to "normal". Registers the model for metadata 0 automatically, plus
+ * all the other metadata values that the item can take, as defined in
* {@link Item#getSubItems(Item, net.minecraft.creativetab.CreativeTabs, java.util.List)}. The passed in item
* must allow null to be passed in for the creative tab parameter in the aforementioned method, or a
- * {@link NullPointerException} will result. */
+ * {@link NullPointerException} will result.
+ */
private static void registerItemModel(Item item){
-
+
if(item.getHasSubtypes()){
- List items = new ArrayList();
+ NonNullList items = NonNullList.create();
item.getSubItems(item, null, items); // Client-only method, but we're client-side so this is OK.
for(ItemStack stack : items){
- ModelLoader.setCustomModelResourceLocation(item, stack.getMetadata(), new ModelResourceLocation(item.getRegistryName(), "inventory"));
+ ModelLoader.setCustomModelResourceLocation(item, stack.getMetadata(),
+ new ModelResourceLocation(item.getRegistryName(), "inventory"));
}
}
// Changing the last parameter from null to "inventory" fixed the item/block model weirdness. No idea why!
- ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(), "inventory"));
+ ModelLoader.setCustomModelResourceLocation(item, 0,
+ new ModelResourceLocation(item.getRegistryName(), "inventory"));
}
-
- /** Registers an item model for the given metadata, using the item's registry name as the model name (this
- * convention makes it easier to keep track of everything). This is intended for registering additional metadata
- * values which aren't displayed in the creative menu, for example the wildcard spell book used in wizard trades. */
- private static void registerItemModel(Item item, int metadata, String variant) {
- ModelLoader.setCustomModelResourceLocation(item, metadata, new ModelResourceLocation(item.getRegistryName(), variant));
+
+ /**
+ * Registers an item model for the given metadata, using the item's registry name as the model name (this convention
+ * makes it easier to keep track of everything). This is intended for registering additional metadata values which
+ * aren't displayed in the creative menu, for example the wildcard spell book used in wizard trades.
+ */
+ private static void registerItemModel(Item item, int metadata, String variant){
+ ModelLoader.setCustomModelResourceLocation(item, metadata,
+ new ModelResourceLocation(item.getRegistryName(), variant));
}
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleBlizzard.java b/src/main/java/electroblob/wizardry/client/particle/ParticleBlizzard.java
index 4ea3114b..58e84e48 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleBlizzard.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleBlizzard.java
@@ -6,67 +6,69 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ParticleBlizzard extends ParticleSnow {
-
- private double angle;
- private double radius;
- private double speed;
- public ParticleBlizzard(World world, int maxAge, double originX, double originZ, double radius, double yPos){
- super(world, 0, 0, 0, 0, 0, 0, maxAge);
- this.angle = this.rand.nextDouble() * Math.PI * 2;
- double x = originX - Math.cos(angle)*radius;
- double z = originZ + radius*Math.sin(angle);
- this.radius = radius;
- this.setPosition(x, yPos, z);
- this.prevPosX = x;
- this.prevPosY = yPos;
- this.prevPosZ = z;
- if(rand.nextBoolean()){
- speed = rand.nextDouble()*2 + 1;
- }else{
- speed = rand.nextDouble()*-2 - 1;
- }
- this.multipleParticleScaleBy(1.5f);
- }
-
- @Override
- public void init(){
- super.init();
- this.fullBrightness = true;
- }
+ private double angle;
+ private double radius;
+ private double speed;
-// @Override
-// public void renderParticle(VertexBuffer buffer, Entity entity, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ){
-// if(this.particleAge < this.particleMaxAge / 3 || (this.particleAge + this.particleMaxAge) / 3 % 2 == 0){
-// super.renderParticle(buffer, entity, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ);
-// }
-// }
+ public ParticleBlizzard(World world, int maxAge, double originX, double originZ, double radius, double yPos){
+ super(world, 0, 0, 0, 0, 0, 0, maxAge);
+ this.angle = this.rand.nextDouble() * Math.PI * 2;
+ double x = originX - Math.cos(angle) * radius;
+ double z = originZ + radius * Math.sin(angle);
+ this.radius = radius;
+ this.setPosition(x, yPos, z);
+ this.prevPosX = x;
+ this.prevPosY = yPos;
+ this.prevPosZ = z;
+ if(rand.nextBoolean()){
+ speed = rand.nextDouble() * 2 + 1;
+ }else{
+ speed = rand.nextDouble() * -2 - 1;
+ }
+ this.multipleParticleScaleBy(1.5f);
+ }
- @Override
- public void onUpdate(){
-
- this.prevPosX = this.posX;
- this.prevPosY = this.posY;
- this.prevPosZ = this.posZ;
+ @Override
+ public void init(){
+ super.init();
+ this.fullBrightness = true;
+ }
- if(this.particleAge++ >= this.particleMaxAge){
- this.setExpired();
- }
-
- // This is in radians per tick...
- double omega = Math.signum(speed) * ((Math.PI*2)/20 - speed/(20*radius));
-
- // v = r times omega; therefore the normalised velocity vector needs to be r times the angle increment / 2 pi.
- this.angle += omega;
+ // @Override
+ // public void renderParticle(VertexBuffer buffer, Entity entity, float partialTicks, float rotationX, float
+ // rotationZ, float rotationYZ, float rotationXY, float rotationXZ){
+ // if(this.particleAge < this.particleMaxAge / 3 || (this.particleAge + this.particleMaxAge) / 3 % 2 == 0){
+ // super.renderParticle(buffer, entity, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ);
+ // }
+ // }
- this.motionY -= 0.04D * (double)this.particleGravity;
- this.motionZ = radius * omega * Math.cos(angle);
- this.motionX = radius * omega * Math.sin(angle);
- this.moveEntity(motionX, motionY, motionZ);
+ @Override
+ public void onUpdate(){
- if(this.particleAge > this.particleMaxAge / 2){
- this.setAlphaF(1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge);
- }
-
- }
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+
+ if(this.particleAge++ >= this.particleMaxAge){
+ this.setExpired();
+ }
+
+ // This is in radians per tick...
+ double omega = Math.signum(speed) * ((Math.PI * 2) / 20 - speed / (20 * radius));
+
+ // v = r times omega; therefore the normalised velocity vector needs to be r times the angle increment / 2 pi.
+ this.angle += omega;
+
+ this.motionY -= 0.04D * (double)this.particleGravity;
+ this.motionZ = radius * omega * Math.cos(angle);
+ this.motionX = radius * omega * Math.sin(angle);
+ this.move(motionX, motionY, motionZ);
+
+ if(this.particleAge > this.particleMaxAge / 2){
+ this.setAlphaF(
+ 1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge);
+ }
+
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleCustomTexture.java b/src/main/java/electroblob/wizardry/client/particle/ParticleCustomTexture.java
index 3d5fa986..00e50b26 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleCustomTexture.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleCustomTexture.java
@@ -1,7 +1,5 @@
package electroblob.wizardry.client.particle;
-import java.util.List;
-
import org.lwjgl.opengl.GL11;
import net.minecraft.client.Minecraft;
@@ -14,7 +12,6 @@ import net.minecraft.client.renderer.VertexBuffer;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;
-import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -23,6 +20,7 @@ import net.minecraftforge.fml.relauncher.SideOnly;
* Abstract superclass for all particles that use custom textures. This is intended to centralise as much code as
* possible; all subclasses need to do is to define the texture to use, how the frames are arranged (and which to
* choose), and any properties like gravity and collisions.
+ *
* @author Electroblob
* @since Wizardry 1.2
*/
@@ -40,33 +38,41 @@ public abstract class ParticleCustomTexture extends Particle {
this.init();
}
- public ParticleCustomTexture(World world, double x, double y, double z, double vx, double vy, double vz, int maxAge){
+ public ParticleCustomTexture(World world, double x, double y, double z, double vx, double vy, double vz,
+ int maxAge){
this(world, x, y, z, vx, vy, vz);
this.particleMaxAge = maxAge;
}
-
- /** Called from both constructors to set constants, avoiding duplicate code. Common fields to set here
- * include: particleScale, particleGravity, canCollide, fullBrightness and setting the texture index. */
+
+ /**
+ * Called from both constructors to set constants, avoiding duplicate code. Common fields to set here include:
+ * particleScale, particleGravity, canCollide, fullBrightness and setting the texture index.
+ */
public abstract void init();
- /** Returns a ResourceLocation for the particle's texture sheet. Do not create a new ResourceLocation in this
- * method, only return a constant. */
+
+ /**
+ * Returns a ResourceLocation for the particle's texture sheet. Do not create a new ResourceLocation in this method,
+ * only return a constant.
+ */
public abstract ResourceLocation getTexture();
+
/** Returns how many 'frames' there are in the x direction on the texture. */
protected abstract int getXFrames();
+
/** Returns how many 'frames' there are in the y direction on the texture. */
protected abstract int getYFrames();
- /* There are 4 layers of particles, specified as 0-3 by the method below.
- * - Layer 0 causes the normal particles.png to be bound to the render engine for normal particles.
- * - Layer 1 causes the block textures to be bound to the render engine for digging fx and falling fx.
- * - Layer 2 causes the item textures to be bound to the render engine for tool breaking fx, snowballpoofs, slime particles, etc.
- * - Layer 3 is not used in vanilla minecraft and was presumably added by forge for exactly this reason.
- * This means no texture is bound by vanilla minecraft, meaning you are free to do as you wish without possibly
- * overwriting vanilla particles. Mod particles won't be overwritten anyway since they bind their own textures.
- * It is of course important to bind the texture every time you render a custom particle, but I don't see how
- * you could do it any other way, since you don't have access to EffectRenderer. */
+ /* There are 4 layers of particles, specified as 0-3 by the method below. - Layer 0 causes the normal particles.png
+ * to be bound to the render engine for normal particles. - Layer 1 causes the block textures to be bound to the
+ * render engine for digging fx and falling fx. - Layer 2 causes the item textures to be bound to the render engine
+ * for tool breaking fx, snowballpoofs, slime particles, etc. - Layer 3 is not used in vanilla minecraft and was
+ * presumably added by forge for exactly this reason. This means no texture is bound by vanilla minecraft, meaning
+ * you are free to do as you wish without possibly overwriting vanilla particles. Mod particles won't be overwritten
+ * anyway since they bind their own textures. It is of course important to bind the texture every time you render a
+ * custom particle, but I don't see how you could do it any other way, since you don't have access to
+ * EffectRenderer. */
@Override
- public int getFXLayer() {
+ public int getFXLayer(){
// This can only be 0-3 or it will cause an ArrayIndexOutOfBoundsException in EffectRenderer.
return 3;
}
@@ -78,73 +84,76 @@ public abstract class ParticleCustomTexture extends Particle {
}
// Overridden to fix the bug with vanilla that makes particles frictionless. (y != y... seriously, Mojang?)
- @Override
- public void moveEntity(double x, double y, double z){
-
- double d0 = y;
-
- if (this.canCollide)
- {
- List list = this.worldObj.getCollisionBoxes((Entity)null, this.getEntityBoundingBox().addCoord(x, y, z));
-
- for (AxisAlignedBB axisalignedbb : list)
- {
- y = axisalignedbb.calculateYOffset(this.getEntityBoundingBox(), y);
- }
-
- this.setEntityBoundingBox(this.getEntityBoundingBox().offset(0.0D, y, 0.0D));
-
- for (AxisAlignedBB axisalignedbb1 : list)
- {
- x = axisalignedbb1.calculateXOffset(this.getEntityBoundingBox(), x);
- }
-
- this.setEntityBoundingBox(this.getEntityBoundingBox().offset(x, 0.0D, 0.0D));
-
- for (AxisAlignedBB axisalignedbb2 : list)
- {
- z = axisalignedbb2.calculateZOffset(this.getEntityBoundingBox(), z);
- }
-
- this.setEntityBoundingBox(this.getEntityBoundingBox().offset(0.0D, 0.0D, z));
- }
- else
- {
- this.setEntityBoundingBox(this.getEntityBoundingBox().offset(x, y, z));
- }
-
- this.resetPositionToBB();
- this.isCollided = d0 != y && d0 < 0.0D;
-
- /* Can never be true! - But this doesn't seem to make any difference anyway.
- if (x != x)
- {
- this.motionX = 0.0D;
- }
-
- if (z != z)
- {
- this.motionZ = 0.0D;
- }
- */
- }
+ // TESTME: Probably no longer necessary.
+ // @Override
+ // public void move(double x, double y, double z){
+ //
+ // double d0 = y;
+ //
+ // if (this.canCollide)
+ // {
+ // List list = this.world.getCollisionBoxes((Entity)null, this.getBoundingBox().addCoord(x, y, z));
+ //
+ // for (AxisAlignedBB axisalignedbb : list)
+ // {
+ // y = axisalignedbb.calculateYOffset(this.getBoundingBox(), y);
+ // }
+ //
+ // this.setBoundingBox(this.getBoundingBox().offset(0.0D, y, 0.0D));
+ //
+ // for (AxisAlignedBB axisalignedbb1 : list)
+ // {
+ // x = axisalignedbb1.calculateXOffset(this.getBoundingBox(), x);
+ // }
+ //
+ // this.setBoundingBox(this.getBoundingBox().offset(x, 0.0D, 0.0D));
+ //
+ // for (AxisAlignedBB axisalignedbb2 : list)
+ // {
+ // z = axisalignedbb2.calculateZOffset(this.getBoundingBox(), z);
+ // }
+ //
+ // this.setBoundingBox(this.getBoundingBox().offset(0.0D, 0.0D, z));
+ // }
+ // else
+ // {
+ // this.setBoundingBox(this.getBoundingBox().offset(x, y, z));
+ // }
+ //
+ // this.resetPositionToBB();
+ // this.onGround = d0 != y && d0 < 0.0D;
+ //
+ // /* Can never be true! - But this doesn't seem to make any difference anyway.
+ // if (x != x)
+ // {
+ // this.motionX = 0.0D;
+ // }
+ //
+ // if (z != z)
+ // {
+ // this.motionZ = 0.0D;
+ // }
+ // */
+ // }
// Overridden to bind the new texture. I think this can be done with TextureAtlasSprite, but this works as it is
// so I'm not changing it for the time being.
@Override
- public void renderParticle(VertexBuffer buffer, Entity viewer, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ){
-
+ public void renderParticle(VertexBuffer buffer, Entity viewer, float partialTicks, float rotationX, float rotationZ,
+ float rotationYZ, float rotationXY, float rotationXZ){
+
GlStateManager.pushMatrix();
GlStateManager.pushAttrib();
-
+
this.applyGLStateChanges();
// This stuff does the shading. It vanilla does this later on for each point, but this also seems to work.
int brightness = this.getBrightnessForRender(partialTicks);
int lightmapX = brightness % 65536;
int lightmapY = brightness / 65536;
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)lightmapX / 1.0F, (float)lightmapY / 1.0F);
-
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)lightmapX / 1.0F,
+ (float)lightmapY / 1.0F);
+
RenderHelper.disableStandardItemLighting();
Minecraft.getMinecraft().getTextureManager().bindTexture(getTexture());
@@ -152,9 +161,9 @@ public abstract class ParticleCustomTexture extends Particle {
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
float u1 = (float)this.particleTextureIndexX / (float)getXFrames();
- float u2 = u1 + 1.0f/getXFrames();
+ float u2 = u1 + 1.0f / getXFrames();
float v1 = (float)this.particleTextureIndexY / (float)getYFrames();
- float v2 = v1 + 1.0f/getYFrames();
+ float v2 = v1 + 1.0f / getYFrames();
float scale = 0.1F * this.particleScale;
// I'm pretty sure these were always static.
@@ -166,13 +175,22 @@ public abstract class ParticleCustomTexture extends Particle {
float y = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)partialTicks - interpPosY);
float z = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)partialTicks - interpPosZ);
- buffer.pos((double)(x - rotationX * scale - rotationXY * scale), (double)(y - rotationZ * scale), (double)(z - rotationYZ * scale - rotationXZ * scale)).tex(u2, v2).color(particleRed, particleGreen, particleBlue, particleAlpha).endVertex();
- buffer.pos((double)(x - rotationX * scale + rotationXY * scale), (double)(y + rotationZ * scale), (double)(z - rotationYZ * scale + rotationXZ * scale)).tex(u2, v1).color(particleRed, particleGreen, particleBlue, particleAlpha).endVertex();
- buffer.pos((double)(x + rotationX * scale + rotationXY * scale), (double)(y + rotationZ * scale), (double)(z + rotationYZ * scale + rotationXZ * scale)).tex(u1, v1).color(particleRed, particleGreen, particleBlue, particleAlpha).endVertex();
- buffer.pos((double)(x + rotationX * scale - rotationXY * scale), (double)(y - rotationZ * scale), (double)(z + rotationYZ * scale - rotationXZ * scale)).tex(u1, v2).color(particleRed, particleGreen, particleBlue, particleAlpha).endVertex();;
+ buffer.pos((double)(x - rotationX * scale - rotationXY * scale), (double)(y - rotationZ * scale),
+ (double)(z - rotationYZ * scale - rotationXZ * scale)).tex(u2, v2)
+ .color(particleRed, particleGreen, particleBlue, particleAlpha).endVertex();
+ buffer.pos((double)(x - rotationX * scale + rotationXY * scale), (double)(y + rotationZ * scale),
+ (double)(z - rotationYZ * scale + rotationXZ * scale)).tex(u2, v1)
+ .color(particleRed, particleGreen, particleBlue, particleAlpha).endVertex();
+ buffer.pos((double)(x + rotationX * scale + rotationXY * scale), (double)(y + rotationZ * scale),
+ (double)(z + rotationYZ * scale + rotationXZ * scale)).tex(u1, v1)
+ .color(particleRed, particleGreen, particleBlue, particleAlpha).endVertex();
+ buffer.pos((double)(x + rotationX * scale - rotationXY * scale), (double)(y - rotationZ * scale),
+ (double)(z + rotationYZ * scale - rotationXZ * scale)).tex(u1, v2)
+ .color(particleRed, particleGreen, particleBlue, particleAlpha).endVertex();
+ ;
Tessellator.getInstance().draw();
-
+
this.undoGLStateChanges();
GlStateManager.popAttrib();
@@ -180,13 +198,19 @@ public abstract class ParticleCustomTexture extends Particle {
}
- /** Override to add any GL state changes, like blending. Does nothing by default. State changes should be
- * done using GLStateManager, not using GL11 directly (as is the case with all rendering code now). */
- public void applyGLStateChanges(){}
-
- /** Override to undo any GL state changes, like blending. Does nothing by default. State changes should be
- * done using GLStateManager, not using GL11 directly (as is the case with all rendering code now). */
- public void undoGLStateChanges(){}
+ /**
+ * Override to add any GL state changes, like blending. Does nothing by default. State changes should be done
+ * using GLStateManager, not using GL11 directly (as is the case with all rendering code now).
+ */
+ public void applyGLStateChanges(){
+ }
+
+ /**
+ * Override to undo any GL state changes, like blending. Does nothing by default. State changes should be done
+ * using GLStateManager, not using GL11 directly (as is the case with all rendering code now).
+ */
+ public void undoGLStateChanges(){
+ }
@Override
public int getBrightnessForRender(float partialTick){
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleDarkMagic.java b/src/main/java/electroblob/wizardry/client/particle/ParticleDarkMagic.java
index 986e3c7c..7532dd98 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleDarkMagic.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleDarkMagic.java
@@ -9,82 +9,70 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ParticleDarkMagic extends Particle {
-
- /** Base spell texture index */
- private int baseSpellTextureIndex = 128;
- public ParticleDarkMagic(World par1World, double par2, double par4, double par6, double par8, double par10, double par12, float r, float g, float b)
- {
- super(par1World, par2, par4, par6, par8, par10, par12);
- this.motionY *= 0.20000000298023224D;
-
- this.particleRed = r;
- this.particleGreen = g;
- this.particleBlue = b;
+ /** Base spell texture index */
+ private int baseSpellTextureIndex = 128;
- this.particleScale *= 0.75F;
- this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D));
- this.canCollide = true;
- }
+ public ParticleDarkMagic(World par1World, double par2, double par4, double par6, double par8, double par10,
+ double par12, float r, float g, float b){
+ super(par1World, par2, par4, par6, par8, par10, par12);
+ this.motionY *= 0.20000000298023224D;
- @Override
- public void renderParticle(VertexBuffer buffer, Entity entity, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ)
- {
- float f6 = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge * 32.0F;
+ this.particleRed = r;
+ this.particleGreen = g;
+ this.particleBlue = b;
- if (f6 < 0.0F)
- {
- f6 = 0.0F;
- }
+ this.particleScale *= 0.75F;
+ this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D));
+ this.canCollide = true;
+ }
- if (f6 > 1.0F)
- {
- f6 = 1.0F;
- }
+ @Override
+ public void renderParticle(VertexBuffer buffer, Entity entity, float partialTicks, float rotationX, float rotationZ,
+ float rotationYZ, float rotationXY, float rotationXZ){
+ float f6 = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge * 32.0F;
- super.renderParticle(buffer, entity, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ);
- }
+ if(f6 < 0.0F){
+ f6 = 0.0F;
+ }
- /**
- * Called to update the entity's position/logic.
- */
- public void onUpdate()
- {
- this.prevPosX = this.posX;
- this.prevPosY = this.posY;
- this.prevPosZ = this.posZ;
+ if(f6 > 1.0F){
+ f6 = 1.0F;
+ }
- if (this.particleAge++ >= this.particleMaxAge)
- {
- this.setExpired();
- }
+ super.renderParticle(buffer, entity, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ);
+ }
- this.setParticleTextureIndex(this.baseSpellTextureIndex + (7 - this.particleAge * 8 / this.particleMaxAge));
- this.motionY += 0.004D;
- this.moveEntity(this.motionX, this.motionY, this.motionZ);
- /*
- if (this.posY == this.prevPosY)
- {
- this.motionX *= 1.1D;
- this.motionZ *= 1.1D;
- }
- */
- this.motionX *= 0.9599999785423279D;
- this.motionY *= 0.9599999785423279D;
- this.motionZ *= 0.9599999785423279D;
+ /**
+ * Called to update the entity's position/logic.
+ */
+ public void onUpdate(){
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
- if (this.isCollided)
- {
- this.motionX *= 0.699999988079071D;
- this.motionZ *= 0.699999988079071D;
- }
- }
+ if(this.particleAge++ >= this.particleMaxAge){
+ this.setExpired();
+ }
- /**
- * Sets the base spell texture index
- */
- public void setBaseSpellTextureIndex(int par1)
- {
- this.baseSpellTextureIndex = par1;
- }
+ this.setParticleTextureIndex(this.baseSpellTextureIndex + (7 - this.particleAge * 8 / this.particleMaxAge));
+ this.motionY += 0.004D;
+ this.move(this.motionX, this.motionY, this.motionZ);
+ /* if (this.posY == this.prevPosY) { this.motionX *= 1.1D; this.motionZ *= 1.1D; } */
+ this.motionX *= 0.9599999785423279D;
+ this.motionY *= 0.9599999785423279D;
+ this.motionZ *= 0.9599999785423279D;
+
+ if(this.onGround){
+ this.motionX *= 0.699999988079071D;
+ this.motionZ *= 0.699999988079071D;
+ }
+ }
+
+ /**
+ * Sets the base spell texture index
+ */
+ public void setBaseSpellTextureIndex(int par1){
+ this.baseSpellTextureIndex = par1;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleDust.java b/src/main/java/electroblob/wizardry/client/particle/ParticleDust.java
index 6a121fa3..c37dbb51 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleDust.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleDust.java
@@ -7,51 +7,42 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ParticleDust extends Particle {
-
+
private final boolean shaded;
-
- public ParticleDust(World par1World, double x, double y, double z, double par8, double par10, double par12, float r, float g, float b, boolean shaded)
- {
- super(par1World, x, y, z, par8, par10, par12);
- this.particleRed = r;
- this.particleGreen = g;
- this.particleBlue = b;
- this.setParticleTextureIndex(0);
- this.setSize(0.01F, 0.01F);
- this.particleScale *= this.rand.nextFloat() + 0.2F;
- this.motionX = par8;
- this.motionY = par10;
- this.motionZ = par12;
- this.particleMaxAge = (int)(16.0D / (Math.random() * 0.8D + 0.2D));
- this.shaded = shaded;
- }
- /**
- * Called to update the entity's position/logic.
- */
- public void onUpdate()
- {
- this.prevPosX = this.posX;
- this.prevPosY = this.posY;
- this.prevPosZ = this.posZ;
- //this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ public ParticleDust(World par1World, double x, double y, double z, double par8, double par10, double par12, float r,
+ float g, float b, boolean shaded){
+ super(par1World, x, y, z, par8, par10, par12);
+ this.particleRed = r;
+ this.particleGreen = g;
+ this.particleBlue = b;
+ this.setParticleTextureIndex(0);
+ this.setSize(0.01F, 0.01F);
+ this.particleScale *= this.rand.nextFloat() + 0.2F;
+ this.motionX = par8;
+ this.motionY = par10;
+ this.motionZ = par12;
+ this.particleMaxAge = (int)(16.0D / (Math.random() * 0.8D + 0.2D));
+ this.shaded = shaded;
+ }
- if (this.particleMaxAge-- <= 0)
- {
- this.setExpired();
- }
- }
-
- @Override
- public int getBrightnessForRender(float par1)
- {
- return shaded ? super.getBrightnessForRender(par1) : 15728880;
- }
- /*
- @Override
- public float getBrightness(float par1)
- {
- return shaded ? super.getBrightness(par1) : 1.0F;
- }
- */
+ /**
+ * Called to update the entity's position/logic.
+ */
+ public void onUpdate(){
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+ // this.moveEntity(this.motionX, this.motionY, this.motionZ);
+
+ if(this.particleMaxAge-- <= 0){
+ this.setExpired();
+ }
+ }
+
+ @Override
+ public int getBrightnessForRender(float par1){
+ return shaded ? super.getBrightnessForRender(par1) : 15728880;
+ }
+ /* @Override public float getBrightness(float par1) { return shaded ? super.getBrightness(par1) : 1.0F; } */
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleGiantBubble.java b/src/main/java/electroblob/wizardry/client/particle/ParticleGiantBubble.java
index b469bcb2..b512aaba 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleGiantBubble.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleGiantBubble.java
@@ -7,44 +7,43 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
-public class ParticleGiantBubble extends Particle
-{
- /** The name used to identify this particle. Uses the mod id to avoid any possible conflicts (Not that there would
- * be any, but I may as well.) */
+public class ParticleGiantBubble extends Particle {
+ /**
+ * The name used to identify this particle. Uses the mod id to avoid any possible conflicts (Not that there would be
+ * any, but I may as well.)
+ */
public static final String NAME = Wizardry.MODID + "magicbubble";
-
- public ParticleGiantBubble(World par1World, double par2, double par4, double par6, double par8, double par10, double par12)
- {
- super(par1World, par2, par4, par6, par8, par10, par12);
- this.particleRed = 1.0F;
- this.particleGreen = 1.0F;
- this.particleBlue = 1.0F;
- this.setParticleTextureIndex(32);
- this.setSize(0.02F, 0.02F);
- this.particleScale *= this.rand.nextFloat() * 0.6F + 0.2F;
- this.motionX = par8 * 0.20000000298023224D + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.02F);
- this.motionY = par10 * 0.20000000298023224D + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.02F);
- this.motionZ = par12 * 0.20000000298023224D + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.02F);
- this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D));
- }
- /**
- * Called to update the entity's position/logic.
- */
- public void onUpdate()
- {
- this.prevPosX = this.posX;
- this.prevPosY = this.posY;
- this.prevPosZ = this.posZ;
- this.motionY += 0.002D;
- this.moveEntity(this.motionX, this.motionY, this.motionZ);
- this.motionX *= 0.8500000238418579D;
- this.motionY *= 0.8500000238418579D;
- this.motionZ *= 0.8500000238418579D;
+ public ParticleGiantBubble(World par1World, double par2, double par4, double par6, double par8, double par10,
+ double par12){
+ super(par1World, par2, par4, par6, par8, par10, par12);
+ this.particleRed = 1.0F;
+ this.particleGreen = 1.0F;
+ this.particleBlue = 1.0F;
+ this.setParticleTextureIndex(32);
+ this.setSize(0.02F, 0.02F);
+ this.particleScale *= this.rand.nextFloat() * 0.6F + 0.2F;
+ this.motionX = par8 * 0.20000000298023224D + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.02F);
+ this.motionY = par10 * 0.20000000298023224D + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.02F);
+ this.motionZ = par12 * 0.20000000298023224D + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.02F);
+ this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D));
+ }
- if (this.particleMaxAge-- <= 0)
- {
- this.setExpired();
- }
- }
+ /**
+ * Called to update the entity's position/logic.
+ */
+ public void onUpdate(){
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+ this.motionY += 0.002D;
+ this.move(this.motionX, this.motionY, this.motionZ);
+ this.motionX *= 0.8500000238418579D;
+ this.motionY *= 0.8500000238418579D;
+ this.motionZ *= 0.8500000238418579D;
+
+ if(this.particleMaxAge-- <= 0){
+ this.setExpired();
+ }
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleIce.java b/src/main/java/electroblob/wizardry/client/particle/ParticleIce.java
index 3332db15..dd548900 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleIce.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleIce.java
@@ -9,8 +9,9 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ParticleIce extends ParticleCustomTexture {
- private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/particle/ice_particles.png");
-
+ private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID,
+ "textures/particle/ice_particles.png");
+
public ParticleIce(World world, double x, double y, double z, double vx, double vy, double vz){
super(world, x, y, z, vx, vy, vz);
}
@@ -18,7 +19,7 @@ public class ParticleIce extends ParticleCustomTexture {
public ParticleIce(World world, double x, double y, double z, double vx, double vy, double vz, int maxAge){
super(world, x, y, z, vx, vy, vz, maxAge);
}
-
+
@Override
public void init(){
this.setParticleTextureIndex(rand.nextInt(8));
@@ -28,7 +29,18 @@ public class ParticleIce extends ParticleCustomTexture {
this.fullBrightness = true;
}
- @Override public ResourceLocation getTexture(){ return TEXTURE; }
- @Override protected int getXFrames(){ return 4; }
- @Override protected int getYFrames(){ return 4; }
+ @Override
+ public ResourceLocation getTexture(){
+ return TEXTURE;
+ }
+
+ @Override
+ protected int getXFrames(){
+ return 4;
+ }
+
+ @Override
+ protected int getYFrames(){
+ return 4;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleLeaf.java b/src/main/java/electroblob/wizardry/client/particle/ParticleLeaf.java
index 0292dddf..e2610a3d 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleLeaf.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleLeaf.java
@@ -8,9 +8,10 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ParticleLeaf extends ParticleCustomTexture {
-
- private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/particle/leaf_particles.png");
-
+
+ private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID,
+ "textures/particle/leaf_particles.png");
+
public ParticleLeaf(World world, double x, double y, double z, double vx, double vy, double vz){
super(world, x, y, z, vx, vy, vz);
}
@@ -18,16 +19,27 @@ public class ParticleLeaf extends ParticleCustomTexture {
public ParticleLeaf(World world, double x, double y, double z, double vx, double vy, double vz, int maxAge){
super(world, x, y, z, vx, vy, vz, maxAge);
}
-
- @Override
- public void init() {
- this.setParticleTextureIndex(rand.nextInt(16));
- this.particleScale *= 1.4f;
- this.particleGravity = 0;
- this.canCollide = true;
- }
- @Override public ResourceLocation getTexture(){ return TEXTURE; }
- @Override protected int getXFrames(){ return 4; }
- @Override protected int getYFrames(){ return 4; }
+ @Override
+ public void init(){
+ this.setParticleTextureIndex(rand.nextInt(16));
+ this.particleScale *= 1.4f;
+ this.particleGravity = 0;
+ this.canCollide = true;
+ }
+
+ @Override
+ public ResourceLocation getTexture(){
+ return TEXTURE;
+ }
+
+ @Override
+ protected int getXFrames(){
+ return 4;
+ }
+
+ @Override
+ protected int getYFrames(){
+ return 4;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleMagicFlame.java b/src/main/java/electroblob/wizardry/client/particle/ParticleMagicFlame.java
index 755fa4db..28e8fd1d 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleMagicFlame.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleMagicFlame.java
@@ -9,39 +9,38 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ParticleMagicFlame extends Particle {
-
- /** The scale of the flame particle */
- private float flameScale;
- public ParticleMagicFlame(World par1World, double par2, double par4, double par6, double par8, double par10, double par12, int maxAge, float scale)
- {
- super(par1World, par2, par4, par6, par8, par10, par12);
- this.motionX = this.motionX * 0.009999999776482582D + par8;
- this.motionY = this.motionY * 0.009999999776482582D + par10;
- this.motionZ = this.motionZ * 0.009999999776482582D + par12;
- this.flameScale = scale;
- this.particleRed = this.particleGreen = this.particleBlue = 1.0F;
- if(maxAge == 0){
- this.particleMaxAge = (int)(2.0D / (Math.random() * 0.8D + 0.2D));
- }else{
- this.particleMaxAge = maxAge;
- }
- // IDEA: Make the particles for ray spells collide properly and not spawn on the other side of stuff.
- this.canCollide = false;
- this.setParticleTextureIndex(48);
- }
+ /** The scale of the flame particle */
+ private float flameScale;
- @Override
- public void renderParticle(VertexBuffer buffer, Entity entity, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ)
- {
- float f6 = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge;
- this.particleScale = this.flameScale * (1.0F - f6 * f6 * 0.5F);
- super.renderParticle(buffer, entity, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ);
- }
+ public ParticleMagicFlame(World par1World, double par2, double par4, double par6, double par8, double par10,
+ double par12, int maxAge, float scale){
+ super(par1World, par2, par4, par6, par8, par10, par12);
+ this.motionX = this.motionX * 0.009999999776482582D + par8;
+ this.motionY = this.motionY * 0.009999999776482582D + par10;
+ this.motionZ = this.motionZ * 0.009999999776482582D + par12;
+ this.flameScale = scale;
+ this.particleRed = this.particleGreen = this.particleBlue = 1.0F;
+ if(maxAge == 0){
+ this.particleMaxAge = (int)(2.0D / (Math.random() * 0.8D + 0.2D));
+ }else{
+ this.particleMaxAge = maxAge;
+ }
+ // IDEA: Make the particles for ray spells collide properly and not spawn on the other side of stuff.
+ this.canCollide = false;
+ this.setParticleTextureIndex(48);
+ }
- @Override
- public int getBrightnessForRender(float par1)
- {
- return 256;
- }
+ @Override
+ public void renderParticle(VertexBuffer buffer, Entity entity, float partialTicks, float rotationX, float rotationZ,
+ float rotationYZ, float rotationXY, float rotationXZ){
+ float f6 = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge;
+ this.particleScale = this.flameScale * (1.0F - f6 * f6 * 0.5F);
+ super.renderParticle(buffer, entity, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ);
+ }
+
+ @Override
+ public int getBrightnessForRender(float par1){
+ return 256;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticlePath.java b/src/main/java/electroblob/wizardry/client/particle/ParticlePath.java
index cf7b2c6e..4db78d66 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticlePath.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticlePath.java
@@ -13,81 +13,95 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ParticlePath extends ParticleCustomTexture {
-
- private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/particle/path_particles.png");
-
- private final double originX, originY, originZ;
- public ParticlePath(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g, float b){
+ private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID,
+ "textures/particle/path_particles.png");
+
+ private final double originX, originY, originZ;
+
+ public ParticlePath(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g,
+ float b){
super(world, x, y, z, vx, vy, vz);
this.setRBGColorF(r, g, b);
- this.originX = x;
- this.originY = y;
- this.originZ = z;
+ this.originX = x;
+ this.originY = y;
+ this.originZ = z;
}
- public ParticlePath(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g, float b, int maxAge){
+ public ParticlePath(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g,
+ float b, int maxAge){
super(world, x, y, z, vx, vy, vz, maxAge);
this.setRBGColorF(r, g, b);
- this.originX = x;
- this.originY = y;
- this.originZ = z;
+ this.originX = x;
+ this.originY = y;
+ this.originZ = z;
}
-
- @Override
- public void init(){
- this.setParticleTextureIndex(0);
- // Set to a constant to remove the randomness from Particle.
- this.particleScale = 1.25f;
- this.particleGravity = 0;
- this.fullBrightness = true;
- this.canCollide = false;
- }
-
- @Override public ResourceLocation getTexture(){ return TEXTURE; }
- @Override protected int getXFrames(){ return 1; }
- @Override protected int getYFrames(){ return 1; }
@Override
- public void onUpdate(){
-
+ public void init(){
+ this.setParticleTextureIndex(0);
+ // Set to a constant to remove the randomness from Particle.
+ this.particleScale = 1.25f;
+ this.particleGravity = 0;
+ this.fullBrightness = true;
+ this.canCollide = false;
+ }
+
+ @Override
+ public ResourceLocation getTexture(){
+ return TEXTURE;
+ }
+
+ @Override
+ protected int getXFrames(){
+ return 1;
+ }
+
+ @Override
+ protected int getYFrames(){
+ return 1;
+ }
+
+ @Override
+ public void onUpdate(){
+
this.prevPosX = this.posX;
- this.prevPosY = this.posY;
- this.prevPosZ = this.posZ;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
- if (this.particleAge++ >= this.particleMaxAge)
- {
- this.setExpired();
- }
+ if(this.particleAge++ >= this.particleMaxAge){
+ this.setExpired();
+ }
- this.moveEntity(this.motionX, this.motionY, this.motionZ);
-
- // Fading
- if(this.particleAge > this.particleMaxAge / 2){
- this.setAlphaF(1.0F - 2 * (((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge));
- }
-
- if(this.particleAge % Clairvoyance.PARTICLE_MOVEMENT_INTERVAL == 0){
- this.setPosition(this.originX, this.originY, this.originZ);
- this.prevPosX = this.posX;
- this.prevPosY = this.posY;
- this.prevPosZ = this.posZ;
- }
-
- }
-
- @Override
- public void applyGLStateChanges(){
- GlStateManager.enableBlend();
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
- // TESTME: Are these two actually necessary?
- GlStateManager.disableLighting();
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
- }
-
- @Override
- public void undoGLStateChanges(){
- GlStateManager.disableBlend();
- GlStateManager.enableLighting();
- }
+ this.move(this.motionX, this.motionY, this.motionZ);
+
+ // Fading
+ if(this.particleAge > this.particleMaxAge / 2){
+ this.setAlphaF(1.0F
+ - 2 * (((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge));
+ }
+
+ if(this.particleAge % Clairvoyance.PARTICLE_MOVEMENT_INTERVAL == 0){
+ this.setPosition(this.originX, this.originY, this.originZ);
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+ }
+
+ }
+
+ @Override
+ public void applyGLStateChanges(){
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ // TESTME: Are these two actually necessary?
+ GlStateManager.disableLighting();
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
+ }
+
+ @Override
+ public void undoGLStateChanges(){
+ GlStateManager.disableBlend();
+ GlStateManager.enableLighting();
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleRotatingSparkle.java b/src/main/java/electroblob/wizardry/client/particle/ParticleRotatingSparkle.java
index eadc09bb..498bb038 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleRotatingSparkle.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleRotatingSparkle.java
@@ -6,54 +6,56 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ParticleRotatingSparkle extends ParticleSparkle {
-
- private double angle;
- private double radius;
- private double speed;
- public ParticleRotatingSparkle(World world, int maxAge, double originX, double originZ, double radius, double yPos, float r, float g , float b){
- super(world, 0, 0, 0, 0, 0, 0, r, g, b, maxAge);
- this.angle = this.rand.nextDouble() * Math.PI * 2;
- double x = originX - Math.cos(angle)*radius;
- double z = originZ + radius*Math.sin(angle);
- this.radius = radius;
- this.setPosition(x, yPos, z);
- this.prevPosX = x;
- this.prevPosY = yPos;
- this.prevPosZ = z;
- if(rand.nextBoolean()){
- speed = rand.nextDouble()*2 + 1;
- }else{
- speed = rand.nextDouble()*-2 - 1;
- }
- this.multipleParticleScaleBy(1.5f);
- }
+ private double angle;
+ private double radius;
+ private double speed;
- @Override
- public void onUpdate(){
-
- this.prevPosX = this.posX;
- this.prevPosY = this.posY;
- this.prevPosZ = this.posZ;
+ public ParticleRotatingSparkle(World world, int maxAge, double originX, double originZ, double radius, double yPos,
+ float r, float g, float b){
+ super(world, 0, 0, 0, 0, 0, 0, r, g, b, maxAge);
+ this.angle = this.rand.nextDouble() * Math.PI * 2;
+ double x = originX - Math.cos(angle) * radius;
+ double z = originZ + radius * Math.sin(angle);
+ this.radius = radius;
+ this.setPosition(x, yPos, z);
+ this.prevPosX = x;
+ this.prevPosY = yPos;
+ this.prevPosZ = z;
+ if(rand.nextBoolean()){
+ speed = rand.nextDouble() * 2 + 1;
+ }else{
+ speed = rand.nextDouble() * -2 - 1;
+ }
+ this.multipleParticleScaleBy(1.5f);
+ }
- if(this.particleAge++ >= this.particleMaxAge){
- this.setExpired();
- }
-
- // This is in radians per tick...
- double omega = Math.signum(speed) * ((Math.PI*2)/20 - speed/(20*radius));
-
- // v = r times omega; therefore the normalised velocity vector needs to be r times the angle increment / 2 pi.
- this.angle += omega;
+ @Override
+ public void onUpdate(){
- this.motionY -= 0.04D * (double)this.particleGravity;
- this.motionZ = radius * omega * Math.cos(angle);
- this.motionX = radius * omega * Math.sin(angle);
- this.moveEntity(motionX, motionY, motionZ);
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
- if(this.particleAge > this.particleMaxAge / 2){
- this.setAlphaF(1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge);
- }
-
- }
+ if(this.particleAge++ >= this.particleMaxAge){
+ this.setExpired();
+ }
+
+ // This is in radians per tick...
+ double omega = Math.signum(speed) * ((Math.PI * 2) / 20 - speed / (20 * radius));
+
+ // v = r times omega; therefore the normalised velocity vector needs to be r times the angle increment / 2 pi.
+ this.angle += omega;
+
+ this.motionY -= 0.04D * (double)this.particleGravity;
+ this.motionZ = radius * omega * Math.cos(angle);
+ this.motionX = radius * omega * Math.sin(angle);
+ this.move(motionX, motionY, motionZ);
+
+ if(this.particleAge > this.particleMaxAge / 2){
+ this.setAlphaF(
+ 1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge);
+ }
+
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleSnow.java b/src/main/java/electroblob/wizardry/client/particle/ParticleSnow.java
index a1455c22..e0d5250d 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleSnow.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleSnow.java
@@ -8,9 +8,10 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ParticleSnow extends ParticleCustomTexture {
-
- private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/particle/snow_particles.png");
-
+
+ private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID,
+ "textures/particle/snow_particles.png");
+
public ParticleSnow(World world, double x, double y, double z, double vx, double vy, double vz){
super(world, x, y, z, vx, vy, vz);
}
@@ -18,16 +19,27 @@ public class ParticleSnow extends ParticleCustomTexture {
public ParticleSnow(World world, double x, double y, double z, double vx, double vy, double vz, int maxAge){
super(world, x, y, z, vx, vy, vz, maxAge);
}
-
- @Override
- public void init(){
- this.setParticleTextureIndex(rand.nextInt(8));
- this.particleScale *= 0.6f;
- this.particleGravity = 0;
- this.canCollide = true;
- }
-
- @Override public ResourceLocation getTexture(){ return TEXTURE; }
- @Override protected int getXFrames(){ return 4; }
- @Override protected int getYFrames(){ return 4; }
+
+ @Override
+ public void init(){
+ this.setParticleTextureIndex(rand.nextInt(8));
+ this.particleScale *= 0.6f;
+ this.particleGravity = 0;
+ this.canCollide = true;
+ }
+
+ @Override
+ public ResourceLocation getTexture(){
+ return TEXTURE;
+ }
+
+ @Override
+ protected int getXFrames(){
+ return 4;
+ }
+
+ @Override
+ protected int getYFrames(){
+ return 4;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleSpark.java b/src/main/java/electroblob/wizardry/client/particle/ParticleSpark.java
index 57965ed2..201d2373 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleSpark.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleSpark.java
@@ -12,47 +12,59 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ParticleSpark extends ParticleCustomTexture {
-
- private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/particle/lightning_particles.png");
-
- public ParticleSpark(World world, double x, double y, double z, double vx, double vy, double vz){
- // Max age is always 3.
- super(world, x, y, z, vx, vy, vz, 3);
- }
-
- @Override
- public void init(){
- // Multiplied by 4 because the index works slightly differently for spark particles.
- this.setParticleTextureIndex(rand.nextInt(8)*4);
- this.particleScale *= 1.4f;
- this.fullBrightness = true;
- this.canCollide = false;
- }
- @Override
- public void onUpdate(){
- super.onUpdate();
- // Well this is handy! Looks like vanilla uses the texture index like this too.
- this.nextTextureIndexX();
- }
-
- @Override public ResourceLocation getTexture(){ return TEXTURE; }
- @Override protected int getXFrames(){ return 4; }
- @Override protected int getYFrames(){ return 8; }
-
- @Override
- public void applyGLStateChanges(){
- GlStateManager.enableBlend();
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
- // TESTME: Are these two actually necessary?
- GlStateManager.disableLighting();
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
- }
-
- @Override
- public void undoGLStateChanges(){
- GlStateManager.disableBlend();
- GlStateManager.enableLighting();
- }
-
+ private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID,
+ "textures/particle/lightning_particles.png");
+
+ public ParticleSpark(World world, double x, double y, double z, double vx, double vy, double vz){
+ // Max age is always 3.
+ super(world, x, y, z, vx, vy, vz, 3);
+ }
+
+ @Override
+ public void init(){
+ // Multiplied by 4 because the index works slightly differently for spark particles.
+ this.setParticleTextureIndex(rand.nextInt(8) * 4);
+ this.particleScale *= 1.4f;
+ this.fullBrightness = true;
+ this.canCollide = false;
+ }
+
+ @Override
+ public void onUpdate(){
+ super.onUpdate();
+ // Well this is handy! Looks like vanilla uses the texture index like this too.
+ this.nextTextureIndexX();
+ }
+
+ @Override
+ public ResourceLocation getTexture(){
+ return TEXTURE;
+ }
+
+ @Override
+ protected int getXFrames(){
+ return 4;
+ }
+
+ @Override
+ protected int getYFrames(){
+ return 8;
+ }
+
+ @Override
+ public void applyGLStateChanges(){
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ // TESTME: Are these two actually necessary?
+ GlStateManager.disableLighting();
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
+ }
+
+ @Override
+ public void undoGLStateChanges(){
+ GlStateManager.disableBlend();
+ GlStateManager.enableLighting();
+ }
+
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleSparkle.java b/src/main/java/electroblob/wizardry/client/particle/ParticleSparkle.java
index fbe89146..e5dd0d2b 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleSparkle.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleSparkle.java
@@ -8,89 +8,104 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ParticleSparkle extends ParticleCustomTexture {
-
+
/* I have now figured out what particle factories are for: they separate out the individual uses of the varargs
* parameter in spawnParticle so they are kept with the particle class. For my purposes, it would be easier to do
* that in the particle spawning method itself. */
-
- private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/particle/sparkle_particles.png");
+
+ private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID,
+ "textures/particle/sparkle_particles.png");
// NOTE: Uncomment once 2.1.0 is released
- //private final float initialRed;
- //private final float initialGreen;
- //private final float initialBlue;
-
+ // private final float initialRed;
+ // private final float initialGreen;
+ // private final float initialBlue;
+
// TODO: Assign these via the constructors, as part of the refactoring for particle parameters.
// NOTE: Uncomment once 2.1.0 is released
-// private final float fadeRed = 1;
-// private final float fadeGreen = 1;
-// private final float fadeBlue = 0;
-
- public ParticleSparkle(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g, float b){
+ // private final float fadeRed = 1;
+ // private final float fadeGreen = 1;
+ // private final float fadeBlue = 0;
+
+ public ParticleSparkle(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g,
+ float b){
super(world, x, y, z, vx, vy, vz);
this.setRBGColorF(r, g, b);
// NOTE: Uncomment once 2.1.0 is released
- //initialRed = r;
- //initialGreen = g;
- //initialBlue = b;
- this.particleMaxAge = 48 + this.rand.nextInt(12);
- }
+ // initialRed = r;
+ // initialGreen = g;
+ // initialBlue = b;
+ this.particleMaxAge = 48 + this.rand.nextInt(12);
+ }
- public ParticleSparkle(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g, float b, int maxAge){
+ public ParticleSparkle(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g,
+ float b, int maxAge){
super(world, x, y, z, vx, vy, vz, maxAge);
this.setRBGColorF(r, g, b);
// NOTE: Uncomment once 2.1.0 is released
- //initialRed = r;
- //initialGreen = g;
- //initialBlue = b;
- }
-
- public ParticleSparkle(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g, float b, boolean doGravity){
- this(world, x, y, z, vx, vy, vz, r, g, b);
- this.particleGravity = doGravity ? 1 : 0;
- }
-
- public ParticleSparkle(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g, float b, int maxAge, boolean doGravity){
- this(world, x, y, z, vx, vy, vz, r, g, b, maxAge);
- this.particleGravity = doGravity ? 1 : 0;
- }
-
- @Override
- public void init(){
- this.setParticleTextureIndex(rand.nextInt(16));
- this.particleScale *= 0.75f;
- this.particleGravity = 0;
- this.canCollide = false;
- this.fullBrightness = true;
- }
-
- @Override public ResourceLocation getTexture(){ return TEXTURE; }
- @Override protected int getXFrames(){ return 4; }
- @Override protected int getYFrames(){ return 4; }
+ // initialRed = r;
+ // initialGreen = g;
+ // initialBlue = b;
+ }
- @Override
- public void onUpdate(){
-
- super.onUpdate();
- // Fading
- if(this.particleAge > this.particleMaxAge / 2){
- this.setAlphaF(1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge);
- }
- // Colour fading TODO Uncomment once 2.1.0 is released
-// float ageFraction = (float)this.particleAge / (float)this.particleMaxAge;
-// this.setRBGColorF(this.initialRed + (this.fadeRed - this.initialRed)*ageFraction,
-// this.initialGreen + (this.fadeGreen - this.initialGreen)*ageFraction,
-// this.initialBlue + (this.fadeBlue - this.initialBlue)*ageFraction);
-//
-// this.setParticleTextureIndex((this.particleAge * 11)/this.particleMaxAge);
- }
-
- /*
- * As a side note, I see a lot of magic mods with fancy-looking particle effects that really seem to 'glow'. It's
- * actually not that hard - you simply create a reasonably high-res texture with translucency and then set the
- * OpenGL blend function to something like SRC_ALPHA, SRC_ALPHA or ONE, ONE. The thing is... they're not very
- * Minecraft-y. I still maintain that part of wizardry's appeal is that it stays true to the game's pixelated charm,
- * rather than trying to make it something it's not. Still, the newer textures are much better than the defaults I
- * used to use.
- */
+ public ParticleSparkle(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g,
+ float b, boolean doGravity){
+ this(world, x, y, z, vx, vy, vz, r, g, b);
+ this.particleGravity = doGravity ? 1 : 0;
+ }
+
+ public ParticleSparkle(World world, double x, double y, double z, double vx, double vy, double vz, float r, float g,
+ float b, int maxAge, boolean doGravity){
+ this(world, x, y, z, vx, vy, vz, r, g, b, maxAge);
+ this.particleGravity = doGravity ? 1 : 0;
+ }
+
+ @Override
+ public void init(){
+ this.setParticleTextureIndex(rand.nextInt(16));
+ this.particleScale *= 0.75f;
+ this.particleGravity = 0;
+ this.canCollide = false;
+ this.fullBrightness = true;
+ }
+
+ @Override
+ public ResourceLocation getTexture(){
+ return TEXTURE;
+ }
+
+ @Override
+ protected int getXFrames(){
+ return 4;
+ }
+
+ @Override
+ protected int getYFrames(){
+ return 4;
+ }
+
+ @Override
+ public void onUpdate(){
+
+ super.onUpdate();
+ // Fading
+ if(this.particleAge > this.particleMaxAge / 2){
+ this.setAlphaF(
+ 1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge);
+ }
+ // Colour fading TODO Uncomment once 2.1.0 is released
+ // float ageFraction = (float)this.particleAge / (float)this.particleMaxAge;
+ // this.setRBGColorF(this.initialRed + (this.fadeRed - this.initialRed)*ageFraction,
+ // this.initialGreen + (this.fadeGreen - this.initialGreen)*ageFraction,
+ // this.initialBlue + (this.fadeBlue - this.initialBlue)*ageFraction);
+ //
+ // this.setParticleTextureIndex((this.particleAge * 11)/this.particleMaxAge);
+ }
+
+ /* As a side note, I see a lot of magic mods with fancy-looking particle effects that really seem to 'glow'. It's
+ * actually not that hard - you simply create a reasonably high-res texture with translucency and then set the
+ * OpenGL blend function to something like SRC_ALPHA, SRC_ALPHA or ONE, ONE. The thing is... they're not very
+ * Minecraft-y. I still maintain that part of wizardry's appeal is that it stays true to the game's pixelated charm,
+ * rather than trying to make it something it's not. Still, the newer textures are much better than the defaults I
+ * used to use. */
}
diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleTornado.java b/src/main/java/electroblob/wizardry/client/particle/ParticleTornado.java
index 1dd5635b..8887e503 100644
--- a/src/main/java/electroblob/wizardry/client/particle/ParticleTornado.java
+++ b/src/main/java/electroblob/wizardry/client/particle/ParticleTornado.java
@@ -9,75 +9,77 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ParticleTornado extends ParticleDigging {
-
- private double angle;
- private double radius;
- private double speed;
- /** Velocity of the tornado itself; in other words the velocity of the point the particle circles around. */
- private double velX, velZ;
- private boolean fullBrightness = false;
- public ParticleTornado(World world, int maxAge, double originX, double originZ, double radius, double yPos, double velX, double velZ, IBlockState block){
- super(world, 0, 0, 0, 0, 0, 0, block);
- this.angle = this.rand.nextDouble() * Math.PI * 2;
- double x = originX - Math.cos(angle)*radius;
- double z = originZ + radius*Math.sin(angle);
- this.radius = radius;
- this.setPosition(x, yPos, z);
- this.prevPosX = x;
- this.prevPosY = yPos;
- this.prevPosZ = z;
- //this.particleScale *= 0.75F;
- this.particleMaxAge = maxAge;
- this.canCollide = false;
- // Grass has special treatment, since it has a colourised top but the rest is normal.
- // Commented out for now since vanilla does something about this now, but I'm not sure what exactly
- //if(block.getBlock() != Blocks.GRASS || side == 1) this.setColour(block.getRenderColor(side));
-
- // Blocks that emit light are rendered with full brightness.
- if(block.getLightValue(world, new BlockPos(this.posX, this.posY, this.posZ)) == 0){
- this.particleRed *= 0.75;
- this.particleGreen *= 0.75;
- this.particleBlue *= 0.75;
- }else{
- this.fullBrightness = true;
- }
-
- speed = rand.nextDouble()*2 + 1;
- this.velX = velX;
- this.velZ = velZ;
- }
+ private double angle;
+ private double radius;
+ private double speed;
+ /** Velocity of the tornado itself; in other words the velocity of the point the particle circles around. */
+ private double velX, velZ;
+ private boolean fullBrightness = false;
- @Override
- public void onUpdate(){
-
- this.prevPosX = this.posX;
- this.prevPosY = this.posY;
- this.prevPosZ = this.posZ;
+ public ParticleTornado(World world, int maxAge, double originX, double originZ, double radius, double yPos,
+ double velX, double velZ, IBlockState block){
+ super(world, 0, 0, 0, 0, 0, 0, block);
+ this.angle = this.rand.nextDouble() * Math.PI * 2;
+ double x = originX - Math.cos(angle) * radius;
+ double z = originZ + radius * Math.sin(angle);
+ this.radius = radius;
+ this.setPosition(x, yPos, z);
+ this.prevPosX = x;
+ this.prevPosY = yPos;
+ this.prevPosZ = z;
+ // this.particleScale *= 0.75F;
+ this.particleMaxAge = maxAge;
+ this.canCollide = false;
+ // Grass has special treatment, since it has a colourised top but the rest is normal.
+ // Commented out for now since vanilla does something about this now, but I'm not sure what exactly
+ // if(block.getBlock() != Blocks.GRASS || side == 1) this.setColour(block.getRenderColor(side));
- if(this.particleAge++ >= this.particleMaxAge){
- this.setExpired();
- }
-
- // This is in radians per tick...
- double omega = Math.signum(speed) * ((Math.PI*2)/20 - speed/(20*radius));
+ // Blocks that emit light are rendered with full brightness.
+ if(block.getLightValue(world, new BlockPos(this.posX, this.posY, this.posZ)) == 0){
+ this.particleRed *= 0.75;
+ this.particleGreen *= 0.75;
+ this.particleBlue *= 0.75;
+ }else{
+ this.fullBrightness = true;
+ }
- // v = r times omega; therefore the normalised velocity vector needs to be r times the angle increment / 2 pi.
- this.angle += omega;
-
- this.motionZ = radius * omega * Math.cos(angle);
- this.motionX = radius * omega * Math.sin(angle);
- this.moveEntity(motionX + velX, 0, motionZ + velZ);
+ speed = rand.nextDouble() * 2 + 1;
+ this.velX = velX;
+ this.velZ = velZ;
+ }
+
+ @Override
+ public void onUpdate(){
+
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+
+ if(this.particleAge++ >= this.particleMaxAge){
+ this.setExpired();
+ }
+
+ // This is in radians per tick...
+ double omega = Math.signum(speed) * ((Math.PI * 2) / 20 - speed / (20 * radius));
+
+ // v = r times omega; therefore the normalised velocity vector needs to be r times the angle increment / 2 pi.
+ this.angle += omega;
+
+ this.motionZ = radius * omega * Math.cos(angle);
+ this.motionX = radius * omega * Math.sin(angle);
+ this.move(motionX + velX, 0, motionZ + velZ);
+
+ if(this.particleAge > this.particleMaxAge / 2){
+ this.setAlphaF(
+ 1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge);
+ }
+
+ }
+
+ @Override
+ public int getBrightnessForRender(float partialTicks){
+ return fullBrightness ? 15728880 : super.getBrightnessForRender(partialTicks);
+ }
- if(this.particleAge > this.particleMaxAge / 2){
- this.setAlphaF(1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge);
- }
-
- }
-
- @Override
- public int getBrightnessForRender(float partialTicks){
- return fullBrightness ? 15728880 : super.getBrightnessForRender(partialTicks);
- }
-
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/LayerStone.java b/src/main/java/electroblob/wizardry/client/renderer/LayerStone.java
index 4365a842..82f5950f 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/LayerStone.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/LayerStone.java
@@ -1,14 +1,9 @@
package electroblob.wizardry.client.renderer;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.List;
import java.util.Map.Entry;
import org.lwjgl.opengl.GL11;
-import electroblob.wizardry.Wizardry;
import electroblob.wizardry.client.ClientProxy;
import electroblob.wizardry.spell.Petrify;
import net.minecraft.client.Minecraft;
@@ -20,172 +15,140 @@ import net.minecraft.client.renderer.GlStateManager.SourceFactor;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderLivingBase;
-import net.minecraft.client.renderer.entity.RenderZombie;
import net.minecraft.client.renderer.entity.layers.LayerRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
-import net.minecraftforge.fml.relauncher.ReflectionHelper;
/**
- * Layer used to render the stone texture on a petrified creature. Handles dynamic tiling of the stone texture and
- * reflective access for classes that don't play nicely (looking at you, {@link RenderZombie}).
+ * Layer used to render the stone texture on a petrified creature. Handles dynamic tiling of the stone texture.
+ *
* @author Electroblob
* @since Wizardry 1.2
*/
public class LayerStone implements LayerRenderer {
-
- protected ModelBase model;
- private final RenderLivingBase> renderer;
+
+ protected ModelBase model;
+ private final RenderLivingBase> renderer;
private static final ResourceLocation texture = new ResourceLocation("textures/blocks/stone.png");
- private static final Field zombieLayers = ReflectionHelper.findField(RenderZombie.class, "defaultLayers", "field_177122_o");
- private static final Field zombieVillagerLayers = ReflectionHelper.findField(RenderZombie.class, "villagerLayers", "field_177121_n");
- private static final Method swapZombieModel = ReflectionHelper.findMethod(RenderZombie.class, null,
- new String[]{"swapArmor", "func_82427_a"}, EntityZombie.class); // Second parameter (null) is unused
-
- @SuppressWarnings("unchecked") // The compiler is being annoying and I know that what I'm doing is type-safe.
public static void initialiseLayers(){
- for(Entry, Render extends Entity>> entry : Minecraft.getMinecraft().getRenderManager().entityRenderMap.entrySet()){
- // Zombies don't play nicely because they have their own, private lists of layers for the regular zombie
- // and the zombie villager, which are assigned within the constructor for RenderZombie and swapped out
- // as necessary. However, Mojang, in their infinite wisdom, haven't bothered to override addLayer to
- // modify those internal lists, so that method is useless.
- if(entry.getValue() instanceof RenderZombie){
- try {
- Object layers = zombieLayers.get(entry.getValue());
- if(layers instanceof List>){
- // Nice as the layer renderer system is, it doesn't lend itself to reflective access.
- // I KNOW that 'layers' (which was obtained using reflection) is of the type
- // List>, because that's what it's declared as. However, if I cast
- // 'layers' to List>, I can't add a LayerStone because it's only a
- // LayerRenderer, not a LayerRenderer.
- ((List>)layers).add(new LayerStone((RenderLivingBase>)entry.getValue()));
- }
- layers = zombieVillagerLayers.get(entry.getValue());
- if(layers instanceof List>){
- ((List>)layers).add(new LayerStone((RenderLivingBase>)entry.getValue()));
- }
- } catch (IllegalArgumentException | IllegalAccessException e){
- Wizardry.logger.error("Error while reflectively accessing zombie render layers");
- e.printStackTrace();
- }
- }else if(entry.getValue() instanceof RenderLivingBase){
+ for(Entry, Render extends Entity>> entry : Minecraft.getMinecraft()
+ .getRenderManager().entityRenderMap.entrySet()){
+ // Because the zombie classes are now split properly, their renderers play nicely like everything else.
+ if(entry.getValue() instanceof RenderLivingBase){
// Adds a stone layer to all the living entity renderers in the game. Whether it is actually rendered
// is decided in doRenderLayer below on a per-entity basis.
((RenderLivingBase>)entry.getValue()).addLayer(new LayerStone((RenderLivingBase>)entry.getValue()));
}
- // NOTE: May have to do some special stuff for players if they are to be added; see Minecraft.getMinecraft().getRenderManager().getSkinMap()
+ // NOTE: May have to do some special stuff for players if they are to be added; see
+ // Minecraft.getMinecraft().getRenderManager().getSkinMap()
}
}
-
- public LayerStone(RenderLivingBase> renderer){
- this.renderer = renderer;
- this.model = renderer.getMainModel();
- }
- @Override
- public void doRenderLayer(EntityLivingBase entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale){
-
- if(entity.getEntityData().getBoolean(Petrify.NBT_KEY)){
+ public LayerStone(RenderLivingBase> renderer){
+ this.renderer = renderer;
+ this.model = renderer.getMainModel();
+ }
+
+ @Override
+ public void doRenderLayer(EntityLivingBase entity, float limbSwing, float limbSwingAmount, float partialTicks,
+ float ageInTicks, float netHeadYaw, float headPitch, float scale){
+
+ if(entity.getEntityData().getBoolean(Petrify.NBT_KEY)){
GlStateManager.enableLighting();
- int i = this.getBlockBrightnessForEntity(entity, partialTicks);
+ int i = this.getBlockBrightnessForEntity(entity, partialTicks);
int j = i % 65536;
int k = i / 65536;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j / 1.0F, (float)k / 1.0F);
-
- ResourceLocation breakingTexture = ClientProxy.renderStatue.getBlockBreakingTexture();
-
- if(breakingTexture != null){
- // Block breaking animation
- // TODO: Spider eyes and enderman eyes (any others?) show through the stone when the block is being broken...
- GlStateManager.enableBlend();
- GlStateManager.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA);
- this.renderer.bindTexture(breakingTexture);
- this.renderEntityModel(entity, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale);
- GlStateManager.disableBlend();
- }else{
- // Stone texture
- this.renderer.bindTexture(texture);
- this.renderEntityModel(entity, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale);
- }
- }
- }
-
- private int getBlockBrightnessForEntity(Entity entity, float partialTicks){
-
- BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(MathHelper.floor_double(entity.posX), 0, MathHelper.floor_double(entity.posZ));
- if(entity.worldObj.isBlockLoaded(pos)){
- pos.setY(MathHelper.floor_double(entity.posY + (double)entity.getEyeHeight()));
- return entity.worldObj.getCombinedLight(pos, 0);
- }else{
- return 0;
- }
- }
+ ResourceLocation breakingTexture = ClientProxy.renderStatue.getBlockBreakingTexture();
+
+ if(breakingTexture != null){
+ // Block breaking animation
+ // TODO: Spider eyes and enderman eyes (any others?) show through the stone when the block is being
+ // broken...
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA);
+ this.renderer.bindTexture(breakingTexture);
+ this.renderEntityModel(entity, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw,
+ headPitch, scale);
+ GlStateManager.disableBlend();
+ }else{
+ // Stone texture
+ this.renderer.bindTexture(texture);
+ this.renderEntityModel(entity, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw,
+ headPitch, scale);
+ }
+ }
+ }
+
+ private int getBlockBrightnessForEntity(Entity entity, float partialTicks){
+
+ BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(MathHelper.floor(entity.posX), 0,
+ MathHelper.floor(entity.posZ));
+
+ if(entity.world.isBlockLoaded(pos)){
+ pos.setY(MathHelper.floor(entity.posY + (double)entity.getEyeHeight()));
+ return entity.world.getCombinedLight(pos, 0);
+ }else{
+ return 0;
+ }
+ }
+
+ private void renderEntityModel(EntityLivingBase entity, float limbSwing, float limbSwingAmount, float partialTicks,
+ float ageInTicks, float netHeadYaw, float headPitch, float scale){
- private void renderEntityModel(EntityLivingBase entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale){
-
GlStateManager.pushMatrix();
// Enables tiling (Also used for guardian beam, beacon beam and ender crystal beam)
// TODO: Backport this improvement
GlStateManager.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
GlStateManager.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
-
+
GlStateManager.depthMask(true); // Some entities set depth mask to false (i.e. no sorting of faces by depth)
// In particular, LayerSpiderEyes sets it to false when the spider is invisible, for some reason.
-
+
// Changes the scale at which the texture is applied to the model. See LayerCreeper for a similar example,
// but with translation instead of scaling.
+ // NOTE: You can do all sorts of fun stuff with this, just by applying transformations in the 2D texture space.
GlStateManager.matrixMode(GL11.GL_TEXTURE);
GlStateManager.loadIdentity();
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
// (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){
- scaleX = (double)model.boxList.get(0).textureWidth/16d;
- scaleY = (double)model.boxList.get(0).textureHeight/16d;
+ scaleX = (double)model.boxList.get(0).textureWidth / 16d;
+ scaleY = (double)model.boxList.get(0).textureHeight / 16d;
}else{ // Fallback to model fields; should never be needed
- scaleX = (double)model.textureWidth/16d;
- scaleY = (double)model.textureHeight/16d;
+ scaleX = (double)model.textureWidth / 16d;
+ scaleY = (double)model.textureHeight / 16d;
}
GlStateManager.scale(scaleX, scaleY, 1);
GlStateManager.matrixMode(GL11.GL_MODELVIEW);
-
- // Lets RenderZombie do its (stupid and inflexible) model switching thing
- if(this.renderer instanceof RenderZombie && entity instanceof EntityZombie){
- try {
- swapZombieModel.invoke(this.renderer, entity);
- this.model = this.renderer.getMainModel();
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
- Wizardry.logger.error("Error while reflectively calling RenderZombie#swapArmor");
- e.printStackTrace();
- }
- }
- // Hides the hat layer for bipeds
- if(this.model instanceof ModelBiped) ((ModelBiped) this.model).bipedHeadwear.isHidden = true;
+ // Hides the hat layer for bipeds
+ if(this.model instanceof ModelBiped) ((ModelBiped)this.model).bipedHeadwear.isHidden = true;
+
this.model.setLivingAnimations(entity, limbSwing, limbSwingAmount, partialTicks);
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 = false;
+
// Undoes the texture scaling
GlStateManager.matrixMode(GL11.GL_TEXTURE);
GlStateManager.loadIdentity();
GlStateManager.matrixMode(GL11.GL_MODELVIEW);
-
+
GlStateManager.popMatrix();
}
- @Override
- public boolean shouldCombineTextures(){
- return false;
- }
+ @Override
+ public boolean shouldCombineTextures(){
+ return false;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RayHelper.java b/src/main/java/electroblob/wizardry/client/renderer/RayHelper.java
index 0fdd1e1e..1f5a979b 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RayHelper.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RayHelper.java
@@ -7,8 +7,9 @@ class RayHelper implements Comparable {
double x1, y1, z1;
double x2, y2, z2;
double offsetX, offsetY, offsetZ;
-
- RayHelper(int ordinal, double x1, double y1, double z1, double x2, double y2, double z2, double offsetX, double offsetY, double offsetZ){
+
+ RayHelper(int ordinal, double x1, double y1, double z1, double x2, double y2, double z2, double offsetX,
+ double offsetY, double offsetZ){
this.ordinal = ordinal;
this.x1 = x1;
this.y1 = y1;
@@ -20,20 +21,20 @@ class RayHelper implements Comparable {
this.offsetY = offsetY;
this.offsetZ = offsetZ;
}
-
+
double getDistanceFromViewpoint(){
-
- double midX = (x1+x2)/2;
- double midY = (y1+y2)/2;
- double midZ = (z1+z2)/2;
-
- double absoluteX = offsetX+midX;
- double absoluteY = offsetY+midY;
- double absoluteZ = offsetZ+midZ;
-
- return Math.sqrt(absoluteX*absoluteX + absoluteY*absoluteY + absoluteZ*absoluteZ);
+
+ double midX = (x1 + x2) / 2;
+ double midY = (y1 + y2) / 2;
+ double midZ = (z1 + z2) / 2;
+
+ double absoluteX = offsetX + midX;
+ double absoluteY = offsetY + midY;
+ double absoluteZ = offsetZ + midZ;
+
+ return Math.sqrt(absoluteX * absoluteX + absoluteY * absoluteY + absoluteZ * absoluteZ);
}
-
+
@Override
public int compareTo(RayHelper ray){
if(this.getDistanceFromViewpoint() > ray.getDistanceFromViewpoint()){
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderArc.java b/src/main/java/electroblob/wizardry/client/renderer/RenderArc.java
index 6bf600d1..26cf6cb9 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderArc.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderArc.java
@@ -19,23 +19,23 @@ public class RenderArc extends Render {
public RenderArc(RenderManager renderManager){
super(renderManager);
- for(int i=0;i<16;i++){
+ for(int i = 0; i < 16; i++){
textures[i] = new ResourceLocation(Wizardry.MODID, "textures/entity/arc_" + i + ".png");
}
}
@Override
- public void doRender(EntityArc arc, double d0, double d1, double d2,
- float fa, float fb) {
+ public void doRender(EntityArc arc, double d0, double d1, double d2, float fa, float fb){
GlStateManager.pushMatrix();
GlStateManager.translate((float)d0, (float)d1, (float)d2);
GlStateManager.disableLighting();
GlStateManager.enableBlend();
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); //This line fixes the weird brightness bug.
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); // This line fixes the weird
+ // brightness bug.
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
- //System.out.println("Entity coords: " + entity.posX + ", " + entity.posY + ", " + entity.posZ);
- //System.out.println("doRender parameters: " + d0 + ", " + d1 + ", " + d2 + ", " + fa + ", " + fb);
+ // System.out.println("Entity coords: " + entity.posX + ", " + entity.posY + ", " + entity.posZ);
+ // System.out.println("doRender parameters: " + d0 + ", " + d1 + ", " + d2 + ", " + fa + ", " + fb);
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
@@ -57,62 +57,66 @@ public class RenderArc extends Render {
dy = arc.y1 - arc.posY + 0.3;
dz = arc.z1 - arc.posZ;// + d0/lengthOffsetRatio;
+ // The distance from caster to target
+ double arcLength = Math.sqrt(dz * dz + dx * dx);
- //The distance from caster to target
- double arcLength = Math.sqrt(dz*dz+dx*dx);
+ // The ratio between the length of the arc and the offset of the start point from the player's centre (which
+ // is always 0.3).
+ // double lengthOffsetRatio = arcLength/0.3;
- //The ratio between the length of the arc and the offset of the start point from the player's centre (which is always 0.3).
- //double lengthOffsetRatio = arcLength/0.3;
+ // EntityClientPlayerMP player = Minecraft.getMinecraft().player;
- //EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
+ // double xViewDist = player.posX - d0;
+ // double yViewDist = player.posY + player.eyeHeight - d1;
+ // double zViewDist = player.posZ - d2;
- //double xViewDist = player.posX - d0;
- //double yViewDist = player.posY + player.eyeHeight - d1;
- //double zViewDist = player.posZ - d2;
+ // double xzViewDist = Math.sqrt(xViewDist * xViewDist + zViewDist * zViewDist);
- //double xzViewDist = Math.sqrt(xViewDist * xViewDist + zViewDist * zViewDist);
+ // The angle above the horizontal that this particular player is viewing the arc from
+ // double viewAngle = Math.atan(yViewDist/xzViewDist);
- //The angle above the horizontal that this particular player is viewing the arc from
- //double viewAngle = Math.atan(yViewDist/xzViewDist);
-
- //Half the width of the arc
+ // Half the width of the arc
double arcWidth = 0.3d;
- //Right hand side of vertical plane
+ // Right hand side of vertical plane
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- //Target end
+ // Target end
buffer.pos(0, -0.5, 0).tex(1, 1).endVertex();
buffer.pos(0, 0.5, 0).tex(1, 0).endVertex();
- //Caster end
+ // Caster end
buffer.pos(dx, dy, dz).tex(0, 0).endVertex();
- buffer.pos(dx, dy-1, dz).tex(0, 1).endVertex();
+ buffer.pos(dx, dy - 1, dz).tex(0, 1).endVertex();
tessellator.draw();
- //Left
+ // Left
buffer.begin(GL11.GL_QUADS, net.minecraft.client.renderer.vertex.DefaultVertexFormats.POSITION_TEX);
- //Target end
+ // Target end
buffer.pos(0, -0.5, 0).tex(1, 1).endVertex();
- //Caster end
- buffer.pos(dx, dy-1, dz).tex(0, 1).endVertex();
+ // Caster end
+ buffer.pos(dx, dy - 1, dz).tex(0, 1).endVertex();
buffer.pos(dx, dy, dz).tex(0, 0).endVertex();
- //Target end
+ // Target end
buffer.pos(0, 0.5, 0).tex(1, 0).endVertex();
tessellator.draw();
- //Bottom of horizontal plane
+ // Bottom of horizontal plane
buffer.begin(GL11.GL_QUADS, net.minecraft.client.renderer.vertex.DefaultVertexFormats.POSITION_TEX);
- buffer.pos((arcWidth/arcLength)*dz, 0, (-arcWidth/arcLength)*dx).tex(1, 1).endVertex();
- buffer.pos(dx + (arcWidth/arcLength)*dz, dy-0.5, dz - (arcWidth/arcLength)*dx).tex(0, 1).endVertex();
- buffer.pos(dx - (arcWidth/arcLength)*dz, dy-0.5, dz + (arcWidth/arcLength)*dx).tex(0, 0).endVertex();
- buffer.pos((-arcWidth/arcLength)*dz, 0, (arcWidth/arcLength)*dx).tex(1, 0).endVertex();
+ buffer.pos((arcWidth / arcLength) * dz, 0, (-arcWidth / arcLength) * dx).tex(1, 1).endVertex();
+ buffer.pos(dx + (arcWidth / arcLength) * dz, dy - 0.5, dz - (arcWidth / arcLength) * dx).tex(0, 1)
+ .endVertex();
+ buffer.pos(dx - (arcWidth / arcLength) * dz, dy - 0.5, dz + (arcWidth / arcLength) * dx).tex(0, 0)
+ .endVertex();
+ buffer.pos((-arcWidth / arcLength) * dz, 0, (arcWidth / arcLength) * dx).tex(1, 0).endVertex();
tessellator.draw();
- //Top
+ // Top
buffer.begin(GL11.GL_QUADS, net.minecraft.client.renderer.vertex.DefaultVertexFormats.POSITION_TEX);
- buffer.pos((arcWidth/arcLength)*dz, 0, (-arcWidth/arcLength)*dx).tex(1, 1).endVertex();
- buffer.pos((-arcWidth/arcLength)*dz, 0, (arcWidth/arcLength)*dx).tex(1, 0).endVertex();
- buffer.pos(dx - (arcWidth/arcLength)*dz, dy-0.5, dz + (arcWidth/arcLength)*dx).tex(0, 0).endVertex();
- buffer.pos(dx + (arcWidth/arcLength)*dz, dy-0.5, dz - (arcWidth/arcLength)*dx).tex(0, 1).endVertex();
+ buffer.pos((arcWidth / arcLength) * dz, 0, (-arcWidth / arcLength) * dx).tex(1, 1).endVertex();
+ buffer.pos((-arcWidth / arcLength) * dz, 0, (arcWidth / arcLength) * dx).tex(1, 0).endVertex();
+ buffer.pos(dx - (arcWidth / arcLength) * dz, dy - 0.5, dz + (arcWidth / arcLength) * dx).tex(0, 0)
+ .endVertex();
+ buffer.pos(dx + (arcWidth / arcLength) * dz, dy - 0.5, dz - (arcWidth / arcLength) * dx).tex(0, 1)
+ .endVertex();
tessellator.draw();
}
@@ -122,7 +126,7 @@ public class RenderArc extends Render {
}
@Override
- protected ResourceLocation getEntityTexture(EntityArc entity) {
+ protected ResourceLocation getEntityTexture(EntityArc entity){
return textures[entity.textureIndex];
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneWorkbench.java b/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneWorkbench.java
index 12203694..67ac553e 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneWorkbench.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneWorkbench.java
@@ -18,82 +18,86 @@ import net.minecraft.util.ResourceLocation;
public class RenderArcaneWorkbench extends TileEntitySpecialRenderer {
- private static final ResourceLocation runeTexture = new ResourceLocation(Wizardry.MODID, "textures/entity/rune.png");
-
- public RenderArcaneWorkbench(){}
-
- @Override
- public void renderTileEntityAt(TileEntityArcaneWorkbench tileentity, double x, double y, double z, float partialTicks, int destroyStage) {
+ private static final ResourceLocation runeTexture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/rune.png");
- GlStateManager.pushMatrix();
- // This line makes stuff render in the same place relative to the world wherever the player is.
+ public RenderArcaneWorkbench(){
+ }
+
+ @Override
+ public void renderTileEntityAt(TileEntityArcaneWorkbench tileentity, double x, double y, double z,
+ float partialTicks, int destroyStage){
+
+ GlStateManager.pushMatrix();
+ // This line makes stuff render in the same place relative to the world wherever the player is.
GlStateManager.translate((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F);
GlStateManager.rotate(180, 0F, 0F, 1F);
- GlStateManager.pushMatrix();
- double angle = 0.0d;
- if(x < -0.5){
- angle = Math.toDegrees(Math.atan((z+0.5)/(x+0.5))) + 180;
- }else{
- angle = Math.toDegrees(Math.atan((z+0.5)/(x+0.5)));
- }
+ GlStateManager.pushMatrix();
+ double angle = 0.0d;
+ if(x < -0.5){
+ angle = Math.toDegrees(Math.atan((z + 0.5) / (x + 0.5))) + 180;
+ }else{
+ angle = Math.toDegrees(Math.atan((z + 0.5) / (x + 0.5)));
+ }
this.renderEffect(tileentity);
this.renderWand(tileentity, angle);
- GlStateManager.popMatrix();
- GlStateManager.popMatrix();
+ GlStateManager.popMatrix();
+ GlStateManager.popMatrix();
}
-
- private void renderEffect(TileEntityArcaneWorkbench tileentity) {
- ItemStack itemstack = tileentity.getStackInSlot(ContainerArcaneWorkbench.WAND_SLOT);
-
- if(itemstack != null){
- GlStateManager.pushMatrix();
- GlStateManager.disableLighting();
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
- GlStateManager.enableBlend();
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); //This line fixes the weird brightness bug.
- GlStateManager.rotate(tileentity.timer, 0.0f, 1.0f, 0.0f);
- GlStateManager.translate(0.0f, 0.65f, 0.0f);
+ private void renderEffect(TileEntityArcaneWorkbench tileentity){
+
+ ItemStack itemstack = tileentity.getStackInSlot(ContainerArcaneWorkbench.WAND_SLOT);
+
+ if(!itemstack.isEmpty()){
+ GlStateManager.pushMatrix();
+ GlStateManager.disableLighting();
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); // This line fixes the weird
+ // brightness bug.
+ GlStateManager.rotate(tileentity.timer, 0.0f, 1.0f, 0.0f);
+ GlStateManager.translate(0.0f, 0.65f, 0.0f);
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
bindTexture(runeTexture);
-
+
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
buffer.pos(-0.5f, 0, -0.5f).tex(0, 0).endVertex();
buffer.pos(0.5f, 0, -0.5f).tex(1, 0).endVertex();
buffer.pos(0.5f, 0, 0.5f).tex(1, 1).endVertex();
buffer.pos(-0.5f, 0, 0.5f).tex(0, 1).endVertex();
tessellator.draw();
-
- GlStateManager.disableBlend();
- GlStateManager.enableLighting();
- GlStateManager.popMatrix();
- }
+
+ GlStateManager.disableBlend();
+ GlStateManager.enableLighting();
+ GlStateManager.popMatrix();
+ }
}
/**
* Renders the wand on the workbench as 3D on the model. Currently doesn't do much on 'fast' graphics!
+ *
* @param tileentity The instance of the workbench tile entity
*/
- private void renderWand(TileEntityArcaneWorkbench tileentity, double viewAngle)
- {
- ItemStack stack = tileentity.getStackInSlot(ContainerArcaneWorkbench.WAND_SLOT);
-
- if(stack != null){
-
- GlStateManager.pushMatrix();
- GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F);
- GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
-
- GlStateManager.rotate(180, 0, 1, 0);
- // View angle is negated because of the 180 flip.
- GlStateManager.rotate((float)(-viewAngle-90f), 0, 0, 1);
- // Does the floaty thing
- GlStateManager.translate(0.0F, 0.0F, (float)tileentity.yOffset/5000.0F - 0.55f);
- GlStateManager.scale(0.75F, 0.75F, 0.75F);
- // This is what the item frame uses so it's definitely what we want.
- Minecraft.getMinecraft().getRenderItem().renderItem(stack, TransformType.FIXED);
- GlStateManager.popMatrix();
- }
- }
+ private void renderWand(TileEntityArcaneWorkbench tileentity, double viewAngle){
+ ItemStack stack = tileentity.getStackInSlot(ContainerArcaneWorkbench.WAND_SLOT);
+
+ if(!stack.isEmpty()){
+
+ GlStateManager.pushMatrix();
+ GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
+
+ GlStateManager.rotate(180, 0, 1, 0);
+ // View angle is negated because of the 180 flip.
+ GlStateManager.rotate((float)(-viewAngle - 90f), 0, 0, 1);
+ // Does the floaty thing
+ GlStateManager.translate(0.0F, 0.0F, (float)tileentity.yOffset / 5000.0F - 0.55f);
+ GlStateManager.scale(0.75F, 0.75F, 0.75F);
+ // This is what the item frame uses so it's definitely what we want.
+ Minecraft.getMinecraft().getRenderItem().renderItem(stack, TransformType.FIXED);
+ GlStateManager.popMatrix();
+ }
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderBlackHole.java b/src/main/java/electroblob/wizardry/client/renderer/RenderBlackHole.java
index 67cdd6e8..1ff255e5 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderBlackHole.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderBlackHole.java
@@ -20,15 +20,17 @@ import net.minecraft.util.ResourceLocation;
public class RenderBlackHole extends Render {
- private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/entity/dark_ray.png");
- private static final ResourceLocation texture2 = new ResourceLocation(Wizardry.MODID, "textures/entity/black_hole.png");
+ private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/dark_ray.png");
+ private static final ResourceLocation texture2 = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/black_hole.png");
- public RenderBlackHole(RenderManager renderManager) {
+ public RenderBlackHole(RenderManager renderManager){
super(renderManager);
}
@Override
- public void doRender(EntityBlackHole blackhole, double x, double y, double z, float fa, float fb) {
+ public void doRender(EntityBlackHole blackhole, double x, double y, double z, float fa, float fb){
GlStateManager.pushMatrix();
@@ -42,8 +44,8 @@ public class RenderBlackHole extends Render {
GlStateManager.translate(x, y, z);
- //float pitch = (float) Math.toDegrees(Math.atan(y/(x*x+z*z)));
- //float yaw = (float) Math.toDegrees(Math.atan(x/z));
+ // float pitch = (float) Math.toDegrees(Math.atan(y/(x*x+z*z)));
+ // float yaw = (float) Math.toDegrees(Math.atan(x/z));
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
@@ -51,10 +53,13 @@ public class RenderBlackHole extends Render {
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
if(blackhole.ticksExisted < 10){
- GlStateManager.scale((float)blackhole.ticksExisted/10, (float)blackhole.ticksExisted/10, (float)blackhole.ticksExisted/10);
+ GlStateManager.scale((float)blackhole.ticksExisted / 10, (float)blackhole.ticksExisted / 10,
+ (float)blackhole.ticksExisted / 10);
}
if(blackhole.ticksExisted > blackhole.lifetime - 10){
- GlStateManager.scale((float)(blackhole.lifetime-blackhole.ticksExisted)/10, (float)(blackhole.lifetime-blackhole.ticksExisted)/10, (float)(blackhole.lifetime-blackhole.ticksExisted)/10);
+ GlStateManager.scale((float)(blackhole.lifetime - blackhole.ticksExisted) / 10,
+ (float)(blackhole.lifetime - blackhole.ticksExisted) / 10,
+ (float)(blackhole.lifetime - blackhole.ticksExisted) / 10);
}
this.bindTexture(texture);
@@ -67,7 +72,7 @@ public class RenderBlackHole extends Render {
ArrayList rays = new ArrayList(1);
- for(int j=0; j<30; j++){
+ for(int j = 0; j < 30; j++){
float scale = 3.0f;
@@ -76,33 +81,29 @@ public class RenderBlackHole extends Render {
int sliceAngle = 20 + a;
- double x1 = scale*Math.sin((blackhole.ticksExisted + 40*j)*(Math.PI/180));
- //double y1 = 0.7*Math.cos((blackhole.timer - 40*j)*(Math.PI/180))*j/10;
- double z1 = scale*Math.cos((blackhole.ticksExisted + 40*j)*(Math.PI/180));
+ double x1 = scale * Math.sin((blackhole.ticksExisted + 40 * j) * (Math.PI / 180));
+ // double y1 = 0.7*Math.cos((blackhole.timer - 40*j)*(Math.PI/180))*j/10;
+ double z1 = scale * Math.cos((blackhole.ticksExisted + 40 * j) * (Math.PI / 180));
- double x2 = scale*Math.sin((blackhole.ticksExisted + 40*j - sliceAngle)*(Math.PI/180));
- //double y2 = 0.7*Math.sin((blackhole.timer - 40*j)*(Math.PI/180))*j/10;
- double z2 = scale*Math.cos((blackhole.ticksExisted + 40*j - sliceAngle)*(Math.PI/180));
+ double x2 = scale * Math.sin((blackhole.ticksExisted + 40 * j - sliceAngle) * (Math.PI / 180));
+ // double y2 = 0.7*Math.sin((blackhole.timer - 40*j)*(Math.PI/180))*j/10;
+ double z2 = scale * Math.cos((blackhole.ticksExisted + 40 * j - sliceAngle) * (Math.PI / 180));
- double absoluteX = x1*Math.cos(31*b);
- double absoluteY = z1*Math.sin(31*a) + x1*Math.cos(31*a)*Math.sin(31*b);
- double absoluteZ = z1*Math.cos(31*a);
+ double absoluteX = x1 * Math.cos(31 * b);
+ double absoluteY = z1 * Math.sin(31 * a) + x1 * Math.cos(31 * a) * Math.sin(31 * b);
+ double absoluteZ = z1 * Math.cos(31 * a);
- double absoluteX2 = x2*Math.cos(31*b);
- double absoluteY2 = z2*Math.sin(31*a) + x2*Math.cos(31*a)*Math.sin(31*b);
- double absoluteZ2 = z2*Math.cos(31*a);
- /*
- buffer.begin(0, DefaultVertexFormats.POSITION_TEX);
-
- tessellator.setColorOpaque(255, 255, 255);
- GL11.glPointSize(5);
-
- tessellator.addVertex(absoluteX-x, 0, 0);
- tessellator.addVertex(0, absoluteY-y, 0);
- tessellator.addVertex(0, 0, absoluteZ-z);
-
- tessellator.draw();
- */
+ double absoluteX2 = x2 * Math.cos(31 * b);
+ double absoluteY2 = z2 * Math.sin(31 * a) + x2 * Math.cos(31 * a) * Math.sin(31 * b);
+ double absoluteZ2 = z2 * Math.cos(31 * a);
+ /* buffer.begin(0, DefaultVertexFormats.POSITION_TEX);
+ *
+ * tessellator.setColorOpaque(255, 255, 255); GL11.glPointSize(5);
+ *
+ * tessellator.addVertex(absoluteX-x, 0, 0); tessellator.addVertex(0, absoluteY-y, 0);
+ * tessellator.addVertex(0, 0, absoluteZ-z);
+ *
+ * tessellator.draw(); */
rays.add(new RayHelper(j, absoluteX, absoluteY, absoluteZ, absoluteX2, absoluteY2, absoluteZ2, x, y, z));
}
@@ -112,16 +113,16 @@ public class RenderBlackHole extends Render {
for(RayHelper ray : rays){
GlStateManager.pushMatrix();
- //GlStateManager.rotate(31*blackhole.randomiser[ray.ordinal], 1, 0, 0);
- //GlStateManager.rotate(31*blackhole.randomiser2[ray.ordinal], 0, 0, 1);
+ // GlStateManager.rotate(31*blackhole.randomiser[ray.ordinal], 1, 0, 0);
+ // GlStateManager.rotate(31*blackhole.randomiser2[ray.ordinal], 0, 0, 1);
buffer.begin(5, DefaultVertexFormats.POSITION_TEX);
- //tessellator.setColorRGBA(255, 255, 255, 0);
+ // tessellator.setColorRGBA(255, 255, 255, 0);
buffer.pos(0, 0, 0).tex(0, 0).endVertex();
buffer.pos(0, 0, 0).tex(0, 1).endVertex();
- //tessellator.setColorRGBA(0, 0, 0, 255);
+ // tessellator.setColorRGBA(0, 0, 0, 255);
buffer.pos(ray.x1, ray.y1, ray.z1).tex(1, 0).endVertex();
buffer.pos(ray.x2, ray.y2, ray.z2).tex(1, 1).endVertex();
@@ -132,20 +133,15 @@ public class RenderBlackHole extends Render {
GlStateManager.pushMatrix();
- /* Deprecated in favour of particle style method.
- GlStateManager.rotate(yaw, 0, 1, 0);
- // GL transformations are relative, hence only x rotation
- if(z < 0){
- GlStateManager.rotate(pitch, 1, 0, 0);
- }else{
- GlStateManager.rotate(-1*pitch, 1, 0, 0);
- }
- */
+ /* Deprecated in favour of particle style method. GlStateManager.rotate(yaw, 0, 1, 0); // GL transformations are
+ * relative, hence only x rotation if(z < 0){ GlStateManager.rotate(pitch, 1, 0, 0); }else{
+ * GlStateManager.rotate(-1*pitch, 1, 0, 0); } */
// Renders the aura effect
// This counteracts the reverse rotation behaviour when in front f5 view. Vanilla now has this fix too.
- float yaw = Minecraft.getMinecraft().gameSettings.thirdPersonView == 2 ? this.renderManager.playerViewX : -this.renderManager.playerViewX;
+ float yaw = Minecraft.getMinecraft().gameSettings.thirdPersonView == 2 ? this.renderManager.playerViewX
+ : -this.renderManager.playerViewX;
GlStateManager.rotate(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate(yaw, 1.0F, 0.0F, 0.0F);
@@ -162,7 +158,6 @@ public class RenderBlackHole extends Render {
GlStateManager.popMatrix();
-
GlStateManager.shadeModel(GL11.GL_FLAT);
GlStateManager.enableCull();
GlStateManager.disableBlend();
@@ -173,7 +168,7 @@ public class RenderBlackHole extends Render {
}
@Override
- protected ResourceLocation getEntityTexture(EntityBlackHole entity) {
+ protected ResourceLocation getEntityTexture(EntityBlackHole entity){
return texture;
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderBlank.java b/src/main/java/electroblob/wizardry/client/renderer/RenderBlank.java
index 01926ccc..477b6092 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderBlank.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderBlank.java
@@ -7,18 +7,17 @@ import net.minecraft.util.ResourceLocation;
public class RenderBlank extends Render {
- public RenderBlank(RenderManager renderManager) {
+ public RenderBlank(RenderManager renderManager){
super(renderManager);
}
@Override
- public void doRender(Entity entity, double d0, double d1, double d2,
- float f, float f1) {
+ public void doRender(Entity entity, double d0, double d1, double d2, float f, float f1){
}
@Override
- protected ResourceLocation getEntityTexture(Entity entity) {
+ protected ResourceLocation getEntityTexture(Entity entity){
return null;
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderBubble.java b/src/main/java/electroblob/wizardry/client/renderer/RenderBubble.java
index d96a1020..107c4ecf 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderBubble.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderBubble.java
@@ -18,9 +18,10 @@ import net.minecraft.util.ResourceLocation;
public class RenderBubble extends Render {
private static final ResourceLocation particleTextures = new ResourceLocation("textures/particle/particles.png");
- private static final ResourceLocation darkOrbTexture = new ResourceLocation(Wizardry.MODID, "textures/entity/dark_orb.png");
+ private static final ResourceLocation darkOrbTexture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/dark_orb.png");
- public RenderBubble(RenderManager renderManager) {
+ public RenderBubble(RenderManager renderManager){
super(renderManager);
}
@@ -34,7 +35,7 @@ public class RenderBubble extends Render {
float yOffset = 0;
if(WizardryUtilities.getRider(entity) != null){
- yOffset = WizardryUtilities.getRider(entity).height/2;
+ yOffset = WizardryUtilities.getRider(entity).height / 2;
}
GlStateManager.translate((float)par2, (float)par4 + yOffset, (float)par6);
@@ -58,20 +59,21 @@ public class RenderBubble extends Render {
// This counteracts the reverse rotation behaviour when in front f5 view.
// Fun fact: this is a bug with vanilla too! Look at a snowball in front f5 view, for example.
- float yaw = Minecraft.getMinecraft().gameSettings.thirdPersonView == 2 ? this.renderManager.playerViewX : -this.renderManager.playerViewX;
+ float yaw = Minecraft.getMinecraft().gameSettings.thirdPersonView == 2 ? this.renderManager.playerViewX
+ : -this.renderManager.playerViewX;
GlStateManager.rotate(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate(yaw, 1.0F, 0.0F, 0.0F);
float f11 = 3.0F;
GlStateManager.scale(f11, f11, f11);
- double pixelwidth = (1.0d/128);
+ double pixelwidth = (1.0d / 128);
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- //tessellator.setColorRGBA_I(k1, 128);
- //buffer.normal(0.0F, 1.0F, 0.0F);
+ // tessellator.setColorRGBA_I(k1, 128);
+ // buffer.normal(0.0F, 1.0F, 0.0F);
if(((EntityBubble)entity).isDarkOrb){
buffer.pos((double)(0.0F - f7), (double)(0.0F - f8), 0.0D).tex(0, 1).endVertex();
@@ -80,8 +82,8 @@ public class RenderBubble extends Render {
buffer.pos((double)(0.0F - f7), (double)(1.0F - f8), 0.0D).tex(0, 0).endVertex();
}else{
buffer.pos((double)(0.0F - f7), (double)(0.0F - f8), 0.0D).tex(pixelwidth, pixelwidth * 24).endVertex();
- buffer.pos((double)(f6 - f7), (double)(0.0F - f8), 0.0D).tex(pixelwidth*8, pixelwidth * 24).endVertex();
- buffer.pos((double)(f6 - f7), (double)(1.0F - f8), 0.0D).tex(pixelwidth*8, pixelwidth * 17).endVertex();
+ buffer.pos((double)(f6 - f7), (double)(0.0F - f8), 0.0D).tex(pixelwidth * 8, pixelwidth * 24).endVertex();
+ buffer.pos((double)(f6 - f7), (double)(1.0F - f8), 0.0D).tex(pixelwidth * 8, pixelwidth * 17).endVertex();
buffer.pos((double)(0.0F - f7), (double)(1.0F - f8), 0.0D).tex(pixelwidth, pixelwidth * 17).endVertex();
}
@@ -97,7 +99,7 @@ public class RenderBubble extends Render {
}
@Override
- protected ResourceLocation getEntityTexture(EntityBubble entity) {
+ protected ResourceLocation getEntityTexture(EntityBubble entity){
return null;
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderDecay.java b/src/main/java/electroblob/wizardry/client/renderer/RenderDecay.java
index f849f967..f206b8f1 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderDecay.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderDecay.java
@@ -16,58 +16,58 @@ import net.minecraft.util.ResourceLocation;
public class RenderDecay extends Render {
private static final ResourceLocation[] textures = new ResourceLocation[10];
-
+
public RenderDecay(RenderManager renderManager){
super(renderManager);
- for(int i=0;i<10;i++){
+ for(int i = 0; i < 10; i++){
textures[i] = new ResourceLocation(Wizardry.MODID, "textures/entity/decay_" + i + ".png");
}
}
@Override
- public void doRender(EntityDecay entity, double par2, double par4, double par6, float par8, float par9){
-
- GlStateManager.pushMatrix();
- GlStateManager.enableBlend();
- GlStateManager.disableLighting();
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
-
- float yOffset = 0;
-
- GlStateManager.translate((float)par2, (float)par4 + yOffset, (float)par6);
-
- this.bindTexture(textures[((EntityDecay)entity).textureIndex]);
- float f6 = 1.0F;
- float f7 = 0.5F;
- float f8 = 0.5F;
-
- GlStateManager.rotate(-90, 1, 0, 0);
-
- float scale = 2*Math.min(1, (float)(EntityDecay.LIFETIME - entity.ticksExisted)/50f);
-
- GlStateManager.scale(scale, scale, scale);
-
- Tessellator tessellator = Tessellator.getInstance();
- VertexBuffer buffer = tessellator.getBuffer();
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- //tessellator.setColorRGBA_I(k1, 128);
- //buffer.normal(0.0F, 1.0F, 0.0F);
- buffer.pos((double)(0.0F - f7), (double)(0.0F - f8), 0.01).tex(0, 1).endVertex();
- buffer.pos((double)(f6 - f7), (double)(0.0F - f8), 0.01).tex(1, 1).endVertex();
- buffer.pos((double)(f6 - f7), (double)(1.0F - f8), 0.01).tex(1, 0).endVertex();
- buffer.pos((double)(0.0F - f7), (double)(1.0F - f8), 0.01).tex(0, 0).endVertex();
-
- tessellator.draw();
-
- GlStateManager.disableBlend();
- GlStateManager.enableLighting();
- GlStateManager.disableRescaleNormal();
- GlStateManager.popMatrix();
- }
+ public void doRender(EntityDecay entity, double par2, double par4, double par6, float par8, float par9){
+
+ GlStateManager.pushMatrix();
+ GlStateManager.enableBlend();
+ GlStateManager.disableLighting();
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+
+ float yOffset = 0;
+
+ GlStateManager.translate((float)par2, (float)par4 + yOffset, (float)par6);
+
+ this.bindTexture(textures[((EntityDecay)entity).textureIndex]);
+ float f6 = 1.0F;
+ float f7 = 0.5F;
+ float f8 = 0.5F;
+
+ GlStateManager.rotate(-90, 1, 0, 0);
+
+ float scale = 2 * Math.min(1, (float)(EntityDecay.LIFETIME - entity.ticksExisted) / 50f);
+
+ GlStateManager.scale(scale, scale, scale);
+
+ Tessellator tessellator = Tessellator.getInstance();
+ VertexBuffer buffer = tessellator.getBuffer();
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ // tessellator.setColorRGBA_I(k1, 128);
+ // buffer.normal(0.0F, 1.0F, 0.0F);
+ buffer.pos((double)(0.0F - f7), (double)(0.0F - f8), 0.01).tex(0, 1).endVertex();
+ buffer.pos((double)(f6 - f7), (double)(0.0F - f8), 0.01).tex(1, 1).endVertex();
+ buffer.pos((double)(f6 - f7), (double)(1.0F - f8), 0.01).tex(1, 0).endVertex();
+ buffer.pos((double)(0.0F - f7), (double)(1.0F - f8), 0.01).tex(0, 0).endVertex();
+
+ tessellator.draw();
+
+ GlStateManager.disableBlend();
+ GlStateManager.enableLighting();
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.popMatrix();
+ }
@Override
- protected ResourceLocation getEntityTexture(EntityDecay entity) {
+ protected ResourceLocation getEntityTexture(EntityDecay entity){
return null;
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderDecoy.java b/src/main/java/electroblob/wizardry/client/renderer/RenderDecoy.java
index 8e373b04..4c421adc 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderDecoy.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderDecoy.java
@@ -15,26 +15,25 @@ import net.minecraftforge.fml.relauncher.ReflectionHelper;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
-// TODO: Backport the rewrite of this entire class.
@SideOnly(Side.CLIENT)
public class RenderDecoy extends RenderBiped {
-
+
private static final ResourceLocation steveTextures = new ResourceLocation("textures/entity/steve.png");
-
- private static final Method getEntityTexture = ReflectionHelper.findMethod(Render.class, null,
- new String[]{"getEntityTexture", "func_110775_a"}, Entity.class); // Generic parameter T is erased to Entity at runtime.
-
+
+ private static final Method getEntityTexture = ReflectionHelper.findMethod(Render.class, "getEntityTexture",
+ "func_110775_a", Entity.class); // Generic parameter T is erased to Entity at runtime.
+
public RenderDecoy(RenderManager manager){
super(manager, new ModelBiped(0.0f), 0.5f);
}
-
+
@Override
- public void doRender(EntityDecoy entity, double x, double y, double z, float entityYaw, float partialTicks) {
-
+ public void doRender(EntityDecoy entity, double x, double y, double z, float entityYaw, float partialTicks){
+
if(entity.getCaster() != null){
-
+
this.renderName(entity, x, y, z);
-
+
// Save relevant animation fields from the caster to local variables
float pitch = entity.getCaster().rotationPitch;
float prevPitch = entity.getCaster().prevRotationPitch;
@@ -50,7 +49,7 @@ public class RenderDecoy extends RenderBiped {
int hurtTime = entity.getCaster().hurtTime;
boolean sneak = entity.getCaster().isSneaking();
Entity mount = entity.getCaster().getRidingEntity();
-
+
// Assign decoy's animation fields to the caster
entity.getCaster().rotationPitch = entity.rotationPitch;
entity.getCaster().prevRotationPitch = entity.prevRotationPitch;
@@ -66,10 +65,11 @@ public class RenderDecoy extends RenderBiped {
entity.getCaster().hurtTime = entity.hurtTime;
entity.getCaster().setSneaking(false); // Decoys can't sneak FIXME Not working!
entity.getCaster().dismountRidingEntity(); // Decoys can't ride anything
-
+
// Do the rendering
- renderManager.getEntityRenderObject(entity.getCaster()).doRender(entity.getCaster(), x, y, z, entityYaw, partialTicks);
-
+ renderManager.getEntityRenderObject(entity.getCaster()).doRender(entity.getCaster(), x, y, z, entityYaw,
+ partialTicks);
+
// Reset caster's animation fields to their original values
entity.getCaster().rotationPitch = pitch;
entity.getCaster().prevRotationPitch = prevPitch;
@@ -85,19 +85,22 @@ public class RenderDecoy extends RenderBiped {
entity.getCaster().hurtTime = hurtTime;
entity.getCaster().setSneaking(sneak);
if(mount != null) entity.getCaster().startRiding(mount);
-
+
}else{
super.doRender(entity, x, y, z, entityYaw, partialTicks);
}
}
-
+
@Override
protected ResourceLocation getEntityTexture(EntityDecoy entity){
if(entity.getCaster() != null){
- try {
- return (ResourceLocation)getEntityTexture.invoke(renderManager.getEntityRenderObject(entity.getCaster()));
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | ClassCastException e){
- Wizardry.logger.error("Error while reflectively calling Render#getEntityTexture as part of decoy rendering");
+ try{
+ return (ResourceLocation)getEntityTexture
+ .invoke(renderManager.getEntityRenderObject(entity.getCaster()));
+ }catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
+ | ClassCastException e){
+ Wizardry.logger
+ .error("Error while reflectively calling Render#getEntityTexture as part of decoy rendering");
e.printStackTrace();
}
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderEvilWizard.java b/src/main/java/electroblob/wizardry/client/renderer/RenderEvilWizard.java
index d61329f4..2828261f 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderEvilWizard.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderEvilWizard.java
@@ -11,24 +11,23 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
-public class RenderEvilWizard extends RenderBiped
-{
- static final ResourceLocation[] textures = new ResourceLocation[6];
+public class RenderEvilWizard extends RenderBiped {
+ static final ResourceLocation[] textures = new ResourceLocation[6];
- public RenderEvilWizard(RenderManager renderManager){
-
- super(renderManager, new ModelWizard(), 0.5F);
-
- for(int i=0;i<6;i++){
+ public RenderEvilWizard(RenderManager renderManager){
+
+ super(renderManager, new ModelWizard(), 0.5F);
+
+ for(int i = 0; i < 6; i++){
textures[i] = new ResourceLocation(Wizardry.MODID, "textures/entity/evil_wizard_" + i + ".png");
}
- // Just using the default without overriding models, since the armour sets its own model anyway.
- this.addLayer(new LayerBipedArmor(this));
- }
-
- @Override
- protected ResourceLocation getEntityTexture(EntityEvilWizard wizard) {
- return textures[wizard.textureIndex];
- }
+ // Just using the default without overriding models, since the armour sets its own model anyway.
+ this.addLayer(new LayerBipedArmor(this));
+ }
+
+ @Override
+ protected ResourceLocation getEntityTexture(EntityEvilWizard wizard){
+ return textures[wizard.textureIndex];
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderFireRing.java b/src/main/java/electroblob/wizardry/client/renderer/RenderFireRing.java
index 1f70169f..db194bd6 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderFireRing.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderFireRing.java
@@ -17,163 +17,170 @@ import net.minecraft.init.Blocks;
import net.minecraft.util.ResourceLocation;
public class RenderFireRing extends Render {
-
- private final ResourceLocation texture;
- private float scale = 1.0f;
-
- public RenderFireRing(RenderManager renderManager, ResourceLocation texture, float scale) {
+
+ private final ResourceLocation texture;
+ private float scale = 1.0f;
+
+ public RenderFireRing(RenderManager renderManager, ResourceLocation texture, float scale){
super(renderManager);
this.texture = texture;
this.scale = scale;
}
@Override
- public void doRender(EntityFireRing entity, double par2, double par4, double par6, float par8, float par9){
-
- GlStateManager.pushMatrix();
- GlStateManager.enableBlend();
- GlStateManager.disableLighting();
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
-
- float yOffset = 0;
-
- GlStateManager.translate((float)par2, (float)par4 + yOffset, (float)par6);
-
- this.bindTexture(texture);
- float f6 = 1.0F;
- float f7 = 0.5F;
- float f8 = 0.5F;
-
- GlStateManager.rotate(-90, 1, 0, 0);
-
- GlStateManager.scale(scale, scale, scale);
-
- Tessellator tessellator = Tessellator.getInstance();
- VertexBuffer buffer = tessellator.getBuffer();
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- buffer.pos((double)(0.0F - f7), (double)(0.0F - f8), 0.01).tex(0, 1).endVertex();
- buffer.pos((double)(f6 - f7), (double)(0.0F - f8), 0.01).tex(1, 1).endVertex();
- buffer.pos((double)(f6 - f7), (double)(1.0F - f8), 0.01).tex(1, 0).endVertex();
- buffer.pos((double)(0.0F - f7), (double)(1.0F - f8), 0.01).tex(0, 0).endVertex();
-
- tessellator.draw();
-
- GlStateManager.disableBlend();
- GlStateManager.enableLighting();
- GlStateManager.disableRescaleNormal();
- GlStateManager.popMatrix();
-
- // Fire
-
- GlStateManager.disableLighting();
- TextureAtlasSprite icon = Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState(Blocks.FIRE.getDefaultState()).getParticleTexture();
- int sides = 16;
- float height = 1.0f;
-
- for(int k=0; k 0.0F){
-
- this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
- float f71 = icon.getMinU();
- float f81 = icon.getMinV();
- float f9 = icon.getMaxU();
- float f10 = icon.getMaxV();
-
- if (i / 2 % 2 == 0)
- {
- float f11 = f9;
- f9 = f71;
- f71 = f11;
- }
-
- buffer.pos((double)(f2 - f3), (double)(0.0F - f5), (double)f61).tex((double)f9, (double)f10).endVertex();
- buffer.pos((double)(-f2 - f3), (double)(0.0F - f5), (double)f61).tex((double)f71, (double)f10).endVertex();
- buffer.pos((double)(-f2 - f3), (double)(height - f5), (double)f61).tex((double)f71, (double)f81).endVertex();
- buffer.pos((double)(f2 - f3), (double)(height - f5), (double)f61).tex((double)f9, (double)f81).endVertex();
- f4 -= 0.45F;
- f5 -= 0.45F;
- f2 *= 0.9F;
- f61 += 0.03F;
- ++i;
- }
-
- tessellator.draw();
- GlStateManager.popMatrix();
- }
+ public void doRender(EntityFireRing entity, double par2, double par4, double par6, float par8, float par9){
- for(int k=0; k 0.0F){
-
- this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
- float f71 = icon.getMinU();
- float f81 = icon.getMinV();
- float f9 = icon.getMaxU();
- float f10 = icon.getMaxV();
-
- if (i / 2 % 2 == 0)
- {
- float f11 = f9;
- f9 = f71;
- f71 = f11;
- }
-
- buffer.pos((double)(f2 - f3), (double)(0.0F - f5), (double)f61).tex((double)f9, (double)f10).endVertex();
- buffer.pos((double)(-f2 - f3), (double)(0.0F - f5), (double)f61).tex((double)f71, (double)f10).endVertex();
- buffer.pos((double)(-f2 - f3), (double)(height - f5), (double)f61).tex((double)f71, (double)f81).endVertex();
- buffer.pos((double)(f2 - f3), (double)(height - f5), (double)f61).tex((double)f9, (double)f81).endVertex();
- f4 -= 0.45F;
- f5 -= 0.45F;
- f2 *= 0.9F;
- f61 += 0.03F;
- ++i;
- }
-
- tessellator.draw();
- GlStateManager.popMatrix();
- }
-
- GlStateManager.enableLighting();
- }
+ GlStateManager.pushMatrix();
+ GlStateManager.enableBlend();
+ GlStateManager.disableLighting();
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+
+ float yOffset = 0;
+
+ GlStateManager.translate((float)par2, (float)par4 + yOffset, (float)par6);
+
+ this.bindTexture(texture);
+ float f6 = 1.0F;
+ float f7 = 0.5F;
+ float f8 = 0.5F;
+
+ GlStateManager.rotate(-90, 1, 0, 0);
+
+ GlStateManager.scale(scale, scale, scale);
+
+ Tessellator tessellator = Tessellator.getInstance();
+ VertexBuffer buffer = tessellator.getBuffer();
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ buffer.pos((double)(0.0F - f7), (double)(0.0F - f8), 0.01).tex(0, 1).endVertex();
+ buffer.pos((double)(f6 - f7), (double)(0.0F - f8), 0.01).tex(1, 1).endVertex();
+ buffer.pos((double)(f6 - f7), (double)(1.0F - f8), 0.01).tex(1, 0).endVertex();
+ buffer.pos((double)(0.0F - f7), (double)(1.0F - f8), 0.01).tex(0, 0).endVertex();
+
+ tessellator.draw();
+
+ GlStateManager.disableBlend();
+ GlStateManager.enableLighting();
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.popMatrix();
+
+ // Fire
+
+ GlStateManager.disableLighting();
+ TextureAtlasSprite icon = Minecraft.getMinecraft().getBlockRendererDispatcher()
+ .getModelForState(Blocks.FIRE.getDefaultState()).getParticleTexture();
+ int sides = 16;
+ float height = 1.0f;
+
+ for(int k = 0; k < sides; k++){
+
+ GlStateManager.pushMatrix();
+ GlStateManager.translate((float)par2, (float)par4 + 0.05f, (float)par6);
+ float f1 = 1.0f;
+ GlStateManager.scale(f1, f1, f1);
+ float f2 = 0.5F;
+ float f3 = 0.0F;
+ float f4 = 0.2f;
+ float f5 = (float)(entity.posY - entity.getEntityBoundingBox().minY);
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ float f61 = 0.0F;
+ int i = 0;
+
+ GlStateManager.rotate((360f / (float)sides) * k, 0, 1, 0);
+ GlStateManager.translate(0, 0, -2.3f);
+
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+
+ while(f4 > 0.0F){
+
+ this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
+ float f71 = icon.getMinU();
+ float f81 = icon.getMinV();
+ float f9 = icon.getMaxU();
+ float f10 = icon.getMaxV();
+
+ if(i / 2 % 2 == 0){
+ float f11 = f9;
+ f9 = f71;
+ f71 = f11;
+ }
+
+ buffer.pos((double)(f2 - f3), (double)(0.0F - f5), (double)f61).tex((double)f9, (double)f10)
+ .endVertex();
+ buffer.pos((double)(-f2 - f3), (double)(0.0F - f5), (double)f61).tex((double)f71, (double)f10)
+ .endVertex();
+ buffer.pos((double)(-f2 - f3), (double)(height - f5), (double)f61).tex((double)f71, (double)f81)
+ .endVertex();
+ buffer.pos((double)(f2 - f3), (double)(height - f5), (double)f61).tex((double)f9, (double)f81)
+ .endVertex();
+ f4 -= 0.45F;
+ f5 -= 0.45F;
+ f2 *= 0.9F;
+ f61 += 0.03F;
+ ++i;
+ }
+
+ tessellator.draw();
+ GlStateManager.popMatrix();
+ }
+
+ for(int k = 0; k < sides; k++){
+
+ GlStateManager.pushMatrix();
+ GlStateManager.translate((float)par2, (float)par4 + 0.05f, (float)par6);
+ float f1 = 1.0f;
+ GlStateManager.scale(f1, f1, f1);
+ float f2 = 0.5F;
+ float f3 = 0.0F;
+ float f4 = 0.2f;
+ float f5 = (float)(entity.posY - entity.getEntityBoundingBox().minY);
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ float f61 = 0.0F;
+ int i = 0;
+
+ GlStateManager.rotate((360f / (float)sides) * k, 0, 1, 0);
+ GlStateManager.translate(0, 0, 2.3f);
+
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+
+ while(f4 > 0.0F){
+
+ this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
+ float f71 = icon.getMinU();
+ float f81 = icon.getMinV();
+ float f9 = icon.getMaxU();
+ float f10 = icon.getMaxV();
+
+ if(i / 2 % 2 == 0){
+ float f11 = f9;
+ f9 = f71;
+ f71 = f11;
+ }
+
+ buffer.pos((double)(f2 - f3), (double)(0.0F - f5), (double)f61).tex((double)f9, (double)f10)
+ .endVertex();
+ buffer.pos((double)(-f2 - f3), (double)(0.0F - f5), (double)f61).tex((double)f71, (double)f10)
+ .endVertex();
+ buffer.pos((double)(-f2 - f3), (double)(height - f5), (double)f61).tex((double)f71, (double)f81)
+ .endVertex();
+ buffer.pos((double)(f2 - f3), (double)(height - f5), (double)f61).tex((double)f9, (double)f81)
+ .endVertex();
+ f4 -= 0.45F;
+ f5 -= 0.45F;
+ f2 *= 0.9F;
+ f61 += 0.03F;
+ ++i;
+ }
+
+ tessellator.draw();
+ GlStateManager.popMatrix();
+ }
+
+ GlStateManager.enableLighting();
+ }
@Override
- protected ResourceLocation getEntityTexture(EntityFireRing entity) {
+ protected ResourceLocation getEntityTexture(EntityFireRing entity){
return null;
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderForceArrow.java b/src/main/java/electroblob/wizardry/client/renderer/RenderForceArrow.java
index db37b23d..2be1669a 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderForceArrow.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderForceArrow.java
@@ -17,111 +17,111 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
-public class RenderForceArrow extends Render{
+public class RenderForceArrow extends Render {
- private static final ResourceLocation arrowTextures = new ResourceLocation(Wizardry.MODID, "textures/entity/force_arrow.png");
+ private static final ResourceLocation arrowTextures = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/force_arrow.png");
- public RenderForceArrow(RenderManager renderManager){
+ public RenderForceArrow(RenderManager renderManager){
super(renderManager);
- }
-
- @Override
- public void doRender(EntityForceArrow arrow, double par2, double par4, double par6, float par8, float par9){
-
- this.bindEntityTexture(arrow);
- GlStateManager.pushMatrix();
- GlStateManager.disableLighting();
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
-
- GlStateManager.enableBlend();
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
-
- GlStateManager.translate((float)par2, (float)par4, (float)par6);
- GlStateManager.rotate(arrow.prevRotationYaw + (arrow.rotationYaw - arrow.prevRotationYaw) * par9 - 90.0F, 0.0F, 1.0F, 0.0F);
- GlStateManager.rotate(arrow.prevRotationPitch + (arrow.rotationPitch - arrow.prevRotationPitch) * par9, 0.0F, 0.0F, 1.0F);
- GlStateManager.rotate(180, 0, 1, 0);
- Tessellator tessellator = Tessellator.getInstance();
- VertexBuffer buffer = tessellator.getBuffer();
- float pixel = 1.0f/32.0f;
- float u1 = 0.0f;
- float u2 = pixel*14;
- float v1 = 0.0f;
- float v2 = pixel*7;
- float u3 = pixel*16;
- float u4 = 1.0f;
- float v3 = 0.0f;
- float v4 = pixel*16;
- float u5 = 0.0f;
- float u6 = pixel*7;
- float v5 = pixel*25;
- float v6 = 1.0f;
- float scale = 0.05625F;
- float f11 = 0.0f;
- GlStateManager.enableRescaleNormal();
- //f11 = (float)par1EntityArrow.arrowShake - par9;
- if (f11 > 0.0F)
- {
- float f12 = -MathHelper.sin(f11 * 3.0F) * f11;
- GlStateManager.rotate(f12, 0.0F, 0.0F, 1.0F);
- }
-
- scale*=0.8f;
+ }
- GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F);
- GlStateManager.scale(scale, scale, scale);
- GlStateManager.translate(-4.0F, 0.0F, 0.0F);
+ @Override
+ public void doRender(EntityForceArrow arrow, double par2, double par4, double par6, float par8, float par9){
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- buffer.pos(-5, 3.5, -3.5).tex((double)u5, (double)v5).endVertex();
- buffer.pos(-5, 3.5, 3.5).tex((double)u6, (double)v5).endVertex();
- buffer.pos(-5, -3.5, 3.5).tex((double)u6, (double)v6).endVertex();
- buffer.pos(-5, -3.5, -3.5).tex((double)u5, (double)v6);
- tessellator.draw();
-
- for(int i=0; i<5; i++){
- GlStateManager.color(1, 1, 1, 1 - i*0.2f);
- double j = i + ((double)arrow.ticksExisted%3)/3;
- double width = 2.0d + (Math.sqrt(j*2)-0.6)*2;
- GL11.glNormal3f(scale, 0.0F, 0.0F);
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- buffer.pos(-10 + j*4, -width, -width).tex((double)u3, (double)v3).endVertex();
- buffer.pos(-10 + j*4, -width, width).tex((double)u4, (double)v3).endVertex();
- buffer.pos(-10 + j*4, width, width).tex((double)u4, (double)v4).endVertex();
- buffer.pos(-10 + j*4, width, -width).tex((double)u3, (double)v4).endVertex();
- tessellator.draw();
- GL11.glNormal3f(-scale, 0.0F, 0.0F);
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- buffer.pos(-10 + j*4, width, -width).tex((double)u3, (double)v3).endVertex();
- buffer.pos(-10 + j*4, width, width).tex((double)u4, (double)v3).endVertex();
- buffer.pos(-10 + j*4, -width, width).tex((double)u4, (double)v4).endVertex();
- buffer.pos(-10 + j*4, -width, -width).tex((double)u3, (double)v4).endVertex();
- tessellator.draw();
- }
+ this.bindEntityTexture(arrow);
+ GlStateManager.pushMatrix();
+ GlStateManager.disableLighting();
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
- GlStateManager.color(1, 1, 1, 1);
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
- for (int i = 0; i < 4; ++i)
- {
- GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
- GL11.glNormal3f(0.0F, 0.0F, scale);
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- buffer.pos(-10.0D, -4.0D, 0.0D).tex((double)u1, (double)v1).endVertex();
- buffer.pos(10.0D, -4.0D, 0.0D).tex((double)u2, (double)v1).endVertex();
- buffer.pos(10.0D, 4.0D, 0.0D).tex((double)u2, (double)v2).endVertex();
- buffer.pos(-10.0D, 4.0D, 0.0D).tex((double)u1, (double)v2).endVertex();
- tessellator.draw();
- }
+ GlStateManager.translate((float)par2, (float)par4, (float)par6);
+ GlStateManager.rotate(arrow.prevRotationYaw + (arrow.rotationYaw - arrow.prevRotationYaw) * par9 - 90.0F, 0.0F,
+ 1.0F, 0.0F);
+ GlStateManager.rotate(arrow.prevRotationPitch + (arrow.rotationPitch - arrow.prevRotationPitch) * par9, 0.0F,
+ 0.0F, 1.0F);
+ GlStateManager.rotate(180, 0, 1, 0);
+ Tessellator tessellator = Tessellator.getInstance();
+ VertexBuffer buffer = tessellator.getBuffer();
+ float pixel = 1.0f / 32.0f;
+ float u1 = 0.0f;
+ float u2 = pixel * 14;
+ float v1 = 0.0f;
+ float v2 = pixel * 7;
+ float u3 = pixel * 16;
+ float u4 = 1.0f;
+ float v3 = 0.0f;
+ float v4 = pixel * 16;
+ float u5 = 0.0f;
+ float u6 = pixel * 7;
+ float v5 = pixel * 25;
+ float v6 = 1.0f;
+ float scale = 0.05625F;
+ float f11 = 0.0f;
+ GlStateManager.enableRescaleNormal();
+ // f11 = (float)par1EntityArrow.arrowShake - par9;
+ if(f11 > 0.0F){
+ float f12 = -MathHelper.sin(f11 * 3.0F) * f11;
+ GlStateManager.rotate(f12, 0.0F, 0.0F, 1.0F);
+ }
- GlStateManager.disableBlend();
-
- GlStateManager.disableRescaleNormal();
- GlStateManager.enableLighting();
- GlStateManager.popMatrix();
- }
+ scale *= 0.8f;
- @Override
- protected ResourceLocation getEntityTexture(EntityForceArrow par1Entity)
- {
- return arrowTextures;
- }
+ GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F);
+ GlStateManager.scale(scale, scale, scale);
+ GlStateManager.translate(-4.0F, 0.0F, 0.0F);
+
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ buffer.pos(-5, 3.5, -3.5).tex((double)u5, (double)v5).endVertex();
+ buffer.pos(-5, 3.5, 3.5).tex((double)u6, (double)v5).endVertex();
+ buffer.pos(-5, -3.5, 3.5).tex((double)u6, (double)v6).endVertex();
+ buffer.pos(-5, -3.5, -3.5).tex((double)u5, (double)v6);
+ tessellator.draw();
+
+ for(int i = 0; i < 5; i++){
+ GlStateManager.color(1, 1, 1, 1 - i * 0.2f);
+ double j = i + ((double)arrow.ticksExisted % 3) / 3;
+ double width = 2.0d + (Math.sqrt(j * 2) - 0.6) * 2;
+ GL11.glNormal3f(scale, 0.0F, 0.0F);
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ buffer.pos(-10 + j * 4, -width, -width).tex((double)u3, (double)v3).endVertex();
+ buffer.pos(-10 + j * 4, -width, width).tex((double)u4, (double)v3).endVertex();
+ buffer.pos(-10 + j * 4, width, width).tex((double)u4, (double)v4).endVertex();
+ buffer.pos(-10 + j * 4, width, -width).tex((double)u3, (double)v4).endVertex();
+ tessellator.draw();
+ GL11.glNormal3f(-scale, 0.0F, 0.0F);
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ buffer.pos(-10 + j * 4, width, -width).tex((double)u3, (double)v3).endVertex();
+ buffer.pos(-10 + j * 4, width, width).tex((double)u4, (double)v3).endVertex();
+ buffer.pos(-10 + j * 4, -width, width).tex((double)u4, (double)v4).endVertex();
+ buffer.pos(-10 + j * 4, -width, -width).tex((double)u3, (double)v4).endVertex();
+ tessellator.draw();
+ }
+
+ GlStateManager.color(1, 1, 1, 1);
+
+ for(int i = 0; i < 4; ++i){
+ GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
+ GL11.glNormal3f(0.0F, 0.0F, scale);
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ buffer.pos(-10.0D, -4.0D, 0.0D).tex((double)u1, (double)v1).endVertex();
+ buffer.pos(10.0D, -4.0D, 0.0D).tex((double)u2, (double)v1).endVertex();
+ buffer.pos(10.0D, 4.0D, 0.0D).tex((double)u2, (double)v2).endVertex();
+ buffer.pos(-10.0D, 4.0D, 0.0D).tex((double)u1, (double)v2).endVertex();
+ tessellator.draw();
+ }
+
+ GlStateManager.disableBlend();
+
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.enableLighting();
+ GlStateManager.popMatrix();
+ }
+
+ @Override
+ protected ResourceLocation getEntityTexture(EntityForceArrow par1Entity){
+ return arrowTextures;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderHammer.java b/src/main/java/electroblob/wizardry/client/renderer/RenderHammer.java
index b93fe9d2..8f448603 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderHammer.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderHammer.java
@@ -9,30 +9,31 @@ import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.util.ResourceLocation;
public class RenderHammer extends Render {
-
- private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/entity/lightning_hammer.png");
+
+ private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/lightning_hammer.png");
private ModelHammer model = new ModelHammer();
-
+
public RenderHammer(RenderManager renderManager){
super(renderManager);
}
@Override
- public void doRender(EntityHammer entity, double x, double y, double z, float f, float f1) {
-
+ public void doRender(EntityHammer entity, double x, double y, double z, float f, float f1){
+
GlStateManager.pushMatrix();
- GlStateManager.translate(x, y+1.5, z);
+ GlStateManager.translate(x, y + 1.5, z);
GlStateManager.rotate(180, 0F, 0F, 1F);
-
+
this.bindTexture(texture);
-
+
model.render(entity, 0, 0, 0, 0, 0, 0.0625f);
-
+
GlStateManager.popMatrix();
}
@Override
- protected ResourceLocation getEntityTexture(EntityHammer entity) {
+ protected ResourceLocation getEntityTexture(EntityHammer entity){
return texture;
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderIceGiant.java b/src/main/java/electroblob/wizardry/client/renderer/RenderIceGiant.java
index 4ee0812e..b78c6888 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderIceGiant.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderIceGiant.java
@@ -12,28 +12,29 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderIceGiant extends RenderLiving {
-
- private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/entity/ice_giant.png");
- public RenderIceGiant(RenderManager renderManager){
- super(renderManager, new ModelIceGiant(), 0.5F);
- }
+ private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/ice_giant.png");
+
+ public RenderIceGiant(RenderManager renderManager){
+ super(renderManager, new ModelIceGiant(), 0.5F);
+ }
@Override
protected ResourceLocation getEntityTexture(EntityIceGiant entity){
return texture;
}
-
- @Override
- protected void rotateCorpse(EntityIceGiant entityLiving, float pitch, float yaw, float partialTicks){
-
- super.rotateCorpse(entityLiving, pitch, yaw, partialTicks);
-
- if ((double)entityLiving.limbSwingAmount >= 0.01D){
- float f3 = 13.0F;
- float f4 = entityLiving.limbSwing - entityLiving.limbSwingAmount * (1.0F - partialTicks) + 6.0F;
- float f5 = (Math.abs(f4 % f3 - f3 * 0.5F) - f3 * 0.25F) / (f3 * 0.25F);
- GlStateManager.rotate(6.5F * f5, 0.0F, 0.0F, 1.0F);
- }
- }
+
+ @Override
+ protected void applyRotations(EntityIceGiant entityLiving, float pitch, float yaw, float partialTicks){
+
+ super.applyRotations(entityLiving, pitch, yaw, partialTicks);
+
+ if((double)entityLiving.limbSwingAmount >= 0.01D){
+ float f3 = 13.0F;
+ float f4 = entityLiving.limbSwing - entityLiving.limbSwingAmount * (1.0F - partialTicks) + 6.0F;
+ float f5 = (Math.abs(f4 % f3 - f3 * 0.5F) - f3 * 0.25F) / (f3 * 0.25F);
+ GlStateManager.rotate(6.5F * f5, 0.0F, 0.0F, 1.0F);
+ }
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderIceSpike.java b/src/main/java/electroblob/wizardry/client/renderer/RenderIceSpike.java
index 0c4db9ef..fdd64803 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderIceSpike.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderIceSpike.java
@@ -15,28 +15,29 @@ import net.minecraft.util.ResourceLocation;
public class RenderIceSpike extends Render {
- private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/entity/ice_spike.png");
+ private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/ice_spike.png");
public RenderIceSpike(RenderManager renderManager){
super(renderManager);
}
@Override
- public void doRender(EntityIceSpike entity, double x, double y, double z, float fa, float partialTickTime) {
+ public void doRender(EntityIceSpike entity, double x, double y, double z, float fa, float partialTickTime){
GlStateManager.pushMatrix();
-
+
GlStateManager.translate((float)x, (float)y, (float)z);
// Apparently, disabling lighting... doesn't disable lighting. Or at least, you can still set the brightness
// with setLightmapTextureCoords.
- GlStateManager.disableLighting();
-
+ GlStateManager.disableLighting();
+
int j = entity.getBrightnessForRender(partialTickTime);
- int k = j % 65536;
- int l = j / 65536;
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)k / 1.0F, (float)l / 1.0F);
-
- GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ int k = j % 65536;
+ int l = j / 65536;
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)k / 1.0F, (float)l / 1.0F);
+
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer buffer = tessellator.getBuffer();
@@ -45,15 +46,15 @@ public class RenderIceSpike extends Render {
// West face
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- buffer.pos(0, 0, 0.5).tex(1, 1).endVertex();
- buffer.pos(0, 1, 0.5).tex(1, 0).endVertex();
+ buffer.pos(0, 0, 0.5).tex(1, 1).endVertex();
+ buffer.pos(0, 1, 0.5).tex(1, 0).endVertex();
buffer.pos(0, 1, -0.5).tex(0, 0).endVertex();
buffer.pos(0, 0, -0.5).tex(0, 1).endVertex();
tessellator.draw();
// South face
buffer.begin(GL11.GL_QUADS, net.minecraft.client.renderer.vertex.DefaultVertexFormats.POSITION_TEX);
- buffer.pos( 0.5, 0, 0).tex(1, 1).endVertex();
- buffer.pos( 0.5, 1, 0).tex(1, 0).endVertex();
+ buffer.pos(0.5, 0, 0).tex(1, 1).endVertex();
+ buffer.pos(0.5, 1, 0).tex(1, 0).endVertex();
buffer.pos(-0.5, 1, 0).tex(0, 0).endVertex();
buffer.pos(-0.5, 0, 0).tex(0, 1).endVertex();
tessellator.draw();
@@ -61,23 +62,23 @@ public class RenderIceSpike extends Render {
buffer.begin(GL11.GL_QUADS, net.minecraft.client.renderer.vertex.DefaultVertexFormats.POSITION_TEX);
buffer.pos(0, 0, -0.5).tex(0, 1).endVertex();
buffer.pos(0, 1, -0.5).tex(0, 0).endVertex();
- buffer.pos(0, 1, 0.5).tex(1, 0).endVertex();
- buffer.pos(0, 0, 0.5).tex(1, 1).endVertex();
+ buffer.pos(0, 1, 0.5).tex(1, 0).endVertex();
+ buffer.pos(0, 0, 0.5).tex(1, 1).endVertex();
tessellator.draw();
// North face
buffer.begin(GL11.GL_QUADS, net.minecraft.client.renderer.vertex.DefaultVertexFormats.POSITION_TEX);
buffer.pos(-0.5, 0, 0).tex(0, 1).endVertex();
buffer.pos(-0.5, 1, 0).tex(0, 0).endVertex();
- buffer.pos( 0.5, 1, 0).tex(1, 0).endVertex();
- buffer.pos( 0.5, 0, 0).tex(1, 1).endVertex();
+ buffer.pos(0.5, 1, 0).tex(1, 0).endVertex();
+ buffer.pos(0.5, 0, 0).tex(1, 1).endVertex();
tessellator.draw();
- GlStateManager.enableLighting();
+ GlStateManager.enableLighting();
GlStateManager.popMatrix();
}
@Override
- protected ResourceLocation getEntityTexture(EntityIceSpike entity) {
+ protected ResourceLocation getEntityTexture(EntityIceSpike entity){
return texture;
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderLightningDisc.java b/src/main/java/electroblob/wizardry/client/renderer/RenderLightningDisc.java
index a9b620fa..304a4ed8 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderLightningDisc.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderLightningDisc.java
@@ -13,69 +13,69 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.util.ResourceLocation;
public class RenderLightningDisc extends Render {
-
- private final ResourceLocation texture;
- private float scale = 1.0f;
-
- public RenderLightningDisc(RenderManager renderManager, ResourceLocation texture, float scale) {
+
+ private final ResourceLocation texture;
+ private float scale = 1.0f;
+
+ public RenderLightningDisc(RenderManager renderManager, ResourceLocation texture, float scale){
super(renderManager);
this.texture = texture;
this.scale = scale;
}
@Override
- public void doRender(EntityLightningDisc entity, double par2, double par4, double par6, float par8, float par9){
-
- GlStateManager.pushMatrix();
- GlStateManager.enableBlend();
- GlStateManager.disableLighting();
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
-
- float yOffset = 0;
-
- GlStateManager.translate((float)par2, (float)par4 + yOffset, (float)par6);
-
- this.bindTexture(texture);
- float f6 = 1.0F;
- float f7 = 0.5F;
- float f8 = 0.5F;
-
- GlStateManager.rotate(-90, 1, 0, 0);
-
- GlStateManager.rotate(entity.ticksExisted*8, 0, 0, 1);
-
- GlStateManager.scale(scale, scale, scale);
-
- Tessellator tessellator = Tessellator.getInstance();
- VertexBuffer buffer = tessellator.getBuffer();
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- //tessellator.setColorRGBA_I(k1, 128);
- //buffer.normal(0.0F, 1.0F, 0.0F);
- buffer.pos((double)(0.0F - f7), (double)(0.0F - f8), 0.01).tex(0, 1).endVertex();
- buffer.pos((double)(f6 - f7), (double)(0.0F - f8), 0.01).tex(1, 1).endVertex();
- buffer.pos((double)(f6 - f7), (double)(1.0F - f8), 0.01).tex(1, 0).endVertex();
- buffer.pos((double)(0.0F - f7), (double)(1.0F - f8), 0.01).tex(0, 0).endVertex();
-
- tessellator.draw();
-
- buffer.begin(GL11.GL_QUADS, net.minecraft.client.renderer.vertex.DefaultVertexFormats.POSITION_TEX);
- //buffer.normal(0.0F, 1.0F, 0.0F);
- buffer.pos((double)(0.0F - f7), (double)(1.0F - f8), 0.01).tex(0, 0).endVertex();
- buffer.pos((double)(f6 - f7), (double)(1.0F - f8), 0.01).tex(1, 0).endVertex();
- buffer.pos((double)(f6 - f7), (double)(0.0F - f8), 0.01).tex(1, 1).endVertex();
- buffer.pos((double)(0.0F - f7), (double)(0.0F - f8), 0.01).tex(0, 1).endVertex();
-
- tessellator.draw();
-
- GlStateManager.disableBlend();
- GlStateManager.enableLighting();
- GlStateManager.disableRescaleNormal();
- GlStateManager.popMatrix();
- }
+ public void doRender(EntityLightningDisc entity, double par2, double par4, double par6, float par8, float par9){
+
+ GlStateManager.pushMatrix();
+ GlStateManager.enableBlend();
+ GlStateManager.disableLighting();
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+
+ float yOffset = 0;
+
+ GlStateManager.translate((float)par2, (float)par4 + yOffset, (float)par6);
+
+ this.bindTexture(texture);
+ float f6 = 1.0F;
+ float f7 = 0.5F;
+ float f8 = 0.5F;
+
+ GlStateManager.rotate(-90, 1, 0, 0);
+
+ GlStateManager.rotate(entity.ticksExisted * 8, 0, 0, 1);
+
+ GlStateManager.scale(scale, scale, scale);
+
+ Tessellator tessellator = Tessellator.getInstance();
+ VertexBuffer buffer = tessellator.getBuffer();
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ // tessellator.setColorRGBA_I(k1, 128);
+ // buffer.normal(0.0F, 1.0F, 0.0F);
+ buffer.pos((double)(0.0F - f7), (double)(0.0F - f8), 0.01).tex(0, 1).endVertex();
+ buffer.pos((double)(f6 - f7), (double)(0.0F - f8), 0.01).tex(1, 1).endVertex();
+ buffer.pos((double)(f6 - f7), (double)(1.0F - f8), 0.01).tex(1, 0).endVertex();
+ buffer.pos((double)(0.0F - f7), (double)(1.0F - f8), 0.01).tex(0, 0).endVertex();
+
+ tessellator.draw();
+
+ buffer.begin(GL11.GL_QUADS, net.minecraft.client.renderer.vertex.DefaultVertexFormats.POSITION_TEX);
+ // buffer.normal(0.0F, 1.0F, 0.0F);
+ buffer.pos((double)(0.0F - f7), (double)(1.0F - f8), 0.01).tex(0, 0).endVertex();
+ buffer.pos((double)(f6 - f7), (double)(1.0F - f8), 0.01).tex(1, 0).endVertex();
+ buffer.pos((double)(f6 - f7), (double)(0.0F - f8), 0.01).tex(1, 1).endVertex();
+ buffer.pos((double)(0.0F - f7), (double)(0.0F - f8), 0.01).tex(0, 1).endVertex();
+
+ tessellator.draw();
+
+ GlStateManager.disableBlend();
+ GlStateManager.enableLighting();
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.popMatrix();
+ }
@Override
- protected ResourceLocation getEntityTexture(EntityLightningDisc entity) {
+ protected ResourceLocation getEntityTexture(EntityLightningDisc entity){
return null;
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderLightningPulse.java b/src/main/java/electroblob/wizardry/client/renderer/RenderLightningPulse.java
index 2190011a..8ae50b27 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderLightningPulse.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderLightningPulse.java
@@ -14,58 +14,58 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.util.ResourceLocation;
public class RenderLightningPulse extends Render {
-
- private final ResourceLocation[] textures = new ResourceLocation[8];
- private float scale = 1.0f;
-
- public RenderLightningPulse(RenderManager renderManager, float scale) {
+
+ private final ResourceLocation[] textures = new ResourceLocation[8];
+ private float scale = 1.0f;
+
+ public RenderLightningPulse(RenderManager renderManager, float scale){
super(renderManager);
- for(int i=0; i {
- private final ResourceLocation texture;
- private boolean blend;
- private boolean renderEnds;
- private double length = 8.0, width = 2.0;
- private int pixelsLong = 16, pixelsWide = 5;
+ private final ResourceLocation texture;
+ private boolean blend;
+ private boolean renderEnds;
+ private double length = 8.0, width = 2.0;
+ private int pixelsLong = 16, pixelsWide = 5;
- public RenderMagicArrow(RenderManager renderManager, ResourceLocation texture, boolean blend, double length, double width, int pixelsLong, int pixelsWide, boolean renderEnds){
- super(renderManager);
- this.texture = texture;
- this.blend = blend;
- this.renderEnds = renderEnds;
- this.length = length;
- this.width = width;
- this.pixelsLong = pixelsLong;
- this.pixelsWide = pixelsWide;
- }
-
- @Override
- public void doRender(EntityMagicArrow entity, double par2, double par4, double par6, float par8, float par9){
-
- this.bindEntityTexture(entity);
- GlStateManager.pushMatrix();
- GlStateManager.disableLighting();
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
-
- if(this.blend){
- GlStateManager.enableBlend();
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
- }
-
- GlStateManager.translate((float)par2, (float)par4, (float)par6);
- GlStateManager.rotate(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * par9 - 90.0F, 0.0F, 1.0F, 0.0F);
- GlStateManager.rotate(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * par9, 0.0F, 0.0F, 1.0F);
- Tessellator tessellator = Tessellator.getInstance();
- VertexBuffer buffer = tessellator.getBuffer();
- float f2 = 0.0F;
- float f3 = pixelsLong / 32.0F;
- float f4 = 0.0F;
- float f5 = pixelsWide / 32.0F;
- float f6 = 0.0F;
- float f7 = 0.15625F;
- float f8 = (float)5 / 32.0F;
- float f9 = (float)10 / 32.0F;
- float f10 = 0.05625F;
- float f11 = 0.0f;
- GlStateManager.enableRescaleNormal();
- //f11 = (float)par1EntityArrow.arrowShake - par9;
- if (f11 > 0.0F)
- {
- float f12 = -MathHelper.sin(f11 * 3.0F) * f11;
- GlStateManager.rotate(f12, 0.0F, 0.0F, 1.0F);
- }
+ public RenderMagicArrow(RenderManager renderManager, ResourceLocation texture, boolean blend, double length,
+ double width, int pixelsLong, int pixelsWide, boolean renderEnds){
+ super(renderManager);
+ this.texture = texture;
+ this.blend = blend;
+ this.renderEnds = renderEnds;
+ this.length = length;
+ this.width = width;
+ this.pixelsLong = pixelsLong;
+ this.pixelsWide = pixelsWide;
+ }
- GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F);
- GlStateManager.scale(f10, f10, f10);
- GlStateManager.translate(-4.0F, 0.0F, 0.0F);
- GL11.glNormal3f(f10, 0.0F, 0.0F);
+ @Override
+ public void doRender(EntityMagicArrow entity, double par2, double par4, double par6, float par8, float par9){
- if(renderEnds){
- // Ends
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- buffer.pos(-7.0D, -width, -width).tex((double)f6, (double)f8).endVertex();
- buffer.pos(-7.0D, -width, width).tex((double)f7, (double)f8).endVertex();
- buffer.pos(-7.0D, width, width).tex((double)f7, (double)f9).endVertex();
- buffer.pos(-7.0D, width, -width).tex((double)f6, (double)f9).endVertex();
- tessellator.draw();
- GL11.glNormal3f(-f10, 0.0F, 0.0F);
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- buffer.pos(-7.0D, width, -width).tex((double)f6, (double)f8).endVertex();
- buffer.pos(-7.0D, width, width).tex((double)f7, (double)f8).endVertex();
- buffer.pos(-7.0D, -width, width).tex((double)f7, (double)f9).endVertex();
- buffer.pos(-7.0D, -width, -width).tex((double)f6, (double)f9).endVertex();
- tessellator.draw();
- }
+ this.bindEntityTexture(entity);
+ GlStateManager.pushMatrix();
+ GlStateManager.disableLighting();
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
- for (int i = 0; i < 4; ++i){
- // Sides
- GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
- GL11.glNormal3f(0.0F, 0.0F, f10);
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- buffer.pos(-length, -width, 0.0D).tex((double)f2, (double)f4).endVertex();
- buffer.pos(length, -width, 0.0D).tex((double)f3, (double)f4).endVertex();
- buffer.pos(length, width, 0.0D).tex((double)f3, (double)f5).endVertex();
- buffer.pos(-length, width, 0.0D).tex((double)f2, (double)f5).endVertex();
- tessellator.draw();
- }
+ if(this.blend){
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ }
- if(this.blend){
- GlStateManager.disableBlend();
- }
-
- GlStateManager.disableRescaleNormal();
- GlStateManager.enableLighting();
- GlStateManager.popMatrix();
- }
+ GlStateManager.translate((float)par2, (float)par4, (float)par6);
+ GlStateManager.rotate(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * par9 - 90.0F,
+ 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * par9, 0.0F,
+ 0.0F, 1.0F);
+ Tessellator tessellator = Tessellator.getInstance();
+ VertexBuffer buffer = tessellator.getBuffer();
+ float f2 = 0.0F;
+ float f3 = pixelsLong / 32.0F;
+ float f4 = 0.0F;
+ float f5 = pixelsWide / 32.0F;
+ float f6 = 0.0F;
+ float f7 = 0.15625F;
+ float f8 = (float)5 / 32.0F;
+ float f9 = (float)10 / 32.0F;
+ float f10 = 0.05625F;
+ float f11 = 0.0f;
+ GlStateManager.enableRescaleNormal();
+ // f11 = (float)par1EntityArrow.arrowShake - par9;
+ if(f11 > 0.0F){
+ float f12 = -MathHelper.sin(f11 * 3.0F) * f11;
+ GlStateManager.rotate(f12, 0.0F, 0.0F, 1.0F);
+ }
- @Override
- protected ResourceLocation getEntityTexture(EntityMagicArrow arrow)
- {
- return texture;
- }
+ GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F);
+ GlStateManager.scale(f10, f10, f10);
+ GlStateManager.translate(-4.0F, 0.0F, 0.0F);
+ GL11.glNormal3f(f10, 0.0F, 0.0F);
+
+ if(renderEnds){
+ // Ends
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ buffer.pos(-7.0D, -width, -width).tex((double)f6, (double)f8).endVertex();
+ buffer.pos(-7.0D, -width, width).tex((double)f7, (double)f8).endVertex();
+ buffer.pos(-7.0D, width, width).tex((double)f7, (double)f9).endVertex();
+ buffer.pos(-7.0D, width, -width).tex((double)f6, (double)f9).endVertex();
+ tessellator.draw();
+ GL11.glNormal3f(-f10, 0.0F, 0.0F);
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ buffer.pos(-7.0D, width, -width).tex((double)f6, (double)f8).endVertex();
+ buffer.pos(-7.0D, width, width).tex((double)f7, (double)f8).endVertex();
+ buffer.pos(-7.0D, -width, width).tex((double)f7, (double)f9).endVertex();
+ buffer.pos(-7.0D, -width, -width).tex((double)f6, (double)f9).endVertex();
+ tessellator.draw();
+ }
+
+ for(int i = 0; i < 4; ++i){
+ // Sides
+ GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
+ GL11.glNormal3f(0.0F, 0.0F, f10);
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ buffer.pos(-length, -width, 0.0D).tex((double)f2, (double)f4).endVertex();
+ buffer.pos(length, -width, 0.0D).tex((double)f3, (double)f4).endVertex();
+ buffer.pos(length, width, 0.0D).tex((double)f3, (double)f5).endVertex();
+ buffer.pos(-length, width, 0.0D).tex((double)f2, (double)f5).endVertex();
+ tessellator.draw();
+ }
+
+ if(this.blend){
+ GlStateManager.disableBlend();
+ }
+
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.enableLighting();
+ GlStateManager.popMatrix();
+ }
+
+ @Override
+ protected ResourceLocation getEntityTexture(EntityMagicArrow arrow){
+ return texture;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderMagicLight.java b/src/main/java/electroblob/wizardry/client/renderer/RenderMagicLight.java
index 1d49c546..8c04cf5b 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderMagicLight.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderMagicLight.java
@@ -16,11 +16,14 @@ import net.minecraft.util.ResourceLocation;
public class RenderMagicLight extends TileEntitySpecialRenderer {
- private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/entity/light_ray.png");
- private static final ResourceLocation texture2 = new ResourceLocation(Wizardry.MODID, "textures/entity/light_aura.png");
+ private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/light_ray.png");
+ private static final ResourceLocation texture2 = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/light_aura.png");
@Override
- public void renderTileEntityAt(TileEntityMagicLight tileentity, double x, double y, double z, float f, int destroyStage){
+ public void renderTileEntityAt(TileEntityMagicLight tileentity, double x, double y, double z, float f,
+ int destroyStage){
GlStateManager.pushMatrix();
@@ -34,10 +37,13 @@ public class RenderMagicLight extends TileEntitySpecialRenderer tileentity.maxTimer-10){
- GlStateManager.scale((float)(tileentity.maxTimer-tileentity.timer)/10, (float)(tileentity.maxTimer-tileentity.timer)/10, (float)(tileentity.maxTimer-tileentity.timer)/10);
+ if(tileentity.timer > tileentity.maxTimer - 10){
+ GlStateManager.scale((float)(tileentity.maxTimer - tileentity.timer) / 10,
+ (float)(tileentity.maxTimer - tileentity.timer) / 10,
+ (float)(tileentity.maxTimer - tileentity.timer) / 10);
}
// Renders the aura effect
@@ -51,7 +57,9 @@ public class RenderMagicLight extends TileEntitySpecialRenderer= 30){
- for(int j=0; j<30; j++){
-
+ for(int j = 0; j < 30; j++){
+
int sliceAngle = 20 + tileentity.randomiser[j];
float scale = 0.5f;
-
+
GlStateManager.pushMatrix();
-
- GlStateManager.rotate(31*tileentity.randomiser[j], 1, 0, 0);
- GlStateManager.rotate(31*tileentity.randomiser2[j], 0, 0, 1);
-
- /*
- * OK, so here are the changes to rendering as far as I know:
- * Vertex formats specify how the methods are arranged
- * Color has to be called for every vertex, I think.
- * The new methods thing is a bit weird, because other than the number of arguments there is
- * essentially no difference between pos, tex, color, normal and lightmap. At least they make
- * the code more readable.
- */
-
+
+ GlStateManager.rotate(31 * tileentity.randomiser[j], 1, 0, 0);
+ GlStateManager.rotate(31 * tileentity.randomiser2[j], 0, 0, 1);
+
+ /* OK, so here are the changes to rendering as far as I know: Vertex formats specify how the methods are
+ * arranged Color has to be called for every vertex, I think. The new methods thing is a bit weird,
+ * because other than the number of arguments there is essentially no difference between pos, tex,
+ * color, normal and lightmap. At least they make the code more readable. */
+
buffer.begin(5, DefaultVertexFormats.POSITION_TEX_COLOR);
-
+
buffer.pos(0, 0, 0).tex(0, 0).color(255, 255, 255, 0).endVertex();
buffer.pos(0, 0, 0).tex(0, 1).color(255, 255, 255, 0).endVertex();
-
- double x1 = scale*Math.sin((tileentity.timer + 40*j)*(Math.PI/180));
- //double y1 = 0.7*Math.cos((timerentity.timer - 40*j)*(Math.PI/180))*j/10;
- double z1 = scale*Math.cos((tileentity.timer + 40*j)*(Math.PI/180));
-
- double x2 = scale*Math.sin((tileentity.timer + 40*j - sliceAngle)*(Math.PI/180));
- //double y2 = 0.7*Math.sin((timerentity.timer - 40*j)*(Math.PI/180))*j/10;
- double z2 = scale*Math.cos((tileentity.timer + 40*j - sliceAngle)*(Math.PI/180));
-
+
+ double x1 = scale * Math.sin((tileentity.timer + 40 * j) * (Math.PI / 180));
+ // double y1 = 0.7*Math.cos((timerentity.timer - 40*j)*(Math.PI/180))*j/10;
+ double z1 = scale * Math.cos((tileentity.timer + 40 * j) * (Math.PI / 180));
+
+ double x2 = scale * Math.sin((tileentity.timer + 40 * j - sliceAngle) * (Math.PI / 180));
+ // double y2 = 0.7*Math.sin((timerentity.timer - 40*j)*(Math.PI/180))*j/10;
+ double z2 = scale * Math.cos((tileentity.timer + 40 * j - sliceAngle) * (Math.PI / 180));
+
buffer.pos(x1, 0, z1).tex(1, 0).color(0, 0, 0, 255).endVertex();
buffer.pos(x2, 0, z2).tex(1, 1).color(0, 0, 0, 255).endVertex();
-
+
tessellator.draw();
-
+
GlStateManager.popMatrix();
}
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderPhoenix.java b/src/main/java/electroblob/wizardry/client/renderer/RenderPhoenix.java
index bd070796..071e3408 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderPhoenix.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderPhoenix.java
@@ -16,37 +16,37 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderPhoenix extends RenderLiving {
- private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/entity/phoenix.png");
+ private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/entity/phoenix.png");
- public RenderPhoenix(RenderManager renderManager){
- super(renderManager, new ModelPhoenix(), 1.0f);
- }
+ public RenderPhoenix(RenderManager renderManager){
+ super(renderManager, new ModelPhoenix(), 1.0f);
+ }
- @Override
- protected ResourceLocation getEntityTexture(EntityPhoenix entity){
- return texture;
- }
+ @Override
+ protected ResourceLocation getEntityTexture(EntityPhoenix entity){
+ return texture;
+ }
- @Override
- protected void rotateCorpse(EntityPhoenix par1EntityPhoenix, float par2, float par3, float par4){
- GlStateManager.translate(0.0F, -0.1F, 0.0F);
- super.rotateCorpse(par1EntityPhoenix, par2, par3, par4);
- }
+ @Override
+ protected void applyRotations(EntityPhoenix par1EntityPhoenix, float par2, float par3, float par4){
+ GlStateManager.translate(0.0F, -0.1F, 0.0F);
+ super.applyRotations(par1EntityPhoenix, par2, par3, par4);
+ }
- @Override
- public void doRender(EntityPhoenix phoenix, double par2, double par4, double par6, float par8, float par9){
-
- GlStateManager.pushMatrix();
-
- GlStateManager.disableLighting();
- GlStateManager.enableBlend();
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
-
- super.doRender(phoenix, par2, par4, par6, par8, par9);
+ @Override
+ public void doRender(EntityPhoenix phoenix, double par2, double par4, double par6, float par8, float par9){
- GlStateManager.enableLighting();
- GlStateManager.disableBlend();
- GlStateManager.popMatrix();
- }
+ GlStateManager.pushMatrix();
+
+ GlStateManager.disableLighting();
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
+
+ super.doRender(phoenix, par2, par4, par6, par8, par9);
+
+ GlStateManager.enableLighting();
+ GlStateManager.disableBlend();
+ GlStateManager.popMatrix();
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderProjectile.java b/src/main/java/electroblob/wizardry/client/renderer/RenderProjectile.java
index dc00bf41..38e397e7 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderProjectile.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderProjectile.java
@@ -18,71 +18,71 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderProjectile extends Render {
- private float scale;
- private boolean blend = false;
-
- private final ResourceLocation texture;
+ private float scale;
+ private boolean blend = false;
- public RenderProjectile(RenderManager renderManager, float scale, ResourceLocation texture, boolean doBlending)
- {
- super(renderManager);
- this.scale = scale;
- this.texture = texture;
- this.blend = doBlending;
- }
+ private final ResourceLocation texture;
- @Override
- public void doRender(EntityMagicProjectile entity, double par2, double par4, double par6, float par8, float par9){
-
- GlStateManager.pushMatrix();
- this.bindTexture(texture);
- GlStateManager.translate((float)par2, (float)par4, (float)par6);
- GlStateManager.enableRescaleNormal();
- if(blend){
- GlStateManager.enableBlend();
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
- }
- GlStateManager.disableLighting();
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
-
- float f2 = this.scale;
- GlStateManager.scale(f2 / 1.0F, f2 / 1.0F, f2 / 1.0F);
-
- Tessellator tessellator = Tessellator.getInstance();
- VertexBuffer buffer = tessellator.getBuffer();
-
- float f3 = 0.0f;
- float f4 = 1.0f;
- float f5 = 0.0f;
- float f6 = 1.0f;
- float f7 = 1.0F;
- float f8 = 0.5F;
- float f9 = 0.25F;
-
- // This counteracts the reverse rotation behaviour when in front f5 view.
- // Fun fact: this is a bug with vanilla too! Look at a snowball in front f5 view, for example.
- float yaw = Minecraft.getMinecraft().gameSettings.thirdPersonView == 2 ? this.renderManager.playerViewX : -this.renderManager.playerViewX;
- GlStateManager.rotate(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
- GlStateManager.rotate(yaw, 1.0F, 0.0F, 0.0F);
-
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- //buffer.normal(0.0F, 1.0F, 0.0F);
- buffer.pos((double)(0.0F - f8), (double)(0.0F - f9), 0.0D).tex((double)f3, (double)f6).endVertex();
- buffer.pos((double)(f7 - f8), (double)(0.0F - f9), 0.0D).tex((double)f4, (double)f6).endVertex();
- buffer.pos((double)(f7 - f8), (double)(1.0F - f9), 0.0D).tex((double)f4, (double)f5).endVertex();
- buffer.pos((double)(0.0F - f8), (double)(1.0F - f9), 0.0D).tex((double)f3, (double)f5).endVertex();
- tessellator.draw();
-
- GlStateManager.disableRescaleNormal();
- if(blend){
- GlStateManager.disableBlend();
- }
- GlStateManager.enableLighting();
- GlStateManager.popMatrix();
- }
-
- @Override
- protected ResourceLocation getEntityTexture(EntityMagicProjectile par1Entity){
- return texture;
- }
+ public RenderProjectile(RenderManager renderManager, float scale, ResourceLocation texture, boolean doBlending){
+ super(renderManager);
+ this.scale = scale;
+ this.texture = texture;
+ this.blend = doBlending;
+ }
+
+ @Override
+ public void doRender(EntityMagicProjectile entity, double par2, double par4, double par6, float par8, float par9){
+
+ GlStateManager.pushMatrix();
+ this.bindTexture(texture);
+ GlStateManager.translate((float)par2, (float)par4, (float)par6);
+ GlStateManager.enableRescaleNormal();
+ if(blend){
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ }
+ GlStateManager.disableLighting();
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
+
+ float f2 = this.scale;
+ GlStateManager.scale(f2 / 1.0F, f2 / 1.0F, f2 / 1.0F);
+
+ Tessellator tessellator = Tessellator.getInstance();
+ VertexBuffer buffer = tessellator.getBuffer();
+
+ float f3 = 0.0f;
+ float f4 = 1.0f;
+ float f5 = 0.0f;
+ float f6 = 1.0f;
+ float f7 = 1.0F;
+ float f8 = 0.5F;
+ float f9 = 0.25F;
+
+ // This counteracts the reverse rotation behaviour when in front f5 view.
+ // Fun fact: this is a bug with vanilla too! Look at a snowball in front f5 view, for example.
+ float yaw = Minecraft.getMinecraft().gameSettings.thirdPersonView == 2 ? this.renderManager.playerViewX
+ : -this.renderManager.playerViewX;
+ GlStateManager.rotate(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(yaw, 1.0F, 0.0F, 0.0F);
+
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ // buffer.normal(0.0F, 1.0F, 0.0F);
+ buffer.pos((double)(0.0F - f8), (double)(0.0F - f9), 0.0D).tex((double)f3, (double)f6).endVertex();
+ buffer.pos((double)(f7 - f8), (double)(0.0F - f9), 0.0D).tex((double)f4, (double)f6).endVertex();
+ buffer.pos((double)(f7 - f8), (double)(1.0F - f9), 0.0D).tex((double)f4, (double)f5).endVertex();
+ buffer.pos((double)(0.0F - f8), (double)(1.0F - f9), 0.0D).tex((double)f3, (double)f5).endVertex();
+ tessellator.draw();
+
+ GlStateManager.disableRescaleNormal();
+ if(blend){
+ GlStateManager.disableBlend();
+ }
+ GlStateManager.enableLighting();
+ GlStateManager.popMatrix();
+ }
+
+ @Override
+ protected ResourceLocation getEntityTexture(EntityMagicProjectile par1Entity){
+ return texture;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderSigil.java b/src/main/java/electroblob/wizardry/client/renderer/RenderSigil.java
index bb33b60d..876a7172 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderSigil.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderSigil.java
@@ -17,12 +17,12 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
public class RenderSigil extends Render {
-
- private final ResourceLocation texture;
- private float scale = 1.0f;
- private boolean invisibleToEnemies;
-
- public RenderSigil(RenderManager renderManager, ResourceLocation texture, float scale, boolean invisibleToEnemies) {
+
+ private final ResourceLocation texture;
+ private float scale = 1.0f;
+ private boolean invisibleToEnemies;
+
+ public RenderSigil(RenderManager renderManager, ResourceLocation texture, float scale, boolean invisibleToEnemies){
super(renderManager);
this.texture = texture;
this.scale = scale;
@@ -30,59 +30,59 @@ public class RenderSigil extends Render {
}
@Override
- public void doRender(EntityMagicConstruct entity, double par2, double par4, double par6, float par8, float par9){
-
+ public void doRender(EntityMagicConstruct entity, double par2, double par4, double par6, float par8, float par9){
+
// Makes the sigil invisible to enemies of the player that created it
if(this.invisibleToEnemies){
-
- if(entity.getCaster() instanceof EntityPlayer
- && !WizardryUtilities.isPlayerAlly((EntityPlayer)entity.getCaster(), Minecraft.getMinecraft().thePlayer)){
+
+ if(entity.getCaster() instanceof EntityPlayer && !WizardryUtilities
+ .isPlayerAlly((EntityPlayer)entity.getCaster(), Minecraft.getMinecraft().player)){
return;
}
}
-
- GlStateManager.pushMatrix();
- GlStateManager.enableBlend();
- GlStateManager.disableLighting();
- OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
-
- float yOffset = 0;
-
- GlStateManager.translate((float)par2, (float)par4 + yOffset, (float)par6);
-
- this.bindTexture(texture);
- float f6 = 1.0F;
- float f7 = 0.5F;
- float f8 = 0.5F;
-
- GlStateManager.rotate(-90, 1, 0, 0);
-
- // Healing aura rotates slowly
- if(entity instanceof EntityHealAura) GlStateManager.rotate(entity.ticksExisted/3.0f, 0, 0, 1);
-
- GlStateManager.scale(scale, scale, scale);
-
- Tessellator tessellator = Tessellator.getInstance();
- VertexBuffer buffer = tessellator.getBuffer();
- buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- //tessellator.setColorRGBA_I(k1, 128);
- //buffer.normal(0.0F, 1.0F, 0.0F);
- buffer.pos((double)(0.0F - f7), (double)(0.0F - f8), 0.01).tex(0, 1).endVertex();
- buffer.pos((double)(f6 - f7), (double)(0.0F - f8), 0.01).tex(1, 1).endVertex();
- buffer.pos((double)(f6 - f7), (double)(1.0F - f8), 0.01).tex(1, 0).endVertex();
- buffer.pos((double)(0.0F - f7), (double)(1.0F - f8), 0.01).tex(0, 0).endVertex();
-
- tessellator.draw();
-
- GlStateManager.disableBlend();
- GlStateManager.enableLighting();
- GlStateManager.disableRescaleNormal();
- GlStateManager.popMatrix();
- }
+
+ GlStateManager.pushMatrix();
+ GlStateManager.enableBlend();
+ GlStateManager.disableLighting();
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+
+ float yOffset = 0;
+
+ GlStateManager.translate((float)par2, (float)par4 + yOffset, (float)par6);
+
+ this.bindTexture(texture);
+ float f6 = 1.0F;
+ float f7 = 0.5F;
+ float f8 = 0.5F;
+
+ GlStateManager.rotate(-90, 1, 0, 0);
+
+ // Healing aura rotates slowly
+ if(entity instanceof EntityHealAura) GlStateManager.rotate(entity.ticksExisted / 3.0f, 0, 0, 1);
+
+ GlStateManager.scale(scale, scale, scale);
+
+ Tessellator tessellator = Tessellator.getInstance();
+ VertexBuffer buffer = tessellator.getBuffer();
+ buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
+ // tessellator.setColorRGBA_I(k1, 128);
+ // buffer.normal(0.0F, 1.0F, 0.0F);
+ buffer.pos((double)(0.0F - f7), (double)(0.0F - f8), 0.01).tex(0, 1).endVertex();
+ buffer.pos((double)(f6 - f7), (double)(0.0F - f8), 0.01).tex(1, 1).endVertex();
+ buffer.pos((double)(f6 - f7), (double)(1.0F - f8), 0.01).tex(1, 0).endVertex();
+ buffer.pos((double)(0.0F - f7), (double)(1.0F - f8), 0.01).tex(0, 0).endVertex();
+
+ tessellator.draw();
+
+ GlStateManager.disableBlend();
+ GlStateManager.enableLighting();
+ GlStateManager.disableRescaleNormal();
+ GlStateManager.popMatrix();
+ }
@Override
- protected ResourceLocation getEntityTexture(EntityMagicConstruct entity) {
+ protected ResourceLocation getEntityTexture(EntityMagicConstruct entity){
return null;
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderSpiritHorse.java b/src/main/java/electroblob/wizardry/client/renderer/RenderSpiritHorse.java
index dda80293..c3452e38 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderSpiritHorse.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderSpiritHorse.java
@@ -3,7 +3,6 @@ package electroblob.wizardry.client.renderer;
import org.lwjgl.opengl.GL11;
import electroblob.wizardry.Wizardry;
-import net.minecraft.client.model.ModelHorse;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.entity.RenderHorse;
import net.minecraft.client.renderer.entity.RenderManager;
@@ -14,23 +13,24 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderSpiritHorse extends RenderHorse {
-
- private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/entity/spirit_horse.png");
- public RenderSpiritHorse(RenderManager renderManager, float par2){
- super(renderManager, new ModelHorse(), par2);
- }
-
- @Override
- protected ResourceLocation getEntityTexture(EntityHorse entity) {
- return texture;
- }
+ private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/spirit_horse.png");
- @Override
- protected void preRenderCallback(EntityHorse entitylivingbaseIn, float partialTickTime){
- super.preRenderCallback(entitylivingbaseIn, partialTickTime);
- GlStateManager.enableBlend();
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
- }
+ public RenderSpiritHorse(RenderManager renderManager){
+ super(renderManager);
+ }
+
+ @Override
+ protected ResourceLocation getEntityTexture(EntityHorse entity){
+ return texture;
+ }
+
+ @Override
+ protected void preRenderCallback(EntityHorse entitylivingbaseIn, float partialTickTime){
+ super.preRenderCallback(entitylivingbaseIn, partialTickTime);
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderSpiritWolf.java b/src/main/java/electroblob/wizardry/client/renderer/RenderSpiritWolf.java
index e1ffe797..a3f4fadc 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderSpiritWolf.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderSpiritWolf.java
@@ -3,7 +3,6 @@ package electroblob.wizardry.client.renderer;
import org.lwjgl.opengl.GL11;
import electroblob.wizardry.Wizardry;
-import net.minecraft.client.model.ModelWolf;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.entity.RenderWolf;
@@ -14,22 +13,23 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderSpiritWolf extends RenderWolf {
-
- private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/entity/spirit_wolf.png");
- public RenderSpiritWolf(RenderManager renderManager, float par3){
- super(renderManager, new ModelWolf(), par3);
- }
+ private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID,
+ "textures/entity/spirit_wolf.png");
- @Override
- protected ResourceLocation getEntityTexture(EntityWolf entity) {
- return texture;
- }
+ public RenderSpiritWolf(RenderManager renderManager){
+ super(renderManager);
+ }
- @Override
- protected void preRenderCallback(EntityWolf entity, float partialTickTime){
- super.preRenderCallback(entity, partialTickTime);
- GlStateManager.enableBlend();
- GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
- }
+ @Override
+ protected ResourceLocation getEntityTexture(EntityWolf entity){
+ return texture;
+ }
+
+ @Override
+ protected void preRenderCallback(EntityWolf entity, float partialTickTime){
+ super.preRenderCallback(entity, partialTickTime);
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderStatue.java b/src/main/java/electroblob/wizardry/client/renderer/RenderStatue.java
index 33301d84..c65cb05e 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderStatue.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderStatue.java
@@ -9,33 +9,35 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
public class RenderStatue extends TileEntitySpecialRenderer {
-
+
private int destroyStage = 0; // Gets set each time a statue is rendered to allow access from the layer renderer
@Override
- public void renderTileEntityAt(TileEntityStatue statue, double x, double y, double z, float partialTicks, int destroyStage){
+ public void renderTileEntityAt(TileEntityStatue statue, double x, double y, double z, float partialTicks,
+ int destroyStage){
// Multiblock support for the breaking animation. The chest has its own way of doing this in
// TileEntityRendererDispatcher, but I don't have access to that.
if(statue.position != 1 && destroyStage >= 0){
- TileEntity tileentity = statue.getWorld().getTileEntity(statue.getPos().down(statue.position-1));
- //System.out.println(tileentity);
+ TileEntity tileentity = statue.getWorld().getTileEntity(statue.getPos().down(statue.position - 1));
+ // System.out.println(tileentity);
if(tileentity instanceof TileEntityStatue){
// If this is the block breaking animation pass and this isn't the bottom block, divert the call to
// the bottom block.
- this.renderTileEntityAt((TileEntityStatue)tileentity, x, y - (statue.position-1), z, partialTicks, destroyStage);
+ this.renderTileEntityAt((TileEntityStatue)tileentity, x, y - (statue.position - 1), z, partialTicks,
+ destroyStage);
}
}
if(statue.creature != null && statue.position == 1){
-
+
this.destroyStage = destroyStage;
-
+
GlStateManager.pushMatrix();
// The next line makes stuff render in the same place relative to the world wherever the player is.
GlStateManager.translate((float)x + 0.5F, (float)y, (float)z + 0.5F);
GlStateManager.enableLighting();
-
+
float yaw = statue.creature.prevRotationYaw;
int i = statue.creature.getBrightnessForRender(0);
@@ -51,12 +53,12 @@ public class RenderStatue extends TileEntitySpecialRenderer {
// For some reason, passing in the partialTicks causes the entity to spin round really fast
Minecraft.getMinecraft().getRenderManager().doRenderEntity(statue.creature, 0, 0, 0, 0, 0, true);
if(!statue.isIce) statue.creature.setInvisible(false);
-
+
GlStateManager.popMatrix();
}
}
-
+
public ResourceLocation getBlockBreakingTexture(){
return destroyStage < 0 ? null : DESTROY_STAGES[destroyStage];
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderWizard.java b/src/main/java/electroblob/wizardry/client/renderer/RenderWizard.java
index e2043d5b..baa322ee 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderWizard.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderWizard.java
@@ -13,22 +13,22 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderWizard extends RenderBiped {
- static final ResourceLocation[] textures = new ResourceLocation[6];
+ static final ResourceLocation[] textures = new ResourceLocation[6];
- public RenderWizard(RenderManager renderManager){
-
- super(renderManager, new ModelWizard(), 0.5F);
-
- for(int i=0;i<6;i++){
+ public RenderWizard(RenderManager renderManager){
+
+ super(renderManager, new ModelWizard(), 0.5F);
+
+ for(int i = 0; i < 6; i++){
textures[i] = new ResourceLocation(Wizardry.MODID, "textures/entity/wizard_" + i + ".png");
}
- // Just using the default without overriding models, since the armour sets its own model anyway.
- this.addLayer(new LayerBipedArmor(this));
- }
-
- @Override
- protected ResourceLocation getEntityTexture(EntityWizard wizard) {
- return textures[wizard.textureIndex];
- }
+ // Just using the default without overriding models, since the armour sets its own model anyway.
+ this.addLayer(new LayerBipedArmor(this));
+ }
+
+ @Override
+ protected ResourceLocation getEntityTexture(EntityWizard wizard){
+ return textures[wizard.textureIndex];
+ }
}
diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderWraithMinion.java b/src/main/java/electroblob/wizardry/client/renderer/RenderWraithMinion.java
index 2c31a7cb..da691189 100644
--- a/src/main/java/electroblob/wizardry/client/renderer/RenderWraithMinion.java
+++ b/src/main/java/electroblob/wizardry/client/renderer/RenderWraithMinion.java
@@ -9,18 +9,15 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
-public class RenderWraithMinion extends RenderLiving
-{
+public class RenderWraithMinion extends RenderLiving {
private ResourceLocation texture = new ResourceLocation("textures/entity/blaze.png");
- public RenderWraithMinion(RenderManager renderManagerIn)
- {
- super(renderManagerIn, new ModelBlaze(), 0.5F);
- }
+ public RenderWraithMinion(RenderManager renderManagerIn){
+ super(renderManagerIn, new ModelBlaze(), 0.5F);
+ }
- @Override
- protected ResourceLocation getEntityTexture(EntityBlazeMinion entity)
- {
- return texture;
- }
+ @Override
+ protected ResourceLocation getEntityTexture(EntityBlazeMinion entity){
+ return texture;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/command/CommandCastSpell.java b/src/main/java/electroblob/wizardry/command/CommandCastSpell.java
index 7d9810ec..c5a6ad94 100644
--- a/src/main/java/electroblob/wizardry/command/CommandCastSpell.java
+++ b/src/main/java/electroblob/wizardry/command/CommandCastSpell.java
@@ -32,165 +32,177 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
public class CommandCastSpell extends CommandBase {
@Override
- public String getCommandName(){
+ public String getName(){
return Wizardry.settings.castCommandName;
}
-
+
@Override
public int getRequiredPermissionLevel(){
// I *think* it's something like 0 = everyone, 1 = moderator, 2 = op/admin, 3 = op/console...
return 2;
}
-
+
@Override
- public String getCommandUsage(ICommandSender p_71518_1_){
+ public String getUsage(ICommandSender sender){
// Not ideal, but the way this is implemented means I have no choice. Only used in the help command, so in there
// the custom command name will not display.
return "commands.wizardry:cast.usage";
- //return I18n.format("commands.wizardry:cast.usage", Wizardry.settings.castCommandName);
+ // return I18n.format("commands.wizardry:cast.usage", Wizardry.settings.castCommandName);
}
-
+
@Override
- public List getTabCompletionOptions(MinecraftServer server, ICommandSender sender, String[] arguments, BlockPos pos) {
+ public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] arguments,
+ BlockPos pos){
switch(arguments.length){
- case 1: return getListOfStringsMatchingLastWord(arguments, Spell.getSpellNames());
- case 2: return getListOfStringsMatchingLastWord(arguments, server.getAllUsernames());
+ case 1:
+ return getListOfStringsMatchingLastWord(arguments, Spell.getSpellNames());
+ case 2:
+ return getListOfStringsMatchingLastWord(arguments, server.getOnlinePlayerNames());
}
- return super.getTabCompletionOptions(server, sender, arguments, pos);
+ return super.getTabCompletions(server, sender, arguments, pos);
}
@Override
- public void execute(MinecraftServer server, ICommandSender sender, String[] arguments) throws CommandException {
-
+ public void execute(MinecraftServer server, ICommandSender sender, String[] arguments) throws CommandException{
+
if(arguments.length < 1){
- throw new WrongUsageException("commands.wizardry:cast.usage", Wizardry.settings.castCommandName);
- }else{
-
- // ===== Parameter retrieval =====
-
- int i=0;
-
- EntityPlayerMP caster = null;
-
- try{
- caster = getCommandSenderAsPlayer(sender);
- }catch(PlayerNotFoundException exception){
- // Nothing here since the player specifying is done later, I just don't want it to throw an exception here.
- }
-
- Spell spell = Spell.get(arguments[i++]);
-
- if(spell == null){
- throw new NumberInvalidException("commands.wizardry:cast.not_found", new Object[]{arguments[i-1]});
- }
-
- boolean castAsOtherPlayer = false;
-
- if(i < arguments.length){
- try{
- // If the second argument is a player and is not the player that gave the command, the spell is cast
- // as the given player rather than the command sender, and there is a different chat readout.
- EntityPlayerMP entityplayermp = getPlayer(server, sender, arguments[i++]);
- if(caster != entityplayermp){
- castAsOtherPlayer = true;
- caster = entityplayermp;
- }
- }catch(PlayerNotFoundException exception){
- // If no player was found, rather than give an error it simply assumes the player was unspecified.
- i--;
- }
- }
-
- // If, after this point, the player is still null, the sender must be a command block or the console and the
- // player must not have been specified, meaning an exception should be thrown.
- if(caster == null) throw new PlayerNotFoundException("You must specify which player you wish to perform this action on.");
-
- SpellModifiers modifiers = new SpellModifiers();
-
- if(i < arguments.length){
-
- // Copied from CommandGive. Why it doesn't just use arguments[i] itself I don't know.
- String nbt = getChatComponentFromNthArg(sender, arguments, i++).getUnformattedText();
+ throw new WrongUsageException("commands.wizardry:cast.usage", Wizardry.settings.castCommandName);
+ }else{
- try{
- modifiers = SpellModifiers.fromNBT(JsonToNBT.getTagFromJson(nbt));
- }catch(NBTException nbtexception){
- throw new CommandException("commands.wizardry:cast.tag_error", nbtexception.getMessage());
- }
-
- for(float multiplier : modifiers.getModifiers().values()){
- if(multiplier < 0){
- throw new NumberInvalidException("commands.generic.double.tooSmall", multiplier, 0);
- }else if(multiplier > Wizardry.settings.maxSpellCommandMultiplier){
- throw new NumberInvalidException("commands.generic.double.tooBig", multiplier, Wizardry.settings.maxSpellCommandMultiplier);
- }
- }
-
- }
-
- // ===== Spell casting =====
-
- // If anything stops the spell working at this point, nothing else happens.
- if(MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Pre(caster, spell, modifiers, Source.COMMAND))){
- displayFailMessage(sender, spell);
- return;
- }
-
- WizardData data = WizardData.get((EntityPlayer)caster);
-
- if(spell.isContinuous){
-
- // Events for continuous spell casting via commands are dealt with in WizardData.
-
- if(data != null){
- if(data.isCasting()){
- data.stopCastingContinuousSpell();
- }else{
-
- data.startCastingContinuousSpell(spell, modifiers);
-
- if(castAsOtherPlayer){
- sender.addChatMessage(new TextComponentTranslation("commands.wizardry:cast.success_remote_continuous", spell.getNameForTranslationFormatted(), caster.getName()));
- }else{
- sender.addChatMessage(new TextComponentTranslation("commands.wizardry:cast.success_continuous", spell.getNameForTranslationFormatted()));
- }
- }
-
- return;
- }
-
- }else{
+ // ===== Parameter retrieval =====
- if(spell.cast(caster.worldObj, caster, EnumHand.MAIN_HAND, 0, modifiers)){
-
- MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Post(caster, spell, modifiers, Source.COMMAND));
-
- if(spell.doesSpellRequirePacket()){
+ int i = 0;
+
+ EntityPlayerMP caster = null;
+
+ try{
+ caster = getCommandSenderAsPlayer(sender);
+ }catch (PlayerNotFoundException exception){
+ // Nothing here since the player specifying is done later, I just don't want it to throw an exception
+ // here.
+ }
+
+ Spell spell = Spell.get(arguments[i++]);
+
+ if(spell == null){
+ throw new NumberInvalidException("commands.wizardry:cast.not_found", new Object[]{arguments[i - 1]});
+ }
+
+ boolean castAsOtherPlayer = false;
+
+ if(i < arguments.length){
+ try{
+ // If the second argument is a player and is not the player that gave the command, the spell is cast
+ // as the given player rather than the command sender, and there is a different chat readout.
+ EntityPlayerMP entityplayermp = getPlayer(server, sender, arguments[i++]);
+ if(caster != entityplayermp){
+ castAsOtherPlayer = true;
+ caster = entityplayermp;
+ }
+ }catch (PlayerNotFoundException exception){
+ // If no player was found, rather than give an error it simply assumes the player was unspecified.
+ i--;
+ }
+ }
+
+ // If, after this point, the player is still null, the sender must be a command block or the console and the
+ // player must not have been specified, meaning an exception should be thrown.
+ if(caster == null)
+ throw new PlayerNotFoundException("You must specify which player you wish to perform this action on.");
+
+ SpellModifiers modifiers = new SpellModifiers();
+
+ if(i < arguments.length){
+
+ // Copied from CommandGive. Why it doesn't just use arguments[i] itself I don't know.
+ String nbt = getChatComponentFromNthArg(sender, arguments, i++).getUnformattedText();
+
+ try{
+ modifiers = SpellModifiers.fromNBT(JsonToNBT.getTagFromJson(nbt));
+ }catch (NBTException nbtexception){
+ throw new CommandException("commands.wizardry:cast.tag_error", nbtexception.getMessage());
+ }
+
+ for(float multiplier : modifiers.getModifiers().values()){
+ if(multiplier < 0){
+ throw new NumberInvalidException("commands.generic.double.tooSmall", multiplier, 0);
+ }else if(multiplier > Wizardry.settings.maxSpellCommandMultiplier){
+ throw new NumberInvalidException("commands.generic.double.tooBig", multiplier,
+ Wizardry.settings.maxSpellCommandMultiplier);
+ }
+ }
+
+ }
+
+ // ===== Spell casting =====
+
+ // If anything stops the spell working at this point, nothing else happens.
+ if(MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Pre(caster, spell, modifiers, Source.COMMAND))){
+ displayFailMessage(sender, spell);
+ return;
+ }
+
+ WizardData data = WizardData.get((EntityPlayer)caster);
+
+ if(spell.isContinuous){
+
+ // Events for continuous spell casting via commands are dealt with in WizardData.
+
+ if(data != null){
+ if(data.isCasting()){
+ data.stopCastingContinuousSpell();
+ }else{
+
+ data.startCastingContinuousSpell(spell, modifiers);
+
+ if(castAsOtherPlayer){
+ sender.sendMessage(
+ new TextComponentTranslation("commands.wizardry:cast.success_remote_continuous",
+ spell.getNameForTranslationFormatted(), caster.getName()));
+ }else{
+ sender.sendMessage(new TextComponentTranslation("commands.wizardry:cast.success_continuous",
+ spell.getNameForTranslationFormatted()));
+ }
+ }
+
+ return;
+ }
+
+ }else{
+
+ if(spell.cast(caster.world, caster, EnumHand.MAIN_HAND, 0, modifiers)){
+
+ MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Post(caster, spell, modifiers, Source.COMMAND));
+
+ if(spell.doesSpellRequirePacket()){
// Sends a packet to all players in dimension to tell them to spawn particles.
// Only sent if the spell succeeded, because if the spell failed, you wouldn't
// need to spawn any particles!
IMessage msg = new PacketCastSpell.Message(caster.getEntityId(), null, spell.id(), modifiers);
- WizardryPacketHandler.net.sendToDimension(msg, caster.worldObj.provider.getDimension());
+ WizardryPacketHandler.net.sendToDimension(msg, caster.world.provider.getDimension());
}
-
- if(castAsOtherPlayer){
- sender.addChatMessage(new TextComponentTranslation("commands.wizardry:cast.success_remote", spell.getNameForTranslationFormatted(), caster.getName()));
- }else{
- sender.addChatMessage(new TextComponentTranslation("commands.wizardry:cast.success", spell.getNameForTranslationFormatted()));
- }
- return;
- }
- }
-
- displayFailMessage(sender, spell);
- }
+
+ if(castAsOtherPlayer){
+ sender.sendMessage(new TextComponentTranslation("commands.wizardry:cast.success_remote",
+ spell.getNameForTranslationFormatted(), caster.getName()));
+ }else{
+ sender.sendMessage(new TextComponentTranslation("commands.wizardry:cast.success",
+ spell.getNameForTranslationFormatted()));
+ }
+ return;
+ }
+ }
+
+ displayFailMessage(sender, spell);
+ }
}
-
+
/** Displays the "Unable to cast [spell]" message in the chat. */
private void displayFailMessage(ICommandSender sender, Spell spell){
- ITextComponent message = new TextComponentTranslation("commands.wizardry:cast.fail", spell.getNameForTranslationFormatted());
- message.getStyle().setColor(TextFormatting.RED);
- sender.addChatMessage(message);
+ ITextComponent message = new TextComponentTranslation("commands.wizardry:cast.fail",
+ spell.getNameForTranslationFormatted());
+ message.getStyle().setColor(TextFormatting.RED);
+ sender.sendMessage(message);
}
}
diff --git a/src/main/java/electroblob/wizardry/command/CommandDiscoverSpell.java b/src/main/java/electroblob/wizardry/command/CommandDiscoverSpell.java
index 85a292fa..a50e408b 100644
--- a/src/main/java/electroblob/wizardry/command/CommandDiscoverSpell.java
+++ b/src/main/java/electroblob/wizardry/command/CommandDiscoverSpell.java
@@ -22,7 +22,7 @@ import net.minecraftforge.common.MinecraftForge;
public class CommandDiscoverSpell extends CommandBase {
@Override
- public String getCommandName(){
+ public String getName(){
return Wizardry.settings.discoverspellCommandName;
}
@@ -32,39 +32,40 @@ public class CommandDiscoverSpell extends CommandBase {
return 2;
}
- /*
- @Override
- public boolean checkPermission(MinecraftServer server, ICommandSender sender){
- // Only ops (multiplayer) or players with cheats enabled (singleplayer/LAN) can use /discoverspell.
- return !(sender instanceof EntityPlayer) || server.getServer().getConfigurationManager().func_152596_g(((EntityPlayer)sender).getGameProfile());
- }
- */
+ /* @Override public boolean checkPermission(MinecraftServer server, ICommandSender sender){ // Only ops
+ * (multiplayer) or players with cheats enabled (singleplayer/LAN) can use /discoverspell. return !(sender
+ * instanceof EntityPlayer) ||
+ * server.getServer().getConfigurationManager().func_152596_g(((EntityPlayer)sender).getGameProfile()); } */
@Override
- public String getCommandUsage(ICommandSender p_71518_1_){
+ public String getUsage(ICommandSender sender){
// Not ideal, but the way this is implemented means I have no choice. Only used in the help command, so in there
// the custom command name will not display.
return "commands.wizardry:discoverspell.usage";
- //return I18n.format("commands.wizardry:discoverspell.usage", Wizardry.settings.discoverspellCommandName);
+ // return I18n.format("commands.wizardry:discoverspell.usage", Wizardry.settings.discoverspellCommandName);
}
@Override
- public List getTabCompletionOptions(MinecraftServer server, ICommandSender sender, String[] arguments, BlockPos pos) {
+ public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] arguments,
+ BlockPos pos){
switch(arguments.length){
- case 1: return getListOfStringsMatchingLastWord(arguments, Spell.getSpellNames());
- case 2: return getListOfStringsMatchingLastWord(arguments, server.getAllUsernames());
+ case 1:
+ return getListOfStringsMatchingLastWord(arguments, Spell.getSpellNames());
+ case 2:
+ return getListOfStringsMatchingLastWord(arguments, server.getOnlinePlayerNames());
}
- return super.getTabCompletionOptions(server, sender, arguments, pos);
+ return super.getTabCompletions(server, sender, arguments, pos);
}
@Override
- public void execute(MinecraftServer server, ICommandSender sender, String[] arguments) throws CommandException {
+ public void execute(MinecraftServer server, ICommandSender sender, String[] arguments) throws CommandException{
if(arguments.length < 1){
- throw new WrongUsageException("commands.wizardry:discoverspell.usage", Wizardry.settings.discoverspellCommandName);
+ throw new WrongUsageException("commands.wizardry:discoverspell.usage",
+ Wizardry.settings.discoverspellCommandName);
}else{
- int i=0;
+ int i = 0;
boolean clear = false;
boolean all = false;
@@ -72,8 +73,9 @@ public class CommandDiscoverSpell extends CommandBase {
try{
player = getCommandSenderAsPlayer(sender);
- }catch(PlayerNotFoundException exception){
- // Nothing here since the player specifying is done later, I just don't want it to throw an exception here.
+ }catch (PlayerNotFoundException exception){
+ // Nothing here since the player specifying is done later, I just don't want it to throw an exception
+ // here.
}
Spell spell = Spells.none;
@@ -89,7 +91,8 @@ public class CommandDiscoverSpell extends CommandBase {
spell = Spell.get(arguments[i++]);
if(spell == null){
- throw new NumberInvalidException("commands.wizardry:discoverspell.not_found", new Object[]{arguments[i-1]});
+ throw new NumberInvalidException("commands.wizardry:discoverspell.not_found",
+ new Object[]{arguments[i - 1]});
}
}
@@ -104,25 +107,31 @@ public class CommandDiscoverSpell extends CommandBase {
// If, after this point, the player is still null, the sender must be a command block or the console and the
// player must not have been specified, meaning an exception should be thrown.
- if(player == null) throw new PlayerNotFoundException("You must specify which player you wish to perform this action on.");
+ if(player == null)
+ throw new PlayerNotFoundException("You must specify which player you wish to perform this action on.");
WizardData properties = WizardData.get(player);
if(properties != null){
if(clear){
properties.spellsDiscovered.clear();
- sender.addChatMessage(new TextComponentTranslation("commands.wizardry:discoverspell.clear", player.getName()));
+ sender.sendMessage(
+ new TextComponentTranslation("commands.wizardry:discoverspell.clear", player.getName()));
}else if(all){
properties.spellsDiscovered.addAll(Spell.getSpells(Spell.allSpells));
- sender.addChatMessage(new TextComponentTranslation("commands.wizardry:discoverspell.all", player.getName()));
+ sender.sendMessage(
+ new TextComponentTranslation("commands.wizardry:discoverspell.all", player.getName()));
}else{
if(properties.hasSpellBeenDiscovered(spell)){
properties.spellsDiscovered.remove(spell);
- sender.addChatMessage(new TextComponentTranslation("commands.wizardry:discoverspell.removespell", spell.getNameForTranslationFormatted(), player.getName()));
+ sender.sendMessage(new TextComponentTranslation("commands.wizardry:discoverspell.removespell",
+ spell.getNameForTranslationFormatted(), player.getName()));
}else{
- if(!MinecraftForge.EVENT_BUS.post(new DiscoverSpellEvent(player, spell, DiscoverSpellEvent.Source.COMMAND))){
+ if(!MinecraftForge.EVENT_BUS
+ .post(new DiscoverSpellEvent(player, spell, DiscoverSpellEvent.Source.COMMAND))){
properties.discoverSpell(spell);
- sender.addChatMessage(new TextComponentTranslation("commands.wizardry:discoverspell.addspell", spell.getNameForTranslationFormatted(), player.getName()));
+ sender.sendMessage(new TextComponentTranslation("commands.wizardry:discoverspell.addspell",
+ spell.getNameForTranslationFormatted(), player.getName()));
}
}
}
diff --git a/src/main/java/electroblob/wizardry/command/CommandSetAlly.java b/src/main/java/electroblob/wizardry/command/CommandSetAlly.java
index b566306c..d45fe222 100644
--- a/src/main/java/electroblob/wizardry/command/CommandSetAlly.java
+++ b/src/main/java/electroblob/wizardry/command/CommandSetAlly.java
@@ -21,7 +21,7 @@ import net.minecraft.util.text.TextFormatting;
public class CommandSetAlly extends CommandBase {
@Override
- public String getCommandName(){
+ public String getName(){
return Wizardry.settings.allyCommandName;
}
@@ -32,30 +32,32 @@ public class CommandSetAlly extends CommandBase {
}
@Override
- public boolean checkPermission(MinecraftServer server, ICommandSender p_71519_1_)
- {
+ public boolean checkPermission(MinecraftServer server, ICommandSender p_71519_1_){
return true;
}
@Override
- public String getCommandUsage(ICommandSender p_71518_1_){
+ public String getUsage(ICommandSender p_71518_1_){
// Not ideal, but the way this is implemented means I have no choice. Only used in the help command, so in there
// the custom command name will not display.
return "commands.wizardry:ally.usage";
- //return I18n.format("commands.wizardry:ally.usage", Wizardry.settings.allyCommandName);
+ // return I18n.format("commands.wizardry:ally.usage", Wizardry.settings.allyCommandName);
}
@Override
- public List getTabCompletionOptions(MinecraftServer server, ICommandSender sender, String[] arguments, BlockPos pos) {
+ public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] arguments,
+ BlockPos pos){
switch(arguments.length){
- case 1: return getListOfStringsMatchingLastWord(arguments, server.getAllUsernames());
- case 2: return getListOfStringsMatchingLastWord(arguments, server.getAllUsernames());
+ case 1:
+ return getListOfStringsMatchingLastWord(arguments, server.getOnlinePlayerNames());
+ case 2:
+ return getListOfStringsMatchingLastWord(arguments, server.getOnlinePlayerNames());
}
- return super.getTabCompletionOptions(server, sender, arguments, pos);
+ return super.getTabCompletions(server, sender, arguments, pos);
}
@Override
- public void execute(MinecraftServer server, ICommandSender sender, String[] arguments) throws CommandException {
+ public void execute(MinecraftServer server, ICommandSender sender, String[] arguments) throws CommandException{
if(arguments.length < 1){
throw new WrongUsageException("commands.wizardry:ally.usage", Wizardry.settings.allyCommandName);
@@ -65,8 +67,9 @@ public class CommandSetAlly extends CommandBase {
try{
allyOf = getCommandSenderAsPlayer(sender);
- }catch(PlayerNotFoundException exception){
- // Nothing here since the player specifying is done later, I just don't want it to throw an exception here.
+ }catch (PlayerNotFoundException exception){
+ // Nothing here since the player specifying is done later, I just don't want it to throw an exception
+ // here.
}
boolean executeAsOtherPlayer = false;
@@ -79,11 +82,13 @@ public class CommandSetAlly extends CommandBase {
allyOf = getPlayer(server, sender, arguments[1]);
// Don't want to catch the exception here either, because there can be no other second argument.
- if(allyOf != sender && sender instanceof EntityPlayer && !WizardryUtilities.isPlayerOp((EntityPlayer)sender, server)){
+ if(allyOf != sender && sender instanceof EntityPlayer
+ && !WizardryUtilities.isPlayerOp((EntityPlayer)sender, server)){
// Displays a chat message if a non-op tries to modify another player's allies.
- TextComponentTranslation TextComponentTranslation2 = new TextComponentTranslation("commands.wizardry:ally.permission");
+ TextComponentTranslation TextComponentTranslation2 = new TextComponentTranslation(
+ "commands.wizardry:ally.permission");
TextComponentTranslation2.getStyle().setColor(TextFormatting.RED);
- allyOf.addChatMessage(TextComponentTranslation2);
+ allyOf.sendMessage(TextComponentTranslation2);
return;
}
@@ -92,18 +97,20 @@ public class CommandSetAlly extends CommandBase {
// If, after this point, allyOf is still null, the sender must be a command block or the console and two
// players must not have been specified, meaning an exception should be thrown.
- if(allyOf == null) throw new PlayerNotFoundException("You must specify which player you wish to perform this action on.");
+ if(allyOf == null)
+ throw new PlayerNotFoundException("You must specify which player you wish to perform this action on.");
if(allyOf == ally) throw new NumberInvalidException("commands.wizardry:ally.self");
if(WizardData.get(allyOf) != null){
String string = WizardData.get(allyOf).toggleAlly(ally) ? "add" : "remove";
if(executeAsOtherPlayer){
- sender.addChatMessage(new TextComponentTranslation("commands.wizardry:ally." + string + "ally", ally.getName(), allyOf.getName()));
+ sender.sendMessage(new TextComponentTranslation("commands.wizardry:ally." + string + "ally",
+ ally.getName(), allyOf.getName()));
// In this case, the player whose allies have been modified is also notified.
- allyOf.addChatMessage(new TextComponentTranslation("item.wand." + string + "ally", ally.getName()));
+ allyOf.sendMessage(new TextComponentTranslation("item.wand." + string + "ally", ally.getName()));
}else{
- sender.addChatMessage(new TextComponentTranslation("item.wand." + string + "ally", ally.getName()));
+ sender.sendMessage(new TextComponentTranslation("item.wand." + string + "ally", ally.getName()));
}
}
diff --git a/src/main/java/electroblob/wizardry/command/CommandViewAllies.java b/src/main/java/electroblob/wizardry/command/CommandViewAllies.java
index 257b4b85..0942e088 100644
--- a/src/main/java/electroblob/wizardry/command/CommandViewAllies.java
+++ b/src/main/java/electroblob/wizardry/command/CommandViewAllies.java
@@ -21,7 +21,7 @@ import net.minecraft.util.text.TextFormatting;
public class CommandViewAllies extends CommandBase {
@Override
- public String getCommandName(){
+ public String getName(){
return Wizardry.settings.alliesCommandName;
}
@@ -30,37 +30,38 @@ public class CommandViewAllies extends CommandBase {
// I *think* it's something like 0 = everyone, 1 = moderator, 2 = op/admin, 3 = op/console...
return 0;
}
-
- @Override
- public boolean checkPermission(MinecraftServer server, ICommandSender p_71519_1_)
- {
- return true;
- }
@Override
- public String getCommandUsage(ICommandSender p_71518_1_){
+ public boolean checkPermission(MinecraftServer server, ICommandSender p_71519_1_){
+ return true;
+ }
+
+ @Override
+ public String getUsage(ICommandSender p_71518_1_){
// Not ideal, but the way this is implemented means I have no choice. Only used in the help command, so in there
// the custom command name will not display.
return "commands.wizardry:allies.usage";
- //return I18n.format("commands.wizardry:allies.usage", Wizardry.settings.alliesCommandName);
+ // return I18n.format("commands.wizardry:allies.usage", Wizardry.settings.alliesCommandName);
}
@Override
- public List getTabCompletionOptions(MinecraftServer server, ICommandSender sender, String[] arguments, BlockPos pos) {
+ public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] arguments,
+ BlockPos pos){
switch(arguments.length){
- case 1: return getListOfStringsMatchingLastWord(arguments, server.getAllUsernames());
+ case 1:
+ return getListOfStringsMatchingLastWord(arguments, server.getOnlinePlayerNames());
}
- return super.getTabCompletionOptions(server, sender, arguments, pos);
+ return super.getTabCompletions(server, sender, arguments, pos);
}
@Override
- public void execute(MinecraftServer server, ICommandSender sender, String[] arguments) throws CommandException {
+ public void execute(MinecraftServer server, ICommandSender sender, String[] arguments) throws CommandException{
EntityPlayerMP player = null;
try{
player = getCommandSenderAsPlayer(sender);
- }catch(PlayerNotFoundException exception){
+ }catch (PlayerNotFoundException exception){
// Nothing here since the player specifying is done later, I just don't want it to throw an exception here.
}
@@ -70,12 +71,14 @@ public class CommandViewAllies extends CommandBase {
player = getPlayer(server, sender, arguments[0]);
// Don't want to catch the exception here either, because there can be no other first argument.
-
- if(player != sender && sender instanceof EntityPlayer && !WizardryUtilities.isPlayerOp((EntityPlayer)sender, server)){
- // Displays a chat message if a non-op tries to view another player's allies.
- TextComponentTranslation TextComponentTranslation2 = new TextComponentTranslation("commands.wizardry:allies.permission");
+
+ if(player != sender && sender instanceof EntityPlayer
+ && !WizardryUtilities.isPlayerOp((EntityPlayer)sender, server)){
+ // Displays a chat message if a non-op tries to view another player's allies.
+ TextComponentTranslation TextComponentTranslation2 = new TextComponentTranslation(
+ "commands.wizardry:allies.permission");
TextComponentTranslation2.getStyle().setColor(TextFormatting.RED);
- player.addChatMessage(TextComponentTranslation2);
+ player.sendMessage(TextComponentTranslation2);
return;
}
@@ -84,7 +87,8 @@ public class CommandViewAllies extends CommandBase {
// If, after this point, player is still null, the sender must be a command block or the console and the
// player must not have been specified, meaning an exception should be thrown.
- if(player == null) throw new PlayerNotFoundException("You must specify which player you wish to perform this action on.");
+ if(player == null)
+ throw new PlayerNotFoundException("You must specify which player you wish to perform this action on.");
if(WizardData.get(player) != null){
@@ -102,9 +106,10 @@ public class CommandViewAllies extends CommandBase {
}
if(executeAsOtherPlayer){
- sender.addChatMessage(new TextComponentTranslation("commands.wizardry:allies.list_other", player.getName(), string));
+ sender.sendMessage(
+ new TextComponentTranslation("commands.wizardry:allies.list_other", player.getName(), string));
}else{
- sender.addChatMessage(new TextComponentTranslation("commands.wizardry:allies.list", string));
+ sender.sendMessage(new TextComponentTranslation("commands.wizardry:allies.list", string));
}
}
}
diff --git a/src/main/java/electroblob/wizardry/constants/Constants.java b/src/main/java/electroblob/wizardry/constants/Constants.java
index 95b79b9c..28bba9a9 100644
--- a/src/main/java/electroblob/wizardry/constants/Constants.java
+++ b/src/main/java/electroblob/wizardry/constants/Constants.java
@@ -15,10 +15,12 @@ public final class Constants {
public static final float COOLDOWN_REDUCTION_PER_LEVEL = 0.15f;
/** The fraction by which maximum charge is increased for each level of storage upgrade. */
public static final float STORAGE_INCREASE_PER_LEVEL = 0.15f;
- /** The fraction by which damage is increased for each tier of matching wand. */
+ /** The fraction by which damage is increased for each tier of matching wand. */
public static final float DAMAGE_INCREASE_PER_TIER = 0.15f;
- /** The fraction by which costs are reduced for each piece of matching armour. Note that changing this value will not
- * affect continuous spells, since they are handled differently. */
+ /**
+ * The fraction by which costs are reduced for each piece of matching armour. Note that changing this value will not
+ * affect continuous spells, since they are handled differently.
+ */
public static final float COST_REDUCTION_PER_ARMOUR = 0.2f;
/** The fraction by which spell duration is increased for each level of duration upgrade. */
public static final float DURATION_INCREASE_PER_LEVEL = 0.25f;
@@ -34,11 +36,15 @@ public final class Constants {
public static final float FROST_FATIGUE_PER_LEVEL = 0.45f;
/** The number of ticks between each mana increase for wands with the condenser upgrade. */
public static final int CONDENSER_TICK_INTERVAL = 50;
- /** The amount of mana given for a kill for each level of siphon upgrade. A random amount from 0 to this number - 1
- * is also added. See {@link WizardryEventHandler#onLivingDeathEvent} for more details. */
+ /**
+ * The amount of mana given for a kill for each level of siphon upgrade. A random amount from 0 to this number - 1
+ * is also added. See {@link WizardryEventHandler#onLivingDeathEvent} for more details.
+ */
public static final int SIPHON_MANA_PER_LEVEL = 3;
- /** The number of ticks between the spawning of patches of decay when an entity has the decay effect.
- * Note that decay won't spawn again if something is already standing in it. */
+ /**
+ * The number of ticks between the spawning of patches of decay when an entity has the decay effect. Note that decay
+ * won't spawn again if something is already standing in it.
+ */
public static final int DECAY_SPREAD_INTERVAL = 8;
}
diff --git a/src/main/java/electroblob/wizardry/constants/Element.java b/src/main/java/electroblob/wizardry/constants/Element.java
index 48dd01f4..5d310c39 100644
--- a/src/main/java/electroblob/wizardry/constants/Element.java
+++ b/src/main/java/electroblob/wizardry/constants/Element.java
@@ -10,24 +10,27 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public enum Element {
-
- /** The 'default' element, with {@link electroblob.wizardry.spell.MagicMissile MagicMissile} being its only spell. */
- MAGIC(new Style().setColor(TextFormatting.GRAY), "simple", Wizardry.MODID),
- FIRE(new Style().setColor(TextFormatting.DARK_RED), "fire", Wizardry.MODID),
- ICE(new Style().setColor(TextFormatting.AQUA), "ice", Wizardry.MODID),
- LIGHTNING(new Style().setColor(TextFormatting.DARK_AQUA), "lightning", Wizardry.MODID),
- NECROMANCY(new Style().setColor(TextFormatting.DARK_PURPLE), "necromancy", Wizardry.MODID),
- EARTH(new Style().setColor(TextFormatting.DARK_GREEN), "earth", Wizardry.MODID),
- SORCERY(new Style().setColor(TextFormatting.GREEN), "sorcery", Wizardry.MODID),
- HEALING(new Style().setColor(TextFormatting.YELLOW), "healing", Wizardry.MODID);
-
+
+ /**
+ * The 'default' element, with {@link electroblob.wizardry.spell.MagicMissile MagicMissile} being its only spell.
+ */
+ MAGIC(new Style().setColor(TextFormatting.GRAY), "simple", Wizardry.MODID), FIRE(
+ new Style().setColor(TextFormatting.DARK_RED), "fire",
+ Wizardry.MODID), ICE(new Style().setColor(TextFormatting.AQUA), "ice", Wizardry.MODID), LIGHTNING(
+ new Style().setColor(TextFormatting.DARK_AQUA), "lightning",
+ Wizardry.MODID), NECROMANCY(new Style().setColor(TextFormatting.DARK_PURPLE), "necromancy",
+ Wizardry.MODID), EARTH(new Style().setColor(TextFormatting.DARK_GREEN), "earth",
+ Wizardry.MODID), SORCERY(new Style().setColor(TextFormatting.GREEN), "sorcery",
+ Wizardry.MODID), HEALING(new Style().setColor(TextFormatting.YELLOW),
+ "healing", Wizardry.MODID);
+
/** Display colour for this element */
private final Style colour;
/** Unlocalised name for this element */
private final String unlocalisedName;
/** The {@link ResourceLocation} for this element's 8x8 icon (displayed in the arcane workbench GUI) */
private final ResourceLocation icon;
-
+
private Element(Style colour, String name, String modid){
this.colour = colour;
this.unlocalisedName = name;
@@ -39,7 +42,7 @@ public enum Element {
public String getDisplayName(){
return net.minecraft.client.resources.I18n.format("element." + getUnlocalisedName());
}
-
+
/** Returns the {@link Style} object representing the colour of this element. */
public Style getColour(){
return colour;
diff --git a/src/main/java/electroblob/wizardry/constants/SpellType.java b/src/main/java/electroblob/wizardry/constants/SpellType.java
index 807d878c..cd48eac7 100644
--- a/src/main/java/electroblob/wizardry/constants/SpellType.java
+++ b/src/main/java/electroblob/wizardry/constants/SpellType.java
@@ -4,14 +4,11 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public enum SpellType {
-
- ATTACK("attack"),
- DEFENCE("defence"),
- UTILITY("utility"),
- MINION("minion");
+
+ ATTACK("attack"), DEFENCE("defence"), UTILITY("utility"), MINION("minion");
private final String unlocalisedName;
-
+
SpellType(String name){
this.unlocalisedName = name;
}
diff --git a/src/main/java/electroblob/wizardry/constants/Tier.java b/src/main/java/electroblob/wizardry/constants/Tier.java
index f989b82b..20d94016 100644
--- a/src/main/java/electroblob/wizardry/constants/Tier.java
+++ b/src/main/java/electroblob/wizardry/constants/Tier.java
@@ -8,12 +8,12 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public enum Tier {
-
- BASIC(700, 3, 12, new Style().setColor(TextFormatting.WHITE), "basic"),
- APPRENTICE(1000, 4, 5, new Style().setColor(TextFormatting.AQUA), "apprentice"),
- ADVANCED(1500, 5, 2, new Style().setColor(TextFormatting.DARK_BLUE), "advanced"),
- MASTER(2500, 6, 1, new Style().setColor(TextFormatting.DARK_PURPLE), "master");
-
+
+ BASIC(700, 3, 12, new Style().setColor(TextFormatting.WHITE), "basic"), APPRENTICE(1000, 4, 5,
+ new Style().setColor(TextFormatting.AQUA), "apprentice"), ADVANCED(1500, 5, 2,
+ new Style().setColor(TextFormatting.DARK_BLUE),
+ "advanced"), MASTER(2500, 6, 1, new Style().setColor(TextFormatting.DARK_PURPLE), "master");
+
/** Maximum mana a wand of this tier can store. */
public final int maxCharge;
/** Just an ordinal. Shouldn't really be needed but no point changing it now. */
@@ -25,9 +25,9 @@ public enum Tier {
/** The colour of text associated with this tier. */
// Changed to a Style object for consistency.
private final Style colour;
-
+
private final String unlocalisedName;
-
+
private Tier(int maxCharge, int upgradeLimit, int weight, Style colour, String name){
this.maxCharge = maxCharge;
this.level = ordinal();
@@ -38,15 +38,15 @@ public enum Tier {
}
@SideOnly(Side.CLIENT)
- public String getDisplayName() {
+ public String getDisplayName(){
return net.minecraft.client.resources.I18n.format("tier." + unlocalisedName);
}
-
+
@SideOnly(Side.CLIENT)
- public String getDisplayNameWithFormatting() {
+ public String getDisplayNameWithFormatting(){
return this.getFormattingCode() + net.minecraft.client.resources.I18n.format("tier." + unlocalisedName);
}
-
+
public String getUnlocalisedName(){
return unlocalisedName;
}
@@ -54,28 +54,31 @@ public enum Tier {
public String getFormattingCode(){
return colour.getFormattingCode();
}
-
- /** Returns a random tier based on the standard weighting. Currently, the standard weighting is: Basic (Novice) 60%,
+
+ /**
+ * Returns a random tier based on the standard weighting. Currently, the standard weighting is: Basic (Novice) 60%,
* Apprentice 25%, Advanced 10%, Master 5%. If an array of tiers is given, it picks a tier from the array, with the
* same relative weights for each. For example, if the array contains APPRENTICE and MASTER, then the weighting will
- * become: Apprentice 83.3%, Master 16.7%. */
+ * become: Apprentice 83.3%, Master 16.7%.
+ */
public static Tier getWeightedRandomTier(Random random, Tier... tiers){
-
+
if(tiers.length == 0) tiers = values();
-
+
int totalWeight = 0;
-
- for(Tier tier : tiers) totalWeight += tier.weight;
-
+
+ for(Tier tier : tiers)
+ totalWeight += tier.weight;
+
int randomiser = random.nextInt(totalWeight);
int cumulativeWeight = 0;
-
+
for(Tier tier : tiers){
cumulativeWeight += tier.weight;
if(randomiser < cumulativeWeight) return tier;
}
-
+
// This will never happen, but it might as well be a sensible result.
- return tiers[tiers.length-1];
+ return tiers[tiers.length - 1];
}
}
diff --git a/src/main/java/electroblob/wizardry/enchantment/EnchantmentMagicSword.java b/src/main/java/electroblob/wizardry/enchantment/EnchantmentMagicSword.java
index 0aca94ba..f3be13e3 100644
--- a/src/main/java/electroblob/wizardry/enchantment/EnchantmentMagicSword.java
+++ b/src/main/java/electroblob/wizardry/enchantment/EnchantmentMagicSword.java
@@ -10,50 +10,48 @@ import net.minecraft.item.ItemStack;
// into the damage increase for melee weapons, meaning I don't have to use events - always handy!
public class EnchantmentMagicSword extends EnchantmentDamage implements Imbuement {
- public EnchantmentMagicSword() {
+ public EnchantmentMagicSword(){
super(Enchantment.Rarity.COMMON, 0, EntityEquipmentSlot.MAINHAND);
// Setting this to null stops the book appearing in the creative inventory
this.type = null;
}
-
+
@Override
public boolean canApply(ItemStack p_92089_1_){
- return false;
- }
+ return false;
+ }
- /**
- * Returns the maximum level that the enchantment can have.
- */
+ /**
+ * Returns the maximum level that the enchantment can have.
+ */
// Here, enchantment level is the damage multiplier of the spell used to apply the enchantment, i.e. with an
- // non-sorcerer wand it is level 1, a basic sorcerer wand is level 2, and so on. Note that basic sorcerer wands can't
+ // non-sorcerer wand it is level 1, a basic sorcerer wand is level 2, and so on. Note that basic sorcerer wands
+ // can't
// cast the imbue weapon spell, so level 2 is actually for apprentice wands.
- @Override
- public int getMaxLevel()
- {
- return 4;
- }
+ @Override
+ public int getMaxLevel(){
+ return 4;
+ }
- // Returns the number by which the damage should be increased (or something)
- @Override
- public float calcDamageByCreature(int p_152376_1_, EnumCreatureAttribute p_152376_2_)
- {
- return (float)p_152376_1_ * 1.25F;
- }
+ // Returns the number by which the damage should be increased (or something)
+ @Override
+ public float calcDamageByCreature(int p_152376_1_, EnumCreatureAttribute p_152376_2_){
+ return (float)p_152376_1_ * 1.25F;
+ }
+
+ @Override
+ public String getName(){
+ return "enchantment." + this.getRegistryName();
+ }
+
+ @Override
+ public boolean isAllowedOnBooks(){
+ return false;
+ }
+
+ @Override
+ public boolean canApplyAtEnchantingTable(ItemStack stack){
+ return false;
+ }
- @Override
- public String getName()
- {
- return "enchantment." + this.getRegistryName();
- }
-
- @Override
- public boolean isAllowedOnBooks(){
- return false;
- }
-
- @Override
- public boolean canApplyAtEnchantingTable(ItemStack stack) {
- return false;
- }
-
}
diff --git a/src/main/java/electroblob/wizardry/enchantment/EnchantmentTimed.java b/src/main/java/electroblob/wizardry/enchantment/EnchantmentTimed.java
index d30252d1..4f5338e3 100644
--- a/src/main/java/electroblob/wizardry/enchantment/EnchantmentTimed.java
+++ b/src/main/java/electroblob/wizardry/enchantment/EnchantmentTimed.java
@@ -6,43 +6,42 @@ import net.minecraft.item.ItemStack;
// This one is for everything other than imbued swords.
public class EnchantmentTimed extends Enchantment implements Imbuement {
-
- public EnchantmentTimed() {
+
+ public EnchantmentTimed(){
// Setting enchantment type to null stops the book appearing in the creative inventory
super(Enchantment.Rarity.COMMON, null, new EntityEquipmentSlot[]{EntityEquipmentSlot.MAINHAND});
}
-
+
@Override
public boolean canApply(ItemStack p_92089_1_){
- return false;
- }
-
- @Override
- public String getName()
- {
- return "enchantment." + this.getRegistryName();
- }
+ return false;
+ }
- /**
- * Returns the maximum level that the enchantment can have.
- */
+ @Override
+ public String getName(){
+ return "enchantment." + this.getRegistryName();
+ }
+
+ /**
+ * Returns the maximum level that the enchantment can have.
+ */
// Here, enchantment level is the damage multiplier of the spell used to apply the enchantment, i.e. with an
- // non-sorcerer wand it is level 1, an apprentice sorcerer wand is level 2, and so on. Note that basic sorcerer wands can't
+ // non-sorcerer wand it is level 1, an apprentice sorcerer wand is level 2, and so on. Note that basic sorcerer
+ // wands can't
// cast the imbue weapon spell, so level 2 is actually for apprentice wands.
- @Override
- public int getMaxLevel()
- {
- return 4;
- }
-
- @Override
- public boolean isAllowedOnBooks(){
- return false;
- }
-
- @Override
- public boolean canApplyAtEnchantingTable(ItemStack stack) {
- return false;
- }
-
+ @Override
+ public int getMaxLevel(){
+ return 4;
+ }
+
+ @Override
+ public boolean isAllowedOnBooks(){
+ return false;
+ }
+
+ @Override
+ public boolean canApplyAtEnchantingTable(ItemStack stack){
+ return false;
+ }
+
}
diff --git a/src/main/java/electroblob/wizardry/enchantment/Imbuement.java b/src/main/java/electroblob/wizardry/enchantment/Imbuement.java
index ac443d9a..67e70fd3 100644
--- a/src/main/java/electroblob/wizardry/enchantment/Imbuement.java
+++ b/src/main/java/electroblob/wizardry/enchantment/Imbuement.java
@@ -22,12 +22,15 @@ import net.minecraftforge.event.entity.player.PlayerContainerEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-/** Interface for temporary enchantments that last for a certain duration ('imbuements'). This interface allows
- * {@link EnchantmentMagicSword} and {@link EnchantmentTimed} to both be treated as instances of a
- * single type, rather than having to deal with each of them separately,
- * which would be inefficient and cumbersome (the former of those classes cannot extend the latter because they both
- * need to extend different subclasses of {@link net.minecraft.enchantment.Enchantment}).
- * @since Wizardry 1.2 */
+/**
+ * Interface for temporary enchantments that last for a certain duration ('imbuements'). This interface allows
+ * {@link EnchantmentMagicSword} and {@link EnchantmentTimed} to both be treated as instances of a single type, rather
+ * than having to deal with each of them separately, which would be inefficient and cumbersome (the former of those
+ * classes cannot extend the latter because they both need to extend different subclasses of
+ * {@link net.minecraft.enchantment.Enchantment}).
+ *
+ * @since Wizardry 1.2
+ */
@Mod.EventBusSubscriber
public interface Imbuement {
@@ -46,11 +49,12 @@ public interface Imbuement {
// Instantly disenchants an imbued weapon if it is thrown on the ground.
removeImbuements(event.getEntityItem().getEntityItem());
}
-
+
/** Removes all imbuements from the given itemstack. */
static void removeImbuements(ItemStack stack){
if(stack.isItemEnchanted()){
- // No need to check what enchantments the item has, since remove() does nothing if the element does not exist.
+ // No need to check what enchantments the item has, since remove() does nothing if the element does not
+ // exist.
Map enchantments = EnchantmentHelper.getEnchantments(stack);
// Removes the magic weapon enchantments from the enchantment map
enchantments.entrySet().removeIf(entry -> entry.getKey() instanceof Imbuement);
@@ -58,7 +62,7 @@ public interface Imbuement {
EnchantmentHelper.setEnchantments(enchantments, stack);
}
}
-
+
@SubscribeEvent
public static void onPlayerOpenContainerEvent(PlayerContainerEvent event){
// Brute-force fix to stop enchanted books in dungeon chests from having imbuements on them.
@@ -74,7 +78,7 @@ public interface Imbuement {
// If any imbuements were removed, replaces the enchantments on the book with the new ones, or
// deletes the book entirely if there are none left.
if(enchantments.isEmpty()){
- slot.putStack(null); // NOTE: Will need changing in 1.11
+ slot.putStack(ItemStack.EMPTY); // NOTE: Will need changing in 1.11
Wizardry.logger.info("Deleted enchanted book with illegal enchantments");
}else{
EnchantmentHelper.setEnchantments(enchantments, slot.getStack());
@@ -90,7 +94,7 @@ public interface Imbuement {
public static void onEntityJoinWorld(EntityJoinWorldEvent event){
// Rather long-winded (but necessary) way of getting an arrow just after it has been fired, checking if the bow
// that fired it has the imbuement enchantment, and applying extra damage accordingly.
- if(!event.getEntity().worldObj.isRemote && event.getEntity() instanceof EntityArrow){
+ if(!event.getEntity().world.isRemote && event.getEntity() instanceof EntityArrow){
EntityArrow arrow = (EntityArrow)event.getEntity();
diff --git a/src/main/java/electroblob/wizardry/entity/EntityArc.java b/src/main/java/electroblob/wizardry/entity/EntityArc.java
index dc68f0eb..695de2cd 100644
--- a/src/main/java/electroblob/wizardry/entity/EntityArc.java
+++ b/src/main/java/electroblob/wizardry/entity/EntityArc.java
@@ -7,19 +7,19 @@ import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData;
public class EntityArc extends Entity implements IEntityAdditionalSpawnData {
-
+
public int textureIndex = 0;
public double x1, y1, z1, x2, y2, z2;
// The number of ticks the arc lasts for before disappearing
public int lifetime = 3;
public double offsetX, offsetZ;
- public EntityArc(World par1World) {
+ public EntityArc(World par1World){
super(par1World);
textureIndex = this.rand.nextInt(16);
this.ignoreFrustumCheck = true;
}
-
+
public void setEndpointCoords(double x1, double y1, double z1, double x2, double y2, double z2){
this.x1 = x1;
this.y1 = y1;
@@ -27,7 +27,7 @@ public class EntityArc extends Entity implements IEntityAdditionalSpawnData {
this.x2 = x2;
this.y2 = y2;
this.z2 = z2;
- this.setPosition(x2, y2, z2);
+ this.setPosition(x2, y2, z2);
}
@Override
@@ -36,38 +36,38 @@ public class EntityArc extends Entity implements IEntityAdditionalSpawnData {
this.setDead();
}
}
-
- protected void entityInit()
- {
- }
- @Override
- protected void readEntityFromNBT(NBTTagCompound nbttagcompound) {
-
+ protected void entityInit(){
}
@Override
- protected void writeEntityToNBT(NBTTagCompound nbttagcompound) {
- // Nothing needed here; arc is merely a graphic effect that only exists for a few ticks; as such there is no need to save it.
+ protected void readEntityFromNBT(NBTTagCompound nbttagcompound){
+
}
-
+
@Override
- public boolean isInRangeToRenderDist(double distance) {
+ protected void writeEntityToNBT(NBTTagCompound nbttagcompound){
+ // Nothing needed here; arc is merely a graphic effect that only exists for a few ticks; as such there is no
+ // need to save it.
+ }
+
+ @Override
+ public boolean isInRangeToRenderDist(double distance){
return true;
}
@Override
- public void writeSpawnData(ByteBuf data) {
+ public void writeSpawnData(ByteBuf data){
data.writeDouble(this.x1);
- data.writeDouble(this.y1);
- data.writeDouble(this.z1);
+ data.writeDouble(this.y1);
+ data.writeDouble(this.z1);
}
@Override
- public void readSpawnData(ByteBuf data) {
+ public void readSpawnData(ByteBuf data){
this.x1 = data.readDouble();
this.y1 = data.readDouble();
this.z1 = data.readDouble();
}
-
+
}
diff --git a/src/main/java/electroblob/wizardry/entity/EntityMeteor.java b/src/main/java/electroblob/wizardry/entity/EntityMeteor.java
index fce647ce..89140ca1 100644
--- a/src/main/java/electroblob/wizardry/entity/EntityMeteor.java
+++ b/src/main/java/electroblob/wizardry/entity/EntityMeteor.java
@@ -5,6 +5,7 @@ import electroblob.wizardry.registry.WizardryBlocks;
import electroblob.wizardry.registry.WizardrySounds;
import electroblob.wizardry.util.WizardryUtilities;
import net.minecraft.block.state.IBlockState;
+import net.minecraft.entity.MoverType;
import net.minecraft.entity.item.EntityFallingBlock;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTTagCompound;
@@ -14,99 +15,106 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class EntityMeteor extends EntityFallingBlock {
-
- /** The entity blast multiplier. Only some projectiles cause a blast, which is why this isn't in EntityMagicProjectile. */
+
+ /**
+ * The entity blast multiplier. Only some projectiles cause a blast, which is why this isn't in
+ * EntityMagicProjectile.
+ */
public float blastMultiplier;
- public EntityMeteor(World world){
- super(world);
- // Superconstructor doesn't call this.
- this.setSize(0.98F, 0.98F);
- }
+ public EntityMeteor(World world){
+ super(world);
+ // Superconstructor doesn't call this.
+ this.setSize(0.98F, 0.98F);
+ }
- public EntityMeteor(World world, double x, double y, double z, float blastMultiplier){
- super(world, x, y, z, WizardryBlocks.meteor.getDefaultState());
- this.motionY = -1.0D;
- this.setFire(200);
- this.blastMultiplier = blastMultiplier;
- }
-
- @Override
- public double getYOffset() {
- return this.height / 2.0F;
- }
+ public EntityMeteor(World world, double x, double y, double z, float blastMultiplier){
+ super(world, x, y, z, WizardryBlocks.meteor.getDefaultState());
+ this.motionY = -1.0D;
+ this.setFire(200);
+ this.blastMultiplier = blastMultiplier;
+ }
- @Override
- public void onUpdate(){
-
- if(this.ticksExisted % 16 == 1 && worldObj.isRemote){
- Wizardry.proxy.playMovingSound(this, WizardrySounds.SPELL_LOOP_FIRE, 3.0f, 1.0f, false);
+ @Override
+ public double getYOffset(){
+ return this.height / 2.0F;
+ }
+
+ @Override
+ public void onUpdate(){
+
+ if(this.ticksExisted % 16 == 1 && world.isRemote){
+ Wizardry.proxy.playMovingSound(this, WizardrySounds.SPELL_LOOP_FIRE, 3.0f, 1.0f, false);
}
-
- // You'd think the best way to do this would be to call super and do all the exploding stuff in fall() instead.
- // However, for some reason, fallTile is null on the client side, causing an NPE in super.onUpdate()
-
- this.prevPosX = this.posX;
- this.prevPosY = this.posY;
- this.prevPosZ = this.posZ;
- ++this.fallTime;
- this.motionY -= 0.1d; //0.03999999910593033D;
- this.moveEntity(this.motionX, this.motionY, this.motionZ);
- this.motionX *= 0.9800000190734863D;
- this.motionY *= 0.9800000190734863D;
- this.motionZ *= 0.9800000190734863D;
- if(!this.worldObj.isRemote){
-
- if(this.onGround){
-
- this.motionX *= 0.699999988079071D;
- this.motionZ *= 0.699999988079071D;
- this.motionY *= -0.5D;
- this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 2.0f*blastMultiplier, true);
- for(int i1=-3; i1<4; i1++){
- for(int j1=-3; j1<4; j1++){
- int y = WizardryUtilities.getNearestFloorLevelB(this.worldObj, new BlockPos(this.posX + i1, this.posY, this.posZ + j1), 7);
- //System.out.println(y);
+ // You'd think the best way to do this would be to call super and do all the exploding stuff in fall() instead.
+ // However, for some reason, fallTile is null on the client side, causing an NPE in super.onUpdate()
+
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+ ++this.fallTime;
+ this.motionY -= 0.1d; // 0.03999999910593033D;
+ this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ);
+ this.motionX *= 0.9800000190734863D;
+ this.motionY *= 0.9800000190734863D;
+ this.motionZ *= 0.9800000190734863D;
+
+ if(!this.world.isRemote){
+
+ if(this.onGround){
+
+ this.motionX *= 0.699999988079071D;
+ this.motionZ *= 0.699999988079071D;
+ this.motionY *= -0.5D;
+ this.world.createExplosion(this, this.posX, this.posY, this.posZ, 2.0f * blastMultiplier, true);
+ for(int i1 = -3; i1 < 4; i1++){
+ for(int j1 = -3; j1 < 4; j1++){
+ int y = WizardryUtilities.getNearestFloorLevelB(this.world,
+ new BlockPos(this.posX + i1, this.posY, this.posZ + j1), 7);
+ // System.out.println(y);
double dist = this.getDistance((int)this.posX + i1, y, (int)this.posZ + j1);
- // Randomised with weighting so that the nearer the block the more likely it is to be set on fire.
- if(y != -1 && rand.nextInt((int)dist*2 + 1) < 3 && dist < 4){
- this.worldObj.setBlockState(new BlockPos(this.posX + i1, y, this.posZ + j1), Blocks.FIRE.getDefaultState());
+ // Randomised with weighting so that the nearer the block the more likely it is to be set on
+ // fire.
+ if(y != -1 && rand.nextInt((int)dist * 2 + 1) < 3 && dist < 4){
+ this.world.setBlockState(new BlockPos(this.posX + i1, y, this.posZ + j1),
+ Blocks.FIRE.getDefaultState());
}
}
}
- this.setDead();
- }
- }
- }
+ this.setDead();
+ }
+ }
+ }
- @Override
- public void fall(float distance, float damageMultiplier){
- // Don't need to do anything here, the meteor should have already exploded.
- }
-
- @SideOnly(Side.CLIENT)
- @Override
- public boolean canRenderOnFire(){
- return true;
- }
+ @Override
+ public void fall(float distance, float damageMultiplier){
+ // Don't need to do anything here, the meteor should have already exploded.
+ }
- @Override
- public IBlockState getBlock(){
- return WizardryBlocks.meteor.getDefaultState(); // For some reason the superclass version returns null on the client
- }
-
- @SideOnly(Side.CLIENT)
- @Override
- public int getBrightnessForRender(float partialTicks){
- return 15728880;
- }
+ @SideOnly(Side.CLIENT)
+ @Override
+ public boolean canRenderOnFire(){
+ return true;
+ }
+
+ @Override
+ public IBlockState getBlock(){
+ return WizardryBlocks.meteor.getDefaultState(); // For some reason the superclass version returns null on the
+ // client
+ }
+
+ @SideOnly(Side.CLIENT)
+ @Override
+ public int getBrightnessForRender(float partialTicks){
+ return 15728880;
+ }
+
+ @Override
+ public float getBrightness(float partialTicks){
+ return 1.0F;
+ }
- @Override
- public float getBrightness(float partialTicks){
- return 1.0F;
- }
-
@Override
public boolean isInRangeToRenderDist(double distance){
return true;
@@ -114,8 +122,8 @@ public class EntityMeteor extends EntityFallingBlock {
@Override
public void readEntityFromNBT(NBTTagCompound nbttagcompound){
- super.readEntityFromNBT(nbttagcompound);
- blastMultiplier = nbttagcompound.getFloat("blastMultiplier");
+ super.readEntityFromNBT(nbttagcompound);
+ blastMultiplier = nbttagcompound.getFloat("blastMultiplier");
}
@Override
@@ -123,5 +131,5 @@ public class EntityMeteor extends EntityFallingBlock {
super.writeEntityToNBT(nbttagcompound);
nbttagcompound.setFloat("blastMultiplier", blastMultiplier);
}
-
+
}
diff --git a/src/main/java/electroblob/wizardry/entity/EntityShield.java b/src/main/java/electroblob/wizardry/entity/EntityShield.java
index c884ea07..1ca7df78 100644
--- a/src/main/java/electroblob/wizardry/entity/EntityShield.java
+++ b/src/main/java/electroblob/wizardry/entity/EntityShield.java
@@ -14,9 +14,9 @@ import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.world.World;
public class EntityShield extends Entity {
-
+
public WeakReference player;
-
+
public EntityShield(World world){
super(world);
this.noClip = true;
@@ -24,70 +24,73 @@ public class EntityShield extends Entity {
this.height = 1.4f;
}
- public EntityShield(World par1World, EntityPlayer player) {
+ public EntityShield(World par1World, EntityPlayer player){
super(par1World);
this.width = 1.2f;
this.height = 1.4f;
this.player = new WeakReference(player);
this.noClip = true;
- this.setPositionAndRotation(player.posX + player.getLookVec().xCoord, player.posY + 1 + player.getLookVec().yCoord, player.posZ + player.getLookVec().zCoord, player.rotationYawHead, player.rotationPitch);
- this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.6f, this.posY - 0.7f, this.posZ - 0.6f, this.posX + 0.6f, this.posY + 0.7f, this.posZ + 0.6f));
+ this.setPositionAndRotation(player.posX + player.getLookVec().xCoord,
+ player.posY + 1 + player.getLookVec().yCoord, player.posZ + player.getLookVec().zCoord,
+ player.rotationYawHead, player.rotationPitch);
+ this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.6f, this.posY - 0.7f, this.posZ - 0.6f,
+ this.posX + 0.6f, this.posY + 0.7f, this.posZ + 0.6f));
}
@Override
public void onUpdate(){
- //System.out.println("Shield exists, ID: " + this.getUniqueID().toString());
+ // System.out.println("Shield exists, ID: " + this.getUniqueID().toString());
EntityPlayer entityplayer = player != null ? player.get() : null;
if(entityplayer != null){
- this.setPositionAndRotation(entityplayer.posX + entityplayer.getLookVec().xCoord*0.3, entityplayer.posY + 1 + entityplayer.getLookVec().yCoord*0.3, entityplayer.posZ + entityplayer.getLookVec().zCoord*0.3, entityplayer.rotationYawHead, entityplayer.rotationPitch);
- if(!entityplayer.isHandActive() || entityplayer.getHeldItem(entityplayer.getActiveHand()) == null || !(entityplayer.getHeldItem(entityplayer.getActiveHand()).getItem() instanceof ItemWand)){
+ this.setPositionAndRotation(entityplayer.posX + entityplayer.getLookVec().xCoord * 0.3,
+ entityplayer.posY + 1 + entityplayer.getLookVec().yCoord * 0.3,
+ entityplayer.posZ + entityplayer.getLookVec().zCoord * 0.3, entityplayer.rotationYawHead,
+ entityplayer.rotationPitch);
+ if(!entityplayer.isHandActive() || entityplayer.getHeldItem(entityplayer.getActiveHand()) == null
+ || !(entityplayer.getHeldItem(entityplayer.getActiveHand()).getItem() instanceof ItemWand)){
WizardData.get(entityplayer).shield = null;
this.setDead();
}
- }else if(!worldObj.isRemote){
+ }else if(!world.isRemote){
this.setDead();
}
}
-
+
// Overrides the original to stop the entity moving when it intersects stuff. The default arrow does this to allow
- // it to stick in blocks.
- public void setPositionAndRotation2(double par1, double par3, double par5, float par7, float par8, int par9)
- {
- this.setPosition(par1, par3, par5);
- this.setRotation(par7, par8);
- }
-
- public boolean attackEntityFrom(DamageSource par1DamageSource, float par2)
- {
+ // it to stick in blocks.
+ public void setPositionAndRotation2(double par1, double par3, double par5, float par7, float par8, int par9){
+ this.setPosition(par1, par3, par5);
+ this.setRotation(par7, par8);
+ }
+
+ public boolean attackEntityFrom(DamageSource par1DamageSource, float par2){
if(par1DamageSource != null && par1DamageSource.getSourceOfDamage() instanceof IProjectile){
par1DamageSource.getSourceOfDamage().playSound(WizardrySounds.SPELL_DEFLECTION, 0.3f, 1.3f);
}
super.attackEntityFrom(par1DamageSource, par2);
return false;
- }
-
- public boolean canBeCollidedWith()
- {
- return !this.isDead;
- }
-
- public AxisAlignedBB getCollisionBox(Entity par1Entity)
- {
- return par1Entity.getEntityBoundingBox();
- }
-
- @Override
- protected void entityInit() {
-
+ }
+
+ public boolean canBeCollidedWith(){
+ return !this.isDead;
+ }
+
+ public AxisAlignedBB getCollisionBox(Entity par1Entity){
+ return par1Entity.getEntityBoundingBox();
}
@Override
- protected void readEntityFromNBT(NBTTagCompound nbttagcompound) {
+ protected void entityInit(){
}
@Override
- protected void writeEntityToNBT(NBTTagCompound nbttagcompound) {
+ protected void readEntityFromNBT(NBTTagCompound nbttagcompound){
+
+ }
+
+ @Override
+ protected void writeEntityToNBT(NBTTagCompound nbttagcompound){
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityArrowRain.java b/src/main/java/electroblob/wizardry/entity/construct/EntityArrowRain.java
index ddee05da..1ad7632d 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityArrowRain.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityArrowRain.java
@@ -7,32 +7,34 @@ import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public class EntityArrowRain extends EntityMagicConstruct {
-
- public EntityArrowRain(World par1World) {
+
+ public EntityArrowRain(World par1World){
super(par1World);
this.height = 3.0f;
this.width = 5.0f;
}
-
- public EntityArrowRain(World world, double x, double y, double z, EntityLivingBase caster, int lifetime, float damageMultiplier) {
+
+ public EntityArrowRain(World world, double x, double y, double z, EntityLivingBase caster, int lifetime,
+ float damageMultiplier){
super(world, x, y, z, caster, lifetime, damageMultiplier);
this.height = 3.0f;
this.width = 5.0f;
}
-
+
public void onUpdate(){
-
+
super.onUpdate();
-
- if(!this.worldObj.isRemote){
- EntityTippedArrow arrow = new EntityTippedArrow(worldObj, this.posX + rand.nextDouble()*6 - 3, this.posY + rand.nextDouble()*4 - 2, this.posZ + rand.nextDouble()*6 - 3);
+
+ if(!this.world.isRemote){
+ EntityTippedArrow arrow = new EntityTippedArrow(world, this.posX + rand.nextDouble() * 6 - 3,
+ this.posY + rand.nextDouble() * 4 - 2, this.posZ + rand.nextDouble() * 6 - 3);
arrow.motionX = Math.cos(Math.toRadians(this.rotationYaw + 90));
arrow.motionY = -0.6;
arrow.motionZ = Math.sin(Math.toRadians(this.rotationYaw + 90));
arrow.shootingEntity = this.getCaster();
- arrow.setDamage(7.0d*damageMultiplier);
+ arrow.setDamage(7.0d * damageMultiplier);
arrow.setPotionEffect(new ItemStack(Items.ARROW));
- this.worldObj.spawnEntityInWorld(arrow);
+ this.world.spawnEntity(arrow);
}
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityBlackHole.java b/src/main/java/electroblob/wizardry/entity/construct/EntityBlackHole.java
index 56f85762..75f550e8 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityBlackHole.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityBlackHole.java
@@ -25,38 +25,39 @@ public class EntityBlackHole extends EntityMagicConstruct {
this.width = 6.0f;
this.height = 3.0f;
randomiser = new int[30];
- for(int i=0; i targets = WizardryUtilities.getEntitiesWithinRadius(6.0d, this.posX, this.posY, this.posZ, this.worldObj);
+ List targets = WizardryUtilities.getEntitiesWithinRadius(6.0d, this.posX, this.posY,
+ this.posZ, this.world);
- if(!this.worldObj.isRemote){
+ if(!this.world.isRemote){
for(EntityLivingBase target : targets){
@@ -92,21 +99,21 @@ public class EntityBlackHole extends EntityMagicConstruct {
// Sucks the target in
if(this.posX > target.posX && target.motionX < 1){
- target.motionX+=0.1;
+ target.motionX += 0.1;
}else if(this.posX < target.posX && target.motionX > -1){
- target.motionX-=0.1;
+ target.motionX -= 0.1;
}
if(this.posY > target.posY && target.motionY < 1){
- target.motionY+=0.1;
+ target.motionY += 0.1;
}else if(this.posY < target.posY && target.motionY > -1){
- target.motionY-=0.1;
+ target.motionY -= 0.1;
}
if(this.posZ > target.posZ && target.motionZ < 1){
- target.motionZ+=0.1;
+ target.motionZ += 0.1;
}else if(this.posZ < target.posZ && target.motionZ > -1){
- target.motionZ-=0.1;
+ target.motionZ -= 0.1;
}
// Player motion is handled on that player's client so needs packets
@@ -117,9 +124,11 @@ public class EntityBlackHole extends EntityMagicConstruct {
if(this.getDistanceToEntity(target) <= 2){
// Damages the target if it is close enough
if(this.getCaster() != null){
- target.attackEntityFrom(MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.MAGIC), 2*damageMultiplier);
+ target.attackEntityFrom(
+ MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.MAGIC),
+ 2 * damageMultiplier);
}else{
- target.attackEntityFrom(DamageSource.magic, 2*damageMultiplier);
+ target.attackEntityFrom(DamageSource.MAGIC, 2 * damageMultiplier);
}
}
}
@@ -130,8 +139,7 @@ public class EntityBlackHole extends EntityMagicConstruct {
/**
* Checks using a Vec3dd to determine if this entity is within range of that vector to be rendered. Args: Vec3dD
*/
- public boolean isInRangeToRenderVec3dD(Vec3d par1Vec3d)
- {
+ public boolean isInRangeToRenderVec3dD(Vec3d par1Vec3d){
return true;
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityBlizzard.java b/src/main/java/electroblob/wizardry/entity/construct/EntityBlizzard.java
index 342ad185..50ecabd4 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityBlizzard.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityBlizzard.java
@@ -16,13 +16,14 @@ import net.minecraft.world.World;
public class EntityBlizzard extends EntityMagicConstruct {
- public EntityBlizzard(World par1World) {
+ public EntityBlizzard(World par1World){
super(par1World);
this.height = 1.0f;
this.width = 1.0f;
}
- public EntityBlizzard(World world, double x, double y, double z, EntityLivingBase caster, int lifetime, float damageMultiplier) {
+ public EntityBlizzard(World world, double x, double y, double z, EntityLivingBase caster, int lifetime,
+ float damageMultiplier){
super(world, x, y, z, caster, lifetime, damageMultiplier);
this.height = 1.0f;
this.width = 1.0f;
@@ -36,21 +37,25 @@ public class EntityBlizzard extends EntityMagicConstruct {
super.onUpdate();
- if(!this.worldObj.isRemote){
+ if(!this.world.isRemote){
- List targets = WizardryUtilities.getEntitiesWithinRadius(3.0d, this.posX, this.posY, this.posZ, this.worldObj);
+ List targets = WizardryUtilities.getEntitiesWithinRadius(3.0d, this.posX, this.posY,
+ this.posZ, this.world);
for(EntityLivingBase target : targets){
if(this.isValidTarget(target)){
if(this.getCaster() != null){
- WizardryUtilities.attackEntityWithoutKnockback(target, MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.FROST), 1*damageMultiplier);
+ WizardryUtilities.attackEntityWithoutKnockback(target,
+ MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.FROST),
+ 1 * damageMultiplier);
}else{
- WizardryUtilities.attackEntityWithoutKnockback(target, DamageSource.magic, 1*damageMultiplier);
+ WizardryUtilities.attackEntityWithoutKnockback(target, DamageSource.MAGIC,
+ 1 * damageMultiplier);
}
}
-
+
// All entities are slowed, even the caster (except those immune to frost effects)
if(!MagicDamage.isEntityImmune(DamageType.FROST, target))
target.addPotionEffect(new PotionEffect(WizardryPotions.frost, 20, 0));
@@ -58,10 +63,14 @@ public class EntityBlizzard extends EntityMagicConstruct {
}else{
// For some reason this number of particles now causes the game to lag significantly, despite it being fine
// in 1.7.10. I thought particles were supposed to be LESS laggy now...
- for(int i=1; i<6; i++){
- float brightness = 0.5f + (rand.nextFloat()/2);
- Wizardry.proxy.spawnParticle(WizardryParticleType.BLIZZARD, worldObj, this.posX, this.posY + rand.nextDouble()*3, this.posZ, 0, 0, 0, 100, brightness, brightness + 0.1f, 1.0f, false, rand.nextDouble() * 2.5d + 0.5d);
- Wizardry.proxy.spawnParticle(WizardryParticleType.BLIZZARD, worldObj, this.posX, this.posY + rand.nextDouble()*3, this.posZ, 0, 0, 0, 100, 1.0f, 1.0f, 1.0f, false, rand.nextDouble() * 2.5d + 0.5d);
+ for(int i = 1; i < 6; i++){
+ float brightness = 0.5f + (rand.nextFloat() / 2);
+ Wizardry.proxy.spawnParticle(WizardryParticleType.BLIZZARD, world, this.posX,
+ this.posY + rand.nextDouble() * 3, this.posZ, 0, 0, 0, 100, brightness, brightness + 0.1f, 1.0f,
+ false, rand.nextDouble() * 2.5d + 0.5d);
+ Wizardry.proxy.spawnParticle(WizardryParticleType.BLIZZARD, world, this.posX,
+ this.posY + rand.nextDouble() * 3, this.posZ, 0, 0, 0, 100, 1.0f, 1.0f, 1.0f, false,
+ rand.nextDouble() * 2.5d + 0.5d);
}
}
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityBubble.java b/src/main/java/electroblob/wizardry/entity/construct/EntityBubble.java
index 620fb9ee..a864526b 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityBubble.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityBubble.java
@@ -7,6 +7,7 @@ import electroblob.wizardry.util.MagicDamage.DamageType;
import electroblob.wizardry.util.WizardryUtilities;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.MoverType;
import net.minecraft.init.SoundEvents;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
@@ -18,79 +19,89 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@Mod.EventBusSubscriber
public class EntityBubble extends EntityMagicConstruct {
-
+
public boolean isDarkOrb;
-
+
private WeakReference rider;
-
+
public EntityBubble(World world){
super(world);
}
- public EntityBubble(World world, double x, double y, double z, EntityLivingBase caster, int lifetime, boolean isDarkOrb, float damageMultiplier) {
+ public EntityBubble(World world, double x, double y, double z, EntityLivingBase caster, int lifetime,
+ boolean isDarkOrb, float damageMultiplier){
super(world, x, y, z, caster, lifetime, damageMultiplier);
- //this.setSize(0.1f, 0.1f);
+ // this.setSize(0.1f, 0.1f);
this.isDarkOrb = isDarkOrb;
}
-
+
@Override
- public double getMountedYOffset()
- {
- return 0.1;
- }
-
+ public double getMountedYOffset(){
+ return 0.1;
+ }
+
@Override
public boolean shouldRiderSit(){
return false;
}
-
+
public void onUpdate(){
-
+
super.onUpdate();
-
+
// Synchronises the rider field
- if((this.rider == null || this.rider.get() == null) && WizardryUtilities.getRider(this) instanceof EntityLivingBase
+ if((this.rider == null || this.rider.get() == null)
+ && WizardryUtilities.getRider(this) instanceof EntityLivingBase
&& !WizardryUtilities.getRider(this).isDead){
- this.rider = new WeakReference((EntityLivingBase) WizardryUtilities.getRider(this));
+ this.rider = new WeakReference((EntityLivingBase)WizardryUtilities.getRider(this));
}
-
+
// Prevents dismounting
- if(WizardryUtilities.getRider(this) == null && this.rider != null && this.rider.get() != null && !this.rider.get().isDead){
+ if(WizardryUtilities.getRider(this) == null && this.rider != null && this.rider.get() != null
+ && !this.rider.get().isDead){
this.rider.get().startRiding(this);
}
-
+
// Stops the bubble bursting instantly.
if(this.ticksExisted < 1 && !isDarkOrb) ((EntityLivingBase)WizardryUtilities.getRider(this)).hurtTime = 0;
-
- this.moveEntity(0, 0.03, 0);
-
+
+ this.move(MoverType.SELF, 0, 0.03, 0);
+
if(isDarkOrb){
-
+
if(WizardryUtilities.getRider(this) != null && this.ticksExisted % 30 == 0){
if(this.getCaster() != null){
- WizardryUtilities.getRider(this).attackEntityFrom(MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.MAGIC), 1*damageMultiplier);
+ WizardryUtilities.getRider(this).attackEntityFrom(
+ MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.MAGIC),
+ 1 * damageMultiplier);
}else{
- WizardryUtilities.getRider(this).attackEntityFrom(DamageSource.magic, 1*damageMultiplier);
+ WizardryUtilities.getRider(this).attackEntityFrom(DamageSource.MAGIC, 1 * damageMultiplier);
}
}
-
- for(int i=0; i<5; i++){
- this.worldObj.spawnParticle(EnumParticleTypes.PORTAL, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height + 0.5d, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, (this.rand.nextDouble() - 0.5D) * 2.0D, -this.rand.nextDouble(), (this.rand.nextDouble() - 0.5D) * 2.0D);
- }
+
+ for(int i = 0; i < 5; i++){
+ this.world.spawnParticle(EnumParticleTypes.PORTAL,
+ this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width,
+ this.posY + this.rand.nextDouble() * (double)this.height + 0.5d,
+ this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width,
+ (this.rand.nextDouble() - 0.5D) * 2.0D, -this.rand.nextDouble(),
+ (this.rand.nextDouble() - 0.5D) * 2.0D);
+ }
if(lifetime - this.ticksExisted == 75){
this.playSound(SoundEvents.BLOCK_PORTAL_TRIGGER, 1.5f, 1.0f);
}else if(this.ticksExisted % 100 == 1 && this.ticksExisted < 150){
this.playSound(SoundEvents.BLOCK_PORTAL_AMBIENT, 1.5f, 1.0f);
}
}
-
- // Bubble bursts if the entity is hurt (see event handler) or killed, or if the bubble has existed for more than 10 seconds.
+
+ // Bubble bursts if the entity is hurt (see event handler) or killed, or if the bubble has existed for more than
+ // 10 seconds.
if(WizardryUtilities.getRider(this) == null && this.ticksExisted > 1){
if(!this.isDarkOrb) this.playSound(SoundEvents.ENTITY_ITEM_PICKUP, 1.5f, 1.0f);
this.setDead();
}
}
-
+
@Override
public void despawn(){
if(WizardryUtilities.getRider(this) != null){
@@ -101,34 +112,34 @@ public class EntityBubble extends EntityMagicConstruct {
}
@Override
- protected void readEntityFromNBT(NBTTagCompound nbttagcompound) {
+ protected void readEntityFromNBT(NBTTagCompound nbttagcompound){
super.readEntityFromNBT(nbttagcompound);
isDarkOrb = nbttagcompound.getBoolean("isDarkOrb");
}
@Override
- protected void writeEntityToNBT(NBTTagCompound nbttagcompound) {
+ protected void writeEntityToNBT(NBTTagCompound nbttagcompound){
super.writeEntityToNBT(nbttagcompound);
nbttagcompound.setBoolean("isDarkOrb", isDarkOrb);
}
@Override
- public void writeSpawnData(ByteBuf data) {
+ public void writeSpawnData(ByteBuf data){
super.writeSpawnData(data);
data.writeBoolean(this.isDarkOrb);
}
@Override
- public void readSpawnData(ByteBuf data) {
+ public void readSpawnData(ByteBuf data){
super.readSpawnData(data);
this.isDarkOrb = data.readBoolean();
}
-
+
@SubscribeEvent
public static void onLivingAttackEvent(LivingAttackEvent event){
// Bursts bubble when the creature inside takes damage
- if(event.getEntityLiving().getRidingEntity() instanceof EntityBubble &&
- !((EntityBubble)event.getEntityLiving().getRidingEntity()).isDarkOrb){
+ if(event.getEntityLiving().getRidingEntity() instanceof EntityBubble
+ && !((EntityBubble)event.getEntityLiving().getRidingEntity()).isDarkOrb){
event.getEntityLiving().getRidingEntity().playSound(SoundEvents.ENTITY_ITEM_PICKUP, 1.5f, 1.0f);
event.getEntityLiving().getRidingEntity().setDead();
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityDecay.java b/src/main/java/electroblob/wizardry/entity/construct/EntityDecay.java
index f8d33151..a2835764 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityDecay.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityDecay.java
@@ -14,18 +14,18 @@ import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
public class EntityDecay extends EntityMagicConstruct {
-
+
public int textureIndex = 0;
public static final int LIFETIME = 400;
-
- public EntityDecay(World par1World) {
+
+ public EntityDecay(World par1World){
super(par1World);
textureIndex = this.rand.nextInt(10);
this.height = 0.2f;
this.width = 2.0f;
}
-
- public EntityDecay(World par1World, double x, double y, double z, EntityLivingBase caster) {
+
+ public EntityDecay(World par1World, double x, double y, double z, EntityLivingBase caster){
super(par1World, x, y, z, caster, LIFETIME, 1);
textureIndex = this.rand.nextInt(10);
this.height = 0.2f;
@@ -34,45 +34,51 @@ public class EntityDecay extends EntityMagicConstruct {
@Override
public void onUpdate(){
-
+
super.onUpdate();
-
- if(this.rand.nextInt(700) == 0 && this.ticksExisted+100 < LIFETIME) this.playSound(SoundEvents.BLOCK_LAVA_AMBIENT, 0.2F + rand.nextFloat() * 0.2F, 0.6F + rand.nextFloat() * 0.15F);
-
- if(!this.worldObj.isRemote){
- List targets = WizardryUtilities.getEntitiesWithinRadius(1.0d, this.posX, this.posY, this.posZ, this.worldObj);
+
+ if(this.rand.nextInt(700) == 0 && this.ticksExisted + 100 < LIFETIME)
+ this.playSound(SoundEvents.BLOCK_LAVA_AMBIENT, 0.2F + rand.nextFloat() * 0.2F,
+ 0.6F + rand.nextFloat() * 0.15F);
+
+ if(!this.world.isRemote){
+ List targets = WizardryUtilities.getEntitiesWithinRadius(1.0d, this.posX, this.posY,
+ this.posZ, this.world);
for(EntityLivingBase target : targets){
if(target != this.getCaster()){
- // If this check wasn't here the potion would be reapplied every tick and hence the entity would be damaged each tick.
+ // If this check wasn't here the potion would be reapplied every tick and hence the entity would be
+ // damaged each tick.
// In this case, we do want particles to be shown.
- if(!target.isPotionActive(WizardryPotions.decay)) target.addPotionEffect(new PotionEffect(WizardryPotions.decay, LIFETIME, 0));
+ if(!target.isPotionActive(WizardryPotions.decay))
+ target.addPotionEffect(new PotionEffect(WizardryPotions.decay, LIFETIME, 0));
}
}
}else if(this.rand.nextInt(15) == 0){
- double radius = rand.nextDouble()*0.8;
- double angle = rand.nextDouble()*Math.PI*2;
- float brightness = rand.nextFloat()*0.4f;
- Wizardry.proxy.spawnParticle(WizardryParticleType.DARK_MAGIC, worldObj, this.posX + radius*Math.cos(angle), this.posY, this.posZ + radius*Math.sin(angle), 0, 0, 0, 0, brightness, 0, brightness+0.1f);
+ double radius = rand.nextDouble() * 0.8;
+ double angle = rand.nextDouble() * Math.PI * 2;
+ float brightness = rand.nextFloat() * 0.4f;
+ Wizardry.proxy.spawnParticle(WizardryParticleType.DARK_MAGIC, world, this.posX + radius * Math.cos(angle),
+ this.posY, this.posZ + radius * Math.sin(angle), 0, 0, 0, 0, brightness, 0, brightness + 0.1f);
}
}
-
- protected void entityInit(){}
- @Override
- protected void readEntityFromNBT(NBTTagCompound nbttagcompound) {
-
+ protected void entityInit(){
}
@Override
- protected void writeEntityToNBT(NBTTagCompound nbttagcompound) {
+ protected void readEntityFromNBT(NBTTagCompound nbttagcompound){
+
+ }
+
+ @Override
+ protected void writeEntityToNBT(NBTTagCompound nbttagcompound){
}
/**
- * Checks using a Vec3dd to determine if this entity is within range of that vector to be rendered. Args: Vec3dD
- */
- public boolean isInRangeToRenderVec3dD(Vec3d par1Vec3d)
- {
- return true;
- }
+ * Checks using a Vec3dd to determine if this entity is within range of that vector to be rendered. Args: Vec3dD
+ */
+ public boolean isInRangeToRenderVec3dD(Vec3d par1Vec3d){
+ return true;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityEarthquake.java b/src/main/java/electroblob/wizardry/entity/construct/EntityEarthquake.java
index 10d32231..82a46b9f 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityEarthquake.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityEarthquake.java
@@ -23,7 +23,7 @@ public class EntityEarthquake extends EntityMagicConstruct {
}
public EntityEarthquake(World world, double x, double y, double z, EntityLivingBase caster, int lifetime,
- float damageMultiplier) {
+ float damageMultiplier){
super(world, x, y, z, caster, lifetime, damageMultiplier);
this.height = 1.0f;
this.width = 1.0f;
@@ -33,48 +33,58 @@ public class EntityEarthquake extends EntityMagicConstruct {
super.onUpdate();
- if(!worldObj.isRemote){
+ if(!world.isRemote){
double speed = 0.4;
// The further the earthquake is going to spread, the finer the angle increments.
- for(double angle=0; angle < 2*Math.PI; angle+=Math.PI/(lifetime*1.5)){
+ for(double angle = 0; angle < 2 * Math.PI; angle += Math.PI / (lifetime * 1.5)){
- // Calculates coordinates for the block to be moved. The radius increases with time. The +1.5 is to leave
+ // Calculates coordinates for the block to be moved. The radius increases with time. The +1.5 is to
+ // leave
// blocks in the centre untouched.
- int x = this.posX < 0 ? (int)(this.posX + ((this.ticksExisted*speed)+1.5)*Math.sin(angle) - 1) : (int)(this.posX + ((this.ticksExisted*speed)+1.5)*Math.sin(angle));
+ int x = this.posX < 0 ? (int)(this.posX + ((this.ticksExisted * speed) + 1.5) * Math.sin(angle) - 1)
+ : (int)(this.posX + ((this.ticksExisted * speed) + 1.5) * Math.sin(angle));
int y = (int)(this.posY - 0.5);
- int z = this.posZ < 0 ? (int)(this.posZ + ((this.ticksExisted*speed)+1.5)*Math.cos(angle) - 1) : (int)(this.posZ + ((this.ticksExisted*speed)+1.5)*Math.cos(angle));
+ int z = this.posZ < 0 ? (int)(this.posZ + ((this.ticksExisted * speed) + 1.5) * Math.cos(angle) - 1)
+ : (int)(this.posZ + ((this.ticksExisted * speed) + 1.5) * Math.cos(angle));
BlockPos pos = new BlockPos(x, y, z);
- if(!WizardryUtilities.isBlockUnbreakable(worldObj, pos) && !worldObj.isAirBlock(pos) && worldObj.isBlockNormalCube(pos, false)
+ if(!WizardryUtilities.isBlockUnbreakable(world, pos) && !world.isAirBlock(pos)
+ && world.isBlockNormalCube(pos, false)
// Checks that the block above is not solid, since this causes the falling sand to vanish.
- && !worldObj.isBlockNormalCube(pos.up(), false)){
+ && !world.isBlockNormalCube(pos.up(), false)){
// Falling blocks do the setting block to air themselves.
- EntityFallingBlock fallingblock = new EntityFallingBlock(worldObj, x+0.5, y+0.5, z+0.5, worldObj.getBlockState(new BlockPos(x, y, z)));
+ EntityFallingBlock fallingblock = new EntityFallingBlock(world, x + 0.5, y + 0.5, z + 0.5,
+ world.getBlockState(new BlockPos(x, y, z)));
fallingblock.motionY = 0.3;
- worldObj.spawnEntityInWorld(fallingblock);
+ world.spawnEntity(fallingblock);
}
}
- List targets = WizardryUtilities.getEntitiesWithinRadius((this.ticksExisted*speed)+1.5, this.posX, this.posY, this.posZ, worldObj);
+ List targets = WizardryUtilities
+ .getEntitiesWithinRadius((this.ticksExisted * speed) + 1.5, this.posX, this.posY, this.posZ, world);
- // In this particular instance, the caster is completely unaffected because they will always be in the centre.
+ // In this particular instance, the caster is completely unaffected because they will always be in the
+ // centre.
targets.remove(this.getCaster());
for(EntityLivingBase target : targets){
// Searches in a 1 wide ring.
- if(this.getDistanceToEntity(target) > (this.ticksExisted*speed)+0.5 && target.posY < this.posY + 1 && target.posY > this.posY - 1){
+ if(this.getDistanceToEntity(target) > (this.ticksExisted * speed) + 0.5 && target.posY < this.posY + 1
+ && target.posY > this.posY - 1){
// Knockback must be removed in this instance, or the target will fall into the floor.
double motionX = target.motionX;
double motionZ = target.motionZ;
if(this.isValidTarget(target)){
- target.attackEntityFrom(MagicDamage.causeIndirectMagicDamage(this, this.getCaster(), DamageType.BLAST), 10*this.damageMultiplier);
+ target.attackEntityFrom(
+ MagicDamage.causeIndirectMagicDamage(this, this.getCaster(), DamageType.BLAST),
+ 10 * this.damageMultiplier);
target.addPotionEffect(new PotionEffect(MobEffects.WEAKNESS, 400, 1));
}
@@ -89,18 +99,19 @@ public class EntityEarthquake extends EntityMagicConstruct {
}
}
}
- // TODO: Uncomment once 2.1.0 is released
-// }else{
-//
-// // Constant 15 blocks for now
-// List targets = WizardryUtilities.getEntitiesWithinRadius(15, this.posX, this.posY, this.posZ, worldObj, EntityPlayer.class);
-//
-// float magnitude = 6f * ((float)(this.lifetime - this.ticksExisted))/(float)this.lifetime;
-//
-// // Makes the screen shake
-// for(EntityLivingBase target : targets){
-// target.setAngles(0, this.ticksExisted % 4 < 2 ? magnitude : -magnitude);
-// }
+ // TODO: Uncomment once 2.1.0 is released
+ // }else{
+ //
+ // // Constant 15 blocks for now
+ // List targets = WizardryUtilities.getEntitiesWithinRadius(15, this.posX, this.posY,
+ // this.posZ, world, EntityPlayer.class);
+ //
+ // float magnitude = 6f * ((float)(this.lifetime - this.ticksExisted))/(float)this.lifetime;
+ //
+ // // Makes the screen shake
+ // for(EntityLivingBase target : targets){
+ // target.setAngles(0, this.ticksExisted % 4 < 2 ? magnitude : -magnitude);
+ // }
}
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityFireRing.java b/src/main/java/electroblob/wizardry/entity/construct/EntityFireRing.java
index e2055da5..97ed7876 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityFireRing.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityFireRing.java
@@ -11,50 +11,54 @@ import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
public class EntityFireRing extends EntityMagicConstruct {
-
- public EntityFireRing(World par1World) {
+
+ public EntityFireRing(World par1World){
super(par1World);
this.height = 1.0f;
this.width = 5.0f;
}
-
- public EntityFireRing(World world, double x, double y, double z, EntityLivingBase caster, int lifetime, float damageMultiplier) {
+
+ public EntityFireRing(World world, double x, double y, double z, EntityLivingBase caster, int lifetime,
+ float damageMultiplier){
super(world, x, y, z, caster, lifetime, damageMultiplier);
this.height = 1.0f;
this.width = 5.0f;
}
-
+
public void onUpdate(){
-
+
if(this.ticksExisted % 40 == 1){
this.playSound(SoundEvents.BLOCK_FIRE_AMBIENT, 4.0f, 0.7f);
}
-
+
super.onUpdate();
-
- if(!this.worldObj.isRemote){
-
- List targets = WizardryUtilities.getEntitiesWithinRadius(2.5d, this.posX, this.posY, this.posZ, this.worldObj);
-
+
+ if(!this.world.isRemote){
+
+ List targets = WizardryUtilities.getEntitiesWithinRadius(2.5d, this.posX, this.posY,
+ this.posZ, this.world);
+
for(EntityLivingBase target : targets){
-
+
if(this.isValidTarget(target)){
double velX = target.motionX;
double velY = target.motionY;
double velZ = target.motionZ;
-
+
if(!MagicDamage.isEntityImmune(DamageType.FIRE, target)){
-
+
target.setFire(10);
-
+
if(this.getCaster() != null){
- target.attackEntityFrom(MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.FIRE), 1*damageMultiplier);
+ target.attackEntityFrom(
+ MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.FIRE),
+ 1 * damageMultiplier);
}else{
- target.attackEntityFrom(DamageSource.magic, 1*damageMultiplier);
+ target.attackEntityFrom(DamageSource.MAGIC, 1 * damageMultiplier);
}
}
-
+
// Removes knockback
target.motionX = velX;
target.motionY = velY;
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityFireSigil.java b/src/main/java/electroblob/wizardry/entity/construct/EntityFireSigil.java
index 9913006e..ecf45f74 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityFireSigil.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityFireSigil.java
@@ -13,13 +13,14 @@ import net.minecraft.world.World;
public class EntityFireSigil extends EntityMagicConstruct {
- public EntityFireSigil(World par1World) {
+ public EntityFireSigil(World par1World){
super(par1World);
this.height = 0.2f;
this.width = 2.0f;
}
- public EntityFireSigil(World par1World, double x, double y, double z, EntityLivingBase caster, float damageMultiplier) {
+ public EntityFireSigil(World par1World, double x, double y, double z, EntityLivingBase caster,
+ float damageMultiplier){
super(par1World, x, y, z, caster, -1, damageMultiplier);
this.height = 0.2f;
this.width = 2.0f;
@@ -27,8 +28,7 @@ public class EntityFireSigil extends EntityMagicConstruct {
// Overrides the original to stop the entity moving when it intersects stuff. The default arrow does this to allow
// it to stick in blocks.
- public void setPositionAndRotation2(double par1, double par3, double par5, float par7, float par8, int par9)
- {
+ public void setPositionAndRotation2(double par1, double par3, double par5, float par7, float par8, int par9){
this.setPosition(par1, par3, par5);
this.setRotation(par7, par8);
}
@@ -37,9 +37,10 @@ public class EntityFireSigil extends EntityMagicConstruct {
super.onUpdate();
- if(!this.worldObj.isRemote){
+ if(!this.world.isRemote){
- List targets = WizardryUtilities.getEntitiesWithinRadius(1.0d, this.posX, this.posY, this.posZ, this.worldObj);
+ List targets = WizardryUtilities.getEntitiesWithinRadius(1.0d, this.posX, this.posY,
+ this.posZ, this.world);
for(EntityLivingBase target : targets){
@@ -48,8 +49,10 @@ public class EntityFireSigil extends EntityMagicConstruct {
double velX = target.motionX;
double velY = target.motionY;
double velZ = target.motionZ;
-
- target.attackEntityFrom(this.getCaster() != null ? MagicDamage.causeIndirectMagicDamage(this, this.getCaster(), DamageType.FIRE) : DamageSource.magic, 6);
+
+ target.attackEntityFrom(this.getCaster() != null
+ ? MagicDamage.causeIndirectMagicDamage(this, this.getCaster(), DamageType.FIRE)
+ : DamageSource.MAGIC, 6);
// Removes knockback
target.motionX = velX;
@@ -59,28 +62,28 @@ public class EntityFireSigil extends EntityMagicConstruct {
if(!MagicDamage.isEntityImmune(DamageType.FIRE, target)) target.setFire(10);
this.playSound(SoundEvents.ENTITY_BLAZE_SHOOT, 1, 1);
-
+
// The trap is destroyed once triggered.
this.setDead();
}
}
}else if(this.rand.nextInt(15) == 0){
- double radius = 0.5 + rand.nextDouble()*0.3;
- double angle = rand.nextDouble()*Math.PI*2;
- worldObj.spawnParticle(EnumParticleTypes.FLAME, this.posX + radius*Math.cos(angle), this.posY + 0.1, this.posZ + radius*Math.sin(angle), 0, 0, 0);
+ double radius = 0.5 + rand.nextDouble() * 0.3;
+ double angle = rand.nextDouble() * Math.PI * 2;
+ world.spawnParticle(EnumParticleTypes.FLAME, this.posX + radius * Math.cos(angle), this.posY + 0.1,
+ this.posZ + radius * Math.sin(angle), 0, 0, 0);
}
}
@Override
- protected void entityInit() {
+ protected void entityInit(){
}
/**
* Return whether this entity should be rendered as on fire.
*/
- public boolean canRenderOnFire()
- {
+ public boolean canRenderOnFire(){
return false;
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityForcefield.java b/src/main/java/electroblob/wizardry/entity/construct/EntityForcefield.java
index f0f817eb..3e4e2a25 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityForcefield.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityForcefield.java
@@ -16,42 +16,44 @@ import net.minecraft.world.World;
public class EntityForcefield extends EntityMagicConstruct {
- public EntityForcefield(World world) {
+ public EntityForcefield(World world){
super(world);
this.height = 6;
this.width = 6;
- this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 3, this.posY - 3, this.posZ - 3, this.posX + 3, this.posY + 3, this.posZ + 3));
+ this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 3, this.posY - 3, this.posZ - 3, this.posX + 3,
+ this.posY + 3, this.posZ + 3));
}
-
- public EntityForcefield(World world, double x, double y, double z, EntityLivingBase caster, int lifetime) {
+
+ public EntityForcefield(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
// y-3 because it needs to be centred on the given position
// Damage multiplier is 1 because forcefields do no damage!
- super(world, x, y-3, z, caster, lifetime, 1.0f);
+ super(world, x, y - 3, z, caster, lifetime, 1.0f);
this.height = 6;
this.width = 6;
- this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 3, this.posY - 3, this.posZ - 3, this.posX + 3, this.posY + 3, this.posZ + 3));
+ this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 3, this.posY - 3, this.posZ - 3, this.posX + 3,
+ this.posY + 3, this.posZ + 3));
}
-
- public boolean canBeCollidedWith()
- {
- return !this.isDead;
- }
-
- public AxisAlignedBB getCollisionBox(Entity par1Entity)
- {
- return par1Entity.getEntityBoundingBox();
- }
-
+
+ public boolean canBeCollidedWith(){
+ return !this.isDead;
+ }
+
+ public AxisAlignedBB getCollisionBox(Entity par1Entity){
+ return par1Entity.getEntityBoundingBox();
+ }
+
public void onUpdate(){
-
+
super.onUpdate();
-
- if(!this.worldObj.isRemote){
- List targets = WizardryUtilities.getEntitiesWithinRadius(3.5, this.posX, this.posY + 3, this.posZ, this.worldObj);
+
+ if(!this.world.isRemote){
+ List targets = WizardryUtilities.getEntitiesWithinRadius(3.5, this.posX, this.posY + 3,
+ this.posZ, this.world);
for(EntityLivingBase target : targets){
if(this.isValidTarget(target)){
- double multiplier = (3.5 - target.getDistance(this.posX, this.posY+3, this.posZ))*0.1;
- target.addVelocity((target.posX - this.posX)*multiplier, (target.posY - (this.posY + 3))*multiplier, (target.posZ - this.posZ)*multiplier);
+ double multiplier = (3.5 - target.getDistance(this.posX, this.posY + 3, this.posZ)) * 0.1;
+ target.addVelocity((target.posX - this.posX) * multiplier,
+ (target.posY - (this.posY + 3)) * multiplier, (target.posZ - this.posZ) * multiplier);
// Player motion is handled on that player's client so needs packets
if(target instanceof EntityPlayerMP){
((EntityPlayerMP)target).connection.sendPacket(new SPacketEntityVelocity(target));
@@ -59,33 +61,35 @@ public class EntityForcefield extends EntityMagicConstruct {
}
}
}else{
- for(int i=1; i<40; i++){
- float brightness = 0.5f + (rand.nextFloat()*0.5f);
- double radius = 3;
- double yaw = rand.nextDouble()*Math.PI*2;
- double pitch = (rand.nextDouble()-0.5)*Math.PI;
- // Generates a spherical pattern of particles
- Wizardry.proxy.spawnParticle(WizardryParticleType.BRIGHT_DUST, worldObj, this.posX + radius*Math.cos(yaw)*Math.cos(pitch), this.posY + 3 + radius*Math.sin(pitch), this.posZ + radius*Math.sin(yaw)*Math.cos(pitch), 0, 0, 0, 48 + this.rand.nextInt(12), brightness, brightness, 1.0f);
+ for(int i = 1; i < 40; i++){
+ float brightness = 0.5f + (rand.nextFloat() * 0.5f);
+ double radius = 3;
+ double yaw = rand.nextDouble() * Math.PI * 2;
+ double pitch = (rand.nextDouble() - 0.5) * Math.PI;
+ // Generates a spherical pattern of particles
+ Wizardry.proxy.spawnParticle(WizardryParticleType.BRIGHT_DUST, world,
+ this.posX + radius * Math.cos(yaw) * Math.cos(pitch), this.posY + 3 + radius * Math.sin(pitch),
+ this.posZ + radius * Math.sin(yaw) * Math.cos(pitch), 0, 0, 0, 48 + this.rand.nextInt(12),
+ brightness, brightness, 1.0f);
}
}
}
-
+
public boolean attackEntityFrom(DamageSource source, float par2){
-
+
if(source != null && source.getSourceOfDamage() != null){
// Now works for any source of damage.
source.getSourceOfDamage().playSound(WizardrySounds.SPELL_DEFLECTION, 0.3f, 1.3f);
}
super.attackEntityFrom(source, par2);
return false;
- }
-
+ }
+
/**
- * Return whether this entity should be rendered as on fire.
- */
- public boolean canRenderOnFire()
- {
- return false;
- }
+ * Return whether this entity should be rendered as on fire.
+ */
+ public boolean canRenderOnFire(){
+ return false;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityFrostSigil.java b/src/main/java/electroblob/wizardry/entity/construct/EntityFrostSigil.java
index f2cb3ffe..7812ca96 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityFrostSigil.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityFrostSigil.java
@@ -15,77 +15,80 @@ import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
public class EntityFrostSigil extends EntityMagicConstruct {
-
- public EntityFrostSigil(World par1World) {
+
+ public EntityFrostSigil(World par1World){
super(par1World);
this.height = 0.2f;
this.width = 2.0f;
}
-
- public EntityFrostSigil(World par1World, double x, double y, double z, EntityLivingBase caster, float damageMultiplier) {
+
+ public EntityFrostSigil(World par1World, double x, double y, double z, EntityLivingBase caster,
+ float damageMultiplier){
super(par1World, x, y, z, caster, -1, damageMultiplier);
this.height = 0.2f;
this.width = 2.0f;
}
-
+
// Overrides the original to stop the entity moving when it intersects stuff. The default arrow does this to allow
- // it to stick in blocks.
- public void setPositionAndRotation2(double par1, double par3, double par5, float par7, float par8, int par9)
- {
- this.setPosition(par1, par3, par5);
- this.setRotation(par7, par8);
- }
-
+ // it to stick in blocks.
+ public void setPositionAndRotation2(double par1, double par3, double par5, float par7, float par8, int par9){
+ this.setPosition(par1, par3, par5);
+ this.setRotation(par7, par8);
+ }
+
public void onUpdate(){
-
+
super.onUpdate();
-
- if(!this.worldObj.isRemote){
-
- List targets = WizardryUtilities.getEntitiesWithinRadius(1.0d, this.posX, this.posY, this.posZ, this.worldObj);
-
+
+ if(!this.world.isRemote){
+
+ List targets = WizardryUtilities.getEntitiesWithinRadius(1.0d, this.posX, this.posY,
+ this.posZ, this.world);
+
for(EntityLivingBase target : targets){
-
+
if(this.isValidTarget(target)){
double velX = target.motionX;
double velY = target.motionY;
double velZ = target.motionZ;
-
- target.attackEntityFrom(this.getCaster() != null ? MagicDamage.causeIndirectMagicDamage(this, this.getCaster(), DamageType.FROST) : DamageSource.magic, 8);
-
+
+ target.attackEntityFrom(this.getCaster() != null
+ ? MagicDamage.causeIndirectMagicDamage(this, this.getCaster(), DamageType.FROST)
+ : DamageSource.MAGIC, 8);
+
// Removes knockback
target.motionX = velX;
target.motionY = velY;
target.motionZ = velZ;
-
+
if(!MagicDamage.isEntityImmune(DamageType.FROST, target))
target.addPotionEffect(new PotionEffect(WizardryPotions.frost, 200, 1));
-
+
this.playSound(WizardrySounds.SPELL_FREEZE, 1.0f, 1.0f);
-
+
// The trap is destroyed once triggered.
this.setDead();
}
}
}else if(this.rand.nextInt(15) == 0){
- double radius = 0.5 + rand.nextDouble()*0.3;
- double angle = rand.nextDouble()*Math.PI*2;
- Wizardry.proxy.spawnParticle(WizardryParticleType.SNOW, worldObj, this.posX + radius*Math.cos(angle), this.posY + 0.1, this.posZ + radius*Math.sin(angle), 0, 0, 0, 40 + rand.nextInt(10));
+ double radius = 0.5 + rand.nextDouble() * 0.3;
+ double angle = rand.nextDouble() * Math.PI * 2;
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SNOW, world, this.posX + radius * Math.cos(angle),
+ this.posY + 0.1, this.posZ + radius * Math.sin(angle), 0, 0, 0, 40 + rand.nextInt(10));
}
}
@Override
- protected void entityInit() {
-
+ protected void entityInit(){
+
}
-
+
/**
- * Return whether this entity should be rendered as on fire.
- */
- public boolean canRenderOnFire()
- {
- return false;
- }
+ * Return whether this entity should be rendered as on fire.
+ */
+ public boolean canRenderOnFire(){
+ return false;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityHailstorm.java b/src/main/java/electroblob/wizardry/entity/construct/EntityHailstorm.java
index 6b627bdd..5bb73e18 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityHailstorm.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityHailstorm.java
@@ -5,32 +5,34 @@ import net.minecraft.entity.EntityLivingBase;
import net.minecraft.world.World;
public class EntityHailstorm extends EntityMagicConstruct {
-
- public EntityHailstorm(World par1World) {
+
+ public EntityHailstorm(World par1World){
super(par1World);
this.height = 3.0f;
this.width = 5.0f;
}
-
- public EntityHailstorm(World world, double x, double y, double z, EntityLivingBase caster, int lifetime, float damageMultiplier) {
+
+ public EntityHailstorm(World world, double x, double y, double z, EntityLivingBase caster, int lifetime,
+ float damageMultiplier){
super(world, x, y, z, caster, lifetime, damageMultiplier);
this.height = 3.0f;
this.width = 5.0f;
}
-
+
public void onUpdate(){
-
+
super.onUpdate();
-
- if(!this.worldObj.isRemote){
- //System.out.println(this.rotationYaw);
- EntityIceShard iceshard = new EntityIceShard(worldObj, this.posX + rand.nextDouble()*6 - 3, this.posY + rand.nextDouble()*4 - 2, this.posZ + rand.nextDouble()*6 - 3);
+
+ if(!this.world.isRemote){
+ // System.out.println(this.rotationYaw);
+ EntityIceShard iceshard = new EntityIceShard(world, this.posX + rand.nextDouble() * 6 - 3,
+ this.posY + rand.nextDouble() * 4 - 2, this.posZ + rand.nextDouble() * 6 - 3);
iceshard.motionX = Math.cos(Math.toRadians(this.rotationYaw + 90));
iceshard.motionY = -0.6;
iceshard.motionZ = Math.sin(Math.toRadians(this.rotationYaw + 90));
iceshard.setShootingEntity(this.getCaster());
iceshard.damageMultiplier = this.damageMultiplier;
- this.worldObj.spawnEntityInWorld(iceshard);
+ this.world.spawnEntity(iceshard);
}
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityHammer.java b/src/main/java/electroblob/wizardry/entity/construct/EntityHammer.java
index 67950d41..13225ca7 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityHammer.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityHammer.java
@@ -12,6 +12,7 @@ import electroblob.wizardry.util.WizardryUtilities;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.MoverType;
import net.minecraft.entity.effect.EntityLightningBolt;
import net.minecraft.init.SoundEvents;
import net.minecraft.nbt.NBTTagCompound;
@@ -23,161 +24,171 @@ import net.minecraft.world.World;
public class EntityHammer extends EntityMagicConstruct {
- /** How long the hammer has been falling for. */
- public int fallTime;
+ /** How long the hammer has been falling for. */
+ public int fallTime;
- public EntityHammer(World par1World){
- super(par1World);
- this.setSize(1.0f, 1.9F);
- this.noClip = false;
- }
+ public EntityHammer(World par1World){
+ super(par1World);
+ this.setSize(1.0f, 1.9F);
+ this.noClip = false;
+ }
- public EntityHammer(World world, double x, double y, double z, EntityLivingBase caster, int lifetime, float damageMultiplier){
- super(world, x, y, z, caster, lifetime, damageMultiplier);
- this.setSize(1.0f, 1.9F);
- this.motionX = 0.0D;
- this.motionY = 0.0D;
- this.motionZ = 0.0D;
- this.noClip = false;
- }
-
- @Override
- public boolean isBurning(){
- return false;
- }
+ public EntityHammer(World world, double x, double y, double z, EntityLivingBase caster, int lifetime,
+ float damageMultiplier){
+ super(world, x, y, z, caster, lifetime, damageMultiplier);
+ this.setSize(1.0f, 1.9F);
+ this.motionX = 0.0D;
+ this.motionY = 0.0D;
+ this.motionZ = 0.0D;
+ this.noClip = false;
+ }
- @Override
- public boolean canBeCollidedWith(){
- return true;
- }
-
- @Override
- public AxisAlignedBB getCollisionBoundingBox(){
- return this.getEntityBoundingBox();
- }
+ @Override
+ public boolean isBurning(){
+ return false;
+ }
- @Override
- public void onUpdate(){
-
- super.onUpdate();
-
- if(this.ticksExisted % 20 == 1 && !this.onGround && worldObj.isRemote){
- // Though this sound does repeat, it stops when it hits the ground.
- Wizardry.proxy.playMovingSound(this, WizardrySounds.SPELL_LOOP_LIGHTNING, 3.0f, 1.0f, false);
+ @Override
+ public boolean canBeCollidedWith(){
+ return true;
+ }
+
+ @Override
+ public AxisAlignedBB getCollisionBoundingBox(){
+ return this.getEntityBoundingBox();
+ }
+
+ @Override
+ public void onUpdate(){
+
+ super.onUpdate();
+
+ if(this.ticksExisted % 20 == 1 && !this.onGround && world.isRemote){
+ // Though this sound does repeat, it stops when it hits the ground.
+ Wizardry.proxy.playMovingSound(this, WizardrySounds.SPELL_LOOP_LIGHTNING, 3.0f, 1.0f, false);
}
-
- if(this.worldObj.isRemote && this.ticksExisted % 3 == 0){
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, worldObj, this.posX - 0.5d + rand.nextDouble(), this.posY + 2*rand.nextDouble(), this.posZ - 0.5d + rand.nextDouble(), 0, 0, 0, 3);
- }
-
- if(!this.worldObj.isRemote){
- this.prevPosX = this.posX;
- this.prevPosY = this.posY;
- this.prevPosZ = this.posZ;
- ++this.fallTime;
- this.motionY -= 0.03999999910593033D;
- this.moveEntity(this.motionX, this.motionY, this.motionZ);
- this.motionX *= 0.9800000190734863D;
- this.motionY *= 0.9800000190734863D;
- this.motionZ *= 0.9800000190734863D;
-
- if(this.onGround){
-
- this.motionX *= 0.699999988079071D;
- this.motionZ *= 0.699999988079071D;
- this.motionY *= -0.5D;
-
- if(this.ticksExisted % 40 == 0){
-
- double seekerRange = 10.0d;
-
- List targets = WizardryUtilities.getEntitiesWithinRadius(seekerRange, this.posX, this.posY+1, this.posZ, worldObj);
-
+ if(this.world.isRemote && this.ticksExisted % 3 == 0){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, world, this.posX - 0.5d + rand.nextDouble(),
+ this.posY + 2 * rand.nextDouble(), this.posZ - 0.5d + rand.nextDouble(), 0, 0, 0, 3);
+ }
+
+ if(!this.world.isRemote){
+
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+ ++this.fallTime;
+ this.motionY -= 0.03999999910593033D;
+ this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ);
+ this.motionX *= 0.9800000190734863D;
+ this.motionY *= 0.9800000190734863D;
+ this.motionZ *= 0.9800000190734863D;
+
+ if(this.onGround){
+
+ this.motionX *= 0.699999988079071D;
+ this.motionZ *= 0.699999988079071D;
+ this.motionY *= -0.5D;
+
+ if(this.ticksExisted % 40 == 0){
+
+ double seekerRange = 10.0d;
+
+ List targets = WizardryUtilities.getEntitiesWithinRadius(seekerRange, this.posX,
+ this.posY + 1, this.posZ, world);
+
// For this spell there is no limit to the amount of secondary targets!
for(EntityLivingBase target : targets){
-
+
if(this.isValidTarget(target)){
-
- if(!worldObj.isRemote){
- EntityArc arc = new EntityArc(worldObj);
- arc.setEndpointCoords(this.posX, this.posY + this.height - 0.1, this.posZ,
- target.posX, target.posY + target.height/2, target.posZ);
- worldObj.spawnEntityInWorld(arc);
+
+ if(!world.isRemote){
+ EntityArc arc = new EntityArc(world);
+ arc.setEndpointCoords(this.posX, this.posY + this.height - 0.1, this.posZ, target.posX,
+ target.posY + target.height / 2, target.posZ);
+ world.spawnEntity(arc);
}else{
- for(int j=0;j<8;j++){
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, worldObj, target.posX + worldObj.rand.nextFloat() - 0.5, target.getEntityBoundingBox().minY + target.height/2 + worldObj.rand.nextFloat()*2 - 1, target.posZ + worldObj.rand.nextFloat() - 0.5, 0, 0, 0, 3);
- worldObj.spawnParticle(EnumParticleTypes.SMOKE_LARGE, target.posX + rand.nextFloat(), target.getEntityBoundingBox().minY + target.height/2 + rand.nextFloat(), target.posZ + rand.nextFloat(), 0, 0, 0);
- }
+ for(int j = 0; j < 8; j++){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, world,
+ target.posX + world.rand.nextFloat() - 0.5,
+ target.getEntityBoundingBox().minY + target.height / 2
+ + world.rand.nextFloat() * 2 - 1,
+ target.posZ + world.rand.nextFloat() - 0.5, 0, 0, 0, 3);
+ world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, target.posX + rand.nextFloat(),
+ target.getEntityBoundingBox().minY + target.height / 2 + rand.nextFloat(),
+ target.posZ + rand.nextFloat(), 0, 0, 0);
+ }
}
-
+
target.playSound(WizardrySounds.SPELL_SPARK, 1.0F, rand.nextFloat() * 0.4F + 1.5F);
-
+
if(this.getCaster() != null){
- WizardryUtilities.attackEntityWithoutKnockback(target, MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.SHOCK), 6*damageMultiplier);
+ WizardryUtilities.attackEntityWithoutKnockback(target,
+ MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.SHOCK),
+ 6 * damageMultiplier);
WizardryUtilities.applyStandardKnockback(this, target);
}else{
- target.attackEntityFrom(DamageSource.magic, 6*damageMultiplier);
+ target.attackEntityFrom(DamageSource.MAGIC, 6 * damageMultiplier);
}
}
}
- }
- }
- }
- }
-
- @Override
- public void despawn(){
-
- this.playSound(SoundEvents.ENTITY_GENERIC_EXPLODE, 1.0F, 1.0f);
-
- if(this.worldObj.isRemote){
- this.worldObj.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, this.posX, this.posY, this.posZ, 0, 0, 0);
+ }
+ }
}
-
+ }
+
+ @Override
+ public void despawn(){
+
+ this.playSound(SoundEvents.ENTITY_GENERIC_EXPLODE, 1.0F, 1.0f);
+
+ if(this.world.isRemote){
+ this.world.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, this.posX, this.posY, this.posZ, 0, 0, 0);
+ }
+
super.despawn();
- }
-
- @Override
- public void fall(float distance, float damageMultiplier) {
-
- if(worldObj.isRemote){
- for(int i=0; i<40; i++){
- double particleX = this.posX - 1.0d + 2*rand.nextDouble();
- double particleZ = this.posZ - 1.0d + 2*rand.nextDouble();
- // Roundabout way of getting a block instance for the block the hammer is standing on (if any).
- IBlockState block = worldObj.getBlockState(new BlockPos(this.posX, this.posY-2, this.posZ));
+ }
+
+ @Override
+ public void fall(float distance, float damageMultiplier){
+
+ if(world.isRemote){
+ for(int i = 0; i < 40; i++){
+ double particleX = this.posX - 1.0d + 2 * rand.nextDouble();
+ double particleZ = this.posZ - 1.0d + 2 * rand.nextDouble();
+ // Roundabout way of getting a block instance for the block the hammer is standing on (if any).
+ IBlockState block = world.getBlockState(new BlockPos(this.posX, this.posY - 2, this.posZ));
if(block != null){
- worldObj.spawnParticle(EnumParticleTypes.BLOCK_DUST, particleX, this.posY, particleZ,
+ world.spawnParticle(EnumParticleTypes.BLOCK_DUST, particleX, this.posY, particleZ,
particleX - this.posX, 0, particleZ - this.posZ, Block.getStateId(block));
}
- }
- }else{
+ }
+ }else{
// Just to check the hammer has actually fallen from the sky, rather than the block under it being broken.
- if(this.fallDistance > 10){
- EntityLightningBolt entitylightning = new EntityLightningBolt(worldObj, this.posX, this.posY, this.posZ, false);
- worldObj.addWeatherEffect(entitylightning);
- }
- }
- }
+ if(this.fallDistance > 10){
+ EntityLightningBolt entitylightning = new EntityLightningBolt(world, this.posX, this.posY, this.posZ,
+ false);
+ world.addWeatherEffect(entitylightning);
+ }
+ }
+ }
- @Override
- public void writeEntityToNBT(NBTTagCompound nbttagcompound)
- {
- super.writeEntityToNBT(nbttagcompound);
- nbttagcompound.setByte("Time", (byte)this.fallTime);
- }
+ @Override
+ public void writeEntityToNBT(NBTTagCompound nbttagcompound){
+ super.writeEntityToNBT(nbttagcompound);
+ nbttagcompound.setByte("Time", (byte)this.fallTime);
+ }
- @Override
- public void readEntityFromNBT(NBTTagCompound nbttagcompound)
- {
- super.readEntityFromNBT(nbttagcompound);
- this.fallTime = nbttagcompound.getByte("Time") & 255;
- }
+ @Override
+ public void readEntityFromNBT(NBTTagCompound nbttagcompound){
+ super.readEntityFromNBT(nbttagcompound);
+ this.fallTime = nbttagcompound.getByte("Time") & 255;
+ }
- @Override
- public boolean isInRangeToRenderDist(double distance) {
- return true;
- }
+ @Override
+ public boolean isInRangeToRenderDist(double distance){
+ return true;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityHealAura.java b/src/main/java/electroblob/wizardry/entity/construct/EntityHealAura.java
index 34a96dd8..25f93849 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityHealAura.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityHealAura.java
@@ -14,13 +14,14 @@ import net.minecraft.world.World;
public class EntityHealAura extends EntityMagicConstruct {
- public EntityHealAura(World world) {
+ public EntityHealAura(World world){
super(world);
this.height = 1.0f;
this.width = 5.0f;
}
- public EntityHealAura(World world, double x, double y, double z, EntityLivingBase caster, int lifetime, float damageMultiplier) {
+ public EntityHealAura(World world, double x, double y, double z, EntityLivingBase caster, int lifetime,
+ float damageMultiplier){
super(world, x, y, z, caster, lifetime, damageMultiplier);
this.height = 1.0f;
this.width = 5.0f;
@@ -34,9 +35,10 @@ public class EntityHealAura extends EntityMagicConstruct {
super.onUpdate();
- if(!this.worldObj.isRemote){
+ if(!this.world.isRemote){
- List targets = WizardryUtilities.getEntitiesWithinRadius(2.5d, this.posX, this.posY, this.posZ, this.worldObj);
+ List targets = WizardryUtilities.getEntitiesWithinRadius(2.5d, this.posX, this.posY,
+ this.posZ, this.world);
for(EntityLivingBase target : targets){
@@ -49,9 +51,11 @@ public class EntityHealAura extends EntityMagicConstruct {
double velZ = target.motionZ;
if(this.getCaster() != null){
- target.attackEntityFrom(MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.RADIANT), 1*damageMultiplier);
+ target.attackEntityFrom(
+ MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.RADIANT),
+ 1 * damageMultiplier);
}else{
- target.attackEntityFrom(DamageSource.magic, 1*damageMultiplier);
+ target.attackEntityFrom(DamageSource.MAGIC, 1 * damageMultiplier);
}
// Removes knockback
@@ -61,15 +65,17 @@ public class EntityHealAura extends EntityMagicConstruct {
}
}else if(target.getHealth() < target.getMaxHealth() && this.ticksExisted % 5 == 0){
- target.heal(1*damageMultiplier);
+ target.heal(1 * damageMultiplier);
}
}
}else{
- for(int i=1; i<3; i++){
- float brightness = 0.5f + (rand.nextFloat()*0.5f);
- double radius = rand.nextDouble()*2.0;
- double angle = rand.nextDouble()*Math.PI*2;
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, worldObj, this.posX + radius*Math.cos(angle), this.posY, this.posZ + radius*Math.sin(angle), 0, 0.05f, 0, 48 + this.rand.nextInt(12), 1.0f, 1.0f, brightness);
+ for(int i = 1; i < 3; i++){
+ float brightness = 0.5f + (rand.nextFloat() * 0.5f);
+ double radius = rand.nextDouble() * 2.0;
+ double angle = rand.nextDouble() * Math.PI * 2;
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world, this.posX + radius * Math.cos(angle),
+ this.posY, this.posZ + radius * Math.sin(angle), 0, 0.05f, 0, 48 + this.rand.nextInt(12), 1.0f,
+ 1.0f, brightness);
}
}
}
@@ -77,8 +83,7 @@ public class EntityHealAura extends EntityMagicConstruct {
/**
* Return whether this entity should be rendered as on fire.
*/
- public boolean canRenderOnFire()
- {
+ public boolean canRenderOnFire(){
return false;
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityIceSpike.java b/src/main/java/electroblob/wizardry/entity/construct/EntityIceSpike.java
index b314a2cf..d415480e 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityIceSpike.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityIceSpike.java
@@ -5,45 +5,49 @@ import electroblob.wizardry.registry.WizardrySounds;
import electroblob.wizardry.util.MagicDamage;
import electroblob.wizardry.util.MagicDamage.DamageType;
import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.MoverType;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World;
public class EntityIceSpike extends EntityMagicConstruct {
- public EntityIceSpike(World world) {
+ public EntityIceSpike(World world){
super(world);
this.setSize(0.5f, 1.0f);
}
-
- public EntityIceSpike(World world, double x, double y, double z, EntityLivingBase caster, int lifetime, float damageMultiplier){
+
+ public EntityIceSpike(World world, double x, double y, double z, EntityLivingBase caster, int lifetime,
+ float damageMultiplier){
super(world, x, y, z, caster, lifetime, damageMultiplier);
this.setSize(0.5f, 1.0f);
}
-
+
public void onUpdate(){
-
+
if(lifetime - this.ticksExisted < 15){
- this.motionY = -0.01*(this.ticksExisted-(lifetime-15));
+ this.motionY = -0.01 * (this.ticksExisted - (lifetime - 15));
}else if(lifetime - this.ticksExisted < 25){
this.motionY = 0;
}else if(lifetime - this.ticksExisted < 28){
this.motionY = 0.25;
}
-
- this.moveEntity(this.motionX, this.motionY, this.motionZ);
-
+
+ this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ);
+
if(lifetime - this.ticksExisted == 30) this.playSound(WizardrySounds.SPELL_ICE, 1, 2);
-
- if(!this.worldObj.isRemote){
- for(Object entity : this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox())){
+
+ if(!this.world.isRemote){
+ for(Object entity : this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox())){
if(entity instanceof EntityLivingBase && this.isValidTarget((EntityLivingBase)entity)){
// Potion effect only gets added if the damage succeeded.
- if(((EntityLivingBase)entity).attackEntityFrom(MagicDamage.causeDirectMagicDamage(this.getCaster(), DamageType.FROST), 5*this.damageMultiplier))
+ if(((EntityLivingBase)entity).attackEntityFrom(
+ MagicDamage.causeDirectMagicDamage(this.getCaster(), DamageType.FROST),
+ 5 * this.damageMultiplier))
((EntityLivingBase)entity).addPotionEffect(new PotionEffect(WizardryPotions.frost, 100, 0));
}
}
}
-
+
super.onUpdate();
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityLightningPulse.java b/src/main/java/electroblob/wizardry/entity/construct/EntityLightningPulse.java
index 59653c0b..edab4346 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityLightningPulse.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityLightningPulse.java
@@ -5,12 +5,13 @@ import net.minecraft.world.World;
public class EntityLightningPulse extends EntityMagicConstruct {
- public EntityLightningPulse(World world) {
+ public EntityLightningPulse(World world){
super(world);
this.setSize(6, 0.2f);
}
- public EntityLightningPulse(World world, double x, double y, double z, EntityLivingBase caster, int lifetime, float damageMultiplier) {
+ public EntityLightningPulse(World world, double x, double y, double z, EntityLivingBase caster, int lifetime,
+ float damageMultiplier){
super(world, x, y, z, caster, lifetime, damageMultiplier);
this.setSize(6, 0.2f);
}
@@ -18,8 +19,7 @@ public class EntityLightningPulse extends EntityMagicConstruct {
/**
* Return whether this entity should be rendered as on fire.
*/
- public boolean canRenderOnFire()
- {
+ public boolean canRenderOnFire(){
return false;
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityLightningSigil.java b/src/main/java/electroblob/wizardry/entity/construct/EntityLightningSigil.java
index 8ecb646d..7e427637 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityLightningSigil.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityLightningSigil.java
@@ -15,111 +15,127 @@ import net.minecraft.util.EnumParticleTypes;
import net.minecraft.world.World;
public class EntityLightningSigil extends EntityMagicConstruct {
-
- public EntityLightningSigil(World par1World) {
+
+ public EntityLightningSigil(World par1World){
super(par1World);
this.height = 0.2f;
this.width = 2.0f;
}
-
- public EntityLightningSigil(World par1World, double x, double y, double z, EntityLivingBase caster, float damageMultiplier) {
+
+ public EntityLightningSigil(World par1World, double x, double y, double z, EntityLivingBase caster,
+ float damageMultiplier){
super(par1World, x, y, z, caster, -1, damageMultiplier);
this.height = 0.2f;
this.width = 2.0f;
}
-
+
// Overrides the original to stop the entity moving when it intersects stuff. The default arrow does this to allow
- // it to stick in blocks.
- public void setPositionAndRotation2(double par1, double par3, double par5, float par7, float par8, int par9)
- {
- this.setPosition(par1, par3, par5);
- this.setRotation(par7, par8);
- }
-
+ // it to stick in blocks.
+ public void setPositionAndRotation2(double par1, double par3, double par5, float par7, float par8, int par9){
+ this.setPosition(par1, par3, par5);
+ this.setRotation(par7, par8);
+ }
+
public void onUpdate(){
-
+
super.onUpdate();
-
- if(this.ticksExisted > 600 && this.getCaster() == null && !this.worldObj.isRemote){
+
+ if(this.ticksExisted > 600 && this.getCaster() == null && !this.world.isRemote){
this.setDead();
}
-
- //if(!this.worldObj.isRemote){
-
- List targets = WizardryUtilities.getEntitiesWithinRadius(1.0d, this.posX, this.posY, this.posZ, this.worldObj);
-
- for(EntityLivingBase target : targets){
-
- if(this.isValidTarget(target)){
-
- double velX = target.motionX;
- double velY = target.motionY;
- double velZ = target.motionZ;
-
- // Only works if target is actually damaged to account for hurtResistantTime
- if(target.attackEntityFrom(getCaster() != null ? MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.SHOCK) : DamageSource.magic, 6)){
-
- // Removes knockback
- target.motionX = velX;
- target.motionY = velY;
- target.motionZ = velZ;
-
- this.playSound(WizardrySounds.SPELL_SPARK, 1.0f, 1.0f);
-
- // Secondary chaining effect
- double seekerRange = 5.0d;
- List secondaryTargets = WizardryUtilities.getEntitiesWithinRadius(seekerRange, target.posX, target.posY + target.height/2, target.posZ, worldObj);
+ // if(!this.world.isRemote){
- for(int j=0;j targets = WizardryUtilities.getEntitiesWithinRadius(1.0d, this.posX, this.posY,
+ this.posZ, this.world);
- if(secondaryTarget != target && this.isValidTarget(secondaryTarget)){
-
- if(!worldObj.isRemote){
- EntityArc arc = new EntityArc(worldObj);
- arc.setEndpointCoords(target.posX, target.posY + target.height/2, target.posZ,
- secondaryTarget.posX, secondaryTarget.posY + secondaryTarget.height/2, secondaryTarget.posZ);
- worldObj.spawnEntityInWorld(arc);
- }else{
- for(int k=0;k<8;k++){
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, worldObj, secondaryTarget.posX + worldObj.rand.nextFloat() - 0.5, secondaryTarget.getEntityBoundingBox().minY + secondaryTarget.height/2 + worldObj.rand.nextFloat()*2 - 1, secondaryTarget.posZ + worldObj.rand.nextFloat() - 0.5, 0, 0, 0, 3);
- worldObj.spawnParticle(EnumParticleTypes.SMOKE_LARGE, secondaryTarget.posX + worldObj.rand.nextFloat() - 0.5, secondaryTarget.getEntityBoundingBox().minY + secondaryTarget.height/2 + worldObj.rand.nextFloat()*2 - 1, secondaryTarget.posZ + worldObj.rand.nextFloat() - 0.5, 0, 0, 0);
- }
+ for(EntityLivingBase target : targets){
+
+ if(this.isValidTarget(target)){
+
+ double velX = target.motionX;
+ double velY = target.motionY;
+ double velZ = target.motionZ;
+
+ // Only works if target is actually damaged to account for hurtResistantTime
+ if(target.attackEntityFrom(
+ getCaster() != null ? MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.SHOCK)
+ : DamageSource.MAGIC,
+ 6)){
+
+ // Removes knockback
+ target.motionX = velX;
+ target.motionY = velY;
+ target.motionZ = velZ;
+
+ this.playSound(WizardrySounds.SPELL_SPARK, 1.0f, 1.0f);
+
+ // Secondary chaining effect
+ double seekerRange = 5.0d;
+
+ List secondaryTargets = WizardryUtilities.getEntitiesWithinRadius(seekerRange,
+ target.posX, target.posY + target.height / 2, target.posZ, world);
+
+ for(int j = 0; j < Math.min(secondaryTargets.size(), 3); j++){
+
+ EntityLivingBase secondaryTarget = secondaryTargets.get(j);
+
+ if(secondaryTarget != target && this.isValidTarget(secondaryTarget)){
+
+ if(!world.isRemote){
+ EntityArc arc = new EntityArc(world);
+ arc.setEndpointCoords(target.posX, target.posY + target.height / 2, target.posZ,
+ secondaryTarget.posX, secondaryTarget.posY + secondaryTarget.height / 2,
+ secondaryTarget.posZ);
+ world.spawnEntity(arc);
+ }else{
+ for(int k = 0; k < 8; k++){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, world,
+ secondaryTarget.posX + world.rand.nextFloat() - 0.5,
+ secondaryTarget.getEntityBoundingBox().minY + secondaryTarget.height / 2
+ + world.rand.nextFloat() * 2 - 1,
+ secondaryTarget.posZ + world.rand.nextFloat() - 0.5, 0, 0, 0, 3);
+ world.spawnParticle(EnumParticleTypes.SMOKE_LARGE,
+ secondaryTarget.posX + world.rand.nextFloat() - 0.5,
+ secondaryTarget.getEntityBoundingBox().minY + secondaryTarget.height / 2
+ + world.rand.nextFloat() * 2 - 1,
+ secondaryTarget.posZ + world.rand.nextFloat() - 0.5, 0, 0, 0);
}
-
- secondaryTarget.playSound(WizardrySounds.SPELL_SPARK, 1.0F, worldObj.rand.nextFloat() * 0.4F + 1.5F);
-
- secondaryTarget.attackEntityFrom(MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.SHOCK), 4);
}
-
+
+ secondaryTarget.playSound(WizardrySounds.SPELL_SPARK, 1.0F,
+ world.rand.nextFloat() * 0.4F + 1.5F);
+
+ secondaryTarget.attackEntityFrom(
+ MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.SHOCK), 4);
}
- // The trap is destroyed once triggered.
- this.setDead();
+
}
+ // The trap is destroyed once triggered.
+ this.setDead();
}
}
- //}
-
- if(this.worldObj.isRemote && this.rand.nextInt(15) == 0){
- double radius = 0.5 + rand.nextDouble()*0.3;
- double angle = rand.nextDouble()*Math.PI*2;
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, worldObj, this.posX + radius*Math.cos(angle), this.posY + 0.1, this.posZ + radius*Math.sin(angle), 0, 0, 0, 3);
+ }
+ // }
+
+ if(this.world.isRemote && this.rand.nextInt(15) == 0){
+ double radius = 0.5 + rand.nextDouble() * 0.3;
+ double angle = rand.nextDouble() * Math.PI * 2;
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, world, this.posX + radius * Math.cos(angle),
+ this.posY + 0.1, this.posZ + radius * Math.sin(angle), 0, 0, 0, 3);
}
}
@Override
- protected void entityInit() {
-
+ protected void entityInit(){
+
}
-
+
/**
- * Return whether this entity should be rendered as on fire.
- */
- public boolean canRenderOnFire()
- {
- return false;
- }
+ * Return whether this entity should be rendered as on fire.
+ */
+ public boolean canRenderOnFire(){
+ return false;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityMagicConstruct.java b/src/main/java/electroblob/wizardry/entity/construct/EntityMagicConstruct.java
index e477f9d5..36e93b46 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityMagicConstruct.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityMagicConstruct.java
@@ -12,40 +12,45 @@ import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData;
/**
- * This class is for all inanimate magical constructs which are not projectiles. It was made from scratch
- * to provide a unifying superclass for black hole, blizzard, tornado and a few others which all share some
- * characteristics. The EntityPlayer instance of the caster, the lifetime and the damage multiplier are stored
- * and synced here.
+ * This class is for all inanimate magical constructs which are not projectiles. It was made from scratch to provide a
+ * unifying superclass for black hole, blizzard, tornado and a few others which all share some characteristics. The
+ * EntityPlayer instance of the caster, the lifetime and the damage multiplier are stored and synced here.
*
- * When extending this class, override both constructors. Generally speaking, subclasses of this class are areas
- * of effect which deal damage or apply effects over time.
+ * When extending this class, override both constructors. Generally speaking, subclasses of this class are areas of
+ * effect which deal damage or apply effects over time.
+ *
* @since Wizardry 1.0
*/
public abstract class EntityMagicConstruct extends Entity implements IEntityAdditionalSpawnData {
-
+
/** The entity that created this construct */
private WeakReference caster;
-
- /** The UUID of the caster. Note that this is only for loading purposes; during normal updates
- * the actual entity instance is stored (so that getEntityByUUID is not called constantly),
- * so this will not always be synced (this is why it is private). */
+
+ /**
+ * The UUID of the caster. Note that this is only for loading purposes; during normal updates the actual entity
+ * instance is stored (so that getEntityByUUID is not called constantly), so this will not always be synced (this is
+ * why it is private).
+ */
private UUID casterUUID;
-
- /** The time in ticks this magical construct lasts for; defaults to 600 (30 seconds). If this is -1 the construct
- * doesn't despawn. */
+
+ /**
+ * The time in ticks this magical construct lasts for; defaults to 600 (30 seconds). If this is -1 the construct
+ * doesn't despawn.
+ */
public int lifetime = 600;
-
+
/** The damage multiplier for this construct, determined by the wand with which it was cast. */
public float damageMultiplier = 1.0f;
-
- public EntityMagicConstruct(World par1World) {
+
+ public EntityMagicConstruct(World par1World){
super(par1World);
this.height = 1.0f;
this.width = 1.0f;
this.noClip = true;
}
-
- public EntityMagicConstruct(World world, double x, double y, double z, EntityLivingBase caster, int lifetime, float damageMultiplier) {
+
+ public EntityMagicConstruct(World world, double x, double y, double z, EntityLivingBase caster, int lifetime,
+ float damageMultiplier){
super(world);
this.height = 1.0f;
this.width = 1.0f;
@@ -55,64 +60,64 @@ public abstract class EntityMagicConstruct extends Entity implements IEntityAddi
this.lifetime = lifetime;
this.damageMultiplier = damageMultiplier;
}
-
+
// Overrides the original to stop the entity moving when it intersects stuff. The default arrow does this to allow
- // it to stick in blocks.
+ // it to stick in blocks.
@Override
- public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport)
- {
- this.setPosition(x, y, z);
- this.setRotation(yaw, pitch);
- }
-
+ public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch,
+ int posRotationIncrements, boolean teleport){
+ this.setPosition(x, y, z);
+ this.setRotation(yaw, pitch);
+ }
+
public void onUpdate(){
-
+
if(this.getCaster() == null && this.casterUUID != null){
- Entity entity = WizardryUtilities.getEntityByUUID(worldObj, casterUUID);
+ Entity entity = WizardryUtilities.getEntityByUUID(world, casterUUID);
if(entity instanceof EntityLivingBase){
this.caster = new WeakReference((EntityLivingBase)entity);
}
}
-
+
if(this.ticksExisted > lifetime && lifetime != -1){
this.despawn();
}
-
+
super.onUpdate();
-
+
}
-
+
/**
- * Defaults to just setDead() in EntityMagicConstruct, but is provided to allow subclasses to override this
- * e.g. bubble uses it to dismount the entity inside it and play the 'pop' sound before calling super(). You
- * should always call super() when overriding this method, in case it changes. There is no need, therefore, to
- * call setDead() when overriding.
+ * Defaults to just setDead() in EntityMagicConstruct, but is provided to allow subclasses to override this e.g.
+ * bubble uses it to dismount the entity inside it and play the 'pop' sound before calling super(). You should
+ * always call super() when overriding this method, in case it changes. There is no need, therefore, to call
+ * setDead() when overriding.
*/
public void despawn(){
this.setDead();
}
@Override
- protected void entityInit() {
-
+ protected void entityInit(){
+
}
@Override
protected void readEntityFromNBT(NBTTagCompound nbttagcompound){
casterUUID = nbttagcompound.getUniqueId("casterUUID");
- lifetime = nbttagcompound.getInteger("lifetime");
- damageMultiplier = nbttagcompound.getFloat("damageMultiplier");
+ lifetime = nbttagcompound.getInteger("lifetime");
+ damageMultiplier = nbttagcompound.getFloat("damageMultiplier");
}
@Override
protected void writeEntityToNBT(NBTTagCompound nbttagcompound){
if(this.getCaster() != null){
- nbttagcompound.setUniqueId("casterUUID", this.getCaster().getUniqueID());
- }
+ nbttagcompound.setUniqueId("casterUUID", this.getCaster().getUniqueID());
+ }
nbttagcompound.setInteger("lifetime", lifetime);
nbttagcompound.setFloat("damageMultiplier", damageMultiplier);
}
-
+
@Override
public void writeSpawnData(ByteBuf data){
data.writeInt(lifetime);
@@ -124,14 +129,14 @@ public abstract class EntityMagicConstruct extends Entity implements IEntityAddi
}
/**
- * Returns the EntityLivingBase that created this construct, or null if it no longer exists. Cases where the
- * entity may no longer exist are: entity died or was deleted, mob despawned, player logged out, entity teleported
- * to another dimension, or this construct simply had no caster in the first place.
+ * Returns the EntityLivingBase that created this construct, or null if it no longer exists. Cases where the entity
+ * may no longer exist are: entity died or was deleted, mob despawned, player logged out, entity teleported to
+ * another dimension, or this construct simply had no caster in the first place.
*/
- public EntityLivingBase getCaster() {
+ public EntityLivingBase getCaster(){
return caster == null ? null : caster.get();
}
-
+
/**
* Shorthand for {@link WizardryUtilities#isValidTarget(Entity, Entity)}, with the owner of this construct as the
* attacker. Also allows subclasses to override it if they wish to do so.
@@ -139,15 +144,14 @@ public abstract class EntityMagicConstruct extends Entity implements IEntityAddi
public boolean isValidTarget(Entity target){
return WizardryUtilities.isValidTarget(this.getCaster(), target);
}
-
+
@Override
- public boolean canRenderOnFire()
- {
- return false;
- }
-
+ public boolean canRenderOnFire(){
+ return false;
+ }
+
@Override
- public boolean isPushedByWater() {
+ public boolean isPushedByWater(){
return false;
}
}
diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityTornado.java b/src/main/java/electroblob/wizardry/entity/construct/EntityTornado.java
index 2e1625a9..ed3b3159 100644
--- a/src/main/java/electroblob/wizardry/entity/construct/EntityTornado.java
+++ b/src/main/java/electroblob/wizardry/entity/construct/EntityTornado.java
@@ -13,6 +13,7 @@ import io.netty.buffer.ByteBuf;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.MoverType;
import net.minecraft.entity.passive.EntityPig;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
@@ -26,14 +27,15 @@ public class EntityTornado extends EntityMagicConstruct {
private double velX, velZ;
- public EntityTornado(World world) {
+ public EntityTornado(World world){
super(world);
this.height = 8.0f;
this.width = 5.0f;
this.isImmuneToFire = false;
}
- public EntityTornado(World world, double x, double y, double z, EntityLivingBase caster, int lifetime, double velX, double velZ, float damageMultiplier) {
+ public EntityTornado(World world, double x, double y, double z, EntityLivingBase caster, int lifetime, double velX,
+ double velZ, float damageMultiplier){
super(world, x, y, z, caster, lifetime, damageMultiplier);
this.height = 8.0f;
this.width = 5.0f;
@@ -46,25 +48,26 @@ public class EntityTornado extends EntityMagicConstruct {
super.onUpdate();
- if(this.ticksExisted % 120 == 1 && worldObj.isRemote){
+ if(this.ticksExisted % 120 == 1 && world.isRemote){
// Repeat is false so that the sound fades out when the tornado does rather than stopping suddenly
Wizardry.proxy.playMovingSound(this, WizardrySounds.SPELL_LOOP_WIND, 1.0f, 1.0f, false);
}
-
- this.moveEntity(velX, motionY, velZ);
-
+
+ this.move(MoverType.SELF, velX, motionY, velZ);
+
BlockPos pos = new BlockPos(this);
- int y = WizardryUtilities.getNearestFloorLevelC(worldObj, pos.up(3), 5);
+ int y = WizardryUtilities.getNearestFloorLevelC(world, pos.up(3), 5);
pos = new BlockPos(pos.getX(), y, pos.getZ());
-
- if(this.worldObj.getBlockState(pos).getMaterial() == Material.LAVA){
+
+ if(this.world.getBlockState(pos).getMaterial() == Material.LAVA){
// Fire tornado!
this.setFire(5);
}
- if(!this.worldObj.isRemote){
+ if(!this.world.isRemote){
- List targets = WizardryUtilities.getEntitiesWithinRadius(4.0d, this.posX, this.posY, this.posZ, this.worldObj);
+ List targets = WizardryUtilities.getEntitiesWithinRadius(4.0d, this.posX, this.posY,
+ this.posZ, this.world);
for(EntityLivingBase target : targets){
@@ -72,23 +75,27 @@ public class EntityTornado extends EntityMagicConstruct {
double velY = target.motionY;
- double dx = this.posX-target.posX > 0? 0.5 - (this.posX-target.posX)/8 : -0.5 - (this.posX-target.posX)/8;
- double dz = this.posZ-target.posZ > 0? 0.5 - (this.posZ-target.posZ)/8 : -0.5 - (this.posZ-target.posZ)/8;
-
+ double dx = this.posX - target.posX > 0 ? 0.5 - (this.posX - target.posX) / 8
+ : -0.5 - (this.posX - target.posX) / 8;
+ double dz = this.posZ - target.posZ > 0 ? 0.5 - (this.posZ - target.posZ) / 8
+ : -0.5 - (this.posZ - target.posZ) / 8;
+
if(this.isBurning()){
target.setFire(4);
}
-
+
if(this.getCaster() != null){
- target.attackEntityFrom(MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.MAGIC), 1*damageMultiplier);
+ target.attackEntityFrom(
+ MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.MAGIC),
+ 1 * damageMultiplier);
}else{
- target.attackEntityFrom(DamageSource.magic, 1*damageMultiplier);
+ target.attackEntityFrom(DamageSource.MAGIC, 1 * damageMultiplier);
}
target.motionX = dx;
- target.motionY = velY+0.2;
+ target.motionY = velY + 0.2;
target.motionZ = dz;
-
+
// Player motion is handled on that player's client so needs packets
if(target instanceof EntityPlayerMP){
((EntityPlayerMP)target).connection.sendPacket(new SPacketEntityVelocity(target));
@@ -101,81 +108,85 @@ public class EntityTornado extends EntityMagicConstruct {
}
}
}else{
- for(int i=1; i<10; i++){
-
- double yPos = rand.nextDouble()*8;
-
+ for(int i = 1; i < 10; i++){
+
+ double yPos = rand.nextDouble() * 8;
+
int blockX = (int)this.posX - 2 + this.rand.nextInt(4);
int blockZ = (int)this.posZ - 2 + this.rand.nextInt(4);
-
- BlockPos pos1 = new BlockPos(blockX, this.posY+3, blockZ);
-
- int blockY = WizardryUtilities.getNearestFloorLevelC(worldObj, pos1, 5) - 1;
-
+
+ BlockPos pos1 = new BlockPos(blockX, this.posY + 3, blockZ);
+
+ int blockY = WizardryUtilities.getNearestFloorLevelC(world, pos1, 5) - 1;
+
pos1 = new BlockPos(pos1.getX(), blockY, pos1.getZ());
-
- IBlockState block = this.worldObj.getBlockState(pos1);
-
- // If the block it found was air or something it can't pick up, it makes a best guess based on the biome.
+
+ IBlockState block = this.world.getBlockState(pos1);
+
+ // If the block it found was air or something it can't pick up, it makes a best guess based on the
+ // biome.
if(!canTornadoPickUpBitsOf(block)){
- block = worldObj.getBiome(pos1).topBlock;
+ block = world.getBiome(pos1).topBlock;
}
-
- Wizardry.proxy.spawnTornadoParticle(worldObj, this.posX, this.posY + yPos, this.posZ, this.velX, this.velZ, yPos/3 + 0.5d, 100, block, pos1);
- Wizardry.proxy.spawnTornadoParticle(worldObj, this.posX, this.posY + yPos, this.posZ, this.velX, this.velZ, yPos/3 + 0.5d, 100, block, pos1);
-
+
+ Wizardry.proxy.spawnTornadoParticle(world, this.posX, this.posY + yPos, this.posZ, this.velX, this.velZ,
+ yPos / 3 + 0.5d, 100, block, pos1);
+ Wizardry.proxy.spawnTornadoParticle(world, this.posX, this.posY + yPos, this.posZ, this.velX, this.velZ,
+ yPos / 3 + 0.5d, 100, block, pos1);
+
// Sometimes spawns leaf particles if the block is leaves
if(block.getMaterial() == Material.LEAVES && this.rand.nextInt(3) == 0){
- double yPos1 = rand.nextDouble()*8;
- Wizardry.proxy.spawnParticle(WizardryParticleType.LEAF, worldObj, this.posX + (rand.nextDouble()*2-1)*(yPos1/3 + 0.5d), this.posY + yPos1, this.posZ + (rand.nextDouble()*2-1)*(yPos1/3 + 0.5d), 0, -0.05, 0, 40 + rand.nextInt(10));
+ double yPos1 = rand.nextDouble() * 8;
+ Wizardry.proxy.spawnParticle(WizardryParticleType.LEAF, world,
+ this.posX + (rand.nextDouble() * 2 - 1) * (yPos1 / 3 + 0.5d), this.posY + yPos1,
+ this.posZ + (rand.nextDouble() * 2 - 1) * (yPos1 / 3 + 0.5d), 0, -0.05, 0,
+ 40 + rand.nextInt(10));
}
-
+
// Sometimes spawns snow particles if the block is snow
- if(block.getMaterial() == Material.SNOW || block.getMaterial() == Material.CRAFTED_SNOW && this.rand.nextInt(3) == 0){
- double yPos1 = rand.nextDouble()*8;
- Wizardry.proxy.spawnParticle(WizardryParticleType.SNOW, worldObj, this.posX + (rand.nextDouble()*2-1)*(yPos1/3 + 0.5d), this.posY + yPos1, this.posZ + (rand.nextDouble()*2-1)*(yPos1/3 + 0.5d), 0, -0.02, 0, 40 + rand.nextInt(10));
+ if(block.getMaterial() == Material.SNOW
+ || block.getMaterial() == Material.CRAFTED_SNOW && this.rand.nextInt(3) == 0){
+ double yPos1 = rand.nextDouble() * 8;
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SNOW, world,
+ this.posX + (rand.nextDouble() * 2 - 1) * (yPos1 / 3 + 0.5d), this.posY + yPos1,
+ this.posZ + (rand.nextDouble() * 2 - 1) * (yPos1 / 3 + 0.5d), 0, -0.02, 0,
+ 40 + rand.nextInt(10));
}
}
}
}
-
+
private static boolean canTornadoPickUpBitsOf(IBlockState block){
Material material = block.getMaterial();
- return material == Material.CRAFTED_SNOW
- || material == Material.GROUND
- || material == Material.GRASS
- || material == Material.LAVA
- || material == Material.SAND
- || material == Material.SNOW
- || material == Material.WATER
- || material == Material.PLANTS
- || material == Material.LEAVES
+ return material == Material.CRAFTED_SNOW || material == Material.GROUND || material == Material.GRASS
+ || material == Material.LAVA || material == Material.SAND || material == Material.SNOW
+ || material == Material.WATER || material == Material.PLANTS || material == Material.LEAVES
|| material == Material.VINE;
}
@Override
- protected void readEntityFromNBT(NBTTagCompound nbttagcompound) {
+ protected void readEntityFromNBT(NBTTagCompound nbttagcompound){
super.readEntityFromNBT(nbttagcompound);
velX = nbttagcompound.getDouble("velX");
velZ = nbttagcompound.getDouble("velZ");
}
@Override
- protected void writeEntityToNBT(NBTTagCompound nbttagcompound) {
+ protected void writeEntityToNBT(NBTTagCompound nbttagcompound){
super.writeEntityToNBT(nbttagcompound);
nbttagcompound.setDouble("velX", velX);
nbttagcompound.setDouble("velZ", velZ);
}
@Override
- public void writeSpawnData(ByteBuf data) {
+ public void writeSpawnData(ByteBuf data){
super.writeSpawnData(data);
data.writeDouble(velX);
data.writeDouble(velZ);
}
@Override
- public void readSpawnData(ByteBuf data) {
+ public void readSpawnData(ByteBuf data){
super.readSpawnData(data);
this.velX = data.readDouble();
this.velZ = data.readDouble();
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityAIAttackSpell.java b/src/main/java/electroblob/wizardry/entity/living/EntityAIAttackSpell.java
index d6843a66..49cdae91 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityAIAttackSpell.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityAIAttackSpell.java
@@ -18,9 +18,11 @@ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
-/** Entity AI class for use by instances of {@link ISpellCaster}. This deals with pathing, the spell casting itself
- * and the attack cooldown. Also provides an automatic implementation of continuous spell casting using the methods
- * specified in {@code ISpellCaster}; all the entity class needs to do is implement those methods. */
+/**
+ * Entity AI class for use by instances of {@link ISpellCaster}. This deals with pathing, the spell casting itself and
+ * the attack cooldown. Also provides an automatic implementation of continuous spell casting using the methods
+ * specified in {@code ISpellCaster}; all the entity class needs to do is implement those methods.
+ */
public class EntityAIAttackSpell extends EntityAIBase {
/** The entity the AI instance has been applied to. */
@@ -29,14 +31,20 @@ public class EntityAIAttackSpell extends EntityAIBase {
private final ISpellCaster caster;
/** The tagret to be attacked. */
private EntityLivingBase target;
- /** Decremented each tick while greater than 0. When a spell is cast, this is set to that spell's cooldown plus
- * the base cooldown. */
+ /**
+ * Decremented each tick while greater than 0. When a spell is cast, this is set to that spell's cooldown plus the
+ * base cooldown.
+ */
private int cooldown;
- /** The number of ticks between the entity finding a new target and when it first starts attacking, and also the
- * amount that is added to the spell's cooldown between casting spells. */
+ /**
+ * The number of ticks between the entity finding a new target and when it first starts attacking, and also the
+ * amount that is added to the spell's cooldown between casting spells.
+ */
private final int baseCooldown;
- /** Decremented each tick while greater than 0. When a continuous spell is first cast, this is set to
- * the value of {@link EntityAIAttackSpell#continuousSpellDuration}. */
+ /**
+ * Decremented each tick while greater than 0. When a continuous spell is first cast, this is set to the value of
+ * {@link EntityAIAttackSpell#continuousSpellDuration}.
+ */
// I think that in this case this is only necessary on the server side. If any inconsistent behaviour
// occurs, look into syncing this as well.
private int continuousSpellTimer;
@@ -49,19 +57,22 @@ public class EntityAIAttackSpell extends EntityAIBase {
/**
* Creates a new spell attack AI with the given parameters.
+ *
* @param attacker The entity that that uses this AI.
* @param speed The speed that the entity should move when attacking. Only used when passed into the navigator.
* @param maxDistance The maximum distance the entity should be from its target.
- * @param baseCooldown The number of ticks between the entity finding a new target and when it first starts attacking,
- * and also the amount that is added to the cooldown of the spell that has just been cast.
+ * @param baseCooldown The number of ticks between the entity finding a new target and when it first starts
+ * attacking, and also the amount that is added to the cooldown of the spell that has just been cast.
* @param continuousSpellDuration The number of ticks that continuous spells will be cast for before cooling down.
*/
- public EntityAIAttackSpell(ISpellCaster attacker, double speed, float maxDistance, int baseCooldown, int continuousSpellDuration){
+ public EntityAIAttackSpell(ISpellCaster attacker, double speed, float maxDistance, int baseCooldown,
+ int continuousSpellDuration){
this.cooldown = -1;
if(!(attacker instanceof EntityLiving)){
- throw new IllegalArgumentException("Tried to create an EntityAICastSpell for an entity that isn't an EntityLiving");
+ throw new IllegalArgumentException(
+ "Tried to create an EntityAICastSpell for an entity that isn't an EntityLiving");
}else{
this.caster = attacker;
this.attacker = (EntityLiving)attacker;
@@ -102,8 +113,9 @@ public class EntityAIAttackSpell extends EntityAIBase {
private void setContinuousSpellAndNotify(Spell spell, SpellModifiers modifiers){
caster.setContinuousSpell(spell);
- WizardryPacketHandler.net.sendToAllAround(new PacketNPCCastSpell.Message(attacker.getEntityId(),
- target == null ? -1 : target.getEntityId(), EnumHand.MAIN_HAND, spell.id(), modifiers),
+ WizardryPacketHandler.net.sendToAllAround(
+ new PacketNPCCastSpell.Message(attacker.getEntityId(), target == null ? -1 : target.getEntityId(),
+ EnumHand.MAIN_HAND, spell.id(), modifiers),
// Particles are usually only visible from 16 blocks away, so 128 is more than far enough.
new TargetPoint(attacker.dimension, attacker.posX, attacker.posY, attacker.posZ, 128));
}
@@ -113,7 +125,8 @@ public class EntityAIAttackSpell extends EntityAIBase {
// Only executed server side.
- double distanceSq = this.attacker.getDistanceSq(this.target.posX, this.target.getEntityBoundingBox().minY, this.target.posZ);
+ double distanceSq = this.attacker.getDistanceSq(this.target.posX, this.target.getEntityBoundingBox().minY,
+ this.target.posZ);
boolean targetIsVisible = this.attacker.getEntitySenses().canSee(this.target);
if(targetIsVisible){
@@ -133,24 +146,25 @@ public class EntityAIAttackSpell extends EntityAIBase {
if(this.continuousSpellTimer > 0){
this.continuousSpellTimer--;
-
+
// If the target goes out of range or out of sight...
if(distanceSq > (double)this.maxAttackDistance || !targetIsVisible
- // ...or the spell is cancelled via events...
- || MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Tick(attacker, caster.getContinuousSpell(),
- caster.getModifiers(), Source.NPC, this.continuousSpellDuration - this.continuousSpellTimer))
+ // ...or the spell is cancelled via events...
+ || MinecraftForge.EVENT_BUS
+ .post(new SpellCastEvent.Tick(attacker, caster.getContinuousSpell(), caster.getModifiers(),
+ Source.NPC, this.continuousSpellDuration - this.continuousSpellTimer))
// ...or the spell no longer succeeds...
- || !caster.getContinuousSpell().cast(attacker.worldObj, attacker, EnumHand.MAIN_HAND,
+ || !caster.getContinuousSpell().cast(attacker.world, attacker, EnumHand.MAIN_HAND,
this.continuousSpellDuration - this.continuousSpellTimer, target, caster.getModifiers())
// ...or the time has elapsed...
|| this.continuousSpellTimer == 0){
-
+
// ...reset the continuous spell timer and start the cooldown.
this.continuousSpellTimer = 0;
setContinuousSpellAndNotify(Spells.none, new SpellModifiers());
this.cooldown = this.baseCooldown;
return;
-
+
}else if(this.continuousSpellDuration - this.continuousSpellTimer == 1){
// On the first tick, if the spell did succeed, fire SpellCastEvent.Post.
MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Post(attacker, caster.getContinuousSpell(),
@@ -170,7 +184,7 @@ public class EntityAIAttackSpell extends EntityAIBase {
if(spells.size() > 0){
- if(!attacker.worldObj.isRemote){
+ if(!attacker.world.isRemote){
// New way of choosing a spell; keeps trying until one works or all have been tried
@@ -178,7 +192,7 @@ public class EntityAIAttackSpell extends EntityAIBase {
while(!spells.isEmpty()){
- spell = spells.get(attacker.worldObj.rand.nextInt(spells.size()));
+ spell = spells.get(attacker.world.rand.nextInt(spells.size()));
SpellModifiers modifiers = caster.getModifiers();
@@ -198,16 +212,16 @@ public class EntityAIAttackSpell extends EntityAIBase {
this.cooldown = this.baseCooldown;
}
}
-
+
/** Attempts to cast the given spell (including event firing) and returns true if it succeeded. */
private boolean attemptCastSpell(Spell spell, SpellModifiers modifiers){
-
+
// If anything stops the spell working at this point, nothing else happens.
if(MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Pre(attacker, spell, modifiers, Source.NPC))){
return false;
}
-
- if(spell.cast(attacker.worldObj, attacker, EnumHand.MAIN_HAND, 0, target, modifiers)){
+
+ if(spell.cast(attacker.world, attacker, EnumHand.MAIN_HAND, 0, target, modifiers)){
if(spell.isContinuous){
// -1 because the spell has been cast once already!
@@ -215,24 +229,24 @@ public class EntityAIAttackSpell extends EntityAIBase {
setContinuousSpellAndNotify(spell, modifiers);
}else{
-
+
MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Post(attacker, spell, modifiers, Source.NPC));
-
+
// For now, the cooldown is just added to the constant base cooldown. I think this
// is a reasonable way of doing things; it's certainly better than before.
this.cooldown = this.baseCooldown + spell.cooldown;
if(spell.doesSpellRequirePacket()){
// Sends a packet to all players in dimension to tell them to spawn particles.
- IMessage msg = new PacketNPCCastSpell.Message(attacker.getEntityId(),
- target.getEntityId(), EnumHand.MAIN_HAND, spell.id(), modifiers);
- WizardryPacketHandler.net.sendToDimension(msg, attacker.worldObj.provider.getDimension());
+ IMessage msg = new PacketNPCCastSpell.Message(attacker.getEntityId(), target.getEntityId(),
+ EnumHand.MAIN_HAND, spell.id(), modifiers);
+ WizardryPacketHandler.net.sendToDimension(msg, attacker.world.provider.getDimension());
}
}
return true;
}
-
+
return false;
}
}
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityAISelectSpell.java b/src/main/java/electroblob/wizardry/entity/living/EntityAISelectSpell.java
index 286dc93c..8c2186ae 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityAISelectSpell.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityAISelectSpell.java
@@ -5,7 +5,7 @@ import net.minecraft.entity.ai.EntityAIBase;
public class EntityAISelectSpell extends EntityAIBase {
// TODO: Write this class
-
+
@Override
public boolean shouldExecute(){
return false;
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityBlazeMinion.java b/src/main/java/electroblob/wizardry/entity/living/EntityBlazeMinion.java
index 473f30b7..9dafa8fc 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityBlazeMinion.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityBlazeMinion.java
@@ -10,7 +10,6 @@ import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
import net.minecraft.entity.monster.EntityBlaze;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumHand;
import net.minecraft.util.EnumParticleTypes;
@@ -27,18 +26,41 @@ public class EntityBlazeMinion extends EntityBlaze implements ISummonedCreature
private UUID casterUUID;
// Setter + getter implementations
- @Override public int getLifetime(){ return lifetime; }
- @Override public void setLifetime(int lifetime){ this.lifetime = lifetime; }
- @Override public WeakReference getCasterReference(){ return casterReference; }
- @Override public void setCasterReference(WeakReference reference){ casterReference = reference; }
- @Override public UUID getCasterUUID() { return casterUUID; }
- @Override public void setCasterUUID(UUID uuid) { this.casterUUID = uuid; }
+ @Override
+ public int getLifetime(){
+ return lifetime;
+ }
+
+ @Override
+ public void setLifetime(int lifetime){
+ this.lifetime = lifetime;
+ }
+
+ @Override
+ public WeakReference getCasterReference(){
+ return casterReference;
+ }
+
+ @Override
+ public void setCasterReference(WeakReference reference){
+ casterReference = reference;
+ }
+
+ @Override
+ public UUID getCasterUUID(){
+ return casterUUID;
+ }
+
+ @Override
+ public void setCasterUUID(UUID uuid){
+ this.casterUUID = uuid;
+ }
/**
- * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't
- * matter because the client side entity immediately gets the lifetime value copied over to it by this class
- * anyway. When extending this class, you must override this constructor or Minecraft won't like it, but there's
- * no need to do anything inside it other than call super().
+ * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't matter
+ * because the client side entity immediately gets the lifetime value copied over to it by this class anyway. When
+ * extending this class, you must override this constructor or Minecraft won't like it, but there's no need to do
+ * anything inside it other than call super().
*/
public EntityBlazeMinion(World world){
super(world);
@@ -46,8 +68,8 @@ public class EntityBlazeMinion extends EntityBlaze implements ISummonedCreature
}
/**
- * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when
- * extending this class (be sure to call super()) so that AI and other things can be added.
+ * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when extending
+ * this class (be sure to call super()) so that AI and other things can be added.
*/
public EntityBlazeMinion(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
super(world);
@@ -56,21 +78,20 @@ public class EntityBlazeMinion extends EntityBlaze implements ISummonedCreature
this.experienceValue = 0;
this.lifetime = lifetime;
}
-
+
// EntityBlaze overrides
-
+
// This particular override is pretty standard: let the superclass handle basic AI like swimming, but replace its
// targeting system with one that targets hostile mobs and takes the ADS into account.
@Override
- protected void initEntityAI()
- {
+ protected void initEntityAI(){
super.initEntityAI();
this.targetTasks.taskEntries.clear();
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false));
- this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
- 0, false, true, this.getTargetSelector()));
- }
-
+ this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
+ 0, false, true, this.getTargetSelector()));
+ }
+
// Implementations
@Override
@@ -93,27 +114,30 @@ public class EntityBlazeMinion extends EntityBlaze implements ISummonedCreature
public void onDespawn(){
this.spawnParticleEffect();
}
-
- /** Normally this would be private, but since this class has subclasses with different spawn/despawn particle
- * effects, it makes sense to have them override this rather than both onSpawn() and onDespawn(). */
+
+ /**
+ * Normally this would be private, but since this class has subclasses with different spawn/despawn particle
+ * effects, it makes sense to have them override this rather than both onSpawn() and onDespawn().
+ */
protected void spawnParticleEffect(){
- if(this.worldObj.isRemote){
- for(int i=0;i<15;i++){
- this.worldObj.spawnParticle(EnumParticleTypes.FLAME, this.posX + this.rand.nextFloat(), this.posY + 1 + this.rand.nextFloat(), this.posZ + this.rand.nextFloat(), 0, 0, 0);
+ if(this.world.isRemote){
+ for(int i = 0; i < 15; i++){
+ this.world.spawnParticle(EnumParticleTypes.FLAME, this.posX + this.rand.nextFloat(),
+ this.posY + 1 + this.rand.nextFloat(), this.posZ + this.rand.nextFloat(), 0, 0, 0);
}
- }
+ }
}
@Override
- public boolean hasParticleEffect() {
+ public boolean hasParticleEffect(){
return false;
}
@Override
- protected boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack) {
+ protected boolean processInteract(EntityPlayer player, EnumHand hand){
// In this case, the delegate method determines whether super is called.
// Rather handily, we can make use of Java's 'stop as soon as you find true' method of evaluating OR statements.
- return this.interactDelegate(player, hand, stack) || super.processInteract(player, hand, stack);
+ return this.interactDelegate(player, hand) || super.processInteract(player, hand);
}
@Override
@@ -130,12 +154,31 @@ public class EntityBlazeMinion extends EntityBlaze implements ISummonedCreature
// Recommended overrides
- @Override protected int getExperiencePoints(EntityPlayer player){ return 0; }
- @Override protected boolean canDropLoot(){ return false; }
- @Override protected Item getDropItem(){ return null; }
- @Override protected ResourceLocation getLootTable(){ return null; }
+ @Override
+ protected int getExperiencePoints(EntityPlayer player){
+ return 0;
+ }
+
+ @Override
+ protected boolean canDropLoot(){
+ return false;
+ }
+
+ @Override
+ protected Item getDropItem(){
+ return null;
+ }
+
+ @Override
+ protected ResourceLocation getLootTable(){
+ return null;
+ }
+
// This vanilla method has nothing to do with the custom despawn() method.
- @Override protected boolean canDespawn(){ return false; }
+ @Override
+ protected boolean canDespawn(){
+ return false;
+ }
@Override
public boolean canAttackClass(Class extends EntityLivingBase> entityType){
@@ -145,7 +188,7 @@ public class EntityBlazeMinion extends EntityBlaze implements ISummonedCreature
@Override
public ITextComponent getDisplayName(){
if(getCaster() != null){
- return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
+ return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
new TextComponentTranslation("entity." + this.getEntityString() + ".name"));
}else{
return super.getDisplayName();
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityDecoy.java b/src/main/java/electroblob/wizardry/entity/living/EntityDecoy.java
index f4d9a423..dfe9c44f 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityDecoy.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityDecoy.java
@@ -17,61 +17,61 @@ import net.minecraft.util.text.ITextComponent;
import net.minecraft.world.World;
public class EntityDecoy extends EntitySummonedCreature {
-
+
public EntityDecoy(World world){
super(world);
}
- public EntityDecoy(World world, double x, double y, double z, EntityLivingBase caster, int lifetime) {
+ public EntityDecoy(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
super(world, x, y, z, caster, lifetime);
- this.setAlwaysRenderNameTag(caster instanceof EntityPlayer);
+ this.setAlwaysRenderNameTag(caster instanceof EntityPlayer);
}
-
+
@Override
- protected void initEntityAI() {
+ protected void initEntityAI(){
// Decoys just wander around aimlessly, watching anything living.
this.tasks.addTask(0, new EntityAISwimming(this));
- this.tasks.addTask(1, new EntityAIWander(this, 1.0D));
- this.tasks.addTask(2, new EntityAIWatchClosest(this, EntityLivingBase.class, 6.0F));
- this.tasks.addTask(3, new EntityAILookIdle(this));
+ this.tasks.addTask(1, new EntityAIWander(this, 1.0D));
+ this.tasks.addTask(2, new EntityAIWatchClosest(this, EntityLivingBase.class, 6.0F));
+ this.tasks.addTask(3, new EntityAILookIdle(this));
}
-
+
@Override
public void onDespawn(){
super.onDespawn();
- for(int i=0; i<20; i++){
- Wizardry.proxy.spawnParticle(WizardryParticleType.DUST, worldObj, this.posX + (this.rand.nextDouble()-0.5)*this.width,
- this.getEntityBoundingBox().minY + this.rand.nextDouble()*this.height, this.posZ + (this.rand.nextDouble()-0.5)*this.width,
- 0, 0, 0, 40, 0.2f, 1.0f, 0.8f);
+ for(int i = 0; i < 20; i++){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.DUST, world,
+ this.posX + (this.rand.nextDouble() - 0.5) * this.width,
+ this.getEntityBoundingBox().minY + this.rand.nextDouble() * this.height,
+ this.posZ + (this.rand.nextDouble() - 0.5) * this.width, 0, 0, 0, 40, 0.2f, 1.0f, 0.8f);
}
}
-
+
@Override
public boolean isEntityInvulnerable(DamageSource source){
return true;
}
-
+
@Override
public boolean isSneaking(){
return false;
}
-
+
@Override
- public void onUpdate() {
+ public void onUpdate(){
super.onUpdate();
if(this.getCaster() == null || this.getCaster().isDead){
this.setDead();
this.onDespawn();
}
}
-
+
@Override
- protected void applyEntityAttributes()
- {
+ protected void applyEntityAttributes(){
super.applyEntityAttributes();
this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D);
}
-
+
@Override
public ITextComponent getDisplayName(){
if(getCaster() instanceof EntityPlayer){
@@ -87,7 +87,7 @@ public class EntityDecoy extends EntitySummonedCreature {
}
@Override
- public boolean hasRangedAttack() {
+ public boolean hasRangedAttack(){
return false;
}
@@ -101,7 +101,8 @@ public class EntityDecoy extends EntitySummonedCreature {
public void readSpawnData(ByteBuf data){
super.readSpawnData(data);
if(!data.isReadable()) return;
- this.setCasterReference(new WeakReference((EntityLivingBase)this.worldObj.getEntityByID(data.readInt())));
+ this.setCasterReference(
+ new WeakReference((EntityLivingBase)this.world.getEntityByID(data.readInt())));
}
}
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityEvilWizard.java b/src/main/java/electroblob/wizardry/entity/living/EntityEvilWizard.java
index a6fe6eb5..dcd5675c 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityEvilWizard.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityEvilWizard.java
@@ -66,9 +66,11 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
protected Predicate targetSelector;
/** Data parameter for the cooldown time for wizards healing themselves. */
- private static final DataParameter HEAL_COOLDOWN = EntityDataManager.createKey(EntityEvilWizard.class, DataSerializers.VARINT);
+ private static final DataParameter HEAL_COOLDOWN = EntityDataManager.createKey(EntityEvilWizard.class,
+ DataSerializers.VARINT);
/** Data parameter for the wizard's element. */
- private static final DataParameter ELEMENT = EntityDataManager.createKey(EntityEvilWizard.class, DataSerializers.VARINT);
+ private static final DataParameter ELEMENT = EntityDataManager.createKey(EntityEvilWizard.class,
+ DataSerializers.VARINT);
/** The resource location for the evil wizard's loot table. */
private static final ResourceLocation LOOT_TABLE = new ResourceLocation(Wizardry.MODID, "entities/evil_wizard");
@@ -109,14 +111,18 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
public boolean apply(Entity entity){
// If the target is valid and not invisible...
- if(entity != null && !entity.isInvisible() && WizardryUtilities.isValidTarget(EntityEvilWizard.this, entity)){
+ if(entity != null && !entity.isInvisible()
+ && WizardryUtilities.isValidTarget(EntityEvilWizard.this, entity)){
- //... and is a player, a summoned creature, another (non-evil) wizard ...
- if(entity instanceof EntityPlayer || (entity instanceof ISummonedCreature || entity instanceof EntityWizard
- // ... or in the whitelist ...
- || Arrays.asList(Wizardry.settings.summonedCreatureTargetsWhitelist).contains(EntityList.getEntityString(entity).toLowerCase(Locale.ROOT)))
- // ... and isn't in the blacklist ...
- && !Arrays.asList(Wizardry.settings.summonedCreatureTargetsBlacklist).contains(EntityList.getEntityString(entity).toLowerCase(Locale.ROOT))){
+ // ... and is a player, a summoned creature, another (non-evil) wizard ...
+ if(entity instanceof EntityPlayer
+ || (entity instanceof ISummonedCreature || entity instanceof EntityWizard
+ // ... or in the whitelist ...
+ || Arrays.asList(Wizardry.settings.summonedCreatureTargetsWhitelist)
+ .contains(EntityList.getEntityString(entity).toLowerCase(Locale.ROOT)))
+ // ... and isn't in the blacklist ...
+ && !Arrays.asList(Wizardry.settings.summonedCreatureTargetsBlacklist)
+ .contains(EntityList.getEntityString(entity).toLowerCase(Locale.ROOT))){
// ... it can be attacked.
return true;
}
@@ -125,15 +131,14 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
return false;
}
};
-
+
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
this.targetTasks.addTask(0, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
0, false, true, this.targetSelector));
}
@Override
- protected void applyEntityAttributes()
- {
+ protected void applyEntityAttributes(){
super.applyEntityAttributes();
this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5D);
this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(30);
@@ -186,7 +191,8 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
// affected with arcane jammer and healCooldown == 0, whilst the wizard didn't actually heal or play the sound,
// the particles still spawned, and since healCooldown wasn't reset they spawned every tick until the arcane
// jammer wore off.
- if(healCooldown == 0 && this.getHealth() < this.getMaxHealth() && this.getHealth() > 0 && !this.isPotionActive(WizardryPotions.arcane_jammer)){
+ if(healCooldown == 0 && this.getHealth() < this.getMaxHealth() && this.getHealth() > 0
+ && !this.isPotionActive(WizardryPotions.arcane_jammer)){
// Healer wizards use greater heal.
this.heal(this.getElement() == Element.HEALING ? 8 : 4);
@@ -196,13 +202,15 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
}else if(healCooldown == -1 && this.deathTime == 0){
// Heal particles
- if(worldObj.isRemote){
- for(int i=0; i<10; i++){
- double d0 = (double)((float)this.posX + rand.nextFloat()*2 - 1.0F);
- // Apparently the client side spawns the particles 1 block higher than it should... hence the - 0.5F.
+ if(world.isRemote){
+ for(int i = 0; i < 10; i++){
+ double d0 = (double)((float)this.posX + rand.nextFloat() * 2 - 1.0F);
+ // Apparently the client side spawns the particles 1 block higher than it should... hence the -
+ // 0.5F.
double d1 = (double)((float)this.posY - 0.5F + rand.nextFloat());
- double d2 = (double)((float)this.posZ + rand.nextFloat()*2 - 1.0F);
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, worldObj, d0, d1, d2, 0, 0.1F, 0, 48 + rand.nextInt(12), 1.0f, 1.0f, 0.3f);
+ double d2 = (double)((float)this.posZ + rand.nextFloat() * 2 - 1.0F);
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world, d0, d1, d2, 0, 0.1F, 0,
+ 48 + rand.nextInt(12), 1.0f, 1.0f, 0.3f);
}
}else{
if(this.getHealth() < 10){
@@ -221,15 +229,19 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
}
@Override
- protected boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack){
+ protected boolean processInteract(EntityPlayer player, EnumHand hand){
+
+ ItemStack stack = player.getHeldItem(hand);
// Debugging
- //player.addChatComponentMessage(new TextComponentTranslation("wizard.debug", Spell.get(spells[1]).getDisplayName(), Spell.get(spells[2]).getDisplayName(), Spell.get(spells[3]).getDisplayName()));
+ // player.addChatComponentMessage(new TextComponentTranslation("wizard.debug",
+ // Spell.get(spells[1]).getDisplayName(), Spell.get(spells[2]).getDisplayName(),
+ // Spell.get(spells[3]).getDisplayName()));
// When right-clicked with a spell book in creative, sets one of the spells to that spell
- if(player.capabilities.isCreativeMode && stack != null && stack.getItem() instanceof ItemSpellBook){
+ if(player.capabilities.isCreativeMode && stack.getItem() instanceof ItemSpellBook){
if(this.spells.size() >= 4 && Spell.get(stack.getItemDamage()).canBeCastByNPCs()){
- this.spells.set(rand.nextInt(3)+1, Spell.get(stack.getItemDamage()));
+ this.spells.set(rand.nextInt(3) + 1, Spell.get(stack.getItemDamage()));
return true;
}
}
@@ -251,7 +263,7 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
super.readEntityFromNBT(nbt);
this.setElement(Element.values()[nbt.getInteger("element")]);
this.textureIndex = nbt.getInteger("skin");
- this.spells = (List) WizardryUtilities.NBTToList(nbt.getTagList("spells", NBT.TAG_INT),
+ this.spells = (List)WizardryUtilities.NBTToList(nbt.getTagList("spells", NBT.TAG_INT),
(NBTTagInt tag) -> Spell.get(tag.getInt()));
this.hasTower = nbt.getBoolean("hasTower");
}
@@ -261,26 +273,24 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
// Evil wizards can only despawn if they don't have a tower (i.e. if they spawned naturally at night)
return !this.hasTower;
}
-
+
@Override
protected float getSoundPitch(){
return (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 0.6F;
}
@Override
- protected SoundEvent getAmbientSound() {
+ protected SoundEvent getAmbientSound(){
return SoundEvents.ENTITY_WITCH_AMBIENT;
}
@Override
- protected SoundEvent getHurtSound()
- {
+ protected SoundEvent getHurtSound(){
return SoundEvents.ENTITY_WITCH_HURT;
}
@Override
- protected SoundEvent getDeathSound()
- {
+ protected SoundEvent getDeathSound(){
return SoundEvents.ENTITY_WITCH_DEATH;
}
@@ -292,15 +302,17 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
// Drops 3-5 crystals without looting bonuses
int j = 3 + this.rand.nextInt(3) + this.rand.nextInt(1 + lootingLevel);
- for(int k=0; k 0 && rand.nextInt(100) - lootingLevel < 5) this.entityDropItem(new ItemStack(WizardryItems.spell_book, 1, this.spells.get(1 + rand.nextInt(this.spells.size() - 1)).id()), 0);
+ if(this.spells.size() > 0 && rand.nextInt(100) - lootingLevel < 5)
+ this.entityDropItem(new ItemStack(WizardryItems.spell_book, 1,
+ this.spells.get(1 + rand.nextInt(this.spells.size() - 1)).id()), 0);
}
-
+
@Override
protected ResourceLocation getLootTable(){
return LOOT_TABLE;
@@ -336,11 +348,12 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
}
// Default chance is 0.085f, for reference.
- for(EntityEquipmentSlot slot : EntityEquipmentSlot.values()) this.setDropChance(slot, 0.0f);
+ for(EntityEquipmentSlot slot : EntityEquipmentSlot.values())
+ this.setDropChance(slot, 0.0f);
// All wizards know magic missile, even if it is disabled.
spells.add(Spells.magic_missile);
-
+
Tier maxTier = EntityWizard.populateSpells(spells, element, 3, rand);
// Now done after the spells so it can take the tier into account. For evil wizards this is slightly different;
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityIceGiant.java b/src/main/java/electroblob/wizardry/entity/living/EntityIceGiant.java
index 18d18e39..a3a44856 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityIceGiant.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityIceGiant.java
@@ -19,7 +19,6 @@ import net.minecraft.entity.monster.EntityIronGolem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.EnumHand;
@@ -37,58 +36,91 @@ public class EntityIceGiant extends EntityIronGolem implements ISummonedCreature
private UUID casterUUID;
// Setter + getter implementations
- @Override public int getLifetime(){ return lifetime; }
- @Override public void setLifetime(int lifetime){ this.lifetime = lifetime; }
- @Override public WeakReference getCasterReference(){ return casterReference; }
- @Override public void setCasterReference(WeakReference reference){ casterReference = reference; }
- @Override public UUID getCasterUUID() { return casterUUID; }
- @Override public void setCasterUUID(UUID uuid) { this.casterUUID = uuid; }
+ @Override
+ public int getLifetime(){
+ return lifetime;
+ }
+
+ @Override
+ public void setLifetime(int lifetime){
+ this.lifetime = lifetime;
+ }
+
+ @Override
+ public WeakReference getCasterReference(){
+ return casterReference;
+ }
+
+ @Override
+ public void setCasterReference(WeakReference reference){
+ casterReference = reference;
+ }
+
+ @Override
+ public UUID getCasterUUID(){
+ return casterUUID;
+ }
+
+ @Override
+ public void setCasterUUID(UUID uuid){
+ this.casterUUID = uuid;
+ }
/**
- * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't
- * matter because the client side entity immediately gets the lifetime value copied over to it by this class
- * anyway. When extending this class, you must override this constructor or Minecraft won't like it, but there's
- * no need to do anything inside it other than call super().
+ * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't matter
+ * because the client side entity immediately gets the lifetime value copied over to it by this class anyway. When
+ * extending this class, you must override this constructor or Minecraft won't like it, but there's no need to do
+ * anything inside it other than call super().
*/
public EntityIceGiant(World world){
super(world);
- this.setSize(1.4F, 2.9F);
+ this.setSize(1.4F, 2.9F);
this.experienceValue = 0;
}
/**
- * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when
- * extending this class (be sure to call super()) so that AI and other things can be added.
+ * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when extending
+ * this class (be sure to call super()) so that AI and other things can be added.
*/
public EntityIceGiant(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
super(world);
- this.setSize(1.4F, 2.9F);
+ this.setSize(1.4F, 2.9F);
this.setPosition(x, y, z);
this.casterReference = new WeakReference(caster);
this.experienceValue = 0;
this.lifetime = lifetime;
}
-
+
@Override
protected void initEntityAI(){
this.getNavigator().getNodeProcessor().setCanSwim(false);
- this.tasks.addTask(1, new EntityAIAttackMelee(this, 1.0D, true));
- this.tasks.addTask(2, new EntityAIMoveTowardsTarget(this, 0.9D, 32.0F));
- //this.tasks.addTask(4, new EntityAIMoveTowardsRestriction(this, 1.0D));
- //this.tasks.addTask(5, new EntityAIWander(this, 0.6D));
- this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F));
- this.tasks.addTask(7, new EntityAILookIdle(this));
- this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false));
- this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
- 0, false, true, this.getTargetSelector()));
+ this.tasks.addTask(1, new EntityAIAttackMelee(this, 1.0D, true));
+ this.tasks.addTask(2, new EntityAIMoveTowardsTarget(this, 0.9D, 32.0F));
+ // this.tasks.addTask(4, new EntityAIMoveTowardsRestriction(this, 1.0D));
+ // this.tasks.addTask(5, new EntityAIWander(this, 0.6D));
+ this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F));
+ this.tasks.addTask(7, new EntityAILookIdle(this));
+ this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false));
+ this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
+ 0, false, true, this.getTargetSelector()));
}
-
+
// EntityIronGolem overrides
-
- @Override protected void updateAITasks(){} // Disables home-checking
- @Override public Village getVillage(){ return null; }
- @Override public int getHoldRoseTick(){ return 0; }
-
+
+ @Override
+ protected void updateAITasks(){
+ } // Disables home-checking
+
+ @Override
+ public Village getVillage(){
+ return null;
+ }
+
+ @Override
+ public int getHoldRoseTick(){
+ return 0;
+ }
+
// Implementations
@Override
@@ -103,53 +135,59 @@ public class EntityIceGiant extends EntityIronGolem implements ISummonedCreature
}
@Override
- public void onSpawn(){}
+ public void onSpawn(){
+ }
@Override
public void onDespawn(){
this.playSound(WizardrySounds.SPELL_FREEZE, 1.0f, 1.0f);
- if(this.worldObj.isRemote){
- for(int i=0; i<30; i++){
- float brightness = 0.5f + (rand.nextFloat()/2);
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, this.worldObj, this.posX-1 + rand.nextDouble()*2, this.posY+ rand.nextDouble()*3, this.posZ-1 + rand.nextDouble()*2, 0, -0.02, 0, 12 + rand.nextInt(8), brightness, brightness + 0.1f, 1.0f);
- }
- }
+ if(this.world.isRemote){
+ for(int i = 0; i < 30; i++){
+ float brightness = 0.5f + (rand.nextFloat() / 2);
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, this.world,
+ this.posX - 1 + rand.nextDouble() * 2, this.posY + rand.nextDouble() * 3,
+ this.posZ - 1 + rand.nextDouble() * 2, 0, -0.02, 0, 12 + rand.nextInt(8), brightness,
+ brightness + 0.1f, 1.0f);
+ }
+ }
+ }
+
+ @Override
+ public void onLivingUpdate(){
+
+ super.onLivingUpdate();
+
+ if(this.world.isRemote){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SNOW, this.world, this.posX - 1 + rand.nextDouble() * 2,
+ this.posY + rand.nextDouble() * 3, this.posZ - 1 + rand.nextDouble() * 2, 0, -0.02, 0,
+ 40 + rand.nextInt(10));
+ }
}
- @Override
- public void onLivingUpdate(){
-
- super.onLivingUpdate();
-
- if(this.worldObj.isRemote){
- Wizardry.proxy.spawnParticle(WizardryParticleType.SNOW, this.worldObj, this.posX-1 + rand.nextDouble()*2, this.posY+ rand.nextDouble()*3, this.posZ-1 + rand.nextDouble()*2, 0, -0.02, 0, 40 + rand.nextInt(10));
- }
- }
-
@Override
public void onSuccessfulAttack(EntityLivingBase target){
-
- target.motionY += 0.2;
- target.motionX += this.getLookVec().xCoord*0.2;
- target.motionZ += this.getLookVec().xCoord*0.2;
-
- target.addPotionEffect(new PotionEffect(WizardryPotions.frost, 300, 0));
-
- this.applyEnchantments(this, target);
- this.playSound(SoundEvents.ENTITY_IRONGOLEM_ATTACK, 1.0F, 1.0F);
+ target.motionY += 0.2;
+ target.motionX += this.getLookVec().xCoord * 0.2;
+ target.motionZ += this.getLookVec().xCoord * 0.2;
+
+ target.addPotionEffect(new PotionEffect(WizardryPotions.frost, 300, 0));
+
+ this.applyEnchantments(this, target);
+
+ this.playSound(SoundEvents.ENTITY_IRONGOLEM_ATTACK, 1.0F, 1.0F);
}
@Override
- public boolean hasParticleEffect() {
+ public boolean hasParticleEffect(){
return false;
}
@Override
- protected boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack) {
+ protected boolean processInteract(EntityPlayer player, EnumHand hand){
// In this case, the delegate method determines whether super is called.
// Rather handily, we can make use of Java's short-circuiting method of evaluating OR statements.
- return this.interactDelegate(player, hand, stack) || super.processInteract(player, hand, stack);
+ return this.interactDelegate(player, hand) || super.processInteract(player, hand);
}
@Override
@@ -166,13 +204,36 @@ public class EntityIceGiant extends EntityIronGolem implements ISummonedCreature
// Recommended overrides
- @Override protected int getExperiencePoints(EntityPlayer player){ return 0; }
- @Override protected boolean canDropLoot(){ return false; }
- @Override protected Item getDropItem(){ return null; }
- @Override protected ResourceLocation getLootTable(){ return null; }
- @Override public boolean canPickUpLoot(){ return false; }
+ @Override
+ protected int getExperiencePoints(EntityPlayer player){
+ return 0;
+ }
+
+ @Override
+ protected boolean canDropLoot(){
+ return false;
+ }
+
+ @Override
+ protected Item getDropItem(){
+ return null;
+ }
+
+ @Override
+ protected ResourceLocation getLootTable(){
+ return null;
+ }
+
+ @Override
+ public boolean canPickUpLoot(){
+ return false;
+ }
+
// This vanilla method has nothing to do with the custom onDespawn() method.
- @Override protected boolean canDespawn(){ return false; }
+ @Override
+ protected boolean canDespawn(){
+ return false;
+ }
@Override
public boolean canAttackClass(Class extends EntityLivingBase> entityType){
@@ -183,7 +244,7 @@ public class EntityIceGiant extends EntityIronGolem implements ISummonedCreature
@Override
public ITextComponent getDisplayName(){
if(getCaster() != null){
- return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
+ return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
new TextComponentTranslation("entity." + this.getEntityString() + ".name"));
}else{
return super.getDisplayName();
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityIceWraith.java b/src/main/java/electroblob/wizardry/entity/living/EntityIceWraith.java
index fa89a1d0..e9f61732 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityIceWraith.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityIceWraith.java
@@ -33,264 +33,243 @@ public class EntityIceWraith extends EntityBlazeMinion {
super(world, x, y, z, caster, lifetime);
this.isImmuneToFire = false;
}
-
+
@Override
protected void initEntityAI(){
super.initEntityAI();
this.tasks.taskEntries.clear();
this.tasks.addTask(4, new AIIceShardAttack(this));
- this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D));
- this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
- this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
- this.tasks.addTask(8, new EntityAILookIdle(this));
+ this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D));
+ this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
+ this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
+ this.tasks.addTask(8, new EntityAILookIdle(this));
}
@Override
- protected void spawnParticleEffect() {
- if(this.worldObj.isRemote){
- for(int i=0;i<15;i++){
- float brightness = 0.5f + (rand.nextFloat()/2);
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, worldObj, this.posX - 0.5d + rand.nextDouble(), this.posY + this.height/2 - 0.5d + rand.nextDouble(), this.posZ - 0.5d + rand.nextDouble(), 0, 0.05f, 0, 20 + rand.nextInt(10), brightness, brightness + 0.1f, 1.0f);
+ protected void spawnParticleEffect(){
+ if(this.world.isRemote){
+ for(int i = 0; i < 15; i++){
+ float brightness = 0.5f + (rand.nextFloat() / 2);
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world, this.posX - 0.5d + rand.nextDouble(),
+ this.posY + this.height / 2 - 0.5d + rand.nextDouble(), this.posZ - 0.5d + rand.nextDouble(), 0,
+ 0.05f, 0, 20 + rand.nextInt(10), brightness, brightness + 0.1f, 1.0f);
}
}
}
@Override
public void onLivingUpdate(){
-
+
if(!this.onGround && this.motionY < 0.0D){
- this.motionY *= 0.6D;
- }
-
- if(this.rand.nextInt(24) == 0){
- this.playSound(WizardrySounds.SPELL_LOOP_WIND, 0.3F + this.rand.nextFloat()/4, this.rand.nextFloat() * 0.7F + 1.4F);
+ this.motionY *= 0.6D;
}
- if(this.worldObj.isRemote){
+ if(this.rand.nextInt(24) == 0){
+ this.playSound(WizardrySounds.SPELL_LOOP_WIND, 0.3F + this.rand.nextFloat() / 4,
+ this.rand.nextFloat() * 0.7F + 1.4F);
+ }
+
+ if(this.world.isRemote){
for(int i = 0; i < 2; ++i){
- this.worldObj.spawnParticle(EnumParticleTypes.CLOUD, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0D, 0.0D, 0.0D);
+ this.world.spawnParticle(EnumParticleTypes.CLOUD,
+ this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width,
+ this.posY + this.rand.nextDouble() * (double)this.height,
+ this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0D, 0.0D, 0.0D);
}
}
// Replaces super call.
this.livingBaseUpdate();
}
-
- /** Copied from {@link EntityLivingBase#onLivingUpdate()}. The only change is removal of the updateElytra() call
- * since that's irrelevant here. In actual fact, neither EntityMob nor EntityLiving has any code in its version
- * of this method that is of use. This isn't exactly ideal, but it's the lesser of two evils since the
- * alternative is copying the entire EntityBlaze class and its renderer. All to remove one particle effect... */
+
+ /**
+ * Copied from {@link EntityLivingBase#onLivingUpdate()}. The only change is removal of the updateElytra() call
+ * since that's irrelevant here. In actual fact, neither EntityMob nor EntityLiving has any code in its version of
+ * this method that is of use. This isn't exactly ideal, but it's the lesser of two evils since the alternative is
+ * copying the entire EntityBlaze class and its renderer. All to remove one particle effect...
+ */
// ... demonstrating why critical methods should delegate any non-critical functionality (like particles) to
// separate protected methods.
private void livingBaseUpdate(){
-
- if (this.jumpTicks > 0)
- {
- --this.jumpTicks;
- }
- if (this.newPosRotationIncrements > 0 && !this.canPassengerSteer())
- {
- double d0 = this.posX + (this.interpTargetX - this.posX) / (double)this.newPosRotationIncrements;
- double d1 = this.posY + (this.interpTargetY - this.posY) / (double)this.newPosRotationIncrements;
- double d2 = this.posZ + (this.interpTargetZ - this.posZ) / (double)this.newPosRotationIncrements;
- double d3 = MathHelper.wrapDegrees(this.interpTargetYaw - (double)this.rotationYaw);
- this.rotationYaw = (float)((double)this.rotationYaw + d3 / (double)this.newPosRotationIncrements);
- this.rotationPitch = (float)((double)this.rotationPitch + (this.interpTargetPitch - (double)this.rotationPitch) / (double)this.newPosRotationIncrements);
- --this.newPosRotationIncrements;
- this.setPosition(d0, d1, d2);
- this.setRotation(this.rotationYaw, this.rotationPitch);
- }
- else if (!this.isServerWorld())
- {
- this.motionX *= 0.98D;
- this.motionY *= 0.98D;
- this.motionZ *= 0.98D;
- }
+ if(this.jumpTicks > 0){
+ --this.jumpTicks;
+ }
- if (Math.abs(this.motionX) < 0.003D)
- {
- this.motionX = 0.0D;
- }
+ if(this.newPosRotationIncrements > 0 && !this.canPassengerSteer()){
+ double d0 = this.posX + (this.interpTargetX - this.posX) / (double)this.newPosRotationIncrements;
+ double d1 = this.posY + (this.interpTargetY - this.posY) / (double)this.newPosRotationIncrements;
+ double d2 = this.posZ + (this.interpTargetZ - this.posZ) / (double)this.newPosRotationIncrements;
+ double d3 = MathHelper.wrapDegrees(this.interpTargetYaw - (double)this.rotationYaw);
+ this.rotationYaw = (float)((double)this.rotationYaw + d3 / (double)this.newPosRotationIncrements);
+ this.rotationPitch = (float)((double)this.rotationPitch
+ + (this.interpTargetPitch - (double)this.rotationPitch) / (double)this.newPosRotationIncrements);
+ --this.newPosRotationIncrements;
+ this.setPosition(d0, d1, d2);
+ this.setRotation(this.rotationYaw, this.rotationPitch);
+ }else if(!this.isServerWorld()){
+ this.motionX *= 0.98D;
+ this.motionY *= 0.98D;
+ this.motionZ *= 0.98D;
+ }
- if (Math.abs(this.motionY) < 0.003D)
- {
- this.motionY = 0.0D;
- }
+ if(Math.abs(this.motionX) < 0.003D){
+ this.motionX = 0.0D;
+ }
- if (Math.abs(this.motionZ) < 0.003D)
- {
- this.motionZ = 0.0D;
- }
+ if(Math.abs(this.motionY) < 0.003D){
+ this.motionY = 0.0D;
+ }
- this.worldObj.theProfiler.startSection("ai");
+ if(Math.abs(this.motionZ) < 0.003D){
+ this.motionZ = 0.0D;
+ }
- if (this.isMovementBlocked())
- {
- this.isJumping = false;
- this.moveStrafing = 0.0F;
- this.moveForward = 0.0F;
- this.randomYawVelocity = 0.0F;
- }
- else if (this.isServerWorld())
- {
- this.worldObj.theProfiler.startSection("newAi");
- this.updateEntityActionState();
- this.worldObj.theProfiler.endSection();
- }
+ this.world.theProfiler.startSection("ai");
- this.worldObj.theProfiler.endSection();
- this.worldObj.theProfiler.startSection("jump");
+ if(this.isMovementBlocked()){
+ this.isJumping = false;
+ this.moveStrafing = 0.0F;
+ this.moveForward = 0.0F;
+ this.randomYawVelocity = 0.0F;
+ }else if(this.isServerWorld()){
+ this.world.theProfiler.startSection("newAi");
+ this.updateEntityActionState();
+ this.world.theProfiler.endSection();
+ }
- if (this.isJumping)
- {
- if (this.isInWater())
- {
- this.handleJumpWater();
- }
- else if (this.isInLava())
- {
- this.handleJumpLava();
- }
- else if (this.onGround && this.jumpTicks == 0)
- {
- this.jump();
- this.jumpTicks = 10;
- }
- }
- else
- {
- this.jumpTicks = 0;
- }
+ this.world.theProfiler.endSection();
+ this.world.theProfiler.startSection("jump");
- this.worldObj.theProfiler.endSection();
- this.worldObj.theProfiler.startSection("travel");
- this.moveStrafing *= 0.98F;
- this.moveForward *= 0.98F;
- this.randomYawVelocity *= 0.9F;
- this.moveEntityWithHeading(this.moveStrafing, this.moveForward);
- this.worldObj.theProfiler.endSection();
- this.worldObj.theProfiler.startSection("push");
- this.collideWithNearbyEntities();
- this.worldObj.theProfiler.endSection();
+ if(this.isJumping){
+ if(this.isInWater()){
+ this.handleJumpWater();
+ }else if(this.isInLava()){
+ this.handleJumpLava();
+ }else if(this.onGround && this.jumpTicks == 0){
+ this.jump();
+ this.jumpTicks = 10;
+ }
+ }else{
+ this.jumpTicks = 0;
+ }
+
+ this.world.theProfiler.endSection();
+ this.world.theProfiler.startSection("travel");
+ this.moveStrafing *= 0.98F;
+ this.moveForward *= 0.98F;
+ this.randomYawVelocity *= 0.9F;
+ this.moveEntityWithHeading(this.moveStrafing, this.moveForward);
+ this.world.theProfiler.endSection();
+ this.world.theProfiler.startSection("push");
+ this.collideWithNearbyEntities();
+ this.world.theProfiler.endSection();
}
@Override
public boolean attackEntityFrom(DamageSource source, float amount){
// Removes the damage from being wet that applies to blazes by checking if the mob is actually drowning.
- if(source == DamageSource.drown && (this.getAir() > 0 || this.isPotionActive(MobEffects.WATER_BREATHING))){
+ if(source == DamageSource.DROWN && (this.getAir() > 0 || this.isPotionActive(MobEffects.WATER_BREATHING))){
// In this case, the ice wraith is not actually drowning, so cancel the damage.
return false;
}else{
return super.attackEntityFrom(source, amount);
}
}
-
+
@Override
public boolean isBurning(){
// Uses the datawatcher on both sides because fire is private to Entity (and I'm not using reflection here).
- // TESTME: This should work, but there may be some issues with updating, so if it doesn't work, copy the
+ // TESTME: This should work, but there may be some issues with updating, so if it doesn't work, copy the
// version from Entity and use reflection to access the fire field.
return this.getFlag(0);
- }
+ }
- /** Copied straight from EntityBlaze.AIFireballAttack, with the only changes being replacement of fireball
- * spawning with a one-liner call to WizardryRegistry.iceShard.cast(...) and the removal of redundant local variables. */
+ /**
+ * Copied straight from EntityBlaze.AIFireballAttack, with the only changes being replacement of fireball spawning
+ * with a one-liner call to WizardryRegistry.iceShard.cast(...) and the removal of redundant local variables.
+ */
static class AIIceShardAttack extends EntityAIBase {
-
- private final EntityBlaze blaze;
- private int attackStep;
- private int attackTime;
- public AIIceShardAttack(EntityBlaze blazeIn)
- {
- this.blaze = blazeIn;
- this.setMutexBits(3);
- }
+ private final EntityBlaze blaze;
+ private int attackStep;
+ private int attackTime;
- /**
- * Returns whether the EntityAIBase should begin execution.
- */
- public boolean shouldExecute()
- {
- EntityLivingBase entitylivingbase = this.blaze.getAttackTarget();
- return entitylivingbase != null && entitylivingbase.isEntityAlive();
- }
+ public AIIceShardAttack(EntityBlaze blazeIn){
+ this.blaze = blazeIn;
+ this.setMutexBits(3);
+ }
- /**
- * Execute a one shot task or start executing a continuous task
- */
- public void startExecuting()
- {
- this.attackStep = 0;
- }
+ /**
+ * Returns whether the EntityAIBase should begin execution.
+ */
+ public boolean shouldExecute(){
+ EntityLivingBase entitylivingbase = this.blaze.getAttackTarget();
+ return entitylivingbase != null && entitylivingbase.isEntityAlive();
+ }
- /**
- * Resets the task
- */
- public void resetTask()
- {
- // This might be called setOnFire, but what it really controls is whether the wraith is in attack mode.
- this.blaze.setOnFire(false);
- }
+ /**
+ * Execute a one shot task or start executing a continuous task
+ */
+ public void startExecuting(){
+ this.attackStep = 0;
+ }
- /**
- * Updates the task
- */
- public void updateTask()
- {
- --this.attackTime;
- EntityLivingBase entitylivingbase = this.blaze.getAttackTarget();
- double d0 = this.blaze.getDistanceSqToEntity(entitylivingbase);
+ /**
+ * Resets the task
+ */
+ public void resetTask(){
+ // This might be called setOnFire, but what it really controls is whether the wraith is in attack mode.
+ this.blaze.setOnFire(false);
+ }
- if (d0 < 4.0D)
- {
- if (this.attackTime <= 0)
- {
- this.attackTime = 20;
- this.blaze.attackEntityAsMob(entitylivingbase);
- }
+ /**
+ * Updates the task
+ */
+ public void updateTask(){
+ --this.attackTime;
+ EntityLivingBase entitylivingbase = this.blaze.getAttackTarget();
+ double d0 = this.blaze.getDistanceSqToEntity(entitylivingbase);
- this.blaze.getMoveHelper().setMoveTo(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ, 1.0D);
- }
- else if (d0 < 256.0D)
- {
- if (this.attackTime <= 0)
- {
- ++this.attackStep;
+ if(d0 < 4.0D){
+ if(this.attackTime <= 0){
+ this.attackTime = 20;
+ this.blaze.attackEntityAsMob(entitylivingbase);
+ }
- if (this.attackStep == 1)
- {
- this.attackTime = 60;
- this.blaze.setOnFire(true);
- }
- else if (this.attackStep <= 4)
- {
- this.attackTime = 6;
- }
- else
- {
- this.attackTime = 100;
- this.attackStep = 0;
- this.blaze.setOnFire(false);
- }
+ this.blaze.getMoveHelper().setMoveTo(entitylivingbase.posX, entitylivingbase.posY,
+ entitylivingbase.posZ, 1.0D);
+ }else if(d0 < 256.0D){
+ if(this.attackTime <= 0){
+ ++this.attackStep;
- if(this.attackStep > 1){
- // Proof, if it were at all needed, of the elegance and versatility of the spell system.
- Spells.ice_shard.cast(this.blaze.worldObj, this.blaze, EnumHand.MAIN_HAND, 0, entitylivingbase, new SpellModifiers());
- // TODO: Decide if an event should be fired here. I'm guessing no.
- }
- }
+ if(this.attackStep == 1){
+ this.attackTime = 60;
+ this.blaze.setOnFire(true);
+ }else if(this.attackStep <= 4){
+ this.attackTime = 6;
+ }else{
+ this.attackTime = 100;
+ this.attackStep = 0;
+ this.blaze.setOnFire(false);
+ }
- this.blaze.getLookHelper().setLookPositionWithEntity(entitylivingbase, 10.0F, 10.0F);
- }
- else
- {
- this.blaze.getNavigator().clearPathEntity();
- this.blaze.getMoveHelper().setMoveTo(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ, 1.0D);
- }
+ if(this.attackStep > 1){
+ // Proof, if it were at all needed, of the elegance and versatility of the spell system.
+ Spells.ice_shard.cast(this.blaze.world, this.blaze, EnumHand.MAIN_HAND, 0, entitylivingbase,
+ new SpellModifiers());
+ // TODO: Decide if an event should be fired here. I'm guessing no.
+ }
+ }
- super.updateTask();
- }
- }
+ this.blaze.getLookHelper().setLookPositionWithEntity(entitylivingbase, 10.0F, 10.0F);
+ }else{
+ this.blaze.getNavigator().clearPathEntity();
+ this.blaze.getMoveHelper().setMoveTo(entitylivingbase.posX, entitylivingbase.posY,
+ entitylivingbase.posZ, 1.0D);
+ }
+
+ super.updateTask();
+ }
+ }
}
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityLightningWraith.java b/src/main/java/electroblob/wizardry/entity/living/EntityLightningWraith.java
index d2287d17..d69b28f7 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityLightningWraith.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityLightningWraith.java
@@ -27,24 +27,26 @@ public class EntityLightningWraith extends EntityBlazeMinion {
super(world, x, y, z, caster, lifetime);
this.isImmuneToFire = false;
}
-
+
@Override
protected void initEntityAI(){
super.initEntityAI();
this.tasks.taskEntries.clear();
this.tasks.addTask(4, new AILightningAttack(this));
- this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D));
- this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
- this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
- this.tasks.addTask(8, new EntityAILookIdle(this));
+ this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D));
+ this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
+ this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
+ this.tasks.addTask(8, new EntityAILookIdle(this));
}
@Override
protected void spawnParticleEffect(){
- if(this.worldObj.isRemote){
- for(int i=0;i<15;i++){
- float brightness = 0.3f + (rand.nextFloat()/2);
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, worldObj, this.posX - 0.5d + rand.nextDouble(), this.posY + this.height/2 - 0.5d + rand.nextDouble(), this.posZ - 0.5d + rand.nextDouble(), 0, 0.05f, 0, 20 + rand.nextInt(10), brightness, brightness + 0.2f, 1.0f);
+ if(this.world.isRemote){
+ for(int i = 0; i < 15; i++){
+ float brightness = 0.3f + (rand.nextFloat() / 2);
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world, this.posX - 0.5d + rand.nextDouble(),
+ this.posY + this.height / 2 - 0.5d + rand.nextDouble(), this.posZ - 0.5d + rand.nextDouble(), 0,
+ 0.05f, 0, 20 + rand.nextInt(10), brightness, brightness + 0.2f, 1.0f);
}
}
}
@@ -53,128 +55,119 @@ public class EntityLightningWraith extends EntityBlazeMinion {
public void onLivingUpdate(){
// Fortunately, lightning wraiths don't replace any of blazes' particle effects or the fire sound, they only
// add the sparks, so it's fine to call super here.
- if(worldObj.isRemote){
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, worldObj, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0, 0, 0, 3);
+ if(world.isRemote){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, world,
+ this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width,
+ this.posY + this.rand.nextDouble() * (double)this.height,
+ this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0, 0, 0, 3);
}
super.onLivingUpdate();
}
-
+
@Override
public boolean attackEntityFrom(DamageSource source, float amount){
// Removes the damage from being wet that applies to blazes by checking if the mob is actually drowning.
- if(source == DamageSource.drown && (this.getAir() > 0 || this.isPotionActive(MobEffects.WATER_BREATHING))){
+ if(source == DamageSource.DROWN && (this.getAir() > 0 || this.isPotionActive(MobEffects.WATER_BREATHING))){
// In this case, the lightning wraith is not actually drowning, so cancel the damage.
return false;
}else{
return super.attackEntityFrom(source, amount);
}
}
-
+
@Override
public boolean isBurning(){
// Uses the datawatcher on both sides because fire is private to Entity (and I'm not using reflection here).
- // TESTME: This should work, but there may be some issues with updating, so if it doesn't work, copy the
+ // TESTME: This should work, but there may be some issues with updating, so if it doesn't work, copy the
// version from Entity and use reflection to access the fire field.
return this.getFlag(0);
- }
-
- /** Copied straight from EntityBlaze.AIFireballAttack, with the only changes being replacement of fireball
- * spawning with a one-liner call to WizardryRegistry.arc.cast(...) and the removal of redundant local variables. */
+ }
+
+ /**
+ * Copied straight from EntityBlaze.AIFireballAttack, with the only changes being replacement of fireball spawning
+ * with a one-liner call to WizardryRegistry.arc.cast(...) and the removal of redundant local variables.
+ */
static class AILightningAttack extends EntityAIBase {
-
- private final EntityBlaze blaze;
- private int attackStep;
- private int attackTime;
- public AILightningAttack(EntityBlaze blazeIn)
- {
- this.blaze = blazeIn;
- this.setMutexBits(3);
- }
+ private final EntityBlaze blaze;
+ private int attackStep;
+ private int attackTime;
- /**
- * Returns whether the EntityAIBase should begin execution.
- */
- public boolean shouldExecute()
- {
- EntityLivingBase entitylivingbase = this.blaze.getAttackTarget();
- return entitylivingbase != null && entitylivingbase.isEntityAlive();
- }
+ public AILightningAttack(EntityBlaze blazeIn){
+ this.blaze = blazeIn;
+ this.setMutexBits(3);
+ }
- /**
- * Execute a one shot task or start executing a continuous task
- */
- public void startExecuting()
- {
- this.attackStep = 0;
- }
+ /**
+ * Returns whether the EntityAIBase should begin execution.
+ */
+ public boolean shouldExecute(){
+ EntityLivingBase entitylivingbase = this.blaze.getAttackTarget();
+ return entitylivingbase != null && entitylivingbase.isEntityAlive();
+ }
- /**
- * Resets the task
- */
- public void resetTask()
- {
- // This might be called setOnFire, but what it really controls is whether the wraith is in attack mode.
- this.blaze.setOnFire(false);
- }
+ /**
+ * Execute a one shot task or start executing a continuous task
+ */
+ public void startExecuting(){
+ this.attackStep = 0;
+ }
- /**
- * Updates the task
- */
- public void updateTask()
- {
- --this.attackTime;
- EntityLivingBase entitylivingbase = this.blaze.getAttackTarget();
- double d0 = this.blaze.getDistanceSqToEntity(entitylivingbase);
+ /**
+ * Resets the task
+ */
+ public void resetTask(){
+ // This might be called setOnFire, but what it really controls is whether the wraith is in attack mode.
+ this.blaze.setOnFire(false);
+ }
- if (d0 < 4.0D)
- {
- if (this.attackTime <= 0)
- {
- this.attackTime = 20;
- this.blaze.attackEntityAsMob(entitylivingbase);
- }
+ /**
+ * Updates the task
+ */
+ public void updateTask(){
+ --this.attackTime;
+ EntityLivingBase entitylivingbase = this.blaze.getAttackTarget();
+ double d0 = this.blaze.getDistanceSqToEntity(entitylivingbase);
- this.blaze.getMoveHelper().setMoveTo(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ, 1.0D);
- }
- else if (d0 < 256.0D)
- {
- if (this.attackTime <= 0)
- {
- ++this.attackStep;
+ if(d0 < 4.0D){
+ if(this.attackTime <= 0){
+ this.attackTime = 20;
+ this.blaze.attackEntityAsMob(entitylivingbase);
+ }
- if (this.attackStep == 1)
- {
- this.attackTime = 60;
- this.blaze.setOnFire(true);
- }
- else if (this.attackStep <= 4)
- {
- this.attackTime = 6;
- }
- else
- {
- this.attackTime = 100;
- this.attackStep = 0;
- this.blaze.setOnFire(false);
- }
+ this.blaze.getMoveHelper().setMoveTo(entitylivingbase.posX, entitylivingbase.posY,
+ entitylivingbase.posZ, 1.0D);
+ }else if(d0 < 256.0D){
+ if(this.attackTime <= 0){
+ ++this.attackStep;
- if(this.attackStep > 1){
- // Proof, if it were at all needed, of the elegance and versatility of the spell system.
- Spells.arc.cast(this.blaze.worldObj, this.blaze, EnumHand.MAIN_HAND, 0, entitylivingbase, new SpellModifiers());
- // TODO: Decide if an event should be fired here. I'm guessing no.
- }
- }
+ if(this.attackStep == 1){
+ this.attackTime = 60;
+ this.blaze.setOnFire(true);
+ }else if(this.attackStep <= 4){
+ this.attackTime = 6;
+ }else{
+ this.attackTime = 100;
+ this.attackStep = 0;
+ this.blaze.setOnFire(false);
+ }
- this.blaze.getLookHelper().setLookPositionWithEntity(entitylivingbase, 10.0F, 10.0F);
- }
- else
- {
- this.blaze.getNavigator().clearPathEntity();
- this.blaze.getMoveHelper().setMoveTo(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ, 1.0D);
- }
+ if(this.attackStep > 1){
+ // Proof, if it were at all needed, of the elegance and versatility of the spell system.
+ Spells.arc.cast(this.blaze.world, this.blaze, EnumHand.MAIN_HAND, 0, entitylivingbase,
+ new SpellModifiers());
+ // TODO: Decide if an event should be fired here. I'm guessing no.
+ }
+ }
- super.updateTask();
- }
- }
+ this.blaze.getLookHelper().setLookPositionWithEntity(entitylivingbase, 10.0F, 10.0F);
+ }else{
+ this.blaze.getNavigator().clearPathEntity();
+ this.blaze.getMoveHelper().setMoveTo(entitylivingbase.posX, entitylivingbase.posY,
+ entitylivingbase.posZ, 1.0D);
+ }
+
+ super.updateTask();
+ }
+ }
}
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityMagicSlime.java b/src/main/java/electroblob/wizardry/entity/living/EntityMagicSlime.java
index c6799fcf..88fe2b71 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityMagicSlime.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityMagicSlime.java
@@ -12,7 +12,6 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.MobEffects;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.DamageSource;
@@ -32,21 +31,46 @@ public class EntityMagicSlime extends EntitySlime implements ISummonedCreature {
private UUID casterUUID;
// Setter + getter implementations
- @Override public int getLifetime(){ return lifetime; }
- @Override public void setLifetime(int lifetime){ this.lifetime = lifetime; }
- @Override public WeakReference getCasterReference(){ return casterReference; }
- @Override public void setCasterReference(WeakReference reference){ casterReference = reference; }
- @Override public UUID getCasterUUID() { return casterUUID; }
- @Override public void setCasterUUID(UUID uuid) { this.casterUUID = uuid; }
+ @Override
+ public int getLifetime(){
+ return lifetime;
+ }
+
+ @Override
+ public void setLifetime(int lifetime){
+ this.lifetime = lifetime;
+ }
+
+ @Override
+ public WeakReference getCasterReference(){
+ return casterReference;
+ }
+
+ @Override
+ public void setCasterReference(WeakReference reference){
+ casterReference = reference;
+ }
+
+ @Override
+ public UUID getCasterUUID(){
+ return casterUUID;
+ }
+
+ @Override
+ public void setCasterUUID(UUID uuid){
+ this.casterUUID = uuid;
+ }
public EntityMagicSlime(World world){
super(world);
- this.setSlimeSize(2); // Needs to be called before setting the experience value to 0
+ // TESTME: Should this be true or false? Has something to do with health.
+ this.setSlimeSize(2, false); // Needs to be called before setting the experience value to 0
this.experienceValue = 0;
}
/**
* Creates a new magic slime with the given caster and lifetime, riding the given target.
+ *
* @param world The world that the slime is in.
* @param caster The entity that created the slime.
* @param target The slime's victim. The slime will automatically start riding this entity.
@@ -57,49 +81,52 @@ public class EntityMagicSlime extends EntitySlime implements ISummonedCreature {
this.setPosition(target.posX, target.posY, target.posZ);
this.startRiding(target);
this.casterReference = new WeakReference(caster);
- this.setSlimeSize(2); // Needs to be called before setting the experience value to 0
+ this.setSlimeSize(2, false); // Needs to be called before setting the experience value to 0
this.experienceValue = 0;
this.lifetime = lifetime;
}
-
+
// EntitySlime overrides
-
+
@Override
- protected void initEntityAI(){} // Has no AI!
-
+ protected void initEntityAI(){
+ } // Has no AI!
+
@Override
- protected void dealDamage(EntityLivingBase entity){} // Handles damage itself
-
+ protected void dealDamage(EntityLivingBase entity){
+ } // Handles damage itself
+
@Override
public void setDead(){
// Restores behaviour from Entity, replacing slime splitting behaviour.
- this.isDead = true;
- // Makes sure that the undoing in onUpdate won't undo this. For some reason, EntitySlime sets isDead directly
- // to do the peaceful despawning, which seems odd but is actually rather handy!
- this.setHealth(0);
- // Bursting effect
- for(int i=0; i<30; i++){
+ this.isDead = true;
+ // Makes sure that the undoing in onUpdate won't undo this. For some reason, EntitySlime sets isDead directly
+ // to do the peaceful despawning, which seems odd but is actually rather handy!
+ this.setHealth(0);
+ // Bursting effect
+ for(int i = 0; i < 30; i++){
double x = this.posX - 0.5 + rand.nextDouble();
double y = this.posY - 0.5 + rand.nextDouble();
double z = this.posZ - 0.5 + rand.nextDouble();
- this.worldObj.spawnParticle(EnumParticleTypes.SLIME, x, y, z, (x - this.posX)*2, (y - this.posY)*2, (z - this.posZ)*2);
+ this.world.spawnParticle(EnumParticleTypes.SLIME, x, y, z, (x - this.posX) * 2, (y - this.posY) * 2,
+ (z - this.posZ) * 2);
}
this.playSound(SoundEvents.ENTITY_SLIME_ATTACK, 2.5f, 0.6f);
this.playSound(SoundEvents.ENTITY_FIREWORK_BLAST_FAR, 1.0f, 0.5f);
- }
-
+ }
+
@Override
public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata){
// Removes size randomisation
IEntityLivingData data = super.onInitialSpawn(difficulty, livingdata);
- this.setSlimeSize(2);
- return data;
- }
-
+ this.setSlimeSize(2, false);
+ return data;
+ }
+
@Override
public boolean attackEntityFrom(DamageSource source, float amount){
// Immune to suffocation
- return source == DamageSource.inWall ? false : super.attackEntityFrom(source, amount);
+ return source == DamageSource.IN_WALL ? false : super.attackEntityFrom(source, amount);
}
// Implementations
@@ -111,45 +138,49 @@ public class EntityMagicSlime extends EntitySlime implements ISummonedCreature {
@Override
public void onUpdate(){
-
+
super.onUpdate();
// Undoes the despawning on peaceful behaviour. I don't think there's anything in super.onUpdate that sets
// isDead other than that, but it's better to do a quick sanity check just to be sure.
- if(this.isDead && worldObj.getDifficulty() == EnumDifficulty.PEACEFUL && this.getHealth() > 0) this.isDead = false;
+ if(this.isDead && world.getDifficulty() == EnumDifficulty.PEACEFUL && this.getHealth() > 0) this.isDead = false;
// Bursts instantly rather than doing the falling over animation.
if(this.getHealth() <= 0) this.setDead();
-
+
this.updateDelegate();
-
+
// Damages and slows the slime's victim or makes the slime explode if the victim is dead.
- if(this.getRidingEntity() != null && this.getRidingEntity() instanceof EntityLivingBase && ((EntityLivingBase)this.getRidingEntity()).getHealth() > 0){
- if(this.ticksExisted % 16 == 1){
- this.getRidingEntity().attackEntityFrom(DamageSource.magic, 1);
- ((EntityLivingBase)this.getRidingEntity()).addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 20, 2));
- this.playSound(SoundEvents.ENTITY_SLIME_ATTACK, 1.0f, 1.0f);
- this.squishAmount = 0.5F;
- }
- }else{
- this.setDead();
- }
+ if(this.getRidingEntity() != null && this.getRidingEntity() instanceof EntityLivingBase
+ && ((EntityLivingBase)this.getRidingEntity()).getHealth() > 0){
+ if(this.ticksExisted % 16 == 1){
+ this.getRidingEntity().attackEntityFrom(DamageSource.MAGIC, 1);
+ ((EntityLivingBase)this.getRidingEntity())
+ .addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 20, 2));
+ this.playSound(SoundEvents.ENTITY_SLIME_ATTACK, 1.0f, 1.0f);
+ this.squishAmount = 0.5F;
+ }
+ }else{
+ this.setDead();
+ }
}
@Override
- public void onSpawn(){}
+ public void onSpawn(){
+ }
@Override
- public void onDespawn(){}
+ public void onDespawn(){
+ }
@Override
- public boolean hasParticleEffect() {
+ public boolean hasParticleEffect(){
return false;
}
@Override
- protected boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack) {
+ protected boolean processInteract(EntityPlayer player, EnumHand hand){
// In this case, the delegate method determines whether super is called.
// Rather handily, we can make use of Java's short-circuiting method of evaluating OR statements.
- return this.interactDelegate(player, hand, stack) || super.processInteract(player, hand, stack);
+ return this.interactDelegate(player, hand) || super.processInteract(player, hand);
}
@Override
@@ -166,12 +197,35 @@ public class EntityMagicSlime extends EntitySlime implements ISummonedCreature {
// Recommended overrides
- @Override protected int getExperiencePoints(EntityPlayer player){ return 0; }
- @Override protected boolean canDropLoot(){ return false; }
- @Override protected Item getDropItem(){ return null; }
- @Override protected ResourceLocation getLootTable(){ return null; }
- @Override public boolean canPickUpLoot(){ return false; }
+ @Override
+ protected int getExperiencePoints(EntityPlayer player){
+ return 0;
+ }
+
+ @Override
+ protected boolean canDropLoot(){
+ return false;
+ }
+
+ @Override
+ protected Item getDropItem(){
+ return null;
+ }
+
+ @Override
+ protected ResourceLocation getLootTable(){
+ return null;
+ }
+
+ @Override
+ public boolean canPickUpLoot(){
+ return false;
+ }
+
// This vanilla method has nothing to do with the custom onDespawn() method.
- @Override protected boolean canDespawn(){ return false; }
+ @Override
+ protected boolean canDespawn(){
+ return false;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityPhoenix.java b/src/main/java/electroblob/wizardry/entity/living/EntityPhoenix.java
index 5d72f26e..32aa3622 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityPhoenix.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityPhoenix.java
@@ -22,42 +22,42 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class EntityPhoenix extends EntitySummonedCreature implements ISpellCaster {
-
- private double AISpeed = 0.5;
+
+ private double AISpeed = 0.5;
// Can attack for 7 seconds, then must cool down for 3.
- private EntityAIAttackSpell spellAttackAI = new EntityAIAttackSpell(this, AISpeed, 15f, 60, 140);
+ private EntityAIAttackSpell spellAttackAI = new EntityAIAttackSpell(this, AISpeed, 15f, 60, 140);
private Spell continuousSpell;
private static final List attack = Collections.singletonList(Spells.flame_ray);
public EntityPhoenix(World world){
- super(world);
- }
-
- public EntityPhoenix(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
- super(world, x, y, z, caster, lifetime);
- this.isImmuneToFire = true;
- this.height = 2.0f;
+ super(world);
+ }
+
+ public EntityPhoenix(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
+ super(world, x, y, z, caster, lifetime);
+ this.isImmuneToFire = true;
+ this.height = 2.0f;
// For some reason this can't be in initEntityAI
- this.tasks.addTask(1, this.spellAttackAI);
- }
-
- @Override
- protected void initEntityAI(){
+ this.tasks.addTask(1, this.spellAttackAI);
+ }
- this.tasks.addTask(0, new EntityAIWatchClosest(this, EntityLivingBase.class, 0));
- //this.tasks.addTask(2, new EntityAIWander(this, AISpeed));
- this.tasks.addTask(3, new EntityAILookIdle(this));
- //this.targetTasks.addTask(0, new EntityAIMoveTowardsTarget(this, 1, 10));
- this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
- this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
- 0, false, true, this.getTargetSelector()));
+ @Override
+ protected void initEntityAI(){
+
+ this.tasks.addTask(0, new EntityAIWatchClosest(this, EntityLivingBase.class, 0));
+ // this.tasks.addTask(2, new EntityAIWander(this, AISpeed));
+ this.tasks.addTask(3, new EntityAILookIdle(this));
+ // this.targetTasks.addTask(0, new EntityAIMoveTowardsTarget(this, 1, 10));
+ this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
+ this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
+ 0, false, true, this.getTargetSelector()));
+
+ this.setAIMoveSpeed((float)AISpeed);
+ }
- this.setAIMoveSpeed((float)AISpeed);
- }
-
@Override
public List getSpells(){
return attack;
@@ -77,113 +77,118 @@ public class EntityPhoenix extends EntitySummonedCreature implements ISpellCaste
public void setContinuousSpell(Spell spell){
continuousSpell = spell;
}
-
- @Override
- public boolean hasRangedAttack() {
+
+ @Override
+ public boolean hasRangedAttack(){
return true;
}
-
- @Override
- // Makes the flames come from the phoenix's head rather than its body
- public float getEyeHeight(){
- return 2.1f;
- }
@Override
- protected void applyEntityAttributes(){
- super.applyEntityAttributes();
- this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D);
- this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(30.0D);
- this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(30.0D);
- }
-
- @Override
- protected SoundEvent getAmbientSound(){
- return SoundEvents.ENTITY_BLAZE_AMBIENT;
- }
-
- @Override
- protected SoundEvent getHurtSound(){
- return SoundEvents.ENTITY_BLAZE_HURT;
- }
-
- @Override
- protected SoundEvent getDeathSound(){
- return SoundEvents.ENTITY_BLAZE_DEATH;
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public int getBrightnessForRender(float par1){
- return 15728880;
- }
-
- @Override
- public float getBrightness(float par1){
- return 1.0F;
- }
-
- @Override
- public void onSpawn(){
- this.spawnParticleEffect();
- }
-
- @Override
- public void onDespawn(){
- this.spawnParticleEffect();
+ // Makes the flames come from the phoenix's head rather than its body
+ public float getEyeHeight(){
+ return 2.1f;
}
-
- private void spawnParticleEffect(){
- if(this.worldObj.isRemote){
- for(int i=0;i<15;i++){
- this.worldObj.spawnParticle(EnumParticleTypes.FLAME, this.posX + this.rand.nextFloat(), this.posY + 1 + this.rand.nextFloat(), this.posZ + this.rand.nextFloat(), 0, 0, 0);
- }
- }
- }
@Override
- public void onLivingUpdate(){
-
- // Makes the phoenix hover.
- int floorLevel = WizardryUtilities.getNearestFloorLevel(worldObj, new BlockPos(this), 4);
-
- if(this.posY - floorLevel > 3){
- this.motionY = -0.1;
- }else if(this.posY - floorLevel < 2){
- this.motionY = 0.1;
- }else{
- this.motionY = 0.0;
- }
+ protected void applyEntityAttributes(){
+ super.applyEntityAttributes();
+ this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D);
+ this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(30.0D);
+ this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(30.0D);
+ }
- // Living sound
- if(this.rand.nextInt(24) == 0){
- this.playSound(SoundEvents.BLOCK_FIRE_AMBIENT, 1.0F + this.rand.nextFloat(), this.rand.nextFloat() * 0.7F + 0.3F);
- }
+ @Override
+ protected SoundEvent getAmbientSound(){
+ return SoundEvents.ENTITY_BLAZE_AMBIENT;
+ }
- // Flapping sound effect
+ @Override
+ protected SoundEvent getHurtSound(){
+ return SoundEvents.ENTITY_BLAZE_HURT;
+ }
+
+ @Override
+ protected SoundEvent getDeathSound(){
+ return SoundEvents.ENTITY_BLAZE_DEATH;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public int getBrightnessForRender(float par1){
+ return 15728880;
+ }
+
+ @Override
+ public float getBrightness(float par1){
+ return 1.0F;
+ }
+
+ @Override
+ public void onSpawn(){
+ this.spawnParticleEffect();
+ }
+
+ @Override
+ public void onDespawn(){
+ this.spawnParticleEffect();
+ }
+
+ private void spawnParticleEffect(){
+ if(this.world.isRemote){
+ for(int i = 0; i < 15; i++){
+ this.world.spawnParticle(EnumParticleTypes.FLAME, this.posX + this.rand.nextFloat(),
+ this.posY + 1 + this.rand.nextFloat(), this.posZ + this.rand.nextFloat(), 0, 0, 0);
+ }
+ }
+ }
+
+ @Override
+ public void onLivingUpdate(){
+
+ // Makes the phoenix hover.
+ int floorLevel = WizardryUtilities.getNearestFloorLevel(world, new BlockPos(this), 4);
+
+ if(this.posY - floorLevel > 3){
+ this.motionY = -0.1;
+ }else if(this.posY - floorLevel < 2){
+ this.motionY = 0.1;
+ }else{
+ this.motionY = 0.0;
+ }
+
+ // Living sound
+ if(this.rand.nextInt(24) == 0){
+ this.playSound(SoundEvents.BLOCK_FIRE_AMBIENT, 1.0F + this.rand.nextFloat(),
+ this.rand.nextFloat() * 0.7F + 0.3F);
+ }
+
+ // Flapping sound effect
if(this.ticksExisted % 22 == 0){
this.playSound(SoundEvents.ENTITY_ENDERDRAGON_FLAP, 1.0F, 1.0f);
}
- for(int i=0; i<2; i++){
- this.worldObj.spawnParticle(EnumParticleTypes.FLAME, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.height/2 + this.rand.nextDouble() * (double)this.height/2, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0D, -0.1D, 0.0D);
- }
-
- // Adding this allows the phoenix to attack despite being in the air. However, for some strange reason
- // it will only attack when within about 3 blocks of the ground. Any higher and it just sits there, not even
- // attempting to find targets.
-
- this.onGround = true;
+ for(int i = 0; i < 2; i++){
+ this.world.spawnParticle(EnumParticleTypes.FLAME,
+ this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width,
+ this.posY + this.height / 2 + this.rand.nextDouble() * (double)this.height / 2,
+ this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0D, -0.1D, 0.0D);
+ }
- super.onLivingUpdate();
- }
-
- @Override
- public void fall(float distance, float damageMultiplier){} // Immune to fall damage
+ // Adding this allows the phoenix to attack despite being in the air. However, for some strange reason
+ // it will only attack when within about 3 blocks of the ground. Any higher and it just sits there, not even
+ // attempting to find targets.
+
+ this.onGround = true;
+
+ super.onLivingUpdate();
+ }
@Override
- public boolean isBurning()
- {
- return false;
- }
+ public void fall(float distance, float damageMultiplier){
+ } // Immune to fall damage
+
+ @Override
+ public boolean isBurning(){
+ return false;
+ }
}
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityShadowWraith.java b/src/main/java/electroblob/wizardry/entity/living/EntityShadowWraith.java
index 000ba391..fbe3e0dc 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityShadowWraith.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityShadowWraith.java
@@ -25,13 +25,13 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class EntityShadowWraith extends EntitySummonedCreature implements ISpellCaster {
-
+
// TODO: This currently doesn't fly like it used to. Should it, or does it not matter?
-
- private double AISpeed = 1.0;
-
- private EntityAIAttackSpell spellAttackAI = new EntityAIAttackSpell(this, AISpeed, 15f, 30, 0);
-
+
+ private double AISpeed = 1.0;
+
+ private EntityAIAttackSpell spellAttackAI = new EntityAIAttackSpell(this, AISpeed, 15f, 30, 0);
+
private static final List attack = Collections.singletonList(Spells.darkness_orb);
public EntityShadowWraith(World world){
@@ -41,24 +41,24 @@ public class EntityShadowWraith extends EntitySummonedCreature implements ISpell
public EntityShadowWraith(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
super(world, x, y, z, caster, lifetime);
// For some reason this can't be in initEntityAI
- this.tasks.addTask(0, this.spellAttackAI);
+ this.tasks.addTask(0, this.spellAttackAI);
}
-
+
@Override
protected void initEntityAI(){
- this.tasks.addTask(1, new EntityAIAttackMelee(this, AISpeed, false));
+ this.tasks.addTask(1, new EntityAIAttackMelee(this, AISpeed, false));
this.tasks.addTask(2, new EntityAIWander(this, AISpeed));
this.tasks.addTask(3, new EntityAILookIdle(this));
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
- this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
- 0, false, true, this.getTargetSelector()));
+ this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
+ 0, false, true, this.getTargetSelector()));
- this.setAIMoveSpeed((float)AISpeed);
+ this.setAIMoveSpeed((float)AISpeed);
}
@Override
- public boolean hasRangedAttack() {
+ public boolean hasRangedAttack(){
return true;
}
@@ -85,32 +85,32 @@ public class EntityShadowWraith extends EntitySummonedCreature implements ISpell
@Override
protected void applyEntityAttributes(){
super.applyEntityAttributes();
- this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D);
+ this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D);
this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(AISpeed);
this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(30.0D);
this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(16.0D);
}
-
+
@Override
public boolean isPotionApplicable(PotionEffect potion){
return potion.getPotion() == MobEffects.WITHER ? false : super.isPotionApplicable(potion);
}
- @Override
- protected SoundEvent getAmbientSound(){
- return SoundEvents.ENTITY_BLAZE_AMBIENT;
- }
+ @Override
+ protected SoundEvent getAmbientSound(){
+ return SoundEvents.ENTITY_BLAZE_AMBIENT;
+ }
- @Override
- protected SoundEvent getHurtSound(){
- return SoundEvents.ENTITY_BLAZE_HURT;
- }
+ @Override
+ protected SoundEvent getHurtSound(){
+ return SoundEvents.ENTITY_BLAZE_HURT;
+ }
+
+ @Override
+ protected SoundEvent getDeathSound(){
+ return SoundEvents.ENTITY_BLAZE_DEATH;
+ }
- @Override
- protected SoundEvent getDeathSound(){
- return SoundEvents.ENTITY_BLAZE_DEATH;
- }
-
@Override
@SideOnly(Side.CLIENT)
public int getBrightnessForRender(float partialTicks){
@@ -124,10 +124,12 @@ public class EntityShadowWraith extends EntitySummonedCreature implements ISpell
@Override
public void onSpawn(){
- if(this.worldObj.isRemote){
- for(int i=0;i<15;i++){
- float brightness = rand.nextFloat()*0.4f;
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, worldObj, this.posX - 0.5d + rand.nextDouble(), this.posY + this.height/2 - 0.5d + rand.nextDouble(), this.posZ - 0.5d + rand.nextDouble(), 0, 0.05f, 0, 20 + rand.nextInt(10), brightness, 0.0f, brightness);
+ if(this.world.isRemote){
+ for(int i = 0; i < 15; i++){
+ float brightness = rand.nextFloat() * 0.4f;
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world, this.posX - 0.5d + rand.nextDouble(),
+ this.posY + this.height / 2 - 0.5d + rand.nextDouble(), this.posZ - 0.5d + rand.nextDouble(), 0,
+ 0.05f, 0, 20 + rand.nextInt(10), brightness, 0.0f, brightness);
}
}
}
@@ -136,7 +138,8 @@ public class EntityShadowWraith extends EntitySummonedCreature implements ISpell
public void onLivingUpdate(){
if(this.rand.nextInt(24) == 0){
- this.playSound(SoundEvents.BLOCK_PORTAL_AMBIENT, 1.0F + this.rand.nextFloat(), this.rand.nextFloat() * 0.7F + 0.3F);
+ this.playSound(SoundEvents.BLOCK_PORTAL_AMBIENT, 1.0F + this.rand.nextFloat(),
+ this.rand.nextFloat() * 0.7F + 0.3F);
}
// Slow fall
@@ -144,22 +147,36 @@ public class EntityShadowWraith extends EntitySummonedCreature implements ISpell
this.motionY *= 0.6D;
}
- if(worldObj.isRemote){
- for(int i=0; i<2; i++){
- worldObj.spawnParticle(EnumParticleTypes.PORTAL, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0, 0, 0);
- worldObj.spawnParticle(EnumParticleTypes.SMOKE_LARGE, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0, 0, 0);
- float brightness = rand.nextFloat()*0.2f;
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, worldObj, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0, 0.05f, 0, 20 + rand.nextInt(10), brightness, 0.0f, brightness);
- Wizardry.proxy.spawnParticle(WizardryParticleType.DARK_MAGIC, worldObj, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0d, 0.0d, 0.0d, 0, 0.1f, 0.0f, 0.0f);
+ if(world.isRemote){
+ for(int i = 0; i < 2; i++){
+ world.spawnParticle(EnumParticleTypes.PORTAL,
+ this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width,
+ this.posY + this.rand.nextDouble() * (double)this.height,
+ this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0, 0, 0);
+ world.spawnParticle(EnumParticleTypes.SMOKE_LARGE,
+ this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width,
+ this.posY + this.rand.nextDouble() * (double)this.height,
+ this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0, 0, 0);
+ float brightness = rand.nextFloat() * 0.2f;
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world,
+ this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width,
+ this.posY + this.rand.nextDouble() * (double)this.height,
+ this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0, 0.05f, 0,
+ 20 + rand.nextInt(10), brightness, 0.0f, brightness);
+ Wizardry.proxy.spawnParticle(WizardryParticleType.DARK_MAGIC, world,
+ this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width,
+ this.posY + this.rand.nextDouble() * (double)this.height,
+ this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0d, 0.0d, 0.0d, 0, 0.1f,
+ 0.0f, 0.0f);
}
}
super.onLivingUpdate();
}
-
+
@Override
public void fall(float distance, float damageMultiplier){
// Immune to fall damage.
}
-
+
}
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntitySilverfishMinion.java b/src/main/java/electroblob/wizardry/entity/living/EntitySilverfishMinion.java
index 2a8f237e..5663b86e 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntitySilverfishMinion.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntitySilverfishMinion.java
@@ -14,7 +14,6 @@ import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.monster.EntitySilverfish;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumHand;
import net.minecraft.util.ResourceLocation;
@@ -30,18 +29,41 @@ public class EntitySilverfishMinion extends EntitySilverfish implements ISummone
private UUID casterUUID;
// Setter + getter implementations
- @Override public int getLifetime(){ return lifetime; }
- @Override public void setLifetime(int lifetime){ this.lifetime = lifetime; }
- @Override public WeakReference getCasterReference(){ return casterReference; }
- @Override public void setCasterReference(WeakReference reference){ casterReference = reference; }
- @Override public UUID getCasterUUID() { return casterUUID; }
- @Override public void setCasterUUID(UUID uuid) { this.casterUUID = uuid; }
+ @Override
+ public int getLifetime(){
+ return lifetime;
+ }
+
+ @Override
+ public void setLifetime(int lifetime){
+ this.lifetime = lifetime;
+ }
+
+ @Override
+ public WeakReference getCasterReference(){
+ return casterReference;
+ }
+
+ @Override
+ public void setCasterReference(WeakReference reference){
+ casterReference = reference;
+ }
+
+ @Override
+ public UUID getCasterUUID(){
+ return casterUUID;
+ }
+
+ @Override
+ public void setCasterUUID(UUID uuid){
+ this.casterUUID = uuid;
+ }
/**
- * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't
- * matter because the client side entity immediately gets the lifetime value copied over to it by this class
- * anyway. When extending this class, you must override this constructor or Minecraft won't like it, but there's
- * no need to do anything inside it other than call super().
+ * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't matter
+ * because the client side entity immediately gets the lifetime value copied over to it by this class anyway. When
+ * extending this class, you must override this constructor or Minecraft won't like it, but there's no need to do
+ * anything inside it other than call super().
*/
public EntitySilverfishMinion(World world){
super(world);
@@ -49,8 +71,8 @@ public class EntitySilverfishMinion extends EntitySilverfish implements ISummone
}
/**
- * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when
- * extending this class (be sure to call super()) so that AI and other things can be added.
+ * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when extending
+ * this class (be sure to call super()) so that AI and other things can be added.
*/
public EntitySilverfishMinion(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
super(world);
@@ -62,8 +84,7 @@ public class EntitySilverfishMinion extends EntitySilverfish implements ISummone
// EntitySilverfish overrides
@Override
- protected void initEntityAI()
- {
+ protected void initEntityAI(){
// Super not called because we don't want AISummonSilverfish or AIHideInStone
this.tasks.addTask(1, new EntityAISwimming(this));
this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, false));
@@ -71,7 +92,7 @@ public class EntitySilverfishMinion extends EntitySilverfish implements ISummone
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
0, false, true, this.getTargetSelector()));
}
-
+
// Implementations
@Override
@@ -96,13 +117,15 @@ public class EntitySilverfishMinion extends EntitySilverfish implements ISummone
}
private void spawnParticleEffect(){
- if(this.worldObj.isRemote){
- for(int i=0;i<15;i++){
- Wizardry.proxy.spawnParticle(WizardryParticleType.DARK_MAGIC, worldObj, this.posX + this.rand.nextFloat(), this.posY + this.rand.nextFloat(), this.posZ + this.rand.nextFloat(), 0.0d, 0.0d, 0.0d, 0, 0.3f, 0.3f, 0.3f);
+ if(this.world.isRemote){
+ for(int i = 0; i < 15; i++){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.DARK_MAGIC, world, this.posX + this.rand.nextFloat(),
+ this.posY + this.rand.nextFloat(), this.posZ + this.rand.nextFloat(), 0.0d, 0.0d, 0.0d, 0, 0.3f,
+ 0.3f, 0.3f);
}
}
}
-
+
@Override
public void onSuccessfulAttack(EntityLivingBase target){
if(!target.isEntityAlive()){
@@ -111,30 +134,31 @@ public class EntitySilverfishMinion extends EntitySilverfish implements ISummone
}
@Override
- public void onKillEntity(EntityLivingBase victim) {
+ public void onKillEntity(EntityLivingBase victim){
// If the silverfish has a summoner, this is actually called from Wizardry's event handler rather than by
// Minecraft itself, because the damagesource being changed causes it not to get called.
- if(!this.worldObj.isRemote){
+ if(!this.world.isRemote){
// Summons 1-4 more silverfish
int alliesToSummon = rand.nextInt(4) + 1;
-
- for(int i=0; i entityType){
@@ -168,7 +215,7 @@ public class EntitySilverfishMinion extends EntitySilverfish implements ISummone
@Override
public ITextComponent getDisplayName(){
if(getCaster() != null){
- return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
+ return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
new TextComponentTranslation("entity." + this.getEntityString() + ".name"));
}else{
return super.getDisplayName();
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntitySkeletonMinion.java b/src/main/java/electroblob/wizardry/entity/living/EntitySkeletonMinion.java
index e62435f3..504f5b4b 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntitySkeletonMinion.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntitySkeletonMinion.java
@@ -14,16 +14,13 @@ import net.minecraft.entity.ai.EntityAIHurtByTarget;
import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.monster.EntitySkeleton;
-import net.minecraft.entity.monster.SkeletonType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
-import net.minecraft.init.MobEffects;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.potion.PotionEffect;
import net.minecraft.util.EnumHand;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.ResourceLocation;
@@ -40,18 +37,41 @@ public class EntitySkeletonMinion extends EntitySkeleton implements ISummonedCre
private UUID casterUUID;
// Setter + getter implementations
- @Override public int getLifetime(){ return lifetime; }
- @Override public void setLifetime(int lifetime){ this.lifetime = lifetime; }
- @Override public WeakReference getCasterReference(){ return casterReference; }
- @Override public void setCasterReference(WeakReference reference){ casterReference = reference; }
- @Override public UUID getCasterUUID() { return casterUUID; }
- @Override public void setCasterUUID(UUID uuid) { this.casterUUID = uuid; }
+ @Override
+ public int getLifetime(){
+ return lifetime;
+ }
+
+ @Override
+ public void setLifetime(int lifetime){
+ this.lifetime = lifetime;
+ }
+
+ @Override
+ public WeakReference getCasterReference(){
+ return casterReference;
+ }
+
+ @Override
+ public void setCasterReference(WeakReference reference){
+ casterReference = reference;
+ }
+
+ @Override
+ public UUID getCasterUUID(){
+ return casterUUID;
+ }
+
+ @Override
+ public void setCasterUUID(UUID uuid){
+ this.casterUUID = uuid;
+ }
/**
- * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't
- * matter because the client side entity immediately gets the lifetime value copied over to it by this class
- * anyway. When extending this class, you must override this constructor or Minecraft won't like it, but there's
- * no need to do anything inside it other than call super().
+ * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't matter
+ * because the client side entity immediately gets the lifetime value copied over to it by this class anyway. When
+ * extending this class, you must override this constructor or Minecraft won't like it, but there's no need to do
+ * anything inside it other than call super().
*/
public EntitySkeletonMinion(World world){
super(world);
@@ -59,8 +79,8 @@ public class EntitySkeletonMinion extends EntitySkeleton implements ISummonedCre
}
/**
- * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when
- * extending this class (be sure to call super()) so that AI and other things can be added.
+ * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when extending
+ * this class (be sure to call super()) so that AI and other things can be added.
*/
public EntitySkeletonMinion(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
super(world);
@@ -69,57 +89,52 @@ public class EntitySkeletonMinion extends EntitySkeleton implements ISummonedCre
this.experienceValue = 0;
this.lifetime = lifetime;
}
-
+
// EntitySkeleton overrides
// This particular override is pretty standard: let the superclass handle basic AI like swimming, but replace its
// targeting system with one that targets hostile mobs and takes the ADS into account.
@Override
- protected void initEntityAI()
- {
+ protected void initEntityAI(){
super.initEntityAI();
this.targetTasks.taskEntries.clear();
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false));
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
0, false, true, this.getTargetSelector()));
}
-
+
// Shouldn't have randomised armour, but does still need a bow!
@Override
- protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty) {
- this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.BOW));
+ protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty){
+ this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.BOW));
}
-
+
// Where the skeleton minion is summoned does not affect its type.
@Override
- public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata)
- {
+ public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata){
// Can't call super, so the code from the next level up (EntityLiving) had to be copied as well.
- this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).applyModifier(new AttributeModifier("Random spawn bonus", this.rand.nextGaussian() * 0.05D, 1));
+ this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE)
+ .applyModifier(new AttributeModifier("Random spawn bonus", this.rand.nextGaussian() * 0.05D, 1));
- if (this.rand.nextFloat() < 0.05F)
- {
- this.setLeftHanded(true);
- }
- else
- {
- this.setLeftHanded(false);
- }
+ if(this.rand.nextFloat() < 0.05F){
+ this.setLeftHanded(true);
+ }else{
+ this.setLeftHanded(false);
+ }
- // Halloween pumpkin heads! Why not?
- if (this.getItemStackFromSlot(EntityEquipmentSlot.HEAD) == null)
- {
- Calendar calendar = this.worldObj.getCurrentDate();
+ // Halloween pumpkin heads! Why not?
+ if(this.getItemStackFromSlot(EntityEquipmentSlot.HEAD) == null){
+ Calendar calendar = this.world.getCurrentDate();
- if (calendar.get(2) + 1 == 10 && calendar.get(5) == 31 && this.rand.nextFloat() < 0.25F)
- {
- this.setItemStackToSlot(EntityEquipmentSlot.HEAD, new ItemStack(this.rand.nextFloat() < 0.1F ? Blocks.LIT_PUMPKIN : Blocks.PUMPKIN));
- this.inventoryArmorDropChances[EntityEquipmentSlot.HEAD.getIndex()] = 0.0F;
- }
- }
+ if(calendar.get(2) + 1 == 10 && calendar.get(5) == 31 && this.rand.nextFloat() < 0.25F){
+ this.setItemStackToSlot(EntityEquipmentSlot.HEAD,
+ new ItemStack(this.rand.nextFloat() < 0.1F ? Blocks.LIT_PUMPKIN : Blocks.PUMPKIN));
+ this.inventoryArmorDropChances[EntityEquipmentSlot.HEAD.getIndex()] = 0.0F;
+ }
+ }
- return livingdata;
- }
+ return livingdata;
+ }
// Implementations
@@ -143,32 +158,26 @@ public class EntitySkeletonMinion extends EntitySkeleton implements ISummonedCre
public void onDespawn(){
this.spawnParticleEffect();
}
-
+
private void spawnParticleEffect(){
- if(this.worldObj.isRemote){
- for(int i=0;i<15;i++){
- this.worldObj.spawnParticle(EnumParticleTypes.SMOKE_LARGE, this.posX + this.rand.nextFloat(), this.posY + 1 + this.rand.nextFloat(), this.posZ + this.rand.nextFloat(), 0, 0, 0);
+ if(this.world.isRemote){
+ for(int i = 0; i < 15; i++){
+ this.world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, this.posX + this.rand.nextFloat(),
+ this.posY + 1 + this.rand.nextFloat(), this.posZ + this.rand.nextFloat(), 0, 0, 0);
}
}
}
@Override
- public boolean hasParticleEffect() {
+ public boolean hasParticleEffect(){
return true;
}
-
- @Override
- public void onSuccessfulAttack(EntityLivingBase target) {
- if(this.getSkeletonType() == SkeletonType.WITHER){
- target.addPotionEffect(new PotionEffect(MobEffects.WITHER, 200));
- }
- }
@Override
- protected boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack) {
+ protected boolean processInteract(EntityPlayer player, EnumHand hand){
// In this case, the delegate method determines whether super is called.
- // Rather handily, we can make use of Java's 'stop as soon as you find true' method of evaluating OR statements.
- return this.interactDelegate(player, hand, stack) || super.processInteract(player, hand, stack);
+ // Rather handily, we can make use of Java's short-circuiting method of evaluating OR statements.
+ return this.interactDelegate(player, hand) || super.processInteract(player, hand);
}
@Override
@@ -185,13 +194,36 @@ public class EntitySkeletonMinion extends EntitySkeleton implements ISummonedCre
// Recommended overrides
- @Override protected int getExperiencePoints(EntityPlayer player){ return 0; }
- @Override protected boolean canDropLoot(){ return false; }
- @Override protected Item getDropItem(){ return null; }
- @Override protected ResourceLocation getLootTable(){ return null; }
- @Override public boolean canPickUpLoot(){ return false; }
+ @Override
+ protected int getExperiencePoints(EntityPlayer player){
+ return 0;
+ }
+
+ @Override
+ protected boolean canDropLoot(){
+ return false;
+ }
+
+ @Override
+ protected Item getDropItem(){
+ return null;
+ }
+
+ @Override
+ protected ResourceLocation getLootTable(){
+ return null;
+ }
+
+ @Override
+ public boolean canPickUpLoot(){
+ return false;
+ }
+
// This vanilla method has nothing to do with the custom despawn() method.
- @Override protected boolean canDespawn(){ return false; }
+ @Override
+ protected boolean canDespawn(){
+ return false;
+ }
@Override
public boolean canAttackClass(Class extends EntityLivingBase> entityType){
@@ -201,7 +233,7 @@ public class EntitySkeletonMinion extends EntitySkeleton implements ISummonedCre
@Override
public ITextComponent getDisplayName(){
if(getCaster() != null){
- return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
+ return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
new TextComponentTranslation("entity." + this.getEntityString() + ".name"));
}else{
return super.getDisplayName();
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntitySpiderMinion.java b/src/main/java/electroblob/wizardry/entity/living/EntitySpiderMinion.java
index f5714361..9140874f 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntitySpiderMinion.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntitySpiderMinion.java
@@ -16,7 +16,6 @@ import net.minecraft.entity.monster.EntityCaveSpider;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.MobEffects;
import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.EnumHand;
@@ -35,18 +34,41 @@ public class EntitySpiderMinion extends EntityCaveSpider implements ISummonedCre
private UUID casterUUID;
// Setter + getter implementations
- @Override public int getLifetime(){ return lifetime; }
- @Override public void setLifetime(int lifetime){ this.lifetime = lifetime; }
- @Override public WeakReference getCasterReference(){ return casterReference; }
- @Override public void setCasterReference(WeakReference reference){ casterReference = reference; }
- @Override public UUID getCasterUUID() { return casterUUID; }
- @Override public void setCasterUUID(UUID uuid) { this.casterUUID = uuid; }
+ @Override
+ public int getLifetime(){
+ return lifetime;
+ }
+
+ @Override
+ public void setLifetime(int lifetime){
+ this.lifetime = lifetime;
+ }
+
+ @Override
+ public WeakReference getCasterReference(){
+ return casterReference;
+ }
+
+ @Override
+ public void setCasterReference(WeakReference reference){
+ casterReference = reference;
+ }
+
+ @Override
+ public UUID getCasterUUID(){
+ return casterUUID;
+ }
+
+ @Override
+ public void setCasterUUID(UUID uuid){
+ this.casterUUID = uuid;
+ }
/**
- * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't
- * matter because the client side entity immediately gets the lifetime value copied over to it by this class
- * anyway. When extending this class, you must override this constructor or Minecraft won't like it, but there's
- * no need to do anything inside it other than call super().
+ * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't matter
+ * because the client side entity immediately gets the lifetime value copied over to it by this class anyway. When
+ * extending this class, you must override this constructor or Minecraft won't like it, but there's no need to do
+ * anything inside it other than call super().
*/
public EntitySpiderMinion(World world){
super(world);
@@ -54,8 +76,8 @@ public class EntitySpiderMinion extends EntityCaveSpider implements ISummonedCre
}
/**
- * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when
- * extending this class (be sure to call super()) so that AI and other things can be added.
+ * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when extending
+ * this class (be sure to call super()) so that AI and other things can be added.
*/
public EntitySpiderMinion(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
super(world);
@@ -66,12 +88,11 @@ public class EntitySpiderMinion extends EntityCaveSpider implements ISummonedCre
}
// EntitySpider overrides
-
+
// This particular override is pretty standard: let the superclass handle basic AI like swimming, but replace its
// targeting system with one that targets hostile mobs and takes the ADS into account.
@Override
- protected void initEntityAI()
- {
+ protected void initEntityAI(){
super.initEntityAI();
this.targetTasks.taskEntries.clear();
// Spiders use a custom AI type specific to spiders which I can't access, but it's just an extension of
@@ -81,25 +102,23 @@ public class EntitySpiderMinion extends EntityCaveSpider implements ISummonedCre
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
0, false, true, this.getTargetSelector()));
}
-
+
// No spider jockeys!
@Override
- public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData livingdata) {
-
- // Can't call super, so the code from the next level up (EntityLiving) had to be copied as well.
- this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).applyModifier(new AttributeModifier("Random spawn bonus", this.rand.nextGaussian() * 0.05D, 1));
+ public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData livingdata){
- if (this.rand.nextFloat() < 0.05F)
- {
- this.setLeftHanded(true);
- }
- else
- {
- this.setLeftHanded(false);
- }
-
- // Don't need anything from EntitySpider, since neither spider jockeys nor group data is relevant.
- return livingdata;
+ // Can't call super, so the code from the next level up (EntityLiving) had to be copied as well.
+ this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE)
+ .applyModifier(new AttributeModifier("Random spawn bonus", this.rand.nextGaussian() * 0.05D, 1));
+
+ if(this.rand.nextFloat() < 0.05F){
+ this.setLeftHanded(true);
+ }else{
+ this.setLeftHanded(false);
+ }
+
+ // Don't need anything from EntitySpider, since neither spider jockeys nor group data is relevant.
+ return livingdata;
}
// Implementations
@@ -124,41 +143,43 @@ public class EntitySpiderMinion extends EntityCaveSpider implements ISummonedCre
public void onDespawn(){
this.spawnParticleEffect();
}
-
+
private void spawnParticleEffect(){
- if(this.worldObj.isRemote){
- for(int i=0;i<15;i++){
- Wizardry.proxy.spawnParticle(WizardryParticleType.DARK_MAGIC, worldObj, this.posX + this.rand.nextFloat(), this.posY + this.rand.nextFloat(), this.posZ + this.rand.nextFloat(), 0.0d, 0.0d, 0.0d, 0, 0.1f, 0.2f, 0.0f);
- }
+ if(this.world.isRemote){
+ for(int i = 0; i < 15; i++){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.DARK_MAGIC, world, this.posX + this.rand.nextFloat(),
+ this.posY + this.rand.nextFloat(), this.posZ + this.rand.nextFloat(), 0.0d, 0.0d, 0.0d, 0, 0.1f,
+ 0.2f, 0.0f);
+ }
}
}
@Override
- public boolean hasParticleEffect() {
+ public boolean hasParticleEffect(){
return true;
}
-
+
@Override
public void onSuccessfulAttack(EntityLivingBase target){
-
+
int seconds = 0;
- if(this.worldObj.getDifficulty() == EnumDifficulty.NORMAL){
- seconds = 7;
- }else if(this.worldObj.getDifficulty() == EnumDifficulty.HARD){
- seconds = 15;
- }
+ if(this.world.getDifficulty() == EnumDifficulty.NORMAL){
+ seconds = 7;
+ }else if(this.world.getDifficulty() == EnumDifficulty.HARD){
+ seconds = 15;
+ }
- if(seconds > 0){
- target.addPotionEffect(new PotionEffect(MobEffects.POISON, seconds * 20, 0));
- }
+ if(seconds > 0){
+ target.addPotionEffect(new PotionEffect(MobEffects.POISON, seconds * 20, 0));
+ }
}
@Override
- protected boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack) {
+ protected boolean processInteract(EntityPlayer player, EnumHand hand){
// In this case, the delegate method determines whether super is called.
- // Rather handily, we can make use of Java's 'stop as soon as you find true' method of evaluating OR statements.
- return this.interactDelegate(player, hand, stack) || super.processInteract(player, hand, stack);
+ // Rather handily, we can make use of Java's short-circuiting method of evaluating OR statements.
+ return this.interactDelegate(player, hand) || super.processInteract(player, hand);
}
@Override
@@ -175,13 +196,36 @@ public class EntitySpiderMinion extends EntityCaveSpider implements ISummonedCre
// Recommended overrides
- @Override protected int getExperiencePoints(EntityPlayer player){ return 0; }
- @Override protected boolean canDropLoot(){ return false; }
- @Override protected Item getDropItem(){ return null; }
- @Override protected ResourceLocation getLootTable(){ return null; }
- @Override public boolean canPickUpLoot(){ return false; }
+ @Override
+ protected int getExperiencePoints(EntityPlayer player){
+ return 0;
+ }
+
+ @Override
+ protected boolean canDropLoot(){
+ return false;
+ }
+
+ @Override
+ protected Item getDropItem(){
+ return null;
+ }
+
+ @Override
+ protected ResourceLocation getLootTable(){
+ return null;
+ }
+
+ @Override
+ public boolean canPickUpLoot(){
+ return false;
+ }
+
// This vanilla method has nothing to do with the custom despawn() method.
- @Override protected boolean canDespawn(){ return false; }
+ @Override
+ protected boolean canDespawn(){
+ return false;
+ }
@Override
public boolean canAttackClass(Class extends EntityLivingBase> entityType){
@@ -192,7 +236,7 @@ public class EntitySpiderMinion extends EntityCaveSpider implements ISummonedCre
@Override
public ITextComponent getDisplayName(){
if(getCaster() != null){
- return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
+ return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
new TextComponentTranslation("entity." + this.getEntityString() + ".name"));
}else{
return super.getDisplayName();
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntitySpiritHorse.java b/src/main/java/electroblob/wizardry/entity/living/EntitySpiritHorse.java
index 47be717e..227b713a 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntitySpiritHorse.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntitySpiritHorse.java
@@ -23,78 +23,74 @@ import net.minecraft.util.text.translation.I18n;
import net.minecraft.world.DifficultyInstance;
import net.minecraft.world.World;
-/** Does not implement ISummonedCreature because it has different despawning rules and because EntityHorse already
- * has an owner system. */
+/**
+ * Does not implement ISummonedCreature because it has different despawning rules and because EntityHorse already has an
+ * owner system.
+ */
@SuppressWarnings("deprecation") // It's what Entity does, so...
public class EntitySpiritHorse extends EntityHorse {
-
+
private int idleTimer = 0;
- public EntitySpiritHorse(World par1World)
- {
+ public EntitySpiritHorse(World par1World){
super(par1World);
}
@Override
- public String getName()
- {
- if (this.hasCustomName())
- {
+ public String getName(){
+ if(this.hasCustomName()){
return this.getCustomNameTag();
- }
- else
- {
+ }else{
return I18n.translateToLocal("entity.wizardry.Spirit Horse.name");
}
}
@Override
- public boolean isChested()
- {
- return false;
- }
-
- @Override
- public int getTotalArmorValue()
- {
+ public int getTotalArmorValue(){
return 0;
}
-
+
@Override
- protected int getExperiencePoints(EntityPlayer p_70693_1_){
- return 0;
- }
-
+ protected int getExperiencePoints(EntityPlayer p_70693_1_){
+ return 0;
+ }
+
@Override
protected Item getDropItem(){
-
- return null;
- }
+
+ return null;
+ }
@Override
- protected void dropFewItems(boolean par1, int par2){}
+ protected void dropFewItems(boolean par1, int par2){
+ }
@Override
- protected void applyEntityAttributes()
- {
- super.applyEntityAttributes();
- this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(24.0D);
- }
-
- @Override
- public void openGUI(EntityPlayer p_110199_1_){}
+ protected void applyEntityAttributes(){
+ super.applyEntityAttributes();
+ this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(24.0D);
+ }
@Override
- public boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack){
-
- ItemStack itemstack = player.inventory.getCurrentItem();
-
- // Allows the owner (but not other players) to dispel the spirit horse using a wand (shift-clicking, because clicking mounts the horse in this case).
- if(itemstack != null && itemstack.getItem() instanceof ItemWand && this.getOwner() == player && player.isSneaking()){
+ public void openGUI(EntityPlayer p_110199_1_){
+ }
+
+ @Override
+ public boolean processInteract(EntityPlayer player, EnumHand hand){
+
+ ItemStack itemstack = player.getHeldItem(hand);
+
+ // Allows the owner (but not other players) to dispel the spirit horse using a wand (shift-clicking, because
+ // clicking mounts the horse in this case).
+ if(itemstack.getItem() instanceof ItemWand && this.getOwner() == player && player.isSneaking()){
// Prevents accidental double clicking.
if(this.ticksExisted > 20){
- for(int i=0;i<15;i++){
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, worldObj, this.posX - this.width/2 + this.rand.nextFloat()*width, this.posY + this.height*this.rand.nextFloat() + 0.2f, this.posZ - this.width/2 + this.rand.nextFloat()*width, 0, 0, 0, 48 + this.rand.nextInt(12), 0.8f, 0.8f, 1.0f);
+ for(int i = 0; i < 15; i++){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world,
+ this.posX - this.width / 2 + this.rand.nextFloat() * width,
+ this.posY + this.height * this.rand.nextFloat() + 0.2f,
+ this.posZ - this.width / 2 + this.rand.nextFloat() * width, 0, 0, 0,
+ 48 + this.rand.nextInt(12), 0.8f, 0.8f, 1.0f);
}
this.setDead();
if(WizardData.get(player) != null){
@@ -106,15 +102,15 @@ public class EntitySpiritHorse extends EntityHorse {
}
return false;
}
-
- return super.processInteract(player, hand, itemstack);
+
+ return super.processInteract(player, hand);
}
-
+
@Override
public void onDeath(DamageSource par1DamageSource){
-
+
super.onDeath(par1DamageSource);
-
+
// Allows player to summon another spirit horse once this one has died.
if(this.getOwner() instanceof EntityPlayer && WizardData.get((EntityPlayer)this.getOwner()) != null){
WizardData.get((EntityPlayer)this.getOwner()).hasSpiritHorse = false;
@@ -123,10 +119,10 @@ public class EntitySpiritHorse extends EntityHorse {
// I wrote this one!
private EntityLivingBase getOwner(){
-
+
// I think the DataManager stores any objects, so it now stores the UUID instead of its string representation.
- Entity owner = WizardryUtilities.getEntityByUUID(worldObj, this.getOwnerUniqueId());
-
+ Entity owner = WizardryUtilities.getEntityByUUID(world, this.getOwnerUniqueId());
+
if(owner instanceof EntityLivingBase){
return (EntityLivingBase)owner;
}else{
@@ -136,12 +132,15 @@ public class EntitySpiritHorse extends EntityHorse {
@Override
public void onUpdate(){
-
+
super.onUpdate();
// Adds a dust particle effect
- if(this.worldObj.isRemote){
- Wizardry.proxy.spawnParticle(WizardryParticleType.DUST, worldObj, this.posX - this.width/2 + this.rand.nextFloat()*width, this.posY + this.height*this.rand.nextFloat() + 0.2f, this.posZ - this.width/2 + this.rand.nextFloat()*width, 0, 0, 0, 0, 0.8f, 0.8f, 1.0f);
+ if(this.world.isRemote){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.DUST, world,
+ this.posX - this.width / 2 + this.rand.nextFloat() * width,
+ this.posY + this.height * this.rand.nextFloat() + 0.2f,
+ this.posZ - this.width / 2 + this.rand.nextFloat() * width, 0, 0, 0, 0, 0.8f, 0.8f, 1.0f);
}
// Spirit horse disappears a short time after being dismounted.
@@ -152,9 +151,13 @@ public class EntitySpiritHorse extends EntityHorse {
}
if(this.idleTimer > 200){
- if(this.worldObj.isRemote){
- for(int i=0;i<15;i++){
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, worldObj, this.posX - this.width/2 + this.rand.nextFloat()*width, this.posY + this.height*this.rand.nextFloat() + 0.2f, this.posZ - this.width/2 + this.rand.nextFloat()*width, 0, 0, 0, 48 + this.rand.nextInt(12), 0.8f, 0.8f, 1.0f);
+ if(this.world.isRemote){
+ for(int i = 0; i < 15; i++){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world,
+ this.posX - this.width / 2 + this.rand.nextFloat() * width,
+ this.posY + this.height * this.rand.nextFloat() + 0.2f,
+ this.posZ - this.width / 2 + this.rand.nextFloat() * width, 0, 0, 0,
+ 48 + this.rand.nextInt(12), 0.8f, 0.8f, 1.0f);
}
}
this.playSound(WizardrySounds.SPELL_HEAL, 0.7F, rand.nextFloat() * 0.4F + 1.0F);
@@ -170,24 +173,28 @@ public class EntitySpiritHorse extends EntityHorse {
public boolean canMateWith(EntityAnimal par1EntityAnimal){
return false;
}
-
+
@Override
public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData data){
-
+
// Adds Particles on spawn. Due to client/server differences this cannot be done in the item.
- if(this.worldObj.isRemote){
- for(int i=0;i<15;i++){
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, worldObj, this.posX - this.width/2 + this.rand.nextFloat()*width, this.posY + this.height*this.rand.nextFloat() + 0.2f, this.posZ - this.width/2 + this.rand.nextFloat()*width, 0, 0, 0, 48 + this.rand.nextInt(12), 0.8f, 0.8f, 1.0f);
+ if(this.world.isRemote){
+ for(int i = 0; i < 15; i++){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world,
+ this.posX - this.width / 2 + this.rand.nextFloat() * width,
+ this.posY + this.height * this.rand.nextFloat() + 0.2f,
+ this.posZ - this.width / 2 + this.rand.nextFloat() * width, 0, 0, 0, 48 + this.rand.nextInt(12),
+ 0.8f, 0.8f, 1.0f);
}
}
-
+
return super.onInitialSpawn(difficulty, data);
}
-
+
@Override
public ITextComponent getDisplayName(){
if(getOwner() != null){
- return new TextComponentTranslation(ISummonedCreature.NAMEPLATE_TRANSLATION_KEY, getOwner().getName(),
+ return new TextComponentTranslation(ISummonedCreature.NAMEPLATE_TRANSLATION_KEY, getOwner().getName(),
new TextComponentTranslation("entity." + this.getEntityString() + ".name"));
}else{
return super.getDisplayName();
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntitySpiritWolf.java b/src/main/java/electroblob/wizardry/entity/living/EntitySpiritWolf.java
index 6de76c7b..9fd953d3 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntitySpiritWolf.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntitySpiritWolf.java
@@ -29,119 +29,133 @@ import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.DifficultyInstance;
import net.minecraft.world.World;
-/** Does not implement ISummonedCreature because it has different despawning rules and because EntityWolf already
- * has an owner system. */
+/**
+ * Does not implement ISummonedCreature because it has different despawning rules and because EntityWolf already has an
+ * owner system.
+ */
public class EntitySpiritWolf extends EntityWolf {
- public EntitySpiritWolf(World par1World){
-
- super(par1World);
- this.experienceValue = 0;
- }
-
- @Override
- protected void initEntityAI(){
-
- this.aiSit = new EntityAISit(this);
- this.tasks.addTask(1, new EntityAISwimming(this));
- this.tasks.addTask(2, this.aiSit);
- this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F));
- this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, true));
- this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F));
- this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
- this.tasks.addTask(9, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
- this.tasks.addTask(9, new EntityAILookIdle(this));
- this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this));
- this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this));
- this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true, new Class[0]));
- }
+ public EntitySpiritWolf(World par1World){
- @Override
- public void onDeath(DamageSource source){
-
- // Allows player to summon another spirit wolf once this one has died.
- // NOTE: This has been known to work incorrectly.
+ super(par1World);
+ this.experienceValue = 0;
+ }
+
+ @Override
+ protected void initEntityAI(){
+
+ this.aiSit = new EntityAISit(this);
+ this.tasks.addTask(1, new EntityAISwimming(this));
+ this.tasks.addTask(2, this.aiSit);
+ this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F));
+ this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, true));
+ this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F));
+ this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
+ this.tasks.addTask(9, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
+ this.tasks.addTask(9, new EntityAILookIdle(this));
+ this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this));
+ this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this));
+ this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true, new Class[0]));
+ }
+
+ @Override
+ public void onDeath(DamageSource source){
+
+ // Allows player to summon another spirit wolf once this one has died.
+ // NOTE: This has been known to work incorrectly.
if(this.getOwner() instanceof EntityPlayer && WizardData.get((EntityPlayer)this.getOwner()) != null){
WizardData.get((EntityPlayer)this.getOwner()).hasSpiritWolf = false;
}
-
- super.onDeath(source);
- }
-
- @Override
- protected int getExperiencePoints(EntityPlayer p_70693_1_){
- return 0;
- }
-
- @Override
- public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData livingdata) {
- // Adds Particles on spawn. Due to client/server differences this cannot be done in the item.
- if(this.worldObj.isRemote){
- for(int i=0;i<15;i++){
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, worldObj, this.posX - this.width/2 + this.rand.nextFloat()*width, this.posY + this.height*this.rand.nextFloat() + 0.2f, this.posZ - this.width/2 + this.rand.nextFloat()*width, 0, 0, 0, 48 + this.rand.nextInt(12), 0.8f, 0.8f, 1.0f);
- }
- }
-
+ super.onDeath(source);
+ }
+
+ @Override
+ protected int getExperiencePoints(EntityPlayer p_70693_1_){
+ return 0;
+ }
+
+ @Override
+ public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData livingdata){
+
+ // Adds Particles on spawn. Due to client/server differences this cannot be done
+ // in the item.
+ if(this.world.isRemote){
+ for(int i = 0; i < 15; i++){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, world,
+ this.posX - this.width / 2 + this.rand.nextFloat() * width,
+ this.posY + this.height * this.rand.nextFloat() + 0.2f,
+ this.posZ - this.width / 2 + this.rand.nextFloat() * width, 0, 0, 0, 48 + this.rand.nextInt(12),
+ 0.8f, 0.8f, 1.0f);
+ }
+ }
+
return livingdata;
- }
-
- @Override
- public void onUpdate(){
-
- super.onUpdate();
-
- // Adds a dust particle effect
- if(this.worldObj.isRemote){
- Wizardry.proxy.spawnParticle(WizardryParticleType.DUST, worldObj, this.posX - this.width/2 + this.rand.nextFloat()*width, this.posY + this.height*this.rand.nextFloat() + 0.2f, this.posZ - this.width/2 + this.rand.nextFloat()*width, 0, 0, 0, 0, 0.8f, 0.8f, 1.0f);
- }
- }
-
- @Override
- public boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack) {
+ }
- if (this.isTamed())
- {
- if (stack != null){
-
- // Allows the owner (but not other players) to dispel the spirit wolf using a wand.
- if(stack != null && stack.getItem() instanceof ItemWand && this.getOwner() == player && player.isSneaking()){
- // Prevents accidental double clicking.
- if(this.ticksExisted > 20){
- for(int i=0;i<10;i++){
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, worldObj, this.posX - this.width/2 + this.rand.nextFloat()*width, this.posY + this.height*this.rand.nextFloat() + 0.2f, this.posZ - this.width/2 + this.rand.nextFloat()*width, 0, 0, 0, 48 + this.rand.nextInt(12), 0.8f, 0.8f, 1.0f);
- }
- this.setDead();
- if(WizardData.get(player) != null){
- WizardData.get(player).hasSpiritWolf = false;
- }
- this.playSound(WizardrySounds.SPELL_HEAL, 0.7F, rand.nextFloat() * 0.4F + 1.0F);
- // This is necessary to prevent the wand's spell being cast when performing this action.
- return true;
- }
- }
- }
- }
+ @Override
+ public void onUpdate(){
- return super.processInteract(player, hand, stack);
- }
+ super.onUpdate();
- @Override
- public EntityWolf createChild(EntityAgeable par1EntityAgeable)
- {
- return null;
- }
+ // Adds a dust particle effect
+ if(this.world.isRemote){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.DUST, world,
+ this.posX - this.width / 2 + this.rand.nextFloat() * width,
+ this.posY + this.height * this.rand.nextFloat() + 0.2f,
+ this.posZ - this.width / 2 + this.rand.nextFloat() * width, 0, 0, 0, 0, 0.8f, 0.8f, 1.0f);
+ }
+ }
- @Override
- protected Item getDropItem()
- {
- return null;
- }
-
- @Override
+ @Override
+ public boolean processInteract(EntityPlayer player, EnumHand hand){
+
+ ItemStack stack = player.getHeldItem(hand);
+
+ if(this.isTamed()){
+
+ // Allows the owner (but not other players) to dispel the spirit wolf using a
+ // wand.
+ if(stack.getItem() instanceof ItemWand && this.getOwner() == player && player.isSneaking()){
+ // Prevents accidental double clicking.
+ if(this.ticksExisted > 20){
+ for(int i = 0; i < 10; i++){
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world,
+ this.posX - this.width / 2 + this.rand.nextFloat() * width,
+ this.posY + this.height * this.rand.nextFloat() + 0.2f,
+ this.posZ - this.width / 2 + this.rand.nextFloat() * width, 0, 0, 0,
+ 48 + this.rand.nextInt(12), 0.8f, 0.8f, 1.0f);
+ }
+ this.setDead();
+ if(WizardData.get(player) != null){
+ WizardData.get(player).hasSpiritWolf = false;
+ }
+ this.playSound(WizardrySounds.SPELL_HEAL, 0.7F, rand.nextFloat() * 0.4F + 1.0F);
+ // This is necessary to prevent the wand's spell being cast when performing this
+ // action.
+ return true;
+ }
+ }
+ }
+
+ return super.processInteract(player, hand);
+
+ }
+
+ @Override
+ public EntityWolf createChild(EntityAgeable par1EntityAgeable){
+ return null;
+ }
+
+ @Override
+ protected Item getDropItem(){
+ return null;
+ }
+
+ @Override
public ITextComponent getDisplayName(){
if(getOwner() != null){
- return new TextComponentTranslation(ISummonedCreature.NAMEPLATE_TRANSLATION_KEY, getOwner().getName(),
+ return new TextComponentTranslation(ISummonedCreature.NAMEPLATE_TRANSLATION_KEY, getOwner().getName(),
new TextComponentTranslation("entity." + this.getEntityString() + ".name"));
}else{
return super.getDisplayName();
@@ -150,7 +164,8 @@ public class EntitySpiritWolf extends EntityWolf {
@Override
public boolean hasCustomName(){
- // If this returns true, the renderer will show the nameplate when looking directly at the entity
+ // If this returns true, the renderer will show the nameplate when looking
+ // directly at the entity
return Wizardry.settings.showSummonedCreatureNames && getOwner() != null;
}
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityStormElemental.java b/src/main/java/electroblob/wizardry/entity/living/EntityStormElemental.java
index 204d95a0..5eb74cd9 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityStormElemental.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityStormElemental.java
@@ -25,11 +25,11 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class EntityStormElemental extends EntitySummonedCreature implements ISpellCaster {
-
+
private double AISpeed = 1.0;
-
- private EntityAIAttackSpell spellAttackAI = new EntityAIAttackSpell(this, AISpeed, 15f, 30, 0);
-
+
+ private EntityAIAttackSpell spellAttackAI = new EntityAIAttackSpell(this, AISpeed, 15f, 30, 0);
+
private static final List attack = Collections.singletonList(Spells.lightning_disc);
public EntityStormElemental(World world){
@@ -39,24 +39,24 @@ public class EntityStormElemental extends EntitySummonedCreature implements ISpe
public EntityStormElemental(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
super(world, x, y, z, caster, lifetime);
// For some reason this can't be in initEntityAI
- this.tasks.addTask(0, this.spellAttackAI);
+ this.tasks.addTask(0, this.spellAttackAI);
}
-
+
@Override
protected void initEntityAI(){
- this.tasks.addTask(1, new EntityAIAttackMelee(this, AISpeed, false));
+ this.tasks.addTask(1, new EntityAIAttackMelee(this, AISpeed, false));
this.tasks.addTask(2, new EntityAIWander(this, AISpeed));
this.tasks.addTask(3, new EntityAILookIdle(this));
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
- this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
- 0, false, true, this.getTargetSelector()));
+ this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
+ 0, false, true, this.getTargetSelector()));
- this.setAIMoveSpeed((float)AISpeed);
+ this.setAIMoveSpeed((float)AISpeed);
}
@Override
- public boolean hasRangedAttack() {
+ public boolean hasRangedAttack(){
return true;
}
@@ -83,27 +83,27 @@ public class EntityStormElemental extends EntitySummonedCreature implements ISpe
@Override
protected void applyEntityAttributes(){
super.applyEntityAttributes();
- this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D);
+ this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D);
this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(AISpeed);
this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(30.0D);
this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(16.0D);
}
- @Override
- protected SoundEvent getAmbientSound(){
- return SoundEvents.ENTITY_BLAZE_AMBIENT;
- }
+ @Override
+ protected SoundEvent getAmbientSound(){
+ return SoundEvents.ENTITY_BLAZE_AMBIENT;
+ }
- @Override
- protected SoundEvent getHurtSound(){
- return SoundEvents.ENTITY_BLAZE_HURT;
- }
+ @Override
+ protected SoundEvent getHurtSound(){
+ return SoundEvents.ENTITY_BLAZE_HURT;
+ }
+
+ @Override
+ protected SoundEvent getDeathSound(){
+ return SoundEvents.ENTITY_BLAZE_DEATH;
+ }
- @Override
- protected SoundEvent getDeathSound(){
- return SoundEvents.ENTITY_BLAZE_DEATH;
- }
-
@Override
@SideOnly(Side.CLIENT)
public int getBrightnessForRender(float partialTicks){
@@ -122,8 +122,9 @@ public class EntityStormElemental extends EntitySummonedCreature implements ISpe
this.playSound(WizardrySounds.SPELL_LOOP_WIND, 1.0f, 1.0f);
}
- if (this.rand.nextInt(24) == 0){
- this.playSound(SoundEvents.ENTITY_BLAZE_BURN, 1.0F + this.rand.nextFloat(), this.rand.nextFloat() * 0.7F + 0.3F);
+ if(this.rand.nextInt(24) == 0){
+ this.playSound(SoundEvents.ENTITY_BLAZE_BURN, 1.0F + this.rand.nextFloat(),
+ this.rand.nextFloat() * 0.7F + 0.3F);
}
// Slow fall
@@ -131,28 +132,35 @@ public class EntityStormElemental extends EntitySummonedCreature implements ISpe
this.motionY *= 0.6D;
}
- if(worldObj.isRemote){
-
- for(int i=0; i<2; ++i){
- worldObj.spawnParticle(EnumParticleTypes.SMOKE_LARGE, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0, 0, 0);
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, worldObj, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0d, 0.0d, 0.0d, 0, 0, 0, 0);
+ if(world.isRemote){
+
+ for(int i = 0; i < 2; ++i){
+ world.spawnParticle(EnumParticleTypes.SMOKE_LARGE,
+ this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width,
+ this.posY + this.rand.nextDouble() * (double)this.height,
+ this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0, 0, 0);
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARK, world,
+ this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width,
+ this.posY + this.rand.nextDouble() * (double)this.height,
+ this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0d, 0.0d, 0.0d, 0, 0, 0, 0);
}
- for(int i=0; i<10; i++){
- float brightness = rand.nextFloat()*0.2f;
+ for(int i = 0; i < 10; i++){
+ float brightness = rand.nextFloat() * 0.2f;
double dy = this.rand.nextDouble() * (double)this.height;
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE_ROTATING, worldObj, this.posX, this.posY + dy, this.posZ, 0, 0, 0, 20 + rand.nextInt(10), 0, brightness, brightness, false, 0.2f + 0.5f*dy);
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE_ROTATING, world, this.posX, this.posY + dy,
+ this.posZ, 0, 0, 0, 20 + rand.nextInt(10), 0, brightness, brightness, false, 0.2f + 0.5f * dy);
}
}
super.onLivingUpdate();
}
-
+
@Override
public void fall(float distance, float damageMultiplier){
// Immune to fall damage.
}
-
+
@Override
public void onStruckByLightning(EntityLightningBolt lightning){
// Immune to lightning.
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntitySummonedCreature.java b/src/main/java/electroblob/wizardry/entity/living/EntitySummonedCreature.java
index 9ed6d48f..e3cd7d50 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntitySummonedCreature.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntitySummonedCreature.java
@@ -9,7 +9,6 @@ import net.minecraft.entity.EntityFlying;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumHand;
import net.minecraft.util.ResourceLocation;
@@ -17,12 +16,16 @@ import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.World;
-/** Abstract base implementation of {@link ISummonedCreature} which is the superclass to all custom summoned entities
- * (i.e. entities that don't extend vanilla/mod creatures). Also serves as an example of how to correctly implement
- * the above interface, and includes some non-critical method overrides which should be used for best results (xp, drops,
- * and such like). Not to be confused with the old version of EntitySummonedCreature; that system has been replaced.
+/**
+ * Abstract base implementation of {@link ISummonedCreature} which is the superclass to all custom summoned entities
+ * (i.e. entities that don't extend vanilla/mod creatures). Also serves as an example of how to correctly implement the
+ * above interface, and includes some non-critical method overrides which should be used for best results (xp, drops,
+ * and such like). Not to be confused with the old version of EntitySummonedCreature; that system has been
+ * replaced.
+ *
* @since Wizardry 1.2
- * @author Electroblob */
+ * @author Electroblob
+ */
public abstract class EntitySummonedCreature extends EntityCreature implements ISummonedCreature {
// Field implementations
@@ -31,18 +34,41 @@ public abstract class EntitySummonedCreature extends EntityCreature implements I
private UUID casterUUID;
// Setter + getter implementations
- @Override public int getLifetime(){ return lifetime; }
- @Override public void setLifetime(int lifetime){ this.lifetime = lifetime; }
- @Override public WeakReference getCasterReference(){ return casterReference; }
- @Override public void setCasterReference(WeakReference reference){ casterReference = reference; }
- @Override public UUID getCasterUUID() { return casterUUID; }
- @Override public void setCasterUUID(UUID uuid) { this.casterUUID = uuid; }
+ @Override
+ public int getLifetime(){
+ return lifetime;
+ }
+
+ @Override
+ public void setLifetime(int lifetime){
+ this.lifetime = lifetime;
+ }
+
+ @Override
+ public WeakReference getCasterReference(){
+ return casterReference;
+ }
+
+ @Override
+ public void setCasterReference(WeakReference reference){
+ casterReference = reference;
+ }
+
+ @Override
+ public UUID getCasterUUID(){
+ return casterUUID;
+ }
+
+ @Override
+ public void setCasterUUID(UUID uuid){
+ this.casterUUID = uuid;
+ }
/**
- * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't
- * matter because the client side entity immediately gets the lifetime value copied over to it by this class
- * anyway. When extending this class, you must override this constructor or Minecraft won't like it, but there's
- * no need to do anything inside it other than call super().
+ * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't matter
+ * because the client side entity immediately gets the lifetime value copied over to it by this class anyway. When
+ * extending this class, you must override this constructor or Minecraft won't like it, but there's no need to do
+ * anything inside it other than call super().
*/
public EntitySummonedCreature(World world){
super(world);
@@ -50,8 +76,8 @@ public abstract class EntitySummonedCreature extends EntityCreature implements I
}
/**
- * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when
- * extending this class (be sure to call super()) so that AI and other things can be added.
+ * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when extending
+ * this class (be sure to call super()) so that AI and other things can be added.
*/
public EntitySummonedCreature(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
super(world);
@@ -60,7 +86,7 @@ public abstract class EntitySummonedCreature extends EntityCreature implements I
this.experienceValue = 0;
this.lifetime = lifetime;
}
-
+
// Implementations
@Override
@@ -75,21 +101,23 @@ public abstract class EntitySummonedCreature extends EntityCreature implements I
}
@Override
- public void onSpawn(){}
+ public void onSpawn(){
+ }
@Override
- public void onDespawn(){}
+ public void onDespawn(){
+ }
@Override
- public boolean hasParticleEffect() {
+ public boolean hasParticleEffect(){
return false;
}
@Override
- protected boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack) {
+ protected boolean processInteract(EntityPlayer player, EnumHand hand){
// In this case, the delegate method determines whether super is called.
// Rather handily, we can make use of Java's short-circuiting method of evaluating OR statements.
- return this.interactDelegate(player, hand, stack) || super.processInteract(player, hand, stack);
+ return this.interactDelegate(player, hand) || super.processInteract(player, hand);
}
@Override
@@ -106,13 +134,36 @@ public abstract class EntitySummonedCreature extends EntityCreature implements I
// Recommended overrides
- @Override protected int getExperiencePoints(EntityPlayer player){ return 0; }
- @Override protected boolean canDropLoot(){ return false; }
- @Override protected Item getDropItem(){ return null; }
- @Override protected ResourceLocation getLootTable(){ return null; }
- @Override public boolean canPickUpLoot(){ return false; }
+ @Override
+ protected int getExperiencePoints(EntityPlayer player){
+ return 0;
+ }
+
+ @Override
+ protected boolean canDropLoot(){
+ return false;
+ }
+
+ @Override
+ protected Item getDropItem(){
+ return null;
+ }
+
+ @Override
+ protected ResourceLocation getLootTable(){
+ return null;
+ }
+
+ @Override
+ public boolean canPickUpLoot(){
+ return false;
+ }
+
// This vanilla method has nothing to do with the custom onDespawn() method.
- @Override protected boolean canDespawn(){ return false; }
+ @Override
+ protected boolean canDespawn(){
+ return false;
+ }
@Override
public boolean canAttackClass(Class extends EntityLivingBase> entityType){
@@ -124,7 +175,7 @@ public abstract class EntitySummonedCreature extends EntityCreature implements I
@Override
public ITextComponent getDisplayName(){
if(getCaster() != null){
- return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
+ return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
new TextComponentTranslation("entity." + this.getEntityString() + ".name"));
}else{
return super.getDisplayName();
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityWitherSkeletonMinion.java b/src/main/java/electroblob/wizardry/entity/living/EntityWitherSkeletonMinion.java
new file mode 100644
index 00000000..c19aad97
--- /dev/null
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityWitherSkeletonMinion.java
@@ -0,0 +1,255 @@
+package electroblob.wizardry.entity.living;
+
+import java.lang.ref.WeakReference;
+import java.util.Calendar;
+import java.util.UUID;
+
+import javax.annotation.Nullable;
+
+import electroblob.wizardry.Wizardry;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.IEntityLivingData;
+import net.minecraft.entity.SharedMonsterAttributes;
+import net.minecraft.entity.ai.EntityAIHurtByTarget;
+import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
+import net.minecraft.entity.ai.attributes.AttributeModifier;
+import net.minecraft.entity.monster.EntityWitherSkeleton;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.init.MobEffects;
+import net.minecraft.inventory.EntityEquipmentSlot;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.potion.PotionEffect;
+import net.minecraft.util.EnumHand;
+import net.minecraft.util.EnumParticleTypes;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.text.ITextComponent;
+import net.minecraft.util.text.TextComponentTranslation;
+import net.minecraft.world.DifficultyInstance;
+import net.minecraft.world.World;
+
+public class EntityWitherSkeletonMinion extends EntityWitherSkeleton implements ISummonedCreature {
+
+ // Field implementations
+ private int lifetime = 600;
+ private WeakReference casterReference;
+ private UUID casterUUID;
+
+ // Setter + getter implementations
+ @Override
+ public int getLifetime(){
+ return lifetime;
+ }
+
+ @Override
+ public void setLifetime(int lifetime){
+ this.lifetime = lifetime;
+ }
+
+ @Override
+ public WeakReference getCasterReference(){
+ return casterReference;
+ }
+
+ @Override
+ public void setCasterReference(WeakReference reference){
+ casterReference = reference;
+ }
+
+ @Override
+ public UUID getCasterUUID(){
+ return casterUUID;
+ }
+
+ @Override
+ public void setCasterUUID(UUID uuid){
+ this.casterUUID = uuid;
+ }
+
+ /**
+ * Default shell constructor, only used by client. Lifetime defaults arbitrarily to 600, but this doesn't matter
+ * because the client side entity immediately gets the lifetime value copied over to it by this class anyway. When
+ * extending this class, you must override this constructor or Minecraft won't like it, but there's no need to do
+ * anything inside it other than call super().
+ */
+ public EntityWitherSkeletonMinion(World world){
+ super(world);
+ this.experienceValue = 0;
+ }
+
+ /**
+ * Set lifetime to -1 to allow this creature to last forever. This constructor should be overridden when extending
+ * this class (be sure to call super()) so that AI and other things can be added.
+ */
+ public EntityWitherSkeletonMinion(World world, double x, double y, double z, EntityLivingBase caster, int lifetime){
+ super(world);
+ this.setPosition(x, y, z);
+ this.casterReference = new WeakReference(caster);
+ this.experienceValue = 0;
+ this.lifetime = lifetime;
+ }
+
+ // EntitySkeleton overrides
+
+ // This particular override is pretty standard: let the superclass handle basic AI like swimming, but replace its
+ // targeting system with one that targets hostile mobs and takes the ADS into account.
+ @Override
+ protected void initEntityAI(){
+ super.initEntityAI();
+ this.targetTasks.taskEntries.clear();
+ this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false));
+ this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class,
+ 0, false, true, this.getTargetSelector()));
+ }
+
+ // Shouldn't have randomised armour, but does still need a bow!
+ @Override
+ protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty){
+ this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.BOW));
+ }
+
+ // Where the skeleton minion is summoned does not affect its type.
+ @Override
+ public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata){
+ // Can't call super, so the code from the next level up (EntityLiving) had to be copied as well.
+ this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE)
+ .applyModifier(new AttributeModifier("Random spawn bonus", this.rand.nextGaussian() * 0.05D, 1));
+
+ if(this.rand.nextFloat() < 0.05F){
+ this.setLeftHanded(true);
+ }else{
+ this.setLeftHanded(false);
+ }
+
+ // Halloween pumpkin heads! Why not?
+ if(this.getItemStackFromSlot(EntityEquipmentSlot.HEAD) == null){
+ Calendar calendar = this.world.getCurrentDate();
+
+ if(calendar.get(2) + 1 == 10 && calendar.get(5) == 31 && this.rand.nextFloat() < 0.25F){
+ this.setItemStackToSlot(EntityEquipmentSlot.HEAD,
+ new ItemStack(this.rand.nextFloat() < 0.1F ? Blocks.LIT_PUMPKIN : Blocks.PUMPKIN));
+ this.inventoryArmorDropChances[EntityEquipmentSlot.HEAD.getIndex()] = 0.0F;
+ }
+ }
+
+ return livingdata;
+ }
+
+ // Implementations
+
+ @Override
+ public void setRevengeTarget(EntityLivingBase entity){
+ if(this.shouldRevengeTarget(entity)) super.setRevengeTarget(entity);
+ }
+
+ @Override
+ public void onUpdate(){
+ super.onUpdate();
+ this.updateDelegate();
+ }
+
+ @Override
+ public void onSpawn(){
+ this.spawnParticleEffect();
+ }
+
+ @Override
+ public void onDespawn(){
+ this.spawnParticleEffect();
+ }
+
+ private void spawnParticleEffect(){
+ if(this.world.isRemote){
+ for(int i = 0; i < 15; i++){
+ this.world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, this.posX + this.rand.nextFloat(),
+ this.posY + 1 + this.rand.nextFloat(), this.posZ + this.rand.nextFloat(), 0, 0, 0);
+ }
+ }
+ }
+
+ @Override
+ public boolean hasParticleEffect(){
+ return true;
+ }
+
+ @Override
+ public void onSuccessfulAttack(EntityLivingBase target){
+ target.addPotionEffect(new PotionEffect(MobEffects.WITHER, 200));
+ }
+
+ @Override
+ protected boolean processInteract(EntityPlayer player, EnumHand hand){
+ // In this case, the delegate method determines whether super is called.
+ // Rather handily, we can make use of Java's short-circuiting method of evaluating OR statements.
+ return this.interactDelegate(player, hand) || super.processInteract(player, hand);
+ }
+
+ @Override
+ public void writeEntityToNBT(NBTTagCompound nbttagcompound){
+ super.writeEntityToNBT(nbttagcompound);
+ this.writeNBTDelegate(nbttagcompound);
+ }
+
+ @Override
+ public void readEntityFromNBT(NBTTagCompound nbttagcompound){
+ super.readEntityFromNBT(nbttagcompound);
+ this.writeNBTDelegate(nbttagcompound);
+ }
+
+ // Recommended overrides
+
+ @Override
+ protected int getExperiencePoints(EntityPlayer player){
+ return 0;
+ }
+
+ @Override
+ protected boolean canDropLoot(){
+ return false;
+ }
+
+ @Override
+ protected Item getDropItem(){
+ return null;
+ }
+
+ @Override
+ protected ResourceLocation getLootTable(){
+ return null;
+ }
+
+ @Override
+ public boolean canPickUpLoot(){
+ return false;
+ }
+
+ // This vanilla method has nothing to do with the custom despawn() method.
+ @Override
+ protected boolean canDespawn(){
+ return false;
+ }
+
+ @Override
+ public boolean canAttackClass(Class extends EntityLivingBase> entityType){
+ return true;
+ }
+
+ @Override
+ public ITextComponent getDisplayName(){
+ if(getCaster() != null){
+ return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
+ new TextComponentTranslation("entity." + this.getEntityString() + ".name"));
+ }else{
+ return super.getDisplayName();
+ }
+ }
+
+ @Override
+ public boolean hasCustomName(){
+ // If this returns true, the renderer will show the nameplate when looking directly at the entity
+ return Wizardry.settings.showSummonedCreatureNames && getCaster() != null;
+ }
+}
diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityWizard.java b/src/main/java/electroblob/wizardry/entity/living/EntityWizard.java
index 7123ed28..01f8665c 100644
--- a/src/main/java/electroblob/wizardry/entity/living/EntityWizard.java
+++ b/src/main/java/electroblob/wizardry/entity/living/EntityWizard.java
@@ -69,8 +69,8 @@ import net.minecraft.village.MerchantRecipe;
import net.minecraft.village.MerchantRecipeList;
import net.minecraft.world.DifficultyInstance;
import net.minecraft.world.World;
-import net.minecraftforge.common.util.FakePlayer;
import net.minecraftforge.common.util.Constants.NBT;
+import net.minecraftforge.common.util.FakePlayer;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@@ -83,14 +83,12 @@ import net.minecraftforge.oredict.OreDictionary;
@Mod.EventBusSubscriber
public class EntityWizard extends EntityVillager implements ISpellCaster, IEntityAdditionalSpawnData {
- /*
- * After much debugging, the error in the compiled mod (outside of eclipse) was traced back to this class,
+ /* After much debugging, the error in the compiled mod (outside of eclipse) was traced back to this class,
* specifically the methods copied in from EntityVillager when I changed this class to extend it. This figures,
- * since I had 1.2.1 working just fine before I did that, and it was the only thing I changed. Apparently,
- * methods and fields with obfuscated names like func_129090_a can cause problems when compiled. One of the
- * ones here was renamed and the other deleted since it was never called. Watch out for this in future (unless,
- * of course, they are overriding something, in which case it should be fine).
- */
+ * since I had 1.2.1 working just fine before I did that, and it was the only thing I changed. Apparently, methods
+ * and fields with obfuscated names like func_129090_a can cause problems when compiled. One of the ones here was
+ * renamed and the other deleted since it was never called. Watch out for this in future (unless, of course, they
+ * are overriding something, in which case it should be fine). */
// Extending EntityVillager turned out to be a pretty neat thing to do, since now zombies will attack wizards
@@ -109,11 +107,13 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
private boolean updateRecipes;
/** Data parameter for the cooldown time for wizards healing themselves. */
- private static final DataParameter HEAL_COOLDOWN = EntityDataManager.createKey(EntityWizard.class, DataSerializers.VARINT);
+ private static final DataParameter HEAL_COOLDOWN = EntityDataManager.createKey(EntityWizard.class,
+ DataSerializers.VARINT);
/** Data parameter for the wizard's element. */
- private static final DataParameter ELEMENT = EntityDataManager.createKey(EntityWizard.class, DataSerializers.VARINT);
+ private static final DataParameter ELEMENT = EntityDataManager.createKey(EntityWizard.class,
+ DataSerializers.VARINT);
- // Field implementations
+ // Field implementations
private List spells = new ArrayList(4);
private Spell continuousSpell;
@@ -126,14 +126,14 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
// For some reason this can't be in initEntityAI
this.tasks.addTask(3, this.spellCastingAI);
}
-
+
@Override
protected void entityInit(){
super.entityInit();
this.dataManager.register(HEAL_COOLDOWN, -1);
this.dataManager.register(ELEMENT, 0);
}
-
+
@Override
protected void initEntityAI(){
@@ -153,14 +153,17 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
public boolean apply(Entity entity){
// If the target is valid and not invisible...
- if(entity != null && !entity.isInvisible() && WizardryUtilities.isValidTarget(EntityWizard.this, entity)){
+ if(entity != null && !entity.isInvisible()
+ && WizardryUtilities.isValidTarget(EntityWizard.this, entity)){
- //... and is a mob, a summoned creature ...
+ // ... and is a mob, a summoned creature ...
if((entity instanceof IMob || entity instanceof ISummonedCreature
- // ... or in the whitelist ...
- || Arrays.asList(Wizardry.settings.summonedCreatureTargetsWhitelist).contains(EntityList.getEntityString(entity).toLowerCase(Locale.ROOT)))
+ // ... or in the whitelist ...
+ || Arrays.asList(Wizardry.settings.summonedCreatureTargetsWhitelist)
+ .contains(EntityList.getEntityString(entity).toLowerCase(Locale.ROOT)))
// ... and isn't in the blacklist ...
- && !Arrays.asList(Wizardry.settings.summonedCreatureTargetsBlacklist).contains(EntityList.getEntityString(entity).toLowerCase(Locale.ROOT))){
+ && !Arrays.asList(Wizardry.settings.summonedCreatureTargetsBlacklist)
+ .contains(EntityList.getEntityString(entity).toLowerCase(Locale.ROOT))){
// ... it can be attacked.
return true;
}
@@ -172,7 +175,8 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
// By default, wizards don't attack players unless the player has attacked them.
- this.targetTasks.addTask(0, new EntityAINearestAttackableTarget(this, EntityLiving.class, 0, false, true, this.targetSelector));
+ this.targetTasks.addTask(0, new EntityAINearestAttackableTarget(this, EntityLiving.class, 0,
+ false, true, this.targetSelector));
}
@Override
@@ -180,11 +184,11 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
super.applyEntityAttributes();
this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5);
}
-
+
private int getHealCooldown(){
return this.dataManager.get(HEAL_COOLDOWN);
}
-
+
private void setHealCooldown(int cooldown){
this.dataManager.set(HEAL_COOLDOWN, cooldown);
}
@@ -206,12 +210,12 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
public SpellModifiers getModifiers(){
return new SpellModifiers();
}
-
+
@Override
public void setContinuousSpell(Spell spell){
this.continuousSpell = spell;
}
-
+
@Override
public Spell getContinuousSpell(){
return this.continuousSpell;
@@ -229,23 +233,26 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
// affected with arcane jammer and healCooldown == 0, whilst the wizard didn't actually heal or play the sound,
// the particles still spawned, and since healCooldown wasn't reset they spawned every tick until the arcane
// jammer wore off.
- if(healCooldown == 0 && this.getHealth() < this.getMaxHealth() && this.getHealth() > 0 && !this.isPotionActive(WizardryPotions.arcane_jammer)){
+ if(healCooldown == 0 && this.getHealth() < this.getMaxHealth() && this.getHealth() > 0
+ && !this.isPotionActive(WizardryPotions.arcane_jammer)){
// Healer wizards use greater heal.
this.heal(this.getElement() == Element.HEALING ? 8 : 4);
this.setHealCooldown(-1);
- // deathTime == 0 checks the wizard isn't currently dying
+ // deathTime == 0 checks the wizard isn't currently dying
}else if(healCooldown == -1 && this.deathTime == 0){
// Heal particles
- if(worldObj.isRemote){
- for(int i=0; i<10; i++){
- double d0 = (double)((float)this.posX + rand.nextFloat()*2 - 1.0F);
- // Apparently the client side spawns the particles 1 block higher than it should... hence the - 0.5F.
+ if(world.isRemote){
+ for(int i = 0; i < 10; i++){
+ double d0 = (double)((float)this.posX + rand.nextFloat() * 2 - 1.0F);
+ // Apparently the client side spawns the particles 1 block higher than it should... hence the -
+ // 0.5F.
double d1 = (double)((float)this.posY - 0.5F + rand.nextFloat());
- double d2 = (double)((float)this.posZ + rand.nextFloat()*2 - 1.0F);
- Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, worldObj, d0, d1, d2, 0, 0.1F, 0, 48 + rand.nextInt(12), 1.0f, 1.0f, 0.3f);
+ double d2 = (double)((float)this.posZ + rand.nextFloat() * 2 - 1.0F);
+ Wizardry.proxy.spawnParticle(WizardryParticleType.SPARKLE, world, d0, d1, d2, 0, 0.1F, 0,
+ 48 + rand.nextInt(12), 1.0f, 1.0f, 0.3f);
}
}else{
if(this.getHealth() < 10){
@@ -258,9 +265,9 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
this.playSound(WizardrySounds.SPELL_HEAL, 0.7F, rand.nextFloat() * 0.4F + 1.0F);
}
}
-
+
if(healCooldown > 0){
- this.setHealCooldown(healCooldown-1);
+ this.setHealCooldown(healCooldown - 1);
}
}
@@ -299,77 +306,79 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
}
@Override
- public boolean processInteract(EntityPlayer player, EnumHand hand, ItemStack stack) {
+ public boolean processInteract(EntityPlayer player, EnumHand hand){
+
+ ItemStack stack = player.getHeldItem(hand);
// Debugging
- //player.addChatComponentMessage(new TextComponentTranslation("wizard.debug", Spell.get(spells[1]).getDisplayName(), Spell.get(spells[2]).getDisplayName(), Spell.get(spells[3]).getDisplayName()));
+ // player.addChatComponentMessage(new TextComponentTranslation("wizard.debug",
+ // Spell.get(spells[1]).getDisplayName(), Spell.get(spells[2]).getDisplayName(),
+ // Spell.get(spells[3]).getDisplayName()));
// When right-clicked with a spell book in creative, sets one of the spells to that spell
- if(player.capabilities.isCreativeMode && stack != null && stack.getItem() instanceof ItemSpellBook){
+ if(player.capabilities.isCreativeMode && stack.getItem() instanceof ItemSpellBook){
if(this.spells.size() >= 4 && Spell.get(stack.getItemDamage()).canBeCastByNPCs()){
- this.spells.set(rand.nextInt(3)+1, Spell.get(stack.getItemDamage()));
+ this.spells.set(rand.nextInt(3) + 1, Spell.get(stack.getItemDamage()));
return true;
}
}
// Won't trade with a player that has attacked them.
- if (this.isEntityAlive() && !this.isTrading() && !this.isChild() && !player.isSneaking() && this.getAttackTarget() != player)
- {
- if (!this.worldObj.isRemote)
- {
+ if(this.isEntityAlive() && !this.isTrading() && !this.isChild() && !player.isSneaking()
+ && this.getAttackTarget() != player){
+ if(!this.world.isRemote){
this.setCustomer(player);
player.displayVillagerTradeGui(this);
- //player.displayGUIMerchant(this, this.getElement().getWizardName());
+ // player.displayGUIMerchant(this, this.getElement().getWizardName());
}
return true;
- }
- else
- {
+ }else{
return false;
}
}
@Override
- public ITextComponent getDisplayName() {
+ public ITextComponent getDisplayName(){
return this.getElement().getWizardName();
}
@Override
public void writeEntityToNBT(NBTTagCompound nbt){
-
+
super.writeEntityToNBT(nbt);
-
- if (this.trades != null){
- nbt.setTag("trades", this.trades.getRecipiesAsTags());
- }
+
+ if(this.trades != null){
+ nbt.setTag("trades", this.trades.getRecipiesAsTags());
+ }
nbt.setInteger("element", this.getElement().ordinal());
nbt.setInteger("skin", this.textureIndex);
nbt.setTag("spells", WizardryUtilities.listToNBT(spells, spell -> new NBTTagInt(spell.id())));
if(this.towerBlocks != null && this.towerBlocks.size() > 0){
- nbt.setTag("towerBlocks", WizardryUtilities.listToNBT(this.towerBlocks, pos -> new NBTTagLong(pos.toLong())));
+ nbt.setTag("towerBlocks",
+ WizardryUtilities.listToNBT(this.towerBlocks, pos -> new NBTTagLong(pos.toLong())));
}
}
@Override
public void readEntityFromNBT(NBTTagCompound nbt){
-
+
super.readEntityFromNBT(nbt);
-
+
if(nbt.hasKey("trades")){
- NBTTagCompound nbttagcompound1 = nbt.getCompoundTag("trades");
- this.trades = new MerchantRecipeList(nbttagcompound1);
- }
+ NBTTagCompound nbttagcompound1 = nbt.getCompoundTag("trades");
+ this.trades = new MerchantRecipeList(nbttagcompound1);
+ }
this.setElement(Element.values()[nbt.getInteger("element")]);
this.textureIndex = nbt.getInteger("skin");
- this.spells = (List) WizardryUtilities.NBTToList(nbt.getTagList("spells", NBT.TAG_INT),
+ this.spells = (List)WizardryUtilities.NBTToList(nbt.getTagList("spells", NBT.TAG_INT),
(NBTTagInt tag) -> Spell.get(tag.getInt()));
- this.towerBlocks = new HashSet(WizardryUtilities.NBTToList(nbt.getTagList("towerBlocks",
- NBT.TAG_LONG), (NBTTagLong tag) -> BlockPos.fromLong(tag.getLong())));
+ this.towerBlocks = new HashSet(WizardryUtilities.NBTToList(
+ nbt.getTagList("towerBlocks", NBT.TAG_LONG), (NBTTagLong tag) -> BlockPos.fromLong(tag.getLong())));
}
@Override
@@ -378,8 +387,7 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
}
@Override
- public boolean isTrading()
- {
+ public boolean isTrading(){
return this.getCustomer() != null;
}
@@ -391,8 +399,7 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
this.playSound(SoundEvents.ENTITY_VILLAGER_YES, this.getSoundVolume(), this.getSoundPitch());
// Achievements
- if (this.getCustomer() != null)
- {
+ if(this.getCustomer() != null){
this.getCustomer().addStat(WizardryAchievements.wizard_trade);
if(merchantrecipe.getItemToSell().getItem() instanceof ItemSpellBook
@@ -406,12 +413,9 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
this.timeUntilReset = 40;
this.updateRecipes = true;
- if (this.getCustomer() != null)
- {
+ if(this.getCustomer() != null){
this.getCustomer().getName();
- }
- else
- {
+ }else{
}
}
}
@@ -447,9 +451,9 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
MerchantRecipeList merchantrecipelist;
merchantrecipelist = new MerchantRecipeList();
- for(int i=0; i 0 && !specialismSpells.isEmpty()){
- // This means it is more likely for spell books sold to be of the same element as the wizard if the wizard has an element.
- return new ItemStack(WizardryItems.spell_book, 1, specialismSpells.get(rand.nextInt(specialismSpells.size())).id());
+ // This means it is more likely for spell books sold to be of the same element as the wizard if the
+ // wizard has an element.
+ return new ItemStack(WizardryItems.spell_book, 1,
+ specialismSpells.get(rand.nextInt(specialismSpells.size())).id());
}else{
return new ItemStack(WizardryItems.spell_book, 1, spells.get(rand.nextInt(spells.size())).id());
}
}else{
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0){
- // This means it is more likely for wands sold to be of the same element as the wizard if the wizard has an element.
+ // This means it is more likely for wands sold to be of the same element as the wizard if the wizard
+ // has an element.
return new ItemStack(WizardryUtilities.getWand(tier, this.getElement()));
}else{
- return new ItemStack(WizardryUtilities.getWand(tier, Element.values()[rand.nextInt(Element.values().length)]));
+ return new ItemStack(
+ WizardryUtilities.getWand(tier, Element.values()[rand.nextInt(Element.values().length)]));
}
}
@@ -570,27 +573,34 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
randomiser = rand.nextInt(Wizardry.settings.discoveryMode ? 12 : 10);
if(randomiser < 5 && !spells.isEmpty()){
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0 && !specialismSpells.isEmpty()){
- // This means it is more likely for spell books sold to be of the same element as the wizard if the wizard has an element.
- return new ItemStack(WizardryItems.spell_book, 1, specialismSpells.get(rand.nextInt(specialismSpells.size())).id());
+ // This means it is more likely for spell books sold to be of the same element as the wizard if the
+ // wizard has an element.
+ return new ItemStack(WizardryItems.spell_book, 1,
+ specialismSpells.get(rand.nextInt(specialismSpells.size())).id());
}else{
return new ItemStack(WizardryItems.spell_book, 1, spells.get(rand.nextInt(spells.size())).id());
}
}else if(randomiser < 6){
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0){
- // This means it is more likely for wands sold to be of the same element as the wizard if the wizard has an element.
+ // This means it is more likely for wands sold to be of the same element as the wizard if the wizard
+ // has an element.
return new ItemStack(WizardryUtilities.getWand(tier, this.getElement()));
}else{
- return new ItemStack(WizardryUtilities.getWand(tier, Element.values()[rand.nextInt(Element.values().length)]));
+ return new ItemStack(
+ WizardryUtilities.getWand(tier, Element.values()[rand.nextInt(Element.values().length)]));
}
}else if(randomiser < 8){
return new ItemStack(WizardryItems.arcane_tome, 1, 1);
}else if(randomiser < 10){
- EntityEquipmentSlot slot = WizardryUtilities.ARMOUR_SLOTS[rand.nextInt(WizardryUtilities.ARMOUR_SLOTS.length)];
+ EntityEquipmentSlot slot = WizardryUtilities.ARMOUR_SLOTS[rand
+ .nextInt(WizardryUtilities.ARMOUR_SLOTS.length)];
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0){
- // This means it is more likely for armour sold to be of the same element as the wizard if the wizard has an element.
+ // This means it is more likely for armour sold to be of the same element as the wizard if the
+ // wizard has an element.
return new ItemStack(WizardryUtilities.getArmour(this.getElement(), slot));
}else{
- return new ItemStack(WizardryUtilities.getArmour(Element.values()[rand.nextInt(Element.values().length)], slot));
+ return new ItemStack(
+ WizardryUtilities.getArmour(Element.values()[rand.nextInt(Element.values().length)], slot));
}
}else{
// Don't need to check for discovery mode here since it is done above
@@ -601,17 +611,21 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
randomiser = rand.nextInt(12);
if(randomiser < 5 && !spells.isEmpty()){
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0 && !specialismSpells.isEmpty()){
- // This means it is more likely for spell books sold to be of the same element as the wizard if the wizard has an element.
- return new ItemStack(WizardryItems.spell_book, 1, specialismSpells.get(rand.nextInt(specialismSpells.size())).id());
+ // This means it is more likely for spell books sold to be of the same element as the wizard if the
+ // wizard has an element.
+ return new ItemStack(WizardryItems.spell_book, 1,
+ specialismSpells.get(rand.nextInt(specialismSpells.size())).id());
}else{
return new ItemStack(WizardryItems.spell_book, 1, spells.get(rand.nextInt(spells.size())).id());
}
}else if(randomiser < 6){
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0){
- // This means it is more likely for wands sold to be of the same element as the wizard if the wizard has an element.
+ // This means it is more likely for wands sold to be of the same element as the wizard if the wizard
+ // has an element.
return new ItemStack(WizardryUtilities.getWand(tier, this.getElement()));
}else{
- return new ItemStack(WizardryUtilities.getWand(tier, Element.values()[rand.nextInt(Element.values().length)]));
+ return new ItemStack(
+ WizardryUtilities.getWand(tier, Element.values()[rand.nextInt(Element.values().length)]));
}
}else if(randomiser < 8){
return new ItemStack(WizardryItems.arcane_tome, 1, 2);
@@ -627,7 +641,8 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
if(randomiser < 5 && this.getElement() != Element.MAGIC && !specialismSpells.isEmpty()){
// Master spells can only be sold by a specialist in that element.
- return new ItemStack(WizardryItems.spell_book, 1, specialismSpells.get(rand.nextInt(specialismSpells.size())).id());
+ return new ItemStack(WizardryItems.spell_book, 1,
+ specialismSpells.get(rand.nextInt(specialismSpells.size())).id());
}else if(randomiser < 6){
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0){
@@ -643,9 +658,9 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
return new ItemStack(Blocks.STONE);
}
-
+
@Override
- public void setProfession(VillagerProfession prof) {
+ public void setProfession(VillagerProfession prof){
// Disables Forge's stuff.
}
@@ -670,22 +685,25 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
}
// Default chance is 0.085f, for reference.
- for(EntityEquipmentSlot slot : EntityEquipmentSlot.values()) this.setDropChance(slot, 0.0f);
+ for(EntityEquipmentSlot slot : EntityEquipmentSlot.values())
+ this.setDropChance(slot, 0.0f);
// All wizards know magic missile, even if it is disabled.
spells.add(Spells.magic_missile);
-
+
Tier maxTier = populateSpells(spells, element, 3, rand);
// Now done after the spells so it can take the tier into account.
- this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(WizardryUtilities.getWand(maxTier, element)));
+ this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND,
+ new ItemStack(WizardryUtilities.getWand(maxTier, element)));
return livingdata;
}
-
+
/**
* Adds n random spells to the given list. The spells will be of the given element if possible. Extracted as a
* separate function since it was the same in both EntityWizard and EntityEvilWizard.
+ *
* @param spells The spell list to be populated.
* @param e The element that the spells should belong to, or {@link Element#MAGIC} for a random element each time.
* @param n The number of spells to add.
@@ -696,10 +714,10 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
// This is the tier of the highest tier spell added.
Tier maxTier = Tier.BASIC;
-
+
List npcSpells = Spell.getSpells(Spell.npcSpells);
- for(int i=0; i<3; i++){
+ for(int i = 0; i < 3; i++){
Tier tier;
// If the wizard has no element, it picks a random one each time.
@@ -739,7 +757,7 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
if(!list.isEmpty()) spells.add(list.get(random.nextInt(list.size())));
}
-
+
return maxTier;
}
@@ -763,9 +781,10 @@ public class EntityWizard extends EntityVillager implements ISpellCaster, IEntit
return super.attackEntityFrom(source, damage);
}
- /**
+ /**
* Sets the list of blocks that are part of this wizard's tower. If a player breaks any of these blocks, the wizard
* will get angry and attack them.
+ *
* @param blocks A Set of BlockPos objects representing the blocks in the tower.
*/
public void setTowerBlocks(Set