diff --git a/src/main/java/techreborn/packets/PacketPipeline.java b/src/main/java/techreborn/packets/PacketPipeline.java index 0f01e88d8..b57c38f5e 100644 --- a/src/main/java/techreborn/packets/PacketPipeline.java +++ b/src/main/java/techreborn/packets/PacketPipeline.java @@ -17,6 +17,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.network.INetHandler; import net.minecraft.network.NetHandlerPlayServer; +import techreborn.partSystem.fmp.PacketFMPPlacePart; import java.util.*; @@ -118,6 +119,7 @@ public class PacketPipeline extends MessageToMessageCodec placing = new ThreadLocal(); + private final ThreadLocal placing = new ThreadLocal(); @SubscribeEvent(priority = EventPriority.LOW) - public void playerInteract(PlayerInteractEvent event) - { - if(event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK && event.entityPlayer.worldObj.isRemote) - { - if(placing.get() != null) - return; + public void playerInteract(PlayerInteractEvent event) { + if (event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK && event.entityPlayer.worldObj.isRemote) { + if (placing.get() != null) return;//for mods that do dumb stuff and call this event like MFR placing.set(event); - if(place(event.entityPlayer, event.entityPlayer.worldObj)) - event.setCanceled(true); + if (place(event.entityPlayer, event.entityPlayer.worldObj)) event.setCanceled(true); placing.set(null); } } - public static boolean place(EntityPlayer player, World world) - { + public static boolean place(EntityPlayer player, World world) { MovingObjectPosition hit = RayTracer.reTrace(world, player); - if(hit == null) - return false; + if (hit == null) return false; - BlockCoord pos = new BlockCoord(hit.blockX, hit.blockY, hit.blockZ).offset(hit.sideHit); + BlockCoord pos = new BlockCoord(hit.blockX, hit.blockY, hit.blockZ); ItemStack held = player.getHeldItem(); + FMPModPart part = null; - if(held == null) - return false; + if (held == null) return false; Item heldItem = held.getItem(); + if (heldItem == IC2Items.getItem("copperCableItem").getItem()) { + CablePart cablePart = new CablePart(); + cablePart.setType(held.getItemDamage()); + part = new FMPModPart(cablePart); + } + if (part == null) return false; - if(heldItem == IC2Items.getItem("copperCableItem").getItem()) - part = placeCable(world, pos, hit.sideHit, held); - - if(part == null) - return false; - - if(world.isRemote && !player.isSneaking())//attempt to use block activated like normal and tell the server the right stuff + if (world.isRemote && !player.isSneaking())//attempt to use block activated like normal and tell the server the right stuff { Vector3 f = new Vector3(hit.hitVec).add(-hit.blockX, -hit.blockY, -hit.blockZ); Block block = world.getBlock(hit.blockX, hit.blockY, hit.blockZ); - if(!ignoreActivate(block) && block.onBlockActivated(world, hit.blockX, hit.blockY, hit.blockZ, player, hit.sideHit, (float)f.x, (float)f.y, (float)f.z)) - { + if (!ignoreActivate(block) && block.onBlockActivated(world, hit.blockX, hit.blockY, hit.blockZ, player, hit.sideHit, (float) f.x, (float) f.y, (float) f.z)) { player.swingItem(); - PacketCustom.sendToServer(new C08PacketPlayerBlockPlacement( - hit.blockX, hit.blockY, hit.blockZ, hit.sideHit, - player.inventory.getCurrentItem(), - (float) f.x, (float) f.y, (float) f.z)); + PacketCustom.sendToServer(new C08PacketPlayerBlockPlacement(hit.blockX, hit.blockY, hit.blockZ, hit.sideHit, player.inventory.getCurrentItem(), (float) f.x, (float) f.y, (float) f.z)); return true; } } TileMultipart tile = TileMultipart.getOrConvertTile(world, pos); - if(tile == null || !tile.canAddPart(part)) - return false; + if (tile == null || !tile.canAddPart(part)) { + pos = pos.offset(hit.sideHit); + tile = TileMultipart.getOrConvertTile(world, pos); + if (tile == null || !tile.canAddPart(part)) return false; + } - if(!world.isRemote) - { + if (!world.isRemote) { TileMultipart.addPart(world, pos, part); - world.playSoundEffect(pos.x + 0.5, pos.y + 0.5, pos.z + 0.5, - Blocks.wool.stepSound.func_150496_b(), - (Blocks.wool.stepSound.getVolume() + 1.0F) / 2.0F, - Blocks.wool.stepSound.getPitch() * 0.8F); - if(!player.capabilities.isCreativeMode) - { + world.playSoundEffect(pos.x + 0.5, pos.y + 0.5, pos.z + 0.5, Blocks.wool.stepSound.func_150496_b(), (Blocks.wool.stepSound.getVolume() + 1.0F) / 2.0F, Blocks.wool.stepSound.getPitch() * 0.8F); + if (!player.capabilities.isCreativeMode) { held.stackSize--; - if (held.stackSize == 0) - { + if (held.stackSize == 0) { player.inventory.mainInventory[player.inventory.currentItem] = null; MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(player, held)); } } - } - else - { + } else { player.swingItem(); - // new PacketCustom(McMultipartSPH.channel, 1).sendToServer(); + Core.packetPipeline.sendToServer(new PacketFMPPlacePart()); } return true; } - private static boolean ignoreActivate(Block block) - { - if(block instanceof BlockFence) - return true; + /** + * Because vanilla is weird. + */ + private static boolean ignoreActivate(Block block) { + if (block instanceof BlockFence) return true; return false; } - public static FMPModPart placeCable(World world, BlockCoord pos, int side, ItemStack held) - { - if(side == 0) - return null; - pos = pos.copy().offset(side^1); - Block block = world.getBlock(pos.x, pos.y, pos.z); - if(!block.isSideSolid(world, pos.x, pos.y, pos.z, ForgeDirection.getOrientation(side)) && (side != 1 || block.canPlaceTorchOnTop(world, pos.x, pos.y, pos.z))) - return null; - - CablePart part = new CablePart(); - part.setType(held.getItemDamage() * 16); - return new FMPModPart(part); - } - } diff --git a/src/main/java/techreborn/partSystem/fmp/FMPFactory.java b/src/main/java/techreborn/partSystem/fmp/FMPFactory.java index f32fd5a9e..96020f4aa 100644 --- a/src/main/java/techreborn/partSystem/fmp/FMPFactory.java +++ b/src/main/java/techreborn/partSystem/fmp/FMPFactory.java @@ -12,7 +12,6 @@ import codechicken.multipart.NormallyOccludedPart; import codechicken.multipart.TMultiPart; import codechicken.multipart.TileMultipart; import cpw.mods.fml.common.Loader; -import ic2.api.info.IC2Classic; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -25,7 +24,6 @@ import techreborn.partSystem.IModPart; import techreborn.partSystem.IPartProvider; import techreborn.partSystem.ModPart; import techreborn.partSystem.ModPartRegistry; -import techreborn.partSystem.parts.CableConverter; import java.util.List; @@ -65,7 +63,7 @@ public class FMPFactory implements MultiPartRegistry.IPartFactory2, for (TMultiPart p : t) { if (ret == false) { if (p.getType().equals(name)) { - if(p instanceof FMPModPart){ + if (p instanceof FMPModPart) { return ((FMPModPart) p).iModPart; } ret = true; @@ -79,7 +77,7 @@ public class FMPFactory implements MultiPartRegistry.IPartFactory2, @Override public void init() { - if(Loader.isModLoaded("IC2")){ + if (Loader.isModLoaded("IC2")) { MultiPartRegistry.registerConverter(new CableConverter()); MinecraftForge.EVENT_BUS.register(new CableConverter()); } diff --git a/src/main/java/techreborn/partSystem/fmp/FMPModPart.java b/src/main/java/techreborn/partSystem/fmp/FMPModPart.java index f773dd8a5..190121d2b 100644 --- a/src/main/java/techreborn/partSystem/fmp/FMPModPart.java +++ b/src/main/java/techreborn/partSystem/fmp/FMPModPart.java @@ -16,10 +16,8 @@ import codechicken.multipart.TMultiPart; import codechicken.multipart.TSlottedPart; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import techreborn.lib.Location; import techreborn.lib.vecmath.Vecs3d; @@ -50,7 +48,7 @@ public class FMPModPart extends TMultiPart implements TSlottedPart, public Iterable getOcclusionBoxes() { List cubes = new ArrayList(); for (Vecs3dCube c : iModPart.getOcclusionBoxes()) - if(c != null) + if (c != null) cubes.add(new Cuboid6(c.toAABB())); return cubes; } diff --git a/src/main/java/techreborn/partSystem/fmp/PacketFMPPlacePart.java b/src/main/java/techreborn/partSystem/fmp/PacketFMPPlacePart.java new file mode 100644 index 000000000..963e24491 --- /dev/null +++ b/src/main/java/techreborn/partSystem/fmp/PacketFMPPlacePart.java @@ -0,0 +1,34 @@ +package techreborn.partSystem.fmp; + + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import net.minecraft.entity.player.EntityPlayer; +import techreborn.packets.AbstractPacket; + +public class PacketFMPPlacePart extends AbstractPacket { + + + public PacketFMPPlacePart() { + } + + @Override + public void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer) { + + } + + @Override + public void decodeInto(ChannelHandlerContext ctx, ByteBuf buffer) { + + } + + @Override + public void handleClientSide(EntityPlayer player) { + + } + + @Override + public void handleServerSide(EntityPlayer player) { + CableConverter.place(player, player.worldObj); + } +}