diff --git a/src/main/java/drzhark/mocreatures/MoCEventHooks.java b/src/main/java/drzhark/mocreatures/MoCEventHooks.java index 444efbf..a21859f 100644 --- a/src/main/java/drzhark/mocreatures/MoCEventHooks.java +++ b/src/main/java/drzhark/mocreatures/MoCEventHooks.java @@ -73,27 +73,7 @@ public void onWorldLoad(WorldEvent.Load event) public void livingUpdate(LivingEvent.LivingUpdateEvent event) { if (!event.entityLiving.worldObj.isRemote) - { - if (event.entityLiving instanceof MoCEntityTurkey) //remove newly spawned Turkeys from biomes that they are not supposed to spawn in (mainly savannas) - { - MoCEntityTurkey turkey = (MoCEntityTurkey) event.entityLiving; - - if (!turkey.getIsTamed() && turkey.ticksExisted < 3 && !turkey.checkSpawningBiome()) - { - event.entityLiving.setDead(); - } - } - - if (event.entityLiving instanceof MoCEntityScorpion) //remove newly spawned Scorpions from biomes that they are not supposed to spawn in (mainly beaches) - { - MoCEntityScorpion scorpion = (MoCEntityScorpion) event.entityLiving; - - if (scorpion.getType() == 0 && !scorpion.checkSpawningBiome()) - { - event.entityLiving.setDead(); - } - } - + { if (MoCreatures.isWitcheryLoaded) { if (MoCreatures.proxy.replaceWitcheryWerewolfEntities) @@ -165,39 +145,6 @@ else if ( } } } - - if (MoCreatures.isBiomesOPlentyLoaded) - { - if (event.entityLiving instanceof MoCEntityBigCat) //remove newly spawned Big Cats from biomes that they are not supposed to spawn in - { - MoCEntityBigCat bigCat = (MoCEntityBigCat) event.entityLiving; - - if (bigCat.getType() == 0 && !bigCat.checkSpawningBiome() && !bigCat.getIsTamed()) - { - event.entityLiving.setDead(); - } - } - - if (event.entityLiving instanceof MoCEntityElephant) //remove newly spawned Elephants from biomes that they are not supposed to spawn in - { - MoCEntityElephant elephant = (MoCEntityElephant) event.entityLiving; - - if (elephant.getType() == 0 && !elephant.checkSpawningBiome() && !elephant.getIsTamed()) - { - event.entityLiving.setDead(); - } - } - - if (event.entityLiving instanceof MoCEntityOstrich) //remove newly spawned Ostriches from biomes that they are not supposed to spawn in - { - MoCEntityOstrich ostrich = (MoCEntityOstrich) event.entityLiving; - - if (ostrich.getType() == 0 && !ostrich.checkSpawningBiome()) - { - event.entityLiving.setDead(); - } - } - } } } diff --git a/src/main/java/drzhark/mocreatures/MoCreatures.java b/src/main/java/drzhark/mocreatures/MoCreatures.java index 13820ca..f883c3c 100644 --- a/src/main/java/drzhark/mocreatures/MoCreatures.java +++ b/src/main/java/drzhark/mocreatures/MoCreatures.java @@ -40,8 +40,9 @@ import drzhark.mocreatures.block.MoCBlockStone; import drzhark.mocreatures.block.MoCBlockTallGrass; import drzhark.mocreatures.client.MoCClientTickHandler; -import drzhark.mocreatures.client.MoCClientWitcheryPlayerWolfAndWerewolfReplacement; import drzhark.mocreatures.client.MoCCreativeTabs; +import drzhark.mocreatures.client.events.MoCClientWitcheryPlayerWolfAndWerewolfReplacement; +import drzhark.mocreatures.client.events.MoCRenderHorseJumpBarEvent; import drzhark.mocreatures.client.handlers.MoCKeyHandler; import drzhark.mocreatures.command.CommandMoCPets; import drzhark.mocreatures.command.CommandMoCSpawn; @@ -136,10 +137,10 @@ import drzhark.mocreatures.network.MoCMessageHandler; import drzhark.mocreatures.utils.MoCLog; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; -import net.minecraft.entity.EntityList.EntityEggInfo; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EnumCreatureType; import net.minecraft.entity.player.EntityPlayer; @@ -455,6 +456,8 @@ public void preInit(FMLPreInitializationEvent event) FMLCommonHandler.instance().bus().register(new MoCClientTickHandler()); FMLCommonHandler.instance().bus().register(new MoCKeyHandler()); MinecraftForge.EVENT_BUS.register(new MoCClientWitcheryPlayerWolfAndWerewolfReplacement()); + //TODO Add Horse Jump Bar + //MinecraftForge.EVENT_BUS.register(new MoCRenderHorseJumpBarEvent(Minecraft.getMinecraft())); } FMLCommonHandler.instance().bus().register(new MoCPlayerTracker()); diff --git a/src/main/java/drzhark/mocreatures/client/MoCClientWitcheryPlayerWolfAndWerewolfReplacement.java b/src/main/java/drzhark/mocreatures/client/events/MoCClientWitcheryPlayerWolfAndWerewolfReplacement.java similarity index 98% rename from src/main/java/drzhark/mocreatures/client/MoCClientWitcheryPlayerWolfAndWerewolfReplacement.java rename to src/main/java/drzhark/mocreatures/client/events/MoCClientWitcheryPlayerWolfAndWerewolfReplacement.java index 81123b7..264e440 100644 --- a/src/main/java/drzhark/mocreatures/client/MoCClientWitcheryPlayerWolfAndWerewolfReplacement.java +++ b/src/main/java/drzhark/mocreatures/client/events/MoCClientWitcheryPlayerWolfAndWerewolfReplacement.java @@ -1,4 +1,4 @@ -package drzhark.mocreatures.client; +package drzhark.mocreatures.client.events; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import drzhark.mocreatures.MoCTools; diff --git a/src/main/java/drzhark/mocreatures/client/events/MoCRenderHorseJumpBarEvent.java b/src/main/java/drzhark/mocreatures/client/events/MoCRenderHorseJumpBarEvent.java new file mode 100644 index 0000000..79b38e9 --- /dev/null +++ b/src/main/java/drzhark/mocreatures/client/events/MoCRenderHorseJumpBarEvent.java @@ -0,0 +1,84 @@ +package drzhark.mocreatures.client.events; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import drzhark.mocreatures.entity.animal.MoCEntityHorse; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; + +public class MoCRenderHorseJumpBarEvent extends Gui { + + private Minecraft mc; + ScaledResolution res = null; + + public MoCRenderHorseJumpBarEvent(Minecraft mc) + { + super(); + this.mc = mc; + } + + @SubscribeEvent + public void RenderGameOverlayEvent(RenderGameOverlayEvent event) + { + EntityPlayer entityPlayer = mc.getMinecraft().thePlayer; + + if ( + entityPlayer.ridingEntity != null + && entityPlayer.ridingEntity instanceof MoCEntityHorse + && event.type == ElementType.EXPERIENCE + ) + { + event.setCanceled(true); + + res = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); + //eventParent = new RenderGameOverlayEvent(partialTicks, res, mouseX, mouseY); + if (res != null) + { + int width = res.getScaledWidth(); + int height = res.getScaledHeight(); + renderCustomJumpBar(width, height); + } + } + } + + protected void renderCustomJumpBar(int width, int height) + { + bind(icons); + //if (pre(JUMPBAR)) return; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + + mc.mcProfiler.startSection("jumpBar"); + + float charge = mc.thePlayer.getHorseJumpPower(); + + final int barWidth = 182; + int x = (width / 2) - (barWidth / 2); + int filled = (int)(charge * (float)(barWidth + 1)); + int top = height - 32 + 3; + + drawTexturedModalRect(x, top, 0, 84, barWidth, 5); + + if (filled > 0) + { + this.drawTexturedModalRect(x, top, 0, 89, filled, 5); + } + + GL11.glEnable(GL11.GL_BLEND); + mc.mcProfiler.endSection(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + //post(JUMPBAR); + } + + private void bind(ResourceLocation res) + { + mc.getTextureManager().bindTexture(res); + } +} diff --git a/src/main/java/drzhark/mocreatures/client/handlers/MoCKeyHandler.java b/src/main/java/drzhark/mocreatures/client/handlers/MoCKeyHandler.java index 4ad4e1b..940ace1 100644 --- a/src/main/java/drzhark/mocreatures/client/handlers/MoCKeyHandler.java +++ b/src/main/java/drzhark/mocreatures/client/handlers/MoCKeyHandler.java @@ -31,17 +31,23 @@ public void onKeyInput(KeyInputEvent event) { Keyboard.enableRepeatEvents(true); // allow holding down key. Fixes flying EntityPlayer entityPlayer = MoCClientProxy.mc.thePlayer; - if (entityPlayer == null || entityPlayer.ridingEntity == null) return; - if (FMLClientHandler.instance().getClient().ingameGUI.getChatGUI().getChatOpen()) return; // if chatting return - boolean kbJump = Keyboard.isKeyDown(MoCClientProxy.mc.gameSettings.keyBindJump.getKeyCode()); - boolean kbDive = Keyboard.isKeyDown(diveBinding.getKeyCode()); + + if (entityPlayer == null || entityPlayer.ridingEntity == null) {return;} + + if (FMLClientHandler.instance().getClient().ingameGUI.getChatGUI().getChatOpen()) {return;} // if chatting return + boolean isJumpKeyDown = Keyboard.isKeyDown(MoCClientProxy.mc.gameSettings.keyBindJump.getKeyCode()); - //boolean kbDismount = kb.keyDescription.equals("MoCreatures Dismount"); + boolean isDiveKeyDown = Keyboard.isKeyDown(diveBinding.getKeyCode()); /** * this avoids double jumping */ - if (kbJump && entityPlayer != null && entityPlayer.ridingEntity != null && entityPlayer.ridingEntity instanceof IMoCEntity) + if ( + isJumpKeyDown + && entityPlayer != null + && entityPlayer.ridingEntity != null + && entityPlayer.ridingEntity instanceof IMoCEntity + ) { // keyCount = 0; // jump code needs to be executed client/server simultaneously to take @@ -49,7 +55,12 @@ public void onKeyInput(KeyInputEvent event) MoCMessageHandler.INSTANCE.sendToServer(new MoCMessageEntityJump()); } - if (kbDive && entityPlayer != null && entityPlayer.ridingEntity != null && entityPlayer.ridingEntity instanceof IMoCEntity) + if ( + isDiveKeyDown + && entityPlayer != null + && entityPlayer.ridingEntity != null + && entityPlayer.ridingEntity instanceof IMoCEntity + ) { // keyCount = 0; // jump code needs to be executed client/server simultaneously to take diff --git a/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityBigCat.java b/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityBigCat.java index 6c87ce3..4b37a2e 100644 --- a/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityBigCat.java +++ b/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityBigCat.java @@ -831,6 +831,20 @@ public boolean isMyHealFood(ItemStack itemStack) } else {return false;} } + + @Override + public boolean getCanSpawnHere() + { + if ( + !MoCreatures.isBiomesOPlentyLoaded + || (MoCreatures.isBiomesOPlentyLoaded && checkSpawningBiome()) + ) + { + return super.getCanSpawnHere(); //don't let BigCats spawn in biomes that they are not supposed to spawn in + } + + else {return false;} + } @Override public boolean isNotScared() diff --git a/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityElephant.java b/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityElephant.java index 59cd118..8198e38 100644 --- a/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityElephant.java +++ b/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityElephant.java @@ -1196,11 +1196,20 @@ protected Item getDropItem() @Override public boolean getCanSpawnHere() { - return ( - MoCreatures.entityMap.get(getClass()).getFrequency() > 0 - && getCanSpawnHereCreature() - && getCanSpawnHereLiving() - ); + if ( + !MoCreatures.isBiomesOPlentyLoaded + || (MoCreatures.isBiomesOPlentyLoaded && checkSpawningBiome()) + && ( + MoCreatures.entityMap.get(getClass()).getFrequency() > 0 + && getCanSpawnHereCreature() + && getCanSpawnHereLiving() + ) + ) + { + return super.getCanSpawnHere(); //don't let Elephants spawn in biomes that they are not supposed to spawn in + } + + else {return false;} } @Override diff --git a/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityOstrich.java b/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityOstrich.java index 5eab5ce..30598f0 100644 --- a/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityOstrich.java +++ b/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityOstrich.java @@ -1041,13 +1041,22 @@ public void writeEntityToNBT(NBTTagCompound nbtTagCompound) nbtTagCompound.setTag("Items", nbtTagList); } } - + @Override public boolean getCanSpawnHere() { - //spawns in deserts and plains - return getCanSpawnHereCreature() && getCanSpawnHereLiving(); + if ( + !MoCreatures.isBiomesOPlentyLoaded + || (MoCreatures.isBiomesOPlentyLoaded && checkSpawningBiome()) + && (getCanSpawnHereCreature() && getCanSpawnHereLiving()) + ) + { + return super.getCanSpawnHere(); //don't let BigCats spawn in biomes that they are not supposed to spawn in + } + + else {return false;} } + @Override public int nameYOffset() diff --git a/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityTurkey.java b/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityTurkey.java index 5bed99b..b3257d8 100644 --- a/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityTurkey.java +++ b/src/main/java/drzhark/mocreatures/entity/animal/MoCEntityTurkey.java @@ -7,6 +7,7 @@ import drzhark.mocreatures.entity.MoCEntityTameableAnimal; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemSeeds; @@ -124,6 +125,17 @@ public boolean isMyHealFood(ItemStack itemStack) } else {return false;} } + + @Override + public boolean getCanSpawnHere() + { + if (checkSpawningBiome()) //don't let Turkeys spawn in biomes that they are not supposed to spawn in (mainly savannas) + { + return super.getCanSpawnHere(); + } + + else {return false;} + } @Override diff --git a/src/main/java/drzhark/mocreatures/entity/monster/MoCEntityScorpion.java b/src/main/java/drzhark/mocreatures/entity/monster/MoCEntityScorpion.java index 083a4b1..403a5ad 100644 --- a/src/main/java/drzhark/mocreatures/entity/monster/MoCEntityScorpion.java +++ b/src/main/java/drzhark/mocreatures/entity/monster/MoCEntityScorpion.java @@ -471,7 +471,14 @@ protected void dropFewItems(boolean flag, int x) @Override public boolean getCanSpawnHere() { - return (isValidLightLevel() && MoCreatures.entityMap.get(getClass()).getFrequency() > 0) && getCanSpawnHereLiving() && getCanSpawnHereCreature(); + return + ( + isValidLightLevel() + && MoCreatures.entityMap.get(getClass()).getFrequency() > 0 + && checkSpawningBiome() //don't let Scorpions spawn in biomes that they are not supposed to spawn in (mainly beaches) + && getCanSpawnHereLiving() + && getCanSpawnHereCreature() + ); } @Override diff --git a/src/main/resources/Rozmirs modifications to Mo Creatures.txt b/src/main/resources/Rozmirs modifications to Mo Creatures.txt index a5d8aad..db88e4b 100644 --- a/src/main/resources/Rozmirs modifications to Mo Creatures.txt +++ b/src/main/resources/Rozmirs modifications to Mo Creatures.txt @@ -1321,4 +1321,7 @@ Fixed Dolphin speed not working. Added Dolphin to /mocspawn command. -Slightly increased flying speed of Wyvern. \ No newline at end of file +Slightly increased flying speed of Wyvern. + + +Converted the "instant kill if entity spawned in wrong biome" events to overrides of the canSpawnHere() function for the affected entities. \ No newline at end of file