--- ../src-base/minecraft/net/minecraftforge/common/ForgeHooks.java +++ ../src-work/minecraft/net/minecraftforge/common/ForgeHooks.java @@ -1,5 +1,14 @@ package net.minecraftforge.common; +import static net.minecraft.init.Blocks.diamond_block; +import static net.minecraft.init.Blocks.diamond_ore; +import static net.minecraft.init.Blocks.emerald_block; +import static net.minecraft.init.Blocks.emerald_ore; +import static net.minecraft.init.Blocks.gold_block; +import static net.minecraft.init.Blocks.gold_ore; +import static net.minecraft.init.Blocks.lit_redstone_ore; +import static net.minecraft.init.Blocks.redstone_ore; + import java.net.URI; import java.util.ArrayList; import java.util.List; @@ -7,6 +16,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import cc.capture.type.CaptureBlock; +import cc.capture.type.CaptureTree; import cpw.mods.fml.common.eventhandler.Event; import cpw.mods.fml.relauncher.ReflectionHelper; import net.minecraft.block.Block; @@ -20,19 +31,15 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.ContainerRepair; import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemAxe; import net.minecraft.item.ItemBucket; import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemSpade; import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemSword; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S23PacketBlockChange; -import net.minecraft.stats.StatList; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityNote; import net.minecraft.util.AxisAlignedBB; @@ -46,8 +53,9 @@ import net.minecraft.util.WeightedRandom; import net.minecraft.world.World; import net.minecraft.world.WorldSettings.GameType; +// Cauldron start +import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.event.AnvilUpdateEvent; -import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.event.ServerChatEvent; import net.minecraftforge.event.entity.item.ItemTossEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent; @@ -58,11 +66,10 @@ import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.living.LivingSetAttackTargetEvent; -import net.minecraftforge.event.entity.player.PlayerOpenContainerEvent; import net.minecraftforge.event.entity.player.AnvilRepairEvent; +import net.minecraftforge.event.entity.player.PlayerOpenContainerEvent; import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.event.world.NoteBlockEvent; -import static net.minecraft.init.Blocks.*; public class ForgeHooks { @@ -379,10 +386,12 @@ public static ChatComponentTranslation onServerChatEvent(NetHandlerPlayServer net, String raw, ChatComponentTranslation comp) { ServerChatEvent event = new ServerChatEvent(net.playerEntity, raw, comp); + synchronized (ServerChatEvent.class) { if (MinecraftForge.EVENT_BUS.post(event)) { return null; } + } return event.component; } @@ -439,6 +448,8 @@ public static BlockEvent.BreakEvent onBlockBreakEvent(World world, GameType gameType, EntityPlayerMP entityPlayer, int x, int y, int z) { + // Cauldron - pre-cancel handled in BreakEvent + /* // Logic from tryHarvestBlock for pre-canceling the event boolean preCancelEvent = false; if (gameType.isAdventure() && !entityPlayer.isCurrentToolAdventureModeExempt(x, y, z)) @@ -449,9 +460,9 @@ { 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 && !(entityPlayer instanceof FakePlayer)) // Cauldron - don't send packets to fakeplayers { S23PacketBlockChange packet = new S23PacketBlockChange(x, y, z, world); packet.field_148883_d = Blocks.air; @@ -463,11 +474,11 @@ Block block = world.getBlock(x, y, z); int blockMetadata = world.getBlockMetadata(x, y, z); BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(x, y, z, world, block, blockMetadata, entityPlayer); - event.setCanceled(preCancelEvent); + // event.setCanceled(preCancelEvent); // Cauldron MinecraftForge.EVENT_BUS.post(event); // Handle if the event is canceled - if (event.isCanceled()) + if (event.isCanceled() && !(entityPlayer instanceof FakePlayer)) // Cauldron - don't send packets to fakeplayers { // Let the client know the block still exists entityPlayer.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world)); @@ -488,95 +499,43 @@ public static boolean onPlaceItemIntoWorld(ItemStack itemstack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) { - // handle all placement events here - int meta = itemstack.getItemDamage(); - int size = itemstack.stackSize; - NBTTagCompound nbt = null; - if (itemstack.getTagCompound() != null) - { - nbt = (NBTTagCompound)itemstack.getTagCompound().copy(); - } + // handle all placement events here + CaptureBlock tCapture=null; + CaptureTree tTreeGenCapture=null; - if (!(itemstack.getItem() instanceof ItemBucket)) // if not bucket - { - world.captureBlockSnapshots = true; + if(!(itemstack.getItem() instanceof ItemBucket)){ // if not bucket + tCapture=world.mCapture.startCapture(player,itemstack); + tCapture.setAgaistPostionAndSide(side,x,y,z); + // Cauldron start + if(itemstack.getItem() instanceof net.minecraft.item.ItemDye&&itemstack.getItemDamage()==15){ + Block block=world.getBlock(x,y,z); + if(block!=null&&(block instanceof net.minecraft.block.BlockSapling||block instanceof net.minecraft.block.BlockMushroom)){ + tTreeGenCapture=world.mCapture.startTreeGenCapture(player,x,y,z); + tTreeGenCapture.setAgaistPostionAndSide(x,y,z,side); + } + } + // Cauldron end } - boolean flag = itemstack.getItem().onItemUse(itemstack, player, world, x, y, z, side, hitX, hitY, hitZ); - world.captureBlockSnapshots = false; + ItemStack.currentPlayer=player; // Cauldron + boolean flag=itemstack.getItem().onItemUse(itemstack,player,world,x,y,z,side,hitX,hitY,hitZ); + ItemStack.currentPlayer=null; // Cauldron - if (flag) - { - // save new item data - int newMeta = itemstack.getItemDamage(); - int newSize = itemstack.stackSize; - NBTTagCompound newNBT = null; - if (itemstack.getTagCompound() != null) - { - newNBT = (NBTTagCompound)itemstack.getTagCompound().copy(); - } - net.minecraftforge.event.world.BlockEvent.PlaceEvent placeEvent = null; - List blockSnapshots = (List) world.capturedBlockSnapshots.clone(); - world.capturedBlockSnapshots.clear(); + if(tCapture!=null) tCapture.disableCapture(); + if(tTreeGenCapture!=null) tTreeGenCapture.disableCapture(); - // make sure to set pre-placement item data for event - itemstack.setItemDamage(meta); - itemstack.stackSize = size; - if (nbt != null) - { - itemstack.setTagCompound(nbt); + // Cauldron start + if(flag){ + if(tTreeGenCapture!=null&&tTreeGenCapture.mCapturedBlocks.size()>0){ + tTreeGenCapture.endCapture(); + }else if(tCapture!=null){ + tCapture.endCapture(); } - if (blockSnapshots.size() > 1) - { - placeEvent = ForgeEventFactory.onPlayerMultiBlockPlace(player, blockSnapshots, net.minecraftforge.common.util.ForgeDirection.getOrientation(side)); - } - else if (blockSnapshots.size() == 1) - { - placeEvent = ForgeEventFactory.onPlayerBlockPlace(player, blockSnapshots.get(0), net.minecraftforge.common.util.ForgeDirection.getOrientation(side)); - } - - if (placeEvent != null && (placeEvent.isCanceled())) - { - flag = false; // cancel placement - // revert back all captured blocks - for (net.minecraftforge.common.util.BlockSnapshot blocksnapshot : blockSnapshots) - { - world.restoringBlockSnapshots = true; - blocksnapshot.restore(true, false); - world.restoringBlockSnapshots = false; - } - } - else - { - // Change the stack to its new content - itemstack.setItemDamage(newMeta); - itemstack.stackSize = newSize; - if (nbt != null) - { - itemstack.setTagCompound(newNBT); - } - - for (net.minecraftforge.common.util.BlockSnapshot blocksnapshot : blockSnapshots) - { - int blockX = blocksnapshot.x; - int blockY = blocksnapshot.y; - int blockZ = blocksnapshot.z; - int metadata = world.getBlockMetadata(blockX, blockY, blockZ); - int updateFlag = blocksnapshot.flag; - Block oldBlock = blocksnapshot.replacedBlock; - Block newBlock = world.getBlock(blockX, blockY, blockZ); - if (newBlock != null && !(newBlock.hasTileEntity(metadata))) // Containers get placed automatically - { - newBlock.onBlockAdded(world, blockX, blockY, blockZ); - } - - world.markAndNotifyBlock(blockX, blockY, blockZ, null, oldBlock, newBlock, updateFlag); - } - player.addStat(StatList.objectUseStats[Item.getIdFromItem(itemstack.getItem())], 1); - } } - world.capturedBlockSnapshots.clear(); + if(tCapture!=null) tCapture.markHandled(); + if(tTreeGenCapture!=null) tTreeGenCapture.markHandled(); + return flag; }