diff options
Diffstat (limited to 'src/main/java')
3 files changed, 112 insertions, 76 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); diff --git a/src/main/java/com/detrav/events/DetravKeyHandler.java b/src/main/java/com/detrav/events/DetravKeyHandler.java index 367d0856d8..9a00bf55ab 100644 --- a/src/main/java/com/detrav/events/DetravKeyHandler.java +++ b/src/main/java/com/detrav/events/DetravKeyHandler.java @@ -20,19 +20,21 @@ public class DetravKeyHandler { @SubscribeEvent public void onKeyInput(InputEvent.KeyInputEvent event) { - if(modeSwitchKey.isPressed()) - { - DetravNetwork.INSTANCE.sendToServer(new DetravModeSwitchPacket02(Minecraft.getMinecraft().thePlayer)); + if (modeSwitchKey.isPressed()) { + if (Minecraft.getMinecraft().thePlayer.isSneaking()) + DetravNetwork.INSTANCE.sendToServer(new DetravModeSwitchPacket02(Minecraft.getMinecraft().thePlayer, true)); + else + DetravNetwork.INSTANCE.sendToServer(new DetravModeSwitchPacket02(Minecraft.getMinecraft().thePlayer, false)); //Minecraft.getMinecraft().thePlayer.getEntityData(). } } static boolean inited = false; - public static void register() - { - if(!inited) { + + public static void register() { + if (!inited) { inited = true; - modeSwitchKey = new KeyBinding("key.detrav.modeSwitch", Keyboard.KEY_GRAVE,"key.categories.misc"); + modeSwitchKey = new KeyBinding("key.detrav.modeSwitch", Keyboard.KEY_GRAVE, "key.categories.misc"); ClientRegistry.registerKeyBinding(modeSwitchKey); DetravKeyHandler handler = new DetravKeyHandler(); MinecraftForge.EVENT_BUS.register(handler); @@ -40,4 +42,4 @@ public class DetravKeyHandler { } } -} +}
\ No newline at end of file diff --git a/src/main/java/com/detrav/net/DetravModeSwitchPacket02.java b/src/main/java/com/detrav/net/DetravModeSwitchPacket02.java index 30e9289b16..48295ef018 100644 --- a/src/main/java/com/detrav/net/DetravModeSwitchPacket02.java +++ b/src/main/java/com/detrav/net/DetravModeSwitchPacket02.java @@ -18,15 +18,15 @@ import java.util.ListIterator; public class DetravModeSwitchPacket02 extends DetravPacket { EntityPlayer player; + boolean back; - public DetravModeSwitchPacket02() - { + public DetravModeSwitchPacket02() { player = null; } - public DetravModeSwitchPacket02(EntityPlayer aPlayer) - { + public DetravModeSwitchPacket02(EntityPlayer aPlayer, boolean aBack) { player = aPlayer; + back = aBack; } @Override @@ -40,6 +40,7 @@ public class DetravModeSwitchPacket02 extends DetravPacket { if (player != null) tOut.writeInt(player.getEntityId()); else tOut.writeInt(Integer.MIN_VALUE); + tOut.writeBoolean(back); return tOut.toByteArray(); } @@ -48,35 +49,53 @@ public class DetravModeSwitchPacket02 extends DetravPacket { int id = aData.readInt(); if (id == Integer.MIN_VALUE) return new DetravModeSwitchPacket02(); + boolean aBack = aData.readBoolean(); //ArrayList<EntityPlayerMP> allp = new ArrayList<EntityPlayerMP>(); ListIterator itl; EntityPlayerMP temp = null; - for(int i = 0; i<MinecraftServer.getServer().worldServers.length; i++) { + for (int i = 0; i < MinecraftServer.getServer().worldServers.length; i++) { itl = MinecraftServer.getServer().worldServers[i].playerEntities.listIterator(); - while(itl.hasNext()) { + while (itl.hasNext()) { temp = (EntityPlayerMP) itl.next(); - if(temp.getEntityId() == id) - return new DetravModeSwitchPacket02(temp); + if (temp.getEntityId() == id) + return new DetravModeSwitchPacket02(temp, aBack); temp = null; } } - return new DetravModeSwitchPacket02(temp); + return new DetravModeSwitchPacket02(temp, aBack); } @Override public void process() { - if(player!=null) { + if (player != null) { NBTTagCompound aData = player.getEntityData(); //aData.hasNoTags() long minningMode = aData.getLong("detrav.minning.mode"); - if(minningMode == 0) { - aData.setLong("detrav.minning.mode", 1); - player.addChatMessage(new ChatComponentText("Mining mode 3x3 block")); + if (back) { + if (--minningMode < 0) + minningMode = 4; + } else { + if (++minningMode > 4) + minningMode = 0; } - else { - aData.setLong("detrav.minning.mode", 0); - player.addChatMessage(new ChatComponentText("Mining mode 1x1 block")); + switch ((int) minningMode) { + case 0: + player.addChatMessage(new ChatComponentText("Mining mode 1x1, just one block")); + break; + case 1: + player.addChatMessage(new ChatComponentText("Mining mode 3x3 by side, nine blocks")); + break; + case 2: + player.addChatMessage(new ChatComponentText("Mining mode 3x3 horizontal, nine blocks")); + break; + case 3: + player.addChatMessage(new ChatComponentText("Mining mode 3x3 vertical, nine blocks")); + break; + case 4: + player.addChatMessage(new ChatComponentText("Mining mode 3x3x3 vein, twenty seven blocks by type")); + break; } + aData.setLong("detrav.minning.mode", minningMode); } } -} +}
\ No newline at end of file |