diff options
Diffstat (limited to 'src/main/java/com/detrav/events/BlockBreakEventHandler.java')
-rw-r--r-- | src/main/java/com/detrav/events/BlockBreakEventHandler.java | 117 |
1 files changed, 66 insertions, 51 deletions
diff --git a/src/main/java/com/detrav/events/BlockBreakEventHandler.java b/src/main/java/com/detrav/events/BlockBreakEventHandler.java index db8ad7f220..2957564d58 100644 --- a/src/main/java/com/detrav/events/BlockBreakEventHandler.java +++ b/src/main/java/com/detrav/events/BlockBreakEventHandler.java @@ -30,26 +30,43 @@ import java.lang.reflect.Method; * Created by wital_000 on 13.04.2016. */ public class BlockBreakEventHandler { - @SubscribeEvent - public void onBreakBlock(BlockEvent.BreakEvent ev) { - if (ev.isCanceled()) + @SubscribeEvent + public void onBreakBlock(BlockEvent.BreakEvent ev) { + if (ev.isCanceled()) + return; + if (ev instanceof DetravBlockBreakEvent) + return; + if (!ev.world.isRemote) { + EntityPlayer player = ev.getPlayer(); + if ((player instanceof EntityPlayerMP) && ((EntityPlayerMP) player).theItemInWorldManager.getGameType() != WorldSettings.GameType.SURVIVAL) return; - if(ev instanceof DetravBlockBreakEvent) + if (player.capabilities.isCreativeMode) return; - if (!ev.world.isRemote) { - EntityPlayer player = ev.getPlayer(); - if((player instanceof EntityPlayerMP) && ((EntityPlayerMP)player).theItemInWorldManager.getGameType() != WorldSettings.GameType.SURVIVAL) - return; - if(player.capabilities.isCreativeMode) - return; - NBTTagCompound entityData = player.getEntityData(); - if(entityData.getLong("detrav.minning.mode")==0) return; - Vec3 vec3 = Vec3.createVectorHelper(player.posX, player.posY + 1.62f, player.posZ); - Vec3 vec31 = ev.getPlayer().getLook(1.0F); - Vec3 vec32 = vec3.addVector(vec31.xCoord * 4.5F, vec31.yCoord * 4.5F, vec31.zCoord * 4.5F); - int side = rayTrace(ev.world, ev.block,ev.blockMetadata,vec3, vec32,ev.x,ev.y,ev.z, false, false, true); - //ev.getPlayer().addChatMessage(new ChatComponentText(ev.block.getLocalizedName() + " | " + ev.getPlayer().rotationYaw + " | " + ev.getPlayer().rotationPitch)); - //ev.getPlayer().addChatMessage(new ChatComponentText(ev.block.getLocalizedName() + " | " + side)); + NBTTagCompound entityData = player.getEntityData(); + long minningMode = entityData.getLong("detrav.minning.mode"); + if (minningMode == 0) return; + int side = 0; + switch ((int) minningMode) { + case 1: + Vec3 vec3 = Vec3.createVectorHelper(player.posX, player.posY + 1.62f, player.posZ); + Vec3 vec31 = ev.getPlayer().getLook(1.0F); + Vec3 vec32 = vec3.addVector(vec31.xCoord * 4.5F, vec31.yCoord * 4.5F, vec31.zCoord * 4.5F); + side = rayTrace(ev.world, ev.block, ev.blockMetadata, vec3, vec32, ev.x, ev.y, ev.z, false, false, true); + break; + case 2: + side = 0; + break; + case 3: + if ((-135 <= ev.getPlayer().rotationYaw && ev.getPlayer().rotationYaw <= -45) || (-315 <= ev.getPlayer().rotationYaw && ev.getPlayer().rotationYaw <= -225)) + side = 4; + else if ((-225 <= ev.getPlayer().rotationYaw && ev.getPlayer().rotationYaw <= -135) || -45 <= ev.getPlayer().rotationYaw || ev.getPlayer().rotationYaw <= -315) + side = 2; + else side = -1; + break; + } + //ev.getPlayer().addChatMessage(new ChatComponentText(ev.block.getLocalizedName() + " | " + ev.getPlayer().rotationYaw + " | " + ev.getPlayer().rotationPitch)); + //ev.getPlayer().addChatMessage(new ChatComponentText(ev.block.getLocalizedName() + " | " + side)); + if (minningMode < 4) switch (side) { case 0: case 1: @@ -76,19 +93,27 @@ public class BlockBreakEventHandler { if (i != ev.x || j != ev.y) tryHarvestBlock(i, j, ev.z, ev); break; - // } else - // ev.getPlayer().addChatMessage(new ChatComponentText("Unknown | yaw = " + ev.getPlayer().rotationYaw + " | pitch = " + ev.getPlayer().rotationPitch)); + // } else + // ev.getPlayer().addChatMessage(new ChatComponentText("Unknown | yaw = " + ev.getPlayer().rotationYaw + " | pitch = " + ev.getPlayer().rotationPitch)); } + else { + // if (ev.getPlayer().rotationPitch > 45 || ev.getPlayer().rotationPitch < -45) { + for (int i = ev.x - 1; i <= ev.x + 1; i++) + for (int j = ev.y - 1; j <= ev.y + 1; j++) + for (int k = ev.z - 1; k <= ev.z + 1; k++) + if (i != ev.x || j != ev.y || k != ev.z) + tryHarvestBlock(i, j, k, ev); } } + } - static private boolean tryHarvestBlock(int x, int y, int z,BlockEvent.BreakEvent event2) { + static private boolean tryHarvestBlock(int x, int y, int z, BlockEvent.BreakEvent event2) { if (!(event2.getPlayer() instanceof EntityPlayerMP)) return false;//если это не игрок то выходим EntityPlayer thisPlayerMP = event2.getPlayer(); ItemStack stack = thisPlayerMP.getCurrentEquippedItem(); //получаем текущий тулс - if(stack == null ) return false; + if (stack == null) return false; //выходим если в руках ничего нет World theWorld = event2.world; Block block = theWorld.getBlock(x, y, z); @@ -100,7 +125,7 @@ public class BlockBreakEventHandler { //херня какаято с этими названиями функций //thisPlayerMP.addChatMessage(new ChatComponentText("Mining Speed: " + stack.getItem().getDigSpeed(stack,block,blockMetadata))); - if(!isToolEffective(stack,theWorld,x,y,z)) + if (!isToolEffective(stack, theWorld, x, y, z)) return false; if ((stack.getItem() instanceof GT_Generic_Item) && !stack.func_150998_b(block)) return false; @@ -134,8 +159,7 @@ public class BlockBreakEventHandler { return flag; } - static private boolean removeBlock(int x, int y, int z, boolean canHarvest,BlockEvent.BreakEvent event) - { + static private boolean removeBlock(int x, int y, int z, boolean canHarvest, BlockEvent.BreakEvent event) { World theWorld = event.world; EntityPlayer thisPlayerMP = event.getPlayer(); Block block = theWorld.getBlock(x, y, z); @@ -143,30 +167,24 @@ public class BlockBreakEventHandler { block.onBlockHarvested(theWorld, x, y, z, l, thisPlayerMP); boolean flag = block.removedByPlayer(theWorld, thisPlayerMP, x, y, z, canHarvest); - if (flag) - { + if (flag) { block.onBlockDestroyedByPlayer(theWorld, x, y, z, l); } return flag; } - public static BlockEvent.BreakEvent onDetravBlockBreakEvent(World world, WorldSettings.GameType gameType, EntityPlayerMP entityPlayer, int x, int y, int z) - { + public static BlockEvent.BreakEvent onDetravBlockBreakEvent(World world, WorldSettings.GameType gameType, EntityPlayerMP entityPlayer, int x, int y, int z) { // Logic from tryHarvestBlock for pre-canceling the event boolean preCancelEvent = false; - if (gameType.isAdventure() && !entityPlayer.isCurrentToolAdventureModeExempt(x, y, z)) - { + if (gameType.isAdventure() && !entityPlayer.isCurrentToolAdventureModeExempt(x, y, z)) { preCancelEvent = true; - } - else if (gameType.isCreative() && entityPlayer.getHeldItem() != null && entityPlayer.getHeldItem().getItem() instanceof ItemSword) - { + } else if (gameType.isCreative() && entityPlayer.getHeldItem() != null && entityPlayer.getHeldItem().getItem() instanceof ItemSword) { preCancelEvent = true; } // Tell client the block is gone immediately then process events - if (world.getTileEntity(x, y, z) == null) - { + if (world.getTileEntity(x, y, z) == null) { S23PacketBlockChange packet = new S23PacketBlockChange(x, y, z, world); packet.field_148883_d = Blocks.air; packet.field_148884_e = 0; @@ -181,18 +199,15 @@ public class BlockBreakEventHandler { MinecraftForge.EVENT_BUS.post(event); // Handle if the event is canceled - if (event.isCanceled()) - { + if (event.isCanceled()) { // Let the client know the block still exists entityPlayer.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world)); // Update any tile entity data for this block TileEntity tileentity = world.getTileEntity(x, y, z); - if (tileentity != null) - { + if (tileentity != null) { Packet pkt = tileentity.getDescriptionPacket(); - if (pkt != null) - { + if (pkt != null) { entityPlayer.playerNetServerHandler.sendPacket(pkt); } } @@ -200,7 +215,7 @@ public class BlockBreakEventHandler { return event; } - static int rayTrace(World w,Block block,int blockMetadata,Vec3 playerPos, Vec3 lookAtPos, int xBlock,int yBlock, int zBlock, boolean unknownVar1, boolean unknownVar2, boolean unknownVar3) { + static int rayTrace(World w, Block block, int blockMetadata, Vec3 playerPos, Vec3 lookAtPos, int xBlock, int yBlock, int zBlock, boolean unknownVar1, boolean unknownVar2, boolean unknownVar3) { if (!Double.isNaN(playerPos.xCoord) && !Double.isNaN(playerPos.yCoord) && !Double.isNaN(playerPos.zCoord)) if (!Double.isNaN(lookAtPos.xCoord) && !Double.isNaN(lookAtPos.yCoord) && !Double.isNaN(lookAtPos.zCoord)) { @@ -217,9 +232,9 @@ public class BlockBreakEventHandler { } static boolean inited = false; - public static void register() - { - if(!inited) { + + public static void register() { + if (!inited) { inited = true; BlockBreakEventHandler handler = new BlockBreakEventHandler(); MinecraftForge.EVENT_BUS.register(handler); @@ -228,19 +243,19 @@ public class BlockBreakEventHandler { } - public static boolean isToolEffective(ItemStack stack, World world, int x, int y, int z){ + public static boolean isToolEffective(ItemStack stack, World world, int x, int y, int z) { Block block = world.getBlock(x, y, z); - if(block.getBlockHardness(world, x, y, z) < 0) //unbreakable + if (block.getBlockHardness(world, x, y, z) < 0) //unbreakable return false; else return isToolEffective(stack, block, world.getBlockMetadata(x, y, z)) || block.getBlockHardness(world, x, y, z) == 0; } - public static boolean isToolEffective(ItemStack stack, Block block, int meta){ - if(block == null) + public static boolean isToolEffective(ItemStack stack, Block block, int meta) { + if (block == null) return false; - if(stack != null) { + if (stack != null) { for (String toolClass : stack.getItem().getToolClasses(stack)) { if (toolClass.equals(block.getHarvestTool(meta))) return stack.getItem().getHarvestLevel(stack, toolClass) >= block.getHarvestLevel(meta); |