aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/detrav/events/BlockBreakEventHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/detrav/events/BlockBreakEventHandler.java')
-rw-r--r--src/main/java/com/detrav/events/BlockBreakEventHandler.java117
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);