forked from xjboss/KCauldronX
模块化方块捕获还原动作
This commit is contained in:
parent
559b9ad248
commit
bfe43ae465
@ -1,17 +1,22 @@
|
||||
--- ../src-base/minecraft/net/minecraft/block/BlockSapling.java
|
||||
+++ ../src-work/minecraft/net/minecraft/block/BlockSapling.java
|
||||
@@ -22,10 +22,18 @@
|
||||
import net.minecraft.world.gen.feature.WorldGenTrees;
|
||||
import net.minecraft.world.gen.feature.WorldGenerator;
|
||||
@@ -1,9 +1,13 @@
|
||||
package net.minecraft.block;
|
||||
|
||||
+// CraftBukkit start
|
||||
+import org.bukkit.Location;
|
||||
+import org.bukkit.TreeType;
|
||||
+import org.bukkit.block.BlockState;
|
||||
+import org.bukkit.event.world.StructureGrowEvent;
|
||||
+// CraftBukkit end
|
||||
-import cpw.mods.fml.relauncher.Side;
|
||||
-import cpw.mods.fml.relauncher.SideOnly;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
+
|
||||
public class BlockSapling extends BlockBush implements IGrowable
|
||||
+import org.bukkit.TreeType;
|
||||
+
|
||||
+import cc.capture.type.CaptureTree;
|
||||
+import cpw.mods.fml.relauncher.Side;
|
||||
+import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.init.Blocks;
|
||||
@@ -26,6 +30,7 @@
|
||||
{
|
||||
public static final String[] field_149882_a = new String[] {"oak", "spruce", "birch", "jungle", "acacia", "roofed_oak"};
|
||||
private static final IIcon[] field_149881_b = new IIcon[field_149882_a.length];
|
||||
@ -19,7 +24,7 @@
|
||||
private static final String __OBFID = "CL_00000305";
|
||||
|
||||
protected BlockSapling()
|
||||
@@ -41,9 +49,39 @@
|
||||
@@ -41,9 +46,13 @@
|
||||
{
|
||||
super.updateTick(p_149674_1_, p_149674_2_, p_149674_3_, p_149674_4_, p_149674_5_);
|
||||
|
||||
@ -27,40 +32,14 @@
|
||||
+ if (p_149674_1_.getBlockLightValue(p_149674_2_, p_149674_3_ + 1, p_149674_4_) >= 9 && (p_149674_5_.nextInt(Math.max(2, (int)((p_149674_1_.growthOdds / p_149674_1_.getSpigotConfig().saplingModifier * 7) + 0.5F))) == 0)) // Spigot // Cauldron
|
||||
{
|
||||
+ // Cauldron start
|
||||
+ p_149674_1_.captureTreeGeneration = true;
|
||||
+ CaptureTree tCapture=p_149674_1_.mCapture.startTreeGenCapture(null,p_149674_2_,p_149674_3_,p_149674_4_);
|
||||
this.func_149879_c(p_149674_1_, p_149674_2_, p_149674_3_, p_149674_4_, p_149674_5_);
|
||||
+ p_149674_1_.captureTreeGeneration = false;
|
||||
+ if (p_149674_1_.capturedBlockSnapshots.size() > 0)
|
||||
+ {
|
||||
+ TreeType treeType = BlockSapling.treeType;
|
||||
+ BlockSapling.treeType = null;
|
||||
+ Location location = new Location(p_149674_1_.getWorld(), p_149674_2_, p_149674_3_, p_149674_4_);
|
||||
+ List<net.minecraftforge.common.util.BlockSnapshot> blocks = (List) p_149674_1_.capturedBlockSnapshots.clone();
|
||||
+ List<BlockState> blockstates = new java.util.ArrayList();
|
||||
+ for (net.minecraftforge.common.util.BlockSnapshot snapshot : blocks)
|
||||
+ {
|
||||
+ blockstates.add(new org.bukkit.craftbukkit.block.CraftBlockState(snapshot));
|
||||
+ }
|
||||
+ p_149674_1_.capturedBlockSnapshots.clear();
|
||||
+ StructureGrowEvent event = null;
|
||||
+ if (treeType != null)
|
||||
+ {
|
||||
+ event = new StructureGrowEvent(location, treeType, false, null, blockstates);
|
||||
+ org.bukkit.Bukkit.getPluginManager().callEvent(event);
|
||||
+ }
|
||||
+ if (event == null || !event.isCancelled())
|
||||
+ {
|
||||
+ for (BlockState blockstate : blockstates)
|
||||
+ {
|
||||
+ blockstate.update(true);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ tCapture.endCapture();
|
||||
+ // Cauldron end
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -73,7 +111,20 @@
|
||||
@@ -73,7 +82,20 @@
|
||||
{
|
||||
if (!net.minecraftforge.event.terraingen.TerrainGen.saplingGrowTree(p_149878_1_, p_149878_5_, p_149878_2_, p_149878_3_, p_149878_4_)) return;
|
||||
int l = p_149878_1_.getBlockMetadata(p_149878_2_, p_149878_3_, p_149878_4_) & 7;
|
||||
@ -82,7 +61,7 @@
|
||||
int i1 = 0;
|
||||
int j1 = 0;
|
||||
boolean flag = false;
|
||||
@@ -84,6 +135,7 @@
|
||||
@@ -84,6 +106,7 @@
|
||||
default:
|
||||
break;
|
||||
case 1:
|
||||
@ -90,7 +69,7 @@
|
||||
label78:
|
||||
|
||||
for (i1 = 0; i1 >= -1; --i1)
|
||||
@@ -108,6 +160,7 @@
|
||||
@@ -108,6 +131,7 @@
|
||||
|
||||
break;
|
||||
case 2:
|
||||
@ -98,7 +77,7 @@
|
||||
object = new WorldGenForest(true, false);
|
||||
break;
|
||||
case 3:
|
||||
@@ -119,6 +172,7 @@
|
||||
@@ -119,6 +143,7 @@
|
||||
{
|
||||
if (this.func_149880_a(p_149878_1_, p_149878_2_ + i1, p_149878_3_, p_149878_4_ + j1, 3) && this.func_149880_a(p_149878_1_, p_149878_2_ + i1 + 1, p_149878_3_, p_149878_4_ + j1, 3) && this.func_149880_a(p_149878_1_, p_149878_2_ + i1, p_149878_3_, p_149878_4_ + j1 + 1, 3) && this.func_149880_a(p_149878_1_, p_149878_2_ + i1 + 1, p_149878_3_, p_149878_4_ + j1 + 1, 3))
|
||||
{
|
||||
@ -106,7 +85,7 @@
|
||||
object = new WorldGenMegaJungle(true, 10, 20, 3, 3);
|
||||
flag = true;
|
||||
break label93;
|
||||
@@ -130,11 +184,13 @@
|
||||
@@ -130,11 +155,13 @@
|
||||
{
|
||||
j1 = 0;
|
||||
i1 = 0;
|
||||
@ -120,7 +99,7 @@
|
||||
object = new WorldGenSavannaTree(true);
|
||||
break;
|
||||
case 5:
|
||||
@@ -147,6 +203,7 @@
|
||||
@@ -147,6 +174,7 @@
|
||||
if (this.func_149880_a(p_149878_1_, p_149878_2_ + i1, p_149878_3_, p_149878_4_ + j1, 5) && this.func_149880_a(p_149878_1_, p_149878_2_ + i1 + 1, p_149878_3_, p_149878_4_ + j1, 5) && this.func_149880_a(p_149878_1_, p_149878_2_ + i1, p_149878_3_, p_149878_4_ + j1 + 1, 5) && this.func_149880_a(p_149878_1_, p_149878_2_ + i1 + 1, p_149878_3_, p_149878_4_ + j1 + 1, 5))
|
||||
{
|
||||
object = new WorldGenCanopyTree(true);
|
||||
|
@ -1,37 +1,23 @@
|
||||
--- ../src-base/minecraft/net/minecraft/entity/player/InventoryPlayer.java
|
||||
+++ ../src-work/minecraft/net/minecraft/entity/player/InventoryPlayer.java
|
||||
@@ -2,10 +2,13 @@
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
+
|
||||
import java.util.concurrent.Callable;
|
||||
+
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.crash.CrashReportCategory;
|
||||
+import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemArmor;
|
||||
@@ -13,7 +16,16 @@
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.util.ReportedException;
|
||||
+import net.minecraftforge.common.util.EntitySnapshot;
|
||||
@@ -1,8 +1,15 @@
|
||||
package net.minecraft.entity.player;
|
||||
|
||||
+// CraftBukkit start
|
||||
+import java.util.List;
|
||||
+import java.util.concurrent.Callable;
|
||||
+
|
||||
+import org.bukkit.craftbukkit.entity.CraftHumanEntity;
|
||||
+import org.bukkit.entity.HumanEntity;
|
||||
+// CraftBukkit end
|
||||
+import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
+
|
||||
public class InventoryPlayer implements IInventory
|
||||
{
|
||||
public ItemStack[] mainInventory = new ItemStack[36];
|
||||
@@ -25,7 +37,46 @@
|
||||
+import cc.capture.type.CaptureBlock;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
-import java.util.concurrent.Callable;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.crash.CrashReportCategory;
|
||||
@@ -25,7 +32,46 @@
|
||||
private ItemStack itemStack;
|
||||
public boolean inventoryChanged;
|
||||
private static final String __OBFID = "CL_00001709";
|
||||
@ -78,7 +64,7 @@
|
||||
public InventoryPlayer(EntityPlayer p_i1750_1_)
|
||||
{
|
||||
this.player = p_i1750_1_;
|
||||
@@ -81,6 +132,34 @@
|
||||
@@ -81,6 +127,34 @@
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -113,18 +99,19 @@
|
||||
public int getFirstEmptyStack()
|
||||
{
|
||||
for (int i = 0; i < this.mainInventory.length; ++i)
|
||||
@@ -350,6 +429,10 @@
|
||||
@@ -350,6 +424,11 @@
|
||||
{
|
||||
if (p_70441_1_ != null && p_70441_1_.stackSize != 0 && p_70441_1_.getItem() != null)
|
||||
{
|
||||
+ if(player.worldObj.captureBlockSnapshots){
|
||||
+ player.worldObj.capturedItems.add(ItemStack.copyItemStack(p_70441_1_));
|
||||
+ CaptureBlock tBlockCapture=player.worldObj.mCapture.getLastBlockCapture();
|
||||
+ if(tBlockCapture!=null&&tBlockCapture.mEnable){
|
||||
+ tBlockCapture.addCaptureItem(player,ItemStack.copyItemStack(p_70441_1_));
|
||||
+ return true;
|
||||
+ }
|
||||
try
|
||||
{
|
||||
int i;
|
||||
@@ -430,25 +513,24 @@
|
||||
@@ -430,25 +509,24 @@
|
||||
|
||||
if (aitemstack[p_70298_1_] != null)
|
||||
{
|
||||
@ -158,7 +145,7 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -658,7 +740,7 @@
|
||||
@@ -658,7 +736,7 @@
|
||||
if (this.mainInventory[i] != null)
|
||||
{
|
||||
this.player.func_146097_a(this.mainInventory[i], true, false);
|
||||
@ -167,7 +154,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -667,7 +749,7 @@
|
||||
@@ -667,7 +745,7 @@
|
||||
if (this.armorInventory[i] != null)
|
||||
{
|
||||
this.player.func_146097_a(this.armorInventory[i], true, false);
|
||||
|
@ -1,99 +1,117 @@
|
||||
--- ../src-base/minecraft/net/minecraft/world/World.java
|
||||
+++ ../src-work/minecraft/net/minecraft/world/World.java
|
||||
@@ -2,6 +2,7 @@
|
||||
@@ -1,7 +1,5 @@
|
||||
package net.minecraft.world;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
+
|
||||
-import cpw.mods.fml.relauncher.Side;
|
||||
-import cpw.mods.fml.relauncher.SideOnly;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collection;
|
||||
@@ -12,6 +13,7 @@
|
||||
@@ -12,19 +10,54 @@
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.Callable;
|
||||
+
|
||||
+import org.bukkit.Bukkit;
|
||||
+import org.bukkit.craftbukkit.CraftServer;
|
||||
+import org.bukkit.craftbukkit.CraftWorld;
|
||||
+import org.bukkit.craftbukkit.SpigotTimings;
|
||||
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||
+import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
+import org.bukkit.event.block.BlockCanBuildEvent;
|
||||
+import org.bukkit.event.block.BlockPhysicsEvent;
|
||||
+import org.bukkit.event.block.BlockPlaceEvent;
|
||||
+import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
+import org.bukkit.event.weather.ThunderChangeEvent;
|
||||
+import org.bukkit.event.weather.WeatherChangeEvent;
|
||||
+import org.bukkit.generator.ChunkGenerator;
|
||||
+// Cauldron end
|
||||
+import org.spigotmc.TickLimiter;
|
||||
+
|
||||
+import com.google.common.collect.ImmutableSetMultimap;
|
||||
+
|
||||
+import cc.capture.WorldCapture;
|
||||
+import cc.capture.type.CaptureBlock;
|
||||
+import cc.capture.type.CaptureTree;
|
||||
+import cpw.mods.fml.common.FMLLog;
|
||||
+import cpw.mods.fml.relauncher.Side;
|
||||
+import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockHopper;
|
||||
-import net.minecraft.block.BlockHopper;
|
||||
import net.minecraft.block.BlockLiquid;
|
||||
@@ -23,9 +25,11 @@
|
||||
-import net.minecraft.block.BlockSlab;
|
||||
-import net.minecraft.block.BlockSnow;
|
||||
-import net.minecraft.block.BlockStairs;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.command.IEntitySelector;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.crash.CrashReportCategory;
|
||||
import net.minecraft.entity.Entity;
|
||||
+import net.minecraft.entity.EntityList;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
+import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.pathfinding.PathEntity;
|
||||
@@ -51,7 +55,6 @@
|
||||
import net.minecraft.world.storage.ISaveHandler;
|
||||
import net.minecraft.world.storage.MapStorage;
|
||||
import net.minecraft.world.storage.WorldInfo;
|
||||
-
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
|
||||
import com.google.common.collect.ImmutableSetMultimap;
|
||||
@@ -70,6 +73,56 @@
|
||||
import net.minecraftforge.event.entity.PlaySoundAtEntityEvent;
|
||||
import net.minecraft.entity.EnumCreatureType;
|
||||
|
||||
+// CraftBukkit start
|
||||
+import net.minecraft.entity.EntityLivingBase;
|
||||
+import net.minecraft.entity.EnumCreatureType;
|
||||
+import net.minecraft.entity.item.EntityItem;
|
||||
+// CraftBukkit end
|
||||
+// Spigot Start
|
||||
+import net.minecraft.entity.item.EntityXPOrb;
|
||||
+import net.minecraft.entity.monster.EntityGhast;
|
||||
+import net.minecraft.entity.monster.EntityGolem;
|
||||
+import net.minecraft.entity.monster.EntityMob;
|
||||
+import net.minecraft.entity.monster.EntitySlime;
|
||||
+import net.minecraft.entity.passive.EntityAnimal;
|
||||
+import net.minecraft.entity.passive.EntityWaterMob;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
+import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
@@ -36,7 +69,6 @@
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.ChunkCoordinates;
|
||||
-import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Facing;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
@@ -48,27 +80,26 @@
|
||||
import net.minecraft.world.biome.WorldChunkManager;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
import net.minecraft.world.chunk.IChunkProvider;
|
||||
+import net.minecraft.world.gen.ChunkProviderServer;
|
||||
+
|
||||
+import org.bukkit.Bukkit;
|
||||
+import org.bukkit.World.Environment;
|
||||
+import org.bukkit.block.BlockState;
|
||||
+import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
+import org.bukkit.craftbukkit.util.LongHashSet;
|
||||
+import org.bukkit.craftbukkit.util.UnsafeList;
|
||||
+import org.bukkit.generator.ChunkGenerator;
|
||||
+import org.bukkit.craftbukkit.CraftServer;
|
||||
+import org.bukkit.craftbukkit.CraftWorld;
|
||||
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||
+import org.bukkit.event.block.BlockCanBuildEvent;
|
||||
+import org.bukkit.event.block.BlockPhysicsEvent;
|
||||
+import org.bukkit.event.block.BlockPlaceEvent;
|
||||
+import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
+import org.bukkit.event.weather.WeatherChangeEvent;
|
||||
+import org.bukkit.event.weather.ThunderChangeEvent;
|
||||
+
|
||||
+// CraftBukkit end
|
||||
+// Spigot Start
|
||||
+import net.minecraft.entity.item.EntityXPOrb;
|
||||
+
|
||||
+import org.bukkit.craftbukkit.SpigotTimings;
|
||||
+
|
||||
+// Spigot end
|
||||
+// Cauldron start
|
||||
+import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.storage.ISaveHandler;
|
||||
import net.minecraft.world.storage.MapStorage;
|
||||
import net.minecraft.world.storage.WorldInfo;
|
||||
-
|
||||
-import cpw.mods.fml.common.FMLLog;
|
||||
-
|
||||
-import com.google.common.collect.ImmutableSetMultimap;
|
||||
-
|
||||
+import net.minecraftforge.cauldron.CauldronHooks;
|
||||
+import net.minecraftforge.cauldron.configuration.CauldronConfig;
|
||||
+import net.minecraftforge.cauldron.configuration.CauldronWorldConfig;
|
||||
+import net.minecraftforge.cauldron.configuration.EntityWorldConfig;
|
||||
+import net.minecraftforge.cauldron.configuration.TileEntityConfig;
|
||||
+import net.minecraftforge.cauldron.configuration.TileEntityWorldConfig;
|
||||
import net.minecraftforge.client.ForgeHooksClient;
|
||||
+import net.minecraftforge.common.DimensionManager;
|
||||
+
|
||||
+import org.bukkit.block.BlockState;
|
||||
+// Cauldron end
|
||||
+import org.spigotmc.TickLimiter;
|
||||
+
|
||||
import net.minecraftforge.common.ForgeChunkManager;
|
||||
import net.minecraftforge.common.ForgeChunkManager.Ticket;
|
||||
import net.minecraftforge.common.ForgeModContainer;
|
||||
-import net.minecraftforge.common.ForgeHooks;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
-import net.minecraftforge.common.util.ForgeDirection;
|
||||
import net.minecraftforge.common.WorldSpecificSaveHandler;
|
||||
+import net.minecraftforge.common.util.BlockSnapshot;
|
||||
+import net.minecraftforge.common.util.ForgeDirection;
|
||||
import net.minecraftforge.event.entity.EntityEvent;
|
||||
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
||||
-import net.minecraftforge.event.world.WorldEvent;
|
||||
import net.minecraftforge.event.entity.PlaySoundAtEntityEvent;
|
||||
-import net.minecraft.entity.EnumCreatureType;
|
||||
|
||||
public abstract class World implements IBlockAccess
|
||||
{
|
||||
/**
|
||||
@@ -83,15 +136,14 @@
|
||||
@@ -83,15 +114,14 @@
|
||||
|
||||
public boolean scheduledUpdatesAreImmediate;
|
||||
public List loadedEntityList = new ArrayList();
|
||||
@ -111,7 +129,7 @@
|
||||
protected final int DIST_HASH_MAGIC = 1013904223;
|
||||
public float prevRainingStrength;
|
||||
public float rainingStrength;
|
||||
@@ -100,30 +152,94 @@
|
||||
@@ -100,31 +130,92 @@
|
||||
public int lastLightningBolt;
|
||||
public EnumDifficulty difficultySetting;
|
||||
public Random rand = new Random();
|
||||
@ -151,7 +169,6 @@
|
||||
private boolean field_147481_N;
|
||||
int[] lightUpdateBlockList;
|
||||
+ // Cauldron start
|
||||
+ public boolean captureTreeGeneration = false;
|
||||
+ public int entitiesTicked;
|
||||
+ public int tilesTicked;
|
||||
+ public CauldronWorldConfig cauldronConfig;
|
||||
@ -206,14 +223,15 @@
|
||||
+ // Spigot end
|
||||
private static final String __OBFID = "CL_00000140";
|
||||
public boolean restoringBlockSnapshots = false;
|
||||
public boolean captureBlockSnapshots = false;
|
||||
public ArrayList<net.minecraftforge.common.util.BlockSnapshot> capturedBlockSnapshots = new ArrayList<net.minecraftforge.common.util.BlockSnapshot>();
|
||||
+ public ArrayList<net.minecraftforge.common.util.EntitySnapshot> capturedEntitySnapshots=new ArrayList<net.minecraftforge.common.util.EntitySnapshot>();
|
||||
+ public ArrayList<ItemStack> capturedItems=new ArrayList<ItemStack>();
|
||||
- public boolean captureBlockSnapshots = false;
|
||||
- public ArrayList<net.minecraftforge.common.util.BlockSnapshot> capturedBlockSnapshots = new ArrayList<net.minecraftforge.common.util.BlockSnapshot>();
|
||||
|
||||
+ public WorldCapture mCapture=new WorldCapture(this);
|
||||
+
|
||||
public BiomeGenBase getBiomeGenForCoords(final int p_72807_1_, final int p_72807_2_)
|
||||
{
|
||||
@@ -166,6 +282,27 @@
|
||||
return provider.getBiomeGenForCoords(p_72807_1_, p_72807_2_);
|
||||
@@ -166,6 +257,27 @@
|
||||
return this.provider.worldChunkMgr;
|
||||
}
|
||||
|
||||
@ -241,7 +259,7 @@
|
||||
@SideOnly(Side.CLIENT)
|
||||
public World(ISaveHandler p_i45368_1_, String p_i45368_2_, WorldProvider p_i45368_3_, WorldSettings p_i45368_4_, Profiler p_i45368_5_)
|
||||
{
|
||||
@@ -179,6 +316,12 @@
|
||||
@@ -179,6 +291,12 @@
|
||||
this.worldInfo = new WorldInfo(p_i45368_4_, p_i45368_2_);
|
||||
this.provider = p_i45368_3_;
|
||||
perWorldStorage = new MapStorage((ISaveHandler)null);
|
||||
@ -254,7 +272,7 @@
|
||||
}
|
||||
|
||||
// Broken up so that the WorldClient gets the chance to set the mapstorage object before the dimension initializes
|
||||
@@ -207,8 +350,177 @@
|
||||
@@ -207,8 +325,177 @@
|
||||
this.calculateInitialWeather();
|
||||
}
|
||||
|
||||
@ -432,7 +450,7 @@
|
||||
this.ambientTickCountdown = this.rand.nextInt(12000);
|
||||
this.spawnHostileMobs = true;
|
||||
this.spawnPeacefulMobs = true;
|
||||
@@ -216,7 +528,6 @@
|
||||
@@ -216,7 +503,6 @@
|
||||
this.lightUpdateBlockList = new int[32768];
|
||||
this.saveHandler = p_i45369_1_;
|
||||
this.theProfiler = p_i45369_5_;
|
||||
@ -440,7 +458,7 @@
|
||||
this.worldInfo = p_i45369_1_.loadWorldInfo();
|
||||
|
||||
if (p_i45369_4_ != null)
|
||||
@@ -235,13 +546,26 @@
|
||||
@@ -235,13 +521,26 @@
|
||||
if (this.worldInfo == null)
|
||||
{
|
||||
this.worldInfo = new WorldInfo(p_i45369_3_, p_i45369_2_);
|
||||
@ -467,7 +485,7 @@
|
||||
this.chunkProvider = this.createChunkProvider();
|
||||
|
||||
if (this instanceof WorldServer)
|
||||
@@ -294,6 +618,7 @@
|
||||
@@ -294,6 +593,7 @@
|
||||
this.calculateInitialSkylight();
|
||||
this.calculateInitialWeather();
|
||||
}
|
||||
@ -475,14 +493,15 @@
|
||||
|
||||
private static MapStorage s_mapStorage;
|
||||
private static ISaveHandler s_savehandler;
|
||||
@@ -336,6 +661,18 @@
|
||||
@@ -336,6 +636,19 @@
|
||||
|
||||
public Block getBlock(int p_147439_1_, int p_147439_2_, int p_147439_3_)
|
||||
{
|
||||
+ // Cauldron start - tree generation
|
||||
+ if (captureTreeGeneration)
|
||||
+ CaptureTree tTreeCapture=this.mCapture.getLastTreeGenCapture();
|
||||
+ if (tTreeCapture!=null&&tTreeCapture.mEnable)
|
||||
+ {
|
||||
+ for (net.minecraftforge.common.util.BlockSnapshot blocksnapshot : capturedBlockSnapshots)
|
||||
+ for (net.minecraftforge.common.util.BlockSnapshot blocksnapshot : tTreeCapture.mCapturedBlocks)
|
||||
+ {
|
||||
+ if (blocksnapshot.x == p_147439_1_ && blocksnapshot.y == p_147439_2_ && blocksnapshot.z == p_147439_3_)
|
||||
+ {
|
||||
@ -494,7 +513,7 @@
|
||||
if (p_147439_1_ >= -30000000 && p_147439_3_ >= -30000000 && p_147439_1_ < 30000000 && p_147439_3_ < 30000000 && p_147439_2_ >= 0 && p_147439_2_ < 256)
|
||||
{
|
||||
Chunk chunk = null;
|
||||
@@ -404,7 +741,7 @@
|
||||
@@ -404,7 +717,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@ -503,16 +522,17 @@
|
||||
{
|
||||
return this.chunkProvider.chunkExists(p_72916_1_, p_72916_2_);
|
||||
}
|
||||
@@ -421,6 +758,27 @@
|
||||
@@ -421,6 +734,28 @@
|
||||
|
||||
public boolean setBlock(int p_147465_1_, int p_147465_2_, int p_147465_3_, Block p_147465_4_, int p_147465_5_, int p_147465_6_)
|
||||
{
|
||||
+ // Cauldron start - tree generation
|
||||
+ if (this.captureTreeGeneration)
|
||||
+ CaptureTree tTreeCapture=this.mCapture.getLastTreeGenCapture();
|
||||
+ if (tTreeCapture!=null&&tTreeCapture.mEnable)
|
||||
+ {
|
||||
+ net.minecraftforge.common.util.BlockSnapshot blocksnapshot = null;
|
||||
+
|
||||
+ for (net.minecraftforge.common.util.BlockSnapshot previous : capturedBlockSnapshots)
|
||||
+ for (net.minecraftforge.common.util.BlockSnapshot previous : tTreeCapture.mCapturedBlocks)
|
||||
+ {
|
||||
+ if (previous.x == p_147465_1_ && previous.y == p_147465_2_ && previous.z == p_147465_3_)
|
||||
+ {
|
||||
@ -522,42 +542,65 @@
|
||||
+ }
|
||||
+ if (blocksnapshot != null)
|
||||
+ {
|
||||
+ capturedBlockSnapshots.remove(blocksnapshot);
|
||||
+ tTreeCapture.mCapturedBlocks.remove(blocksnapshot);
|
||||
+ }
|
||||
+ this.capturedBlockSnapshots.add(new net.minecraftforge.common.util.BlockSnapshot(this, p_147465_1_, p_147465_2_, p_147465_3_, p_147465_4_, p_147465_5_, p_147465_6_));
|
||||
+ tTreeCapture.mCapturedBlocks.add(new net.minecraftforge.common.util.BlockSnapshot(this, p_147465_1_, p_147465_2_, p_147465_3_, p_147465_4_, p_147465_5_, p_147465_6_));
|
||||
+ return true;
|
||||
+ }
|
||||
+ // Cauldron end
|
||||
if (p_147465_1_ >= -30000000 && p_147465_3_ >= -30000000 && p_147465_1_ < 30000000 && p_147465_3_ < 30000000)
|
||||
{
|
||||
if (p_147465_2_ < 0)
|
||||
@@ -450,7 +808,9 @@
|
||||
@@ -435,32 +770,29 @@
|
||||
{
|
||||
Chunk chunk = this.getChunkFromChunkCoords(p_147465_1_ >> 4, p_147465_3_ >> 4);
|
||||
Block block1 = null;
|
||||
- net.minecraftforge.common.util.BlockSnapshot blockSnapshot = null;
|
||||
|
||||
if ((p_147465_6_ & 1) != 0)
|
||||
{
|
||||
block1 = chunk.getBlock(p_147465_1_ & 15, p_147465_2_, p_147465_3_ & 15);
|
||||
}
|
||||
|
||||
- if (this.captureBlockSnapshots && !this.isRemote)
|
||||
- {
|
||||
- blockSnapshot = net.minecraftforge.common.util.BlockSnapshot.getBlockSnapshot(this, p_147465_1_, p_147465_2_, p_147465_3_, p_147465_6_);
|
||||
- this.capturedBlockSnapshots.add(blockSnapshot);
|
||||
+ CaptureBlock tBlockCapture=this.mCapture.getLastBlockCapture();
|
||||
+ BlockSnapshot tSnapshot=null;
|
||||
+ if(tBlockCapture!=null&&tBlockCapture.mEnable){
|
||||
+ tSnapshot=BlockSnapshot.getBlockSnapshot(this,p_147465_1_,p_147465_2_,p_147465_3_,p_147465_6_);
|
||||
}
|
||||
-
|
||||
boolean flag = chunk.func_150807_a(p_147465_1_ & 15, p_147465_2_, p_147465_3_ & 15, p_147465_4_, p_147465_5_);
|
||||
|
||||
- if (!flag && blockSnapshot != null)
|
||||
+ // Cauldron end
|
||||
+
|
||||
+ if (!flag && this.captureBlockSnapshots && blockSnapshot != null)
|
||||
{
|
||||
this.capturedBlockSnapshots.remove(blockSnapshot);
|
||||
blockSnapshot = null;
|
||||
@@ -460,6 +820,7 @@
|
||||
- {
|
||||
- this.capturedBlockSnapshots.remove(blockSnapshot);
|
||||
- blockSnapshot = null;
|
||||
+ if(flag&&tSnapshot!=null){
|
||||
+ tBlockCapture.addCapturedBlock(tSnapshot);
|
||||
}
|
||||
|
||||
this.theProfiler.startSection("checkLight");
|
||||
this.func_147451_t(p_147465_1_, p_147465_2_, p_147465_3_);
|
||||
this.theProfiler.endSection();
|
||||
|
||||
- if (flag && blockSnapshot == null) // Don't notify clients or update physics while capturing blockstates
|
||||
+ // Cauldron add !this.captureBlockStates
|
||||
if (flag && blockSnapshot == null) // Don't notify clients or update physics while capturing blockstates
|
||||
+ if (flag && tBlockCapture != null&&tBlockCapture.mEnable) // Don't notify clients or update physics while capturing blockstates
|
||||
{
|
||||
// Modularize client and physic updates
|
||||
@@ -496,6 +857,19 @@
|
||||
this.markAndNotifyBlock(p_147465_1_, p_147465_2_, p_147465_3_, chunk, block1, p_147465_4_, p_147465_6_);
|
||||
@@ -496,6 +828,20 @@
|
||||
|
||||
public int getBlockMetadata(int p_72805_1_, int p_72805_2_, int p_72805_3_)
|
||||
{
|
||||
+ // Cauldron start - tree generation
|
||||
+ if (captureTreeGeneration)
|
||||
+ CaptureTree treeGenCapture=this.mCapture.getLastTreeGenCapture();
|
||||
+ if (treeGenCapture!=null&&treeGenCapture.mEnable)
|
||||
+ {
|
||||
+ for (net.minecraftforge.common.util.BlockSnapshot blocksnapshot : capturedBlockSnapshots)
|
||||
+ for (net.minecraftforge.common.util.BlockSnapshot blocksnapshot : treeGenCapture.mCapturedBlocks)
|
||||
+ {
|
||||
+ if (blocksnapshot.x == p_72805_1_ && blocksnapshot.y == p_72805_2_ && blocksnapshot.z == p_72805_3_)
|
||||
+ {
|
||||
@ -570,7 +613,7 @@
|
||||
if (p_72805_1_ >= -30000000 && p_72805_3_ >= -30000000 && p_72805_1_ < 30000000 && p_72805_3_ < 30000000)
|
||||
{
|
||||
if (p_72805_2_ < 0)
|
||||
@@ -511,7 +885,7 @@
|
||||
@@ -511,7 +857,7 @@
|
||||
Chunk chunk = this.getChunkFromChunkCoords(p_72805_1_ >> 4, p_72805_3_ >> 4);
|
||||
p_72805_1_ &= 15;
|
||||
p_72805_3_ &= 15;
|
||||
@ -579,7 +622,7 @@
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -610,6 +984,12 @@
|
||||
@@ -610,6 +956,12 @@
|
||||
|
||||
public void notifyBlockChange(int p_147444_1_, int p_147444_2_, int p_147444_3_, Block p_147444_4_)
|
||||
{
|
||||
@ -592,7 +635,7 @@
|
||||
this.notifyBlocksOfNeighborChange(p_147444_1_, p_147444_2_, p_147444_3_, p_147444_4_);
|
||||
}
|
||||
|
||||
@@ -694,6 +1074,21 @@
|
||||
@@ -694,6 +1046,21 @@
|
||||
|
||||
try
|
||||
{
|
||||
@ -614,7 +657,7 @@
|
||||
block.onNeighborBlockChange(this, p_147460_1_, p_147460_2_, p_147460_3_, p_147460_4_);
|
||||
}
|
||||
catch (Throwable throwable1)
|
||||
@@ -1307,8 +1702,22 @@
|
||||
@@ -1307,8 +1674,22 @@
|
||||
|
||||
public boolean spawnEntityInWorld(Entity p_72838_1_)
|
||||
{
|
||||
@ -630,15 +673,15 @@
|
||||
+ if(!this.isRemote){
|
||||
+ if(p_72838_1_ instanceof net.minecraft.entity.item.EntityItem&&this.restoringBlockSnapshots)
|
||||
+ return false;
|
||||
+ if(this.captureBlockSnapshots&&!(p_72838_1_ instanceof EntityPlayerMP)){
|
||||
+ this.capturedEntitySnapshots.add(new net.minecraftforge.common.util.EntitySnapshot(this,p_72838_1_,spawnReason));
|
||||
+ if(this.mCapture.isCapture()&&!(p_72838_1_ instanceof EntityPlayerMP)){
|
||||
+ this.mCapture.addCaptureEntity(this,p_72838_1_,spawnReason);
|
||||
+ return true;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
int i = MathHelper.floor_double(p_72838_1_.posX / 16.0D);
|
||||
int j = MathHelper.floor_double(p_72838_1_.posZ / 16.0D);
|
||||
@@ -1319,23 +1728,99 @@
|
||||
@@ -1319,23 +1700,99 @@
|
||||
flag = true;
|
||||
}
|
||||
|
||||
@ -740,7 +783,7 @@
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1346,6 +1831,8 @@
|
||||
@@ -1346,6 +1803,8 @@
|
||||
{
|
||||
((IWorldAccess)this.worldAccesses.get(i)).onEntityCreate(p_72923_1_);
|
||||
}
|
||||
@ -749,7 +792,7 @@
|
||||
}
|
||||
|
||||
public void onEntityRemoved(Entity p_72847_1_)
|
||||
@@ -1354,6 +1841,8 @@
|
||||
@@ -1354,6 +1813,8 @@
|
||||
{
|
||||
((IWorldAccess)this.worldAccesses.get(i)).onEntityDestroy(p_72847_1_);
|
||||
}
|
||||
@ -758,7 +801,7 @@
|
||||
}
|
||||
|
||||
public void removeEntity(Entity p_72900_1_)
|
||||
@@ -1397,6 +1886,19 @@
|
||||
@@ -1397,6 +1858,19 @@
|
||||
}
|
||||
|
||||
this.loadedEntityList.remove(p_72973_1_);
|
||||
@ -778,7 +821,7 @@
|
||||
this.onEntityRemoved(p_72973_1_);
|
||||
}
|
||||
|
||||
@@ -1408,40 +1910,58 @@
|
||||
@@ -1408,40 +1882,58 @@
|
||||
public List getCollidingBoundingBoxes(Entity p_72945_1_, AxisAlignedBB p_72945_2_)
|
||||
{
|
||||
this.collidingBoundingBoxes.clear();
|
||||
@ -851,7 +894,7 @@
|
||||
|
||||
for (int j2 = 0; j2 < list.size(); ++j2)
|
||||
{
|
||||
@@ -1797,11 +2317,22 @@
|
||||
@@ -1797,11 +2289,22 @@
|
||||
Entity entity;
|
||||
CrashReport crashreport;
|
||||
CrashReportCategory crashreportcategory;
|
||||
@ -874,7 +917,7 @@
|
||||
try
|
||||
{
|
||||
++entity.ticksExisted;
|
||||
@@ -1812,14 +2343,7 @@
|
||||
@@ -1812,14 +2315,7 @@
|
||||
crashreport = CrashReport.makeCrashReport(throwable2, "Ticking entity");
|
||||
crashreportcategory = crashreport.makeCategory("Entity being ticked");
|
||||
|
||||
@ -890,7 +933,7 @@
|
||||
|
||||
if (ForgeModContainer.removeErroringEntities)
|
||||
{
|
||||
@@ -1862,10 +2386,14 @@
|
||||
@@ -1862,10 +2358,14 @@
|
||||
|
||||
this.unloadedEntityList.clear();
|
||||
this.theProfiler.endStartSection("regular");
|
||||
@ -908,7 +951,7 @@
|
||||
|
||||
if (entity.ridingEntity != null)
|
||||
{
|
||||
@@ -1884,7 +2412,9 @@
|
||||
@@ -1884,7 +2384,9 @@
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -918,7 +961,7 @@
|
||||
}
|
||||
catch (Throwable throwable1)
|
||||
{
|
||||
@@ -1916,30 +2446,84 @@
|
||||
@@ -1916,30 +2418,84 @@
|
||||
{
|
||||
this.getChunkFromChunkCoords(j, l).removeEntity(entity);
|
||||
}
|
||||
@ -1010,7 +1053,7 @@
|
||||
crashreport = CrashReport.makeCrashReport(throwable, "Ticking block entity");
|
||||
crashreportcategory = crashreport.makeCategory("Block entity being ticked");
|
||||
tileentity.func_145828_a(crashreportcategory);
|
||||
@@ -1955,23 +2539,13 @@
|
||||
@@ -1955,23 +2511,13 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1039,7 +1082,7 @@
|
||||
if (!this.field_147483_b.isEmpty())
|
||||
{
|
||||
for (Object tile : field_147483_b)
|
||||
@@ -1981,6 +2555,7 @@
|
||||
@@ -1981,6 +2527,7 @@
|
||||
this.loadedTileEntityList.removeAll(this.field_147483_b);
|
||||
this.field_147483_b.clear();
|
||||
}
|
||||
@ -1047,7 +1090,7 @@
|
||||
|
||||
this.field_147481_N = false;
|
||||
|
||||
@@ -2016,17 +2591,23 @@
|
||||
@@ -2016,17 +2563,23 @@
|
||||
this.addedTileEntityList.clear();
|
||||
}
|
||||
|
||||
@ -1074,7 +1117,7 @@
|
||||
}
|
||||
|
||||
public void updateEntity(Entity p_72870_1_)
|
||||
@@ -2036,21 +2617,41 @@
|
||||
@@ -2036,21 +2589,41 @@
|
||||
|
||||
public void updateEntityWithOptionalForce(Entity p_72866_1_, boolean p_72866_2_)
|
||||
{
|
||||
@ -1118,7 +1161,7 @@
|
||||
p_72866_1_.lastTickPosX = p_72866_1_.posX;
|
||||
p_72866_1_.lastTickPosY = p_72866_1_.posY;
|
||||
p_72866_1_.lastTickPosZ = p_72866_1_.posZ;
|
||||
@@ -2134,6 +2735,7 @@
|
||||
@@ -2134,6 +2707,7 @@
|
||||
p_72866_1_.riddenByEntity = null;
|
||||
}
|
||||
}
|
||||
@ -1126,7 +1169,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2570,7 +3172,7 @@
|
||||
@@ -2570,7 +3144,7 @@
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1135,7 +1178,7 @@
|
||||
{
|
||||
if (this.field_147481_N)
|
||||
{
|
||||
@@ -2612,6 +3214,9 @@
|
||||
@@ -2612,6 +3186,9 @@
|
||||
|
||||
public void func_147457_a(TileEntity p_147457_1_)
|
||||
{
|
||||
@ -1145,7 +1188,7 @@
|
||||
this.field_147483_b.add(p_147457_1_);
|
||||
}
|
||||
|
||||
@@ -2718,7 +3323,15 @@
|
||||
@@ -2718,7 +3295,15 @@
|
||||
|
||||
if (i <= 0)
|
||||
{
|
||||
@ -1162,7 +1205,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2754,7 +3367,15 @@
|
||||
@@ -2754,7 +3339,15 @@
|
||||
|
||||
if (j <= 0)
|
||||
{
|
||||
@ -1179,7 +1222,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2777,8 +3398,41 @@
|
||||
@@ -2777,8 +3370,41 @@
|
||||
protected void setActivePlayerChunksAndCheckLight()
|
||||
{
|
||||
this.activeChunkSet.clear();
|
||||
@ -1222,7 +1265,7 @@
|
||||
int i;
|
||||
EntityPlayer entityplayer;
|
||||
int j;
|
||||
@@ -2788,17 +3442,28 @@
|
||||
@@ -2788,17 +3414,28 @@
|
||||
for (i = 0; i < this.playerEntities.size(); ++i)
|
||||
{
|
||||
entityplayer = (EntityPlayer)this.playerEntities.get(i);
|
||||
@ -1257,7 +1300,7 @@
|
||||
}
|
||||
|
||||
this.theProfiler.endSection();
|
||||
@@ -2810,7 +3475,7 @@
|
||||
@@ -2810,7 +3447,7 @@
|
||||
|
||||
this.theProfiler.startSection("playerCheckLight");
|
||||
|
||||
@ -1266,7 +1309,7 @@
|
||||
{
|
||||
i = this.rand.nextInt(this.playerEntities.size());
|
||||
entityplayer = (EntityPlayer)this.playerEntities.get(i);
|
||||
@@ -3034,9 +3699,9 @@
|
||||
@@ -3034,9 +3671,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
@ -1278,7 +1321,7 @@
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -3166,6 +3831,16 @@
|
||||
@@ -3166,6 +3803,16 @@
|
||||
}
|
||||
}
|
||||
|
||||
@ -1295,7 +1338,7 @@
|
||||
this.theProfiler.endSection();
|
||||
return true;
|
||||
}
|
||||
@@ -3284,8 +3959,21 @@
|
||||
@@ -3284,8 +3931,21 @@
|
||||
{
|
||||
Entity entity = (Entity)this.loadedEntityList.get(j);
|
||||
|
||||
@ -1318,7 +1361,7 @@
|
||||
++i;
|
||||
}
|
||||
}
|
||||
@@ -3298,6 +3986,7 @@
|
||||
@@ -3298,6 +3958,7 @@
|
||||
for (int i = 0; i < p_72868_1_.size(); ++i)
|
||||
{
|
||||
Entity entity = (Entity)p_72868_1_.get(i);
|
||||
@ -1326,7 +1369,7 @@
|
||||
if (!MinecraftForge.EVENT_BUS.post(new EntityJoinWorldEvent(entity, this)))
|
||||
{
|
||||
loadedEntityList.add(entity);
|
||||
@@ -3314,8 +4003,17 @@
|
||||
@@ -3314,8 +3975,17 @@
|
||||
public boolean canPlaceEntityOnSide(Block p_147472_1_, int p_147472_2_, int p_147472_3_, int p_147472_4_, boolean p_147472_5_, int p_147472_6_, Entity p_147472_7_, ItemStack p_147472_8_)
|
||||
{
|
||||
Block block1 = this.getBlock(p_147472_2_, p_147472_3_, p_147472_4_);
|
||||
@ -1345,7 +1388,7 @@
|
||||
}
|
||||
|
||||
public PathEntity getPathEntityToEntity(Entity p_72865_1_, Entity p_72865_2_, float p_72865_3_, boolean p_72865_4_, boolean p_72865_5_, boolean p_72865_6_, boolean p_72865_7_)
|
||||
@@ -3464,6 +4162,12 @@
|
||||
@@ -3464,6 +4134,12 @@
|
||||
for (int i = 0; i < this.playerEntities.size(); ++i)
|
||||
{
|
||||
EntityPlayer entityplayer1 = (EntityPlayer)this.playerEntities.get(i);
|
||||
@ -1358,7 +1401,7 @@
|
||||
double d5 = entityplayer1.getDistanceSq(p_72977_1_, p_72977_3_, p_72977_5_);
|
||||
|
||||
if ((p_72977_7_ < 0.0D || d5 < p_72977_7_ * p_72977_7_) && (d4 == -1.0D || d5 < d4))
|
||||
@@ -3489,7 +4193,12 @@
|
||||
@@ -3489,7 +4165,12 @@
|
||||
for (int i = 0; i < this.playerEntities.size(); ++i)
|
||||
{
|
||||
EntityPlayer entityplayer1 = (EntityPlayer)this.playerEntities.get(i);
|
||||
@ -1372,7 +1415,7 @@
|
||||
if (!entityplayer1.capabilities.disableDamage && entityplayer1.isEntityAlive())
|
||||
{
|
||||
double d5 = entityplayer1.getDistanceSq(p_72846_1_, p_72846_3_, p_72846_5_);
|
||||
@@ -3660,6 +4369,18 @@
|
||||
@@ -3660,6 +4341,18 @@
|
||||
|
||||
public void updateAllPlayersSleepingFlag() {}
|
||||
|
||||
@ -1391,7 +1434,7 @@
|
||||
public float getWeightedThunderStrength(float p_72819_1_)
|
||||
{
|
||||
return (this.prevThunderingStrength + (this.thunderingStrength - this.prevThunderingStrength) * p_72819_1_) * this.getRainStrength(p_72819_1_);
|
||||
@@ -3932,8 +4653,8 @@
|
||||
@@ -3932,8 +4625,8 @@
|
||||
*/
|
||||
public void addTileEntity(TileEntity entity)
|
||||
{
|
||||
@ -1402,7 +1445,7 @@
|
||||
{
|
||||
dest.add(entity);
|
||||
}
|
||||
@@ -4029,4 +4750,122 @@
|
||||
@@ -4029,4 +4722,122 @@
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
@ -1,23 +1,74 @@
|
||||
--- ../src-base/minecraft/net/minecraftforge/common/ForgeHooks.java
|
||||
+++ ../src-work/minecraft/net/minecraftforge/common/ForgeHooks.java
|
||||
@@ -63,6 +63,16 @@
|
||||
import net.minecraftforge.event.world.BlockEvent;
|
||||
import net.minecraftforge.event.world.NoteBlockEvent;
|
||||
import static net.minecraft.init.Blocks.*;
|
||||
@@ -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 org.bukkit.Bukkit;
|
||||
+import org.bukkit.Location;
|
||||
+import org.bukkit.TreeType;
|
||||
+import org.bukkit.block.BlockState;
|
||||
+import org.bukkit.craftbukkit.block.CraftBlockState;
|
||||
+import org.bukkit.entity.Player;
|
||||
+import org.bukkit.event.world.StructureGrowEvent;
|
||||
+//Cauldron end
|
||||
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 +389,12 @@
|
||||
@@ -379,10 +386,12 @@
|
||||
public static ChatComponentTranslation onServerChatEvent(NetHandlerPlayServer net, String raw, ChatComponentTranslation comp)
|
||||
{
|
||||
ServerChatEvent event = new ServerChatEvent(net.playerEntity, raw, comp);
|
||||
@ -30,7 +81,7 @@
|
||||
return event.component;
|
||||
}
|
||||
|
||||
@@ -439,6 +451,8 @@
|
||||
@@ -439,6 +448,8 @@
|
||||
|
||||
public static BlockEvent.BreakEvent onBlockBreakEvent(World world, GameType gameType, EntityPlayerMP entityPlayer, int x, int y, int z)
|
||||
{
|
||||
@ -39,7 +90,7 @@
|
||||
// Logic from tryHarvestBlock for pre-canceling the event
|
||||
boolean preCancelEvent = false;
|
||||
if (gameType.isAdventure() && !entityPlayer.isCurrentToolAdventureModeExempt(x, y, z))
|
||||
@@ -449,9 +463,9 @@
|
||||
@@ -449,9 +460,9 @@
|
||||
{
|
||||
preCancelEvent = true;
|
||||
}
|
||||
@ -51,7 +102,7 @@
|
||||
{
|
||||
S23PacketBlockChange packet = new S23PacketBlockChange(x, y, z, world);
|
||||
packet.field_148883_d = Blocks.air;
|
||||
@@ -463,11 +477,11 @@
|
||||
@@ -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);
|
||||
@ -65,62 +116,73 @@
|
||||
{
|
||||
// Let the client know the block still exists
|
||||
entityPlayer.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world));
|
||||
@@ -500,81 +514,157 @@
|
||||
if (!(itemstack.getItem() instanceof ItemBucket)) // if not bucket
|
||||
{
|
||||
world.captureBlockSnapshots = true;
|
||||
@@ -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))
|
||||
+ {
|
||||
+ world.captureTreeGeneration = true;
|
||||
+ 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
|
||||
}
|
||||
|
||||
+ ItemStack.currentPlayer = player; // Cauldron
|
||||
boolean flag = itemstack.getItem().onItemUse(itemstack, player, world, x, y, z, side, hitX, hitY, hitZ);
|
||||
+ ItemStack.currentPlayer = null; // Cauldron
|
||||
world.captureBlockSnapshots = false;
|
||||
- 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)
|
||||
+ // Cauldron start
|
||||
+ if (flag && world.captureTreeGeneration && world.capturedBlockSnapshots.size() > 0)
|
||||
{
|
||||
- {
|
||||
- // save new item data
|
||||
- int newMeta = itemstack.getItemDamage();
|
||||
- int newSize = itemstack.stackSize;
|
||||
- NBTTagCompound newNBT = null;
|
||||
- if (itemstack.getTagCompound() != null)
|
||||
+ world.captureTreeGeneration = false;
|
||||
+ Location loc = new Location(world.getWorld(), (double) x, (double) y, (double) z);
|
||||
+ TreeType type = net.minecraft.block.BlockSapling.treeType;
|
||||
+ net.minecraft.block.BlockSapling.treeType = null;
|
||||
+ List<BlockState> states = new ArrayList();
|
||||
+
|
||||
+ for (net.minecraftforge.common.util.BlockSnapshot snapshot : (List<net.minecraftforge.common.util.BlockSnapshot>) world.capturedBlockSnapshots.clone())
|
||||
{
|
||||
- {
|
||||
- newNBT = (NBTTagCompound)itemstack.getTagCompound().copy();
|
||||
+ states.add(new CraftBlockState(snapshot));
|
||||
}
|
||||
- }
|
||||
- net.minecraftforge.event.world.BlockEvent.PlaceEvent placeEvent = null;
|
||||
- List<net.minecraftforge.common.util.BlockSnapshot> blockSnapshots = (List<net.minecraftforge.common.util.BlockSnapshot>) 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)
|
||||
+ world.capturedBlockSnapshots.clear();
|
||||
+ StructureGrowEvent event = null;
|
||||
+ if (type != null)
|
||||
{
|
||||
- {
|
||||
- itemstack.setTagCompound(nbt);
|
||||
+ event = new StructureGrowEvent(loc, type, false, (Player) player.getBukkitEntity(), states);
|
||||
+ Bukkit.getPluginManager().callEvent(event);
|
||||
+ // Cauldron start
|
||||
+ if(flag){
|
||||
+ if(tTreeGenCapture!=null&&tTreeGenCapture.mCapturedBlocks.size()>0){
|
||||
+ tTreeGenCapture.endCapture();
|
||||
+ }else if(tCapture!=null){
|
||||
+ tCapture.endCapture();
|
||||
}
|
||||
- if (blockSnapshots.size() > 1)
|
||||
- {
|
||||
@ -130,72 +192,30 @@
|
||||
- {
|
||||
- placeEvent = ForgeEventFactory.onPlayerBlockPlace(player, blockSnapshots.get(0), net.minecraftforge.common.util.ForgeDirection.getOrientation(side));
|
||||
- }
|
||||
|
||||
-
|
||||
- if (placeEvent != null && (placeEvent.isCanceled()))
|
||||
+ if (event == null || !event.isCancelled())
|
||||
{
|
||||
- {
|
||||
- flag = false; // cancel placement
|
||||
- // revert back all captured blocks
|
||||
- for (net.minecraftforge.common.util.BlockSnapshot blocksnapshot : blockSnapshots)
|
||||
+ for (BlockState state : states)
|
||||
{
|
||||
- {
|
||||
- world.restoringBlockSnapshots = true;
|
||||
- blocksnapshot.restore(true, false);
|
||||
- world.restoringBlockSnapshots = false;
|
||||
+ state.update(true);
|
||||
}
|
||||
}
|
||||
- }
|
||||
- }
|
||||
- else
|
||||
+
|
||||
+ return flag;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ world.captureTreeGeneration = false; // Cauldron end
|
||||
+ if (flag)
|
||||
{
|
||||
- {
|
||||
- // Change the stack to its new content
|
||||
- itemstack.setItemDamage(newMeta);
|
||||
- itemstack.stackSize = newSize;
|
||||
+ // 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<net.minecraftforge.common.util.BlockSnapshot> blockSnapshots = (List<net.minecraftforge.common.util.BlockSnapshot>) world.capturedBlockSnapshots
|
||||
+ .clone();
|
||||
+ world.capturedBlockSnapshots.clear();
|
||||
+ List<net.minecraftforge.common.util.EntitySnapshot> tDropItemSnapshots=(List<net.minecraftforge.common.util.EntitySnapshot>)world.capturedEntitySnapshots.clone();
|
||||
+ world.capturedEntitySnapshots.clear();
|
||||
+ List<ItemStack> tCaptureItems=(List<ItemStack>)world.capturedItems.clone();
|
||||
+ world.capturedItems.clear();
|
||||
+
|
||||
+ // make sure to set pre-placement item data for event
|
||||
+ itemstack.setItemDamage(meta);
|
||||
+ itemstack.stackSize = size;
|
||||
if (nbt != null)
|
||||
{
|
||||
- if (nbt != null)
|
||||
- {
|
||||
- itemstack.setTagCompound(newNBT);
|
||||
+ itemstack.setTagCompound(nbt);
|
||||
}
|
||||
+ 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));
|
||||
+ }
|
||||
|
||||
- }
|
||||
-
|
||||
- for (net.minecraftforge.common.util.BlockSnapshot blocksnapshot : blockSnapshots)
|
||||
+ if (placeEvent != null && (placeEvent.isCanceled()))
|
||||
{
|
||||
- {
|
||||
- int blockX = blocksnapshot.x;
|
||||
- int blockY = blocksnapshot.y;
|
||||
- int blockZ = blocksnapshot.z;
|
||||
@ -204,69 +224,20 @@
|
||||
- Block oldBlock = blocksnapshot.replacedBlock;
|
||||
- Block newBlock = world.getBlock(blockX, blockY, blockZ);
|
||||
- if (newBlock != null && !(newBlock.hasTileEntity(metadata))) // Containers get placed automatically
|
||||
+ flag = false; // cancel placement
|
||||
+ // revert back all captured blocks
|
||||
+ for(int i=blockSnapshots.size();i>0;){
|
||||
+ world.restoringBlockSnapshots=true;
|
||||
+ blockSnapshots.get(--i).restore(true,false);
|
||||
+ world.restoringBlockSnapshots=false;
|
||||
+ }
|
||||
+ for(net.minecraftforge.common.util.EntitySnapshot sEntityItem : tDropItemSnapshots){
|
||||
+ sEntityItem.cancel();
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ // Change the stack to its new content
|
||||
+ itemstack.setItemDamage(newMeta);
|
||||
+ itemstack.stackSize = newSize;
|
||||
+ if (nbt != null)
|
||||
{
|
||||
- {
|
||||
- newBlock.onBlockAdded(world, blockX, blockY, blockZ);
|
||||
+ itemstack.setTagCompound(newNBT);
|
||||
}
|
||||
|
||||
- }
|
||||
-
|
||||
- world.markAndNotifyBlock(blockX, blockY, blockZ, null, oldBlock, newBlock, updateFlag);
|
||||
+ 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);
|
||||
+ }
|
||||
+ for(net.minecraftforge.common.util.EntitySnapshot sEntityItem : tDropItemSnapshots){
|
||||
+ sEntityItem.apply();
|
||||
+ }
|
||||
+ if(!tCaptureItems.isEmpty()){
|
||||
+ boolean tAdded=false;
|
||||
+ for(ItemStack sItem : tCaptureItems){
|
||||
+ if(!player.inventory.addItemStackToInventory(sItem)){
|
||||
+ world.spawnEntityInWorld(new EntityItem(world,player.posX,player.posY,player.posZ,sItem));
|
||||
+ }else{
|
||||
+ tAdded=true;
|
||||
+ }
|
||||
+ }
|
||||
+ if(tAdded) player.openContainer.detectAndSendChanges();
|
||||
+ }
|
||||
+ player.addStat(StatList.objectUseStats[Item.getIdFromItem(itemstack.getItem())], 1);
|
||||
}
|
||||
- }
|
||||
- player.addStat(StatList.objectUseStats[Item.getIdFromItem(itemstack.getItem())], 1);
|
||||
+
|
||||
}
|
||||
- }
|
||||
}
|
||||
+
|
||||
world.capturedBlockSnapshots.clear();
|
||||
- world.capturedBlockSnapshots.clear();
|
||||
|
||||
+ if(tCapture!=null) tCapture.markHandled();
|
||||
+ if(tTreeGenCapture!=null) tTreeGenCapture.markHandled();
|
||||
+
|
||||
return flag;
|
||||
}
|
||||
|
||||
|
@ -1,23 +1,33 @@
|
||||
--- ../src-base/minecraft/net/minecraftforge/event/world/BlockEvent.java
|
||||
+++ ../src-work/minecraft/net/minecraftforge/event/world/BlockEvent.java
|
||||
@@ -16,6 +16,16 @@
|
||||
import net.minecraftforge.common.ForgeHooks;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
@@ -3,17 +3,23 @@
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
+import org.bukkit.block.BlockState;
|
||||
+import org.bukkit.craftbukkit.block.CraftBlockState;
|
||||
+// Cauldron start
|
||||
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||
+import org.bukkit.event.block.BlockBreakEvent;
|
||||
+import org.bukkit.event.block.BlockMultiPlaceEvent;
|
||||
+
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
+import cc.capture.type.CaptureBlock;
|
||||
import cpw.mods.fml.common.eventhandler.Cancelable;
|
||||
import cpw.mods.fml.common.eventhandler.Event;
|
||||
import net.minecraft.block.Block;
|
||||
-import net.minecraft.enchantment.EnchantmentHelper;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
-import net.minecraft.init.Blocks;
|
||||
+import net.minecraft.entity.player.EntityPlayerMP;
|
||||
+// Cauldron end
|
||||
+
|
||||
public class BlockEvent extends Event {
|
||||
private static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("forge.debugBlockEvent", "false"));
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
-import net.minecraftforge.common.ForgeHooks;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
|
||||
@@ -80,17 +90,18 @@
|
||||
public class BlockEvent extends Event {
|
||||
@@ -80,17 +86,18 @@
|
||||
super(x, y, z, world, block, blockMetadata);
|
||||
this.player = player;
|
||||
|
||||
@ -42,7 +52,7 @@
|
||||
}
|
||||
|
||||
public EntityPlayer getPlayer()
|
||||
@@ -140,6 +151,16 @@
|
||||
@@ -140,6 +147,21 @@
|
||||
this.blockSnapshot = blockSnapshot;
|
||||
this.placedBlock = blockSnapshot.getCurrentBlock();
|
||||
this.placedAgainst = placedAgainst;
|
||||
@ -54,12 +64,17 @@
|
||||
+ if(bukkitEvent.isCancelled()||!bukkitEvent.canBuild()){
|
||||
+ this.setCanceled(true);
|
||||
+ }
|
||||
+
|
||||
+ CaptureBlock tCapture=world.mCapture.getLastBlockCapture();
|
||||
+ if(tCapture!=null&&tCapture.mEnable){
|
||||
+ tCapture.addCheckedBlock(world,x,y,z);
|
||||
+ }
|
||||
+ }
|
||||
+ // Cauldron end
|
||||
if (DEBUG)
|
||||
{
|
||||
System.out.printf("Created PlaceEvent - [PlacedBlock: %s ][PlacedAgainst: %s ][ItemStack: %s ][Player: %s ]\n", placedBlock, placedAgainst, player.getCurrentEquippedItem(), player);
|
||||
@@ -160,7 +181,17 @@
|
||||
@@ -160,7 +182,17 @@
|
||||
|
||||
public MultiPlaceEvent(List<BlockSnapshot> blockSnapshots, Block placedAgainst, EntityPlayer player) {
|
||||
super(blockSnapshots.get(0), placedAgainst, player);
|
||||
|
40
src/main/java/cc/Location.java
Normal file
40
src/main/java/cc/Location.java
Normal file
@ -0,0 +1,40 @@
|
||||
package cc;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class Location{
|
||||
|
||||
public World mWorld;
|
||||
|
||||
public int mPosX=0;
|
||||
public int mPosY=0;
|
||||
public int mPosZ=0;
|
||||
|
||||
private String mToString=null;
|
||||
|
||||
public Location(World pWorld,int pPosX,int pPosY,int pPosZ){
|
||||
this.mWorld=pWorld;
|
||||
this.mPosX=pPosX;
|
||||
this.mPosY=pPosY;
|
||||
this.mPosZ=pPosZ;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
if(this.mToString==null){
|
||||
this.mToString=this.mWorld.worldInfo.getWorldName()+"("+this.mPosX+","+this.mPosY+","+this.mPosZ+")";
|
||||
}
|
||||
return this.mToString;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode(){
|
||||
return this.toString().hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object pObj){
|
||||
return pObj instanceof Location&&((Location)pObj).hashCode()==this.hashCode();
|
||||
}
|
||||
|
||||
}
|
38
src/main/java/cc/capture/ItemSnapshot.java
Normal file
38
src/main/java/cc/capture/ItemSnapshot.java
Normal file
@ -0,0 +1,38 @@
|
||||
package cc.capture;
|
||||
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ItemSnapshot{
|
||||
|
||||
public final EntityPlayer mPlayer;
|
||||
public final ItemStack mItem;
|
||||
|
||||
private boolean mApply=false;
|
||||
|
||||
public ItemSnapshot(EntityPlayer pPlayer,ItemStack pItem){
|
||||
this.mPlayer=pPlayer;
|
||||
this.mItem=pItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将物品放到玩家身上
|
||||
*
|
||||
* @return 如果背包满,将生成物品在地上并返回false
|
||||
*/
|
||||
public boolean apply(){
|
||||
if(!this.mApply){
|
||||
this.mApply=true;
|
||||
this.mPlayer.inventory.addItemStackToInventory(this.mItem);
|
||||
|
||||
if(!this.mPlayer.inventory.addItemStackToInventory(this.mItem)){
|
||||
this.mPlayer.worldObj.spawnEntityInWorld(
|
||||
new EntityItem(this.mPlayer.worldObj,this.mPlayer.posX,this.mPlayer.posY,this.mPlayer.posZ,this.mItem));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
171
src/main/java/cc/capture/WorldCapture.java
Normal file
171
src/main/java/cc/capture/WorldCapture.java
Normal file
@ -0,0 +1,171 @@
|
||||
package cc.capture;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Stack;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
|
||||
import cc.capture.type.ACapture;
|
||||
import cc.capture.type.CaptureBlock;
|
||||
import cc.capture.type.CaptureTree;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class WorldCapture{
|
||||
|
||||
public final World mWorld;
|
||||
/** Capture任务Id生成器 */
|
||||
private AtomicInteger mIdCreate=new AtomicInteger();
|
||||
/** 方块捕获任务 */
|
||||
public Stack<CaptureBlock> mBlockCaptures=new Stack<CaptureBlock>();
|
||||
/** 树捕获任务 */
|
||||
public Stack<CaptureTree> mTreeCaptures=new Stack<CaptureTree>();
|
||||
|
||||
public WorldCapture(World pWorld){
|
||||
this.mWorld=pWorld;
|
||||
}
|
||||
|
||||
public CaptureBlock getLastBlockCapture(){
|
||||
return getEleOrLast(this.mBlockCaptures,-1);
|
||||
}
|
||||
|
||||
public CaptureTree getLastTreeGenCapture(){
|
||||
return getEleOrLast(this.mTreeCaptures,-1);
|
||||
}
|
||||
|
||||
public static <T extends ACapture> T getEleOrLast(Stack<T> pStack,int pId){
|
||||
if(pId!=-1){
|
||||
Iterator<T> tIt=pStack.iterator();
|
||||
while(tIt.hasNext()){
|
||||
T tCapture=tIt.next();
|
||||
if(tCapture.mHandled){
|
||||
tIt.remove();
|
||||
}else if(tCapture.mId==pId){
|
||||
return tCapture;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while(!pStack.isEmpty()){
|
||||
T tCapture=pStack.lastElement();
|
||||
if(tCapture.mHandled){
|
||||
pStack.pop();
|
||||
}
|
||||
return tCapture;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void addCaptureEntity(World pWorld,Entity pEntity,SpawnReason pReason){
|
||||
CaptureBlock tCapture=this.getLastBlockCapture();
|
||||
if(tCapture==null||!tCapture.mEnable) return;
|
||||
|
||||
tCapture.addCaptureEntity(pWorld,pEntity,pReason);
|
||||
}
|
||||
|
||||
public void addCaptureItem(EntityPlayer pPlayer,ItemStack pItem){
|
||||
CaptureBlock tCapture=this.getLastBlockCapture();
|
||||
if(tCapture==null||!tCapture.mEnable) return;
|
||||
|
||||
tCapture.addCaptureItem(pPlayer,pItem);
|
||||
}
|
||||
|
||||
public void addCheckedBlock(World pWorld,int pPosX,int pPosY,int pPosZ){
|
||||
CaptureBlock tCapture=this.getLastBlockCapture();
|
||||
if(tCapture==null||!tCapture.mEnable) return;
|
||||
|
||||
tCapture.addCheckedBlock(pWorld,pPosX,pPosY,pPosZ);
|
||||
}
|
||||
|
||||
public boolean isCapture(){
|
||||
CaptureBlock tCapture=this.getLastBlockCapture();
|
||||
return tCapture!=null&&tCapture.mEnable;
|
||||
}
|
||||
|
||||
public boolean isTreeGenCapture(){
|
||||
CaptureTree tCapture=this.getLastTreeGenCapture();
|
||||
return tCapture!=null&&tCapture.mEnable;
|
||||
}
|
||||
|
||||
public CaptureBlock startCapture(EntityPlayer pPlayer){
|
||||
ItemStack tItem=null;
|
||||
int tSlot=-1;
|
||||
if(pPlayer!=null){
|
||||
tSlot=pPlayer.inventory.currentItem;
|
||||
tItem=pPlayer.getCurrentEquippedItem();
|
||||
}
|
||||
return this.startCapture(pPlayer,tItem,tSlot);
|
||||
|
||||
}
|
||||
|
||||
public CaptureBlock startCapture(EntityPlayer pPlayer,ItemStack pCurrent){
|
||||
return this.startCapture(pPlayer,pCurrent,-1);
|
||||
}
|
||||
|
||||
public CaptureBlock startCapture(EntityPlayer pPlayer,ItemStack pCurrent,int pSlot){
|
||||
CaptureBlock tCapture=this.mBlockCaptures.push(new CaptureBlock(this,this.mIdCreate.incrementAndGet(),pPlayer));
|
||||
tCapture.mUseItem=pCurrent;
|
||||
if(pCurrent!=null){
|
||||
tCapture.mOldItemMeta=pCurrent.getItemDamage();
|
||||
tCapture.mOldItemSize=pCurrent.stackSize;
|
||||
tCapture.mOldItemNBT=pCurrent.stackTagCompound;
|
||||
tCapture.mSlot=pSlot;
|
||||
}
|
||||
return tCapture;
|
||||
}
|
||||
|
||||
public void disableCapture(){
|
||||
CaptureBlock tCapture=this.getLastBlockCapture();
|
||||
if(tCapture==null) return;
|
||||
|
||||
tCapture.mEnable=false;
|
||||
}
|
||||
|
||||
public boolean endCapture(int pId){
|
||||
CaptureBlock tCapture=getEleOrLast(this.mBlockCaptures,pId);
|
||||
if(tCapture==null) return true;
|
||||
|
||||
this.mBlockCaptures.remove(tCapture);
|
||||
return tCapture.endCapture();
|
||||
|
||||
}
|
||||
|
||||
public CaptureTree startTreeGenCapture(EntityPlayer pPlayer,int pPosX,int pPosY,int pPosZ){
|
||||
CaptureTree tCapture=this.mTreeCaptures.push(new CaptureTree(this,this.mIdCreate.incrementAndGet(),pPlayer));
|
||||
tCapture.setAgaistPostionAndSide(-1,pPosX,pPosY,pPosZ);
|
||||
return tCapture;
|
||||
}
|
||||
|
||||
public CaptureTree startTreeGenCapture(EntityPlayer pPlayer,org.bukkit.Location pTreeLoc){
|
||||
return this.startTreeGenCapture(pPlayer,pTreeLoc.getBlockX(),pTreeLoc.getBlockY(),pTreeLoc.getBlockZ());
|
||||
}
|
||||
|
||||
public CaptureTree disableTreeGenCapture(int pId){
|
||||
CaptureTree tCapture=getEleOrLast(this.mTreeCaptures,pId);
|
||||
if(tCapture==null) return null;
|
||||
|
||||
tCapture.mEnable=false;
|
||||
return tCapture;
|
||||
}
|
||||
|
||||
public boolean endTreeGenCapture(int pId){
|
||||
CaptureTree tCapture=getEleOrLast(this.mTreeCaptures,pId);
|
||||
if(tCapture==null) return true;
|
||||
|
||||
this.mTreeCaptures.remove(tCapture);
|
||||
return tCapture.endCapture();
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理捕获的数据
|
||||
*/
|
||||
public void clearAllData(){
|
||||
this.mBlockCaptures.clear();
|
||||
this.mTreeCaptures.clear();
|
||||
}
|
||||
|
||||
}
|
68
src/main/java/cc/capture/type/ACapture.java
Normal file
68
src/main/java/cc/capture/type/ACapture.java
Normal file
@ -0,0 +1,68 @@
|
||||
package cc.capture.type;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import cc.capture.WorldCapture;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public abstract class ACapture{
|
||||
|
||||
public final WorldCapture mWorldCapture;
|
||||
public final World mWorld;
|
||||
public final int mId;
|
||||
/** 是否启用捕获 */
|
||||
public boolean mEnable=true;
|
||||
/** 是否已经处理完毕 */
|
||||
public boolean mHandled=false;
|
||||
/** 当前捕获作用的玩家,可能为null,用作普通捕获 */
|
||||
public final EntityPlayer mCapturePlayer;
|
||||
/** 方块放置时顶着的面 */
|
||||
protected ForgeDirection mSide=ForgeDirection.UNKNOWN;
|
||||
protected Block mAgaistBlock=Blocks.air;
|
||||
/** 捕获的数据 */
|
||||
public ArrayList<BlockSnapshot> mCapturedBlocks=new ArrayList<BlockSnapshot>();
|
||||
|
||||
public ACapture(WorldCapture pWorldCapture,int pId,EntityPlayer pPlayer){
|
||||
this.mWorldCapture=pWorldCapture;
|
||||
this.mWorld=pWorldCapture.mWorld;
|
||||
this.mId=pId;
|
||||
this.mCapturePlayer=pPlayer;
|
||||
}
|
||||
|
||||
public void setAgaistPostionAndSide(int pSide,int pPosX,int pPosY,int pPosZ){
|
||||
this.mSide=ForgeDirection.getOrientation(pSide);
|
||||
this.mAgaistBlock=this.mWorldCapture.mWorld.getBlock(pPosX,pPosY,pPosZ);
|
||||
}
|
||||
|
||||
public void addCapturedBlock(World pWorld,int pPosX,int pPosY,int pPosZ){
|
||||
this.addCapturedBlock(pWorld,pPosX,pPosY,pPosZ,3);
|
||||
}
|
||||
|
||||
public void addCapturedBlock(World pWorld,int pPosX,int pPosY,int pPosZ,int pFlag){
|
||||
if(!this.mEnable) return;
|
||||
|
||||
BlockSnapshot tSnapshot=BlockSnapshot.getBlockSnapshot(pWorld,pPosX,pPosY,pPosZ,pFlag);
|
||||
this.mCapturedBlocks.add(tSnapshot);
|
||||
}
|
||||
|
||||
public void disableCapture(){
|
||||
this.mEnable=false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 标记此捕获为已经处理
|
||||
* <p>
|
||||
* 只设置捕获中的数据,并从世界捕获中移除,不会清理捕获数据
|
||||
* </p>
|
||||
*/
|
||||
public void markHandled(){
|
||||
this.mEnable=false;
|
||||
this.mHandled=true;
|
||||
}
|
||||
|
||||
}
|
154
src/main/java/cc/capture/type/CaptureBlock.java
Normal file
154
src/main/java/cc/capture/type/CaptureBlock.java
Normal file
@ -0,0 +1,154 @@
|
||||
package cc.capture.type;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
|
||||
import cc.Location;
|
||||
import cc.capture.EntitySnapshot;
|
||||
import cc.capture.ItemSnapshot;
|
||||
import cc.capture.WorldCapture;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.stats.StatList;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
import net.minecraftforge.event.ForgeEventFactory;
|
||||
import net.minecraftforge.event.world.BlockEvent.PlaceEvent;
|
||||
|
||||
public class CaptureBlock extends ACapture{
|
||||
|
||||
/** 是否为还原模式 */
|
||||
public boolean mRestoring=false;
|
||||
/** 当前物品 */
|
||||
public ItemStack mUseItem=null;
|
||||
/** 当前物品所在的快捷栏位置,如果为-1表示不存在,或者不是从背包取出的物品 */
|
||||
public int mSlot=-1;
|
||||
public int mOldItemSize=0;
|
||||
public int mOldItemMeta=0;
|
||||
public NBTTagCompound mOldItemNBT=null;
|
||||
/** 捕获的数据 */
|
||||
public ArrayList<EntitySnapshot> mCapturedEntitys=new ArrayList<EntitySnapshot>();
|
||||
public ArrayList<ItemSnapshot> mCapturedItems=new ArrayList<ItemSnapshot>();
|
||||
public ArrayList<Location> mCheckedBlocks=new ArrayList<Location>();
|
||||
|
||||
public CaptureBlock(WorldCapture pWorldCapture,int pId,EntityPlayer pPlayer){
|
||||
super(pWorldCapture,pId,pPlayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markHandled(){
|
||||
super.markHandled();
|
||||
this.mWorldCapture.mBlockCaptures.remove(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCapturedBlock(World pWorld,int pPosX,int pPosY,int pPosZ,int pFlag){
|
||||
if(!this.mEnable||this.isChecked(pWorld,pPosX,pPosY,pPosZ,false))
|
||||
return;
|
||||
|
||||
super.addCapturedBlock(pWorld,pPosX,pPosY,pPosZ,pFlag);
|
||||
}
|
||||
|
||||
public void addCapturedBlock(BlockSnapshot pSnapshot){
|
||||
if(!this.mEnable||this.isChecked(pSnapshot.world,pSnapshot.x,pSnapshot.y,pSnapshot.z,false))
|
||||
return;
|
||||
|
||||
this.mCapturedBlocks.add(pSnapshot);
|
||||
}
|
||||
|
||||
public boolean isChecked(World pWorld,int pPosX,int pPosY,int pPosZ,boolean pSimula){
|
||||
if(!this.mCheckedBlocks.isEmpty()){
|
||||
Iterator<Location> tIt=this.mCheckedBlocks.iterator();
|
||||
while(tIt.hasNext()){
|
||||
Location tLoc=tIt.next();
|
||||
if(tLoc.mWorld==pWorld&&tLoc.mPosX==pPosX&&tLoc.mPosY==pPosY&&tLoc.mPosZ==pPosZ){
|
||||
if(!pSimula) tIt.remove();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void addCaptureEntity(World pWorld,Entity pEntity,SpawnReason pReason){
|
||||
if(!this.mEnable) return;
|
||||
|
||||
this.mCapturedEntitys.add(new EntitySnapshot(pWorld,pEntity,pReason));
|
||||
}
|
||||
|
||||
public void addCaptureItem(EntityPlayer pPlayer,ItemStack pItem){
|
||||
if(!this.mEnable) return;
|
||||
|
||||
this.mCapturedItems.add(new ItemSnapshot(pPlayer,pItem));
|
||||
}
|
||||
|
||||
public void addCheckedBlock(World pWorld,int pPosX,int pPosY,int pPosZ){
|
||||
this.mCheckedBlocks.add(new Location(pWorld,pPosX,pPosY,pPosZ));
|
||||
}
|
||||
|
||||
public boolean endCapture(){
|
||||
if(this.mHandled) return true;
|
||||
this.markHandled();
|
||||
|
||||
boolean tResult;
|
||||
PlaceEvent tPlaceEvent=null;
|
||||
if(this.mCapturedBlocks.size()>1){
|
||||
tPlaceEvent=ForgeEventFactory.onPlayerMultiBlockPlace(this.mCapturePlayer,this.mCapturedBlocks,this.mSide);
|
||||
}else if(this.mCapturedBlocks.size()==1){
|
||||
tPlaceEvent=ForgeEventFactory.onPlayerBlockPlace(this.mCapturePlayer,this.mCapturedBlocks.get(0),this.mSide);
|
||||
}
|
||||
|
||||
if(tPlaceEvent!=null&&(tPlaceEvent.isCanceled())){
|
||||
if(this.mUseItem!=null){
|
||||
if(this.mSlot==-1){
|
||||
this.mUseItem.setItemDamage(this.mOldItemMeta);
|
||||
this.mUseItem.stackSize=this.mOldItemSize;
|
||||
this.mUseItem.setTagCompound(this.mOldItemNBT);
|
||||
}else{
|
||||
this.mCapturePlayer.inventory.setInventorySlotContents(this.mSlot,this.mUseItem);
|
||||
}
|
||||
}
|
||||
if(!this.mCapturedBlocks.isEmpty()){
|
||||
for(int i=this.mCapturedBlocks.size();i>0;){
|
||||
this.mRestoring=true;
|
||||
BlockSnapshot tSnapshot=this.mCapturedBlocks.get(--i);
|
||||
tSnapshot.restore(true,false);
|
||||
this.mRestoring=false;
|
||||
}
|
||||
}
|
||||
for(EntitySnapshot sSnapshot : this.mCapturedEntitys){
|
||||
sSnapshot.cancel();
|
||||
}
|
||||
tResult=false;
|
||||
}else{
|
||||
for(EntitySnapshot sSnapshot : this.mCapturedEntitys){
|
||||
sSnapshot.apply();
|
||||
}
|
||||
if(!this.mCapturedItems.isEmpty()){
|
||||
HashSet<EntityPlayer> tNotifyPlayers=new HashSet<EntityPlayer>();
|
||||
for(ItemSnapshot sSnapshot : this.mCapturedItems){
|
||||
if(sSnapshot.apply()){
|
||||
tNotifyPlayers.add(sSnapshot.mPlayer);
|
||||
}
|
||||
}
|
||||
for(EntityPlayer sPlayer : tNotifyPlayers){
|
||||
sPlayer.openContainer.detectAndSendChanges();
|
||||
}
|
||||
}
|
||||
if(this.mUseItem!=null&&this.mCapturePlayer!=null){
|
||||
this.mCapturePlayer.addStat(StatList.objectUseStats[Item.getIdFromItem(this.mUseItem.getItem())],1);
|
||||
}
|
||||
tResult=true;
|
||||
}
|
||||
|
||||
return tResult;
|
||||
|
||||
}
|
||||
|
||||
}
|
72
src/main/java/cc/capture/type/CaptureTree.java
Normal file
72
src/main/java/cc/capture/type/CaptureTree.java
Normal file
@ -0,0 +1,72 @@
|
||||
package cc.capture.type;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.TreeType;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.craftbukkit.block.CraftBlockState;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.world.StructureGrowEvent;
|
||||
|
||||
import cc.capture.WorldCapture;
|
||||
import net.minecraft.block.BlockSapling;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
|
||||
public class CaptureTree extends ACapture{
|
||||
|
||||
/** 捕获数模式下的位置 */
|
||||
public org.bukkit.Location mTreeLoc=null;
|
||||
|
||||
public CaptureTree(WorldCapture pWorldCapture,int pId,EntityPlayer pPlayer){
|
||||
super(pWorldCapture,pId,pPlayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAgaistPostionAndSide(int pSide,int pPosX,int pPosY,int pPosZ){
|
||||
super.setAgaistPostionAndSide(pSide,pPosX,pPosY,pPosZ);
|
||||
this.mTreeLoc=new org.bukkit.Location(this.mWorld.getWorld(),(double)pPosX,(double)pPosY,(double)pPosZ);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markHandled(){
|
||||
super.markHandled();
|
||||
this.mWorldCapture.mTreeCaptures.remove(this);
|
||||
}
|
||||
|
||||
public boolean endCapture(){
|
||||
if(this.mHandled) return true;
|
||||
this.markHandled();
|
||||
|
||||
boolean tResult=true;
|
||||
if(this.mCapturedBlocks.size()>0)
|
||||
return true;
|
||||
|
||||
TreeType tType=BlockSapling.treeType;
|
||||
BlockSapling.treeType=null;
|
||||
List<BlockState> tStates=new ArrayList();
|
||||
|
||||
for(BlockSnapshot sSnapshot : (List<BlockSnapshot>)this.mCapturedBlocks.clone()){
|
||||
tStates.add(new CraftBlockState(sSnapshot));
|
||||
}
|
||||
|
||||
StructureGrowEvent tEvent=null;
|
||||
if(tType!=null){
|
||||
tEvent=new StructureGrowEvent(this.mTreeLoc,tType,false,
|
||||
this.mCapturePlayer==null?null:(Player)this.mCapturePlayer.getBukkitEntity(),tStates);
|
||||
Bukkit.getPluginManager().callEvent(tEvent);
|
||||
}
|
||||
|
||||
if(tEvent==null||!tEvent.isCancelled()){
|
||||
for(BlockState sState : tStates){
|
||||
sState.update(true);
|
||||
}
|
||||
tResult=true;
|
||||
}
|
||||
|
||||
return tResult;
|
||||
}
|
||||
|
||||
}
|
@ -1,7 +1,5 @@
|
||||
package org.bukkit.craftbukkit;
|
||||
|
||||
import gnu.trove.procedure.TObjectProcedure;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@ -11,11 +9,6 @@ import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.IEntityLivingData;
|
||||
import net.minecraft.world.ChunkCoordIntPair;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.BlockChangeDelegate;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -30,15 +23,74 @@ import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.craftbukkit.block.CraftBlock;
|
||||
import org.bukkit.craftbukkit.block.CraftBlockState;
|
||||
import org.bukkit.craftbukkit.entity.*;
|
||||
import org.bukkit.craftbukkit.entity.CraftItem;
|
||||
import org.bukkit.craftbukkit.entity.CraftLightningStrike;
|
||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||
import org.bukkit.craftbukkit.metadata.BlockMetadataStore;
|
||||
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
import org.bukkit.craftbukkit.util.LongHash;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.entity.Ambient;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.Bat;
|
||||
import org.bukkit.entity.Blaze;
|
||||
import org.bukkit.entity.Boat;
|
||||
import org.bukkit.entity.CaveSpider;
|
||||
import org.bukkit.entity.Chicken;
|
||||
import org.bukkit.entity.ComplexLivingEntity;
|
||||
import org.bukkit.entity.Cow;
|
||||
import org.bukkit.entity.CreatureType;
|
||||
import org.bukkit.entity.Creeper;
|
||||
import org.bukkit.entity.Egg;
|
||||
import org.bukkit.entity.EnderCrystal;
|
||||
import org.bukkit.entity.EnderDragon;
|
||||
import org.bukkit.entity.EnderPearl;
|
||||
import org.bukkit.entity.EnderSignal;
|
||||
import org.bukkit.entity.Enderman;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.ExperienceOrb;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.entity.Fireball;
|
||||
import org.bukkit.entity.Firework;
|
||||
import org.bukkit.entity.Ghast;
|
||||
import org.bukkit.entity.Giant;
|
||||
import org.bukkit.entity.Golem;
|
||||
import org.bukkit.entity.Hanging;
|
||||
import org.bukkit.entity.Horse;
|
||||
import org.bukkit.entity.IronGolem;
|
||||
import org.bukkit.entity.ItemFrame;
|
||||
import org.bukkit.entity.LeashHitch;
|
||||
import org.bukkit.entity.LightningStrike;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.MagmaCube;
|
||||
import org.bukkit.entity.Minecart;
|
||||
import org.bukkit.entity.MushroomCow;
|
||||
import org.bukkit.entity.Ocelot;
|
||||
import org.bukkit.entity.Painting;
|
||||
import org.bukkit.entity.Pig;
|
||||
import org.bukkit.entity.PigZombie;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.entity.Sheep;
|
||||
import org.bukkit.entity.Silverfish;
|
||||
import org.bukkit.entity.Skeleton;
|
||||
import org.bukkit.entity.Slime;
|
||||
import org.bukkit.entity.SmallFireball;
|
||||
import org.bukkit.entity.Snowball;
|
||||
import org.bukkit.entity.Snowman;
|
||||
import org.bukkit.entity.Spider;
|
||||
import org.bukkit.entity.Squid;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.entity.Tameable;
|
||||
import org.bukkit.entity.ThrownExpBottle;
|
||||
import org.bukkit.entity.ThrownPotion;
|
||||
import org.bukkit.entity.Villager;
|
||||
import org.bukkit.entity.Weather;
|
||||
import org.bukkit.entity.Witch;
|
||||
import org.bukkit.entity.Wither;
|
||||
import org.bukkit.entity.WitherSkull;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.entity.Zombie;
|
||||
import org.bukkit.entity.minecart.ExplosiveMinecart;
|
||||
import org.bukkit.entity.minecart.HopperMinecart;
|
||||
import org.bukkit.entity.minecart.PoweredMinecart;
|
||||
@ -56,7 +108,11 @@ import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.messaging.StandardMessenger;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import cc.capture.type.CaptureTree;
|
||||
import cpw.mods.fml.common.registry.EntityRegistry; // Cauldron
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.IEntityLivingData;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
|
||||
public class CraftWorld implements World {
|
||||
//public static final int CUSTOM_DIMENSION_OFFSET = 10; // Cauldron - disabled
|
||||
@ -512,13 +568,11 @@ public class CraftWorld implements World {
|
||||
break;
|
||||
}
|
||||
|
||||
world.captureTreeGeneration = true;
|
||||
world.captureBlockSnapshots = true;
|
||||
CaptureTree tCapture=world.mCapture.startTreeGenCapture(null,loc);
|
||||
boolean grownTree = gen.generate(world, rand, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
|
||||
world.captureBlockSnapshots = false;
|
||||
world.captureTreeGeneration = false;
|
||||
tCapture.markHandled();
|
||||
if (grownTree) { // Copy block data to delegate
|
||||
for (BlockSnapshot blocksnapshot : world.capturedBlockSnapshots) {
|
||||
for (BlockSnapshot blocksnapshot : tCapture.mCapturedBlocks) {
|
||||
int x = blocksnapshot.x;
|
||||
int y = blocksnapshot.y;
|
||||
int z = blocksnapshot.z;
|
||||
@ -530,11 +584,9 @@ public class CraftWorld implements World {
|
||||
net.minecraft.block.Block newBlock = world.getBlock(x, y, z);
|
||||
world.markAndNotifyBlock(x, y, z, null, oldBlock, newBlock, flag);
|
||||
}
|
||||
world.capturedBlockSnapshots.clear();
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
world.capturedBlockSnapshots.clear();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user