forked from xjboss/KCauldronX
在放置事件取消时,对添加到玩家背包的物品进行还原
This commit is contained in:
parent
1811737e6a
commit
62ebe6c4e9
@ -1,6 +1,6 @@
|
|||||||
--- ../src-base/minecraft/net/minecraft/entity/player/InventoryPlayer.java
|
--- ../src-base/minecraft/net/minecraft/entity/player/InventoryPlayer.java
|
||||||
+++ ../src-work/minecraft/net/minecraft/entity/player/InventoryPlayer.java
|
+++ ../src-work/minecraft/net/minecraft/entity/player/InventoryPlayer.java
|
||||||
@@ -2,7 +2,9 @@
|
@@ -2,10 +2,13 @@
|
||||||
|
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
@ -10,21 +10,28 @@
|
|||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.crash.CrashReport;
|
import net.minecraft.crash.CrashReport;
|
||||||
import net.minecraft.crash.CrashReportCategory;
|
import net.minecraft.crash.CrashReportCategory;
|
||||||
@@ -13,7 +15,13 @@
|
+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.NBTTagCompound;
|
||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagList;
|
||||||
import net.minecraft.util.ReportedException;
|
import net.minecraft.util.ReportedException;
|
||||||
|
+import net.minecraftforge.common.util.EntitySnapshot;
|
||||||
|
|
||||||
+// CraftBukkit start
|
+// CraftBukkit start
|
||||||
+import java.util.List;
|
+import java.util.List;
|
||||||
|
+
|
||||||
+import org.bukkit.craftbukkit.entity.CraftHumanEntity;
|
+import org.bukkit.craftbukkit.entity.CraftHumanEntity;
|
||||||
+import org.bukkit.entity.HumanEntity;
|
+import org.bukkit.entity.HumanEntity;
|
||||||
+// CraftBukkit end
|
+// CraftBukkit end
|
||||||
|
+import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||||
+
|
+
|
||||||
public class InventoryPlayer implements IInventory
|
public class InventoryPlayer implements IInventory
|
||||||
{
|
{
|
||||||
public ItemStack[] mainInventory = new ItemStack[36];
|
public ItemStack[] mainInventory = new ItemStack[36];
|
||||||
@@ -25,7 +33,46 @@
|
@@ -25,7 +37,46 @@
|
||||||
private ItemStack itemStack;
|
private ItemStack itemStack;
|
||||||
public boolean inventoryChanged;
|
public boolean inventoryChanged;
|
||||||
private static final String __OBFID = "CL_00001709";
|
private static final String __OBFID = "CL_00001709";
|
||||||
@ -71,7 +78,7 @@
|
|||||||
public InventoryPlayer(EntityPlayer p_i1750_1_)
|
public InventoryPlayer(EntityPlayer p_i1750_1_)
|
||||||
{
|
{
|
||||||
this.player = p_i1750_1_;
|
this.player = p_i1750_1_;
|
||||||
@@ -81,6 +128,34 @@
|
@@ -81,6 +132,34 @@
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,7 +113,18 @@
|
|||||||
public int getFirstEmptyStack()
|
public int getFirstEmptyStack()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < this.mainInventory.length; ++i)
|
for (int i = 0; i < this.mainInventory.length; ++i)
|
||||||
@@ -430,25 +505,24 @@
|
@@ -350,6 +429,10 @@
|
||||||
|
{
|
||||||
|
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_));
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
@@ -430,25 +513,24 @@
|
||||||
|
|
||||||
if (aitemstack[p_70298_1_] != null)
|
if (aitemstack[p_70298_1_] != null)
|
||||||
{
|
{
|
||||||
@ -140,7 +158,7 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -658,7 +732,7 @@
|
@@ -658,7 +740,7 @@
|
||||||
if (this.mainInventory[i] != null)
|
if (this.mainInventory[i] != null)
|
||||||
{
|
{
|
||||||
this.player.func_146097_a(this.mainInventory[i], true, false);
|
this.player.func_146097_a(this.mainInventory[i], true, false);
|
||||||
@ -149,7 +167,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -667,7 +741,7 @@
|
@@ -667,7 +749,7 @@
|
||||||
if (this.armorInventory[i] != null)
|
if (this.armorInventory[i] != null)
|
||||||
{
|
{
|
||||||
this.player.func_146097_a(this.armorInventory[i], true, false);
|
this.player.func_146097_a(this.armorInventory[i], true, false);
|
||||||
|
@ -152,7 +152,6 @@
|
|||||||
int[] lightUpdateBlockList;
|
int[] lightUpdateBlockList;
|
||||||
+ // Cauldron start
|
+ // Cauldron start
|
||||||
+ public boolean captureTreeGeneration = false;
|
+ public boolean captureTreeGeneration = false;
|
||||||
+ public ArrayList<EntityItem> capturedItems = new ArrayList<EntityItem>();
|
|
||||||
+ public int entitiesTicked;
|
+ public int entitiesTicked;
|
||||||
+ public int tilesTicked;
|
+ public int tilesTicked;
|
||||||
+ public CauldronWorldConfig cauldronConfig;
|
+ public CauldronWorldConfig cauldronConfig;
|
||||||
@ -209,7 +208,8 @@
|
|||||||
public boolean restoringBlockSnapshots = false;
|
public boolean restoringBlockSnapshots = false;
|
||||||
public boolean captureBlockSnapshots = 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.BlockSnapshot> capturedBlockSnapshots = new ArrayList<net.minecraftforge.common.util.BlockSnapshot>();
|
||||||
+ public ArrayList<net.minecraftforge.common.util.EntitySnapshot> capturedEntityItemSnapshots=new ArrayList<net.minecraftforge.common.util.EntitySnapshot>();
|
+ public ArrayList<net.minecraftforge.common.util.EntitySnapshot> capturedEntitySnapshots=new ArrayList<net.minecraftforge.common.util.EntitySnapshot>();
|
||||||
|
+ public ArrayList<ItemStack> capturedItems=new ArrayList<ItemStack>();
|
||||||
|
|
||||||
public BiomeGenBase getBiomeGenForCoords(final int p_72807_1_, final int p_72807_2_)
|
public BiomeGenBase getBiomeGenForCoords(final int p_72807_1_, final int p_72807_2_)
|
||||||
{
|
{
|
||||||
@ -631,7 +631,7 @@
|
|||||||
+ if(p_72838_1_ instanceof net.minecraft.entity.item.EntityItem&&this.restoringBlockSnapshots)
|
+ if(p_72838_1_ instanceof net.minecraft.entity.item.EntityItem&&this.restoringBlockSnapshots)
|
||||||
+ return false;
|
+ return false;
|
||||||
+ if(this.captureBlockSnapshots&&!(p_72838_1_ instanceof EntityPlayerMP)){
|
+ if(this.captureBlockSnapshots&&!(p_72838_1_ instanceof EntityPlayerMP)){
|
||||||
+ this.capturedEntityItemSnapshots.add(new net.minecraftforge.common.util.EntitySnapshot(this,p_72838_1_,spawnReason));
|
+ this.capturedEntitySnapshots.add(new net.minecraftforge.common.util.EntitySnapshot(this,p_72838_1_,spawnReason));
|
||||||
+ return true;
|
+ return true;
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
|
@ -65,7 +65,7 @@
|
|||||||
{
|
{
|
||||||
// Let the client know the block still exists
|
// Let the client know the block still exists
|
||||||
entityPlayer.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world));
|
entityPlayer.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world));
|
||||||
@@ -500,81 +514,144 @@
|
@@ -500,81 +514,157 @@
|
||||||
if (!(itemstack.getItem() instanceof ItemBucket)) // if not bucket
|
if (!(itemstack.getItem() instanceof ItemBucket)) // if not bucket
|
||||||
{
|
{
|
||||||
world.captureBlockSnapshots = true;
|
world.captureBlockSnapshots = true;
|
||||||
@ -169,8 +169,10 @@
|
|||||||
+ List<net.minecraftforge.common.util.BlockSnapshot> blockSnapshots = (List<net.minecraftforge.common.util.BlockSnapshot>) world.capturedBlockSnapshots
|
+ List<net.minecraftforge.common.util.BlockSnapshot> blockSnapshots = (List<net.minecraftforge.common.util.BlockSnapshot>) world.capturedBlockSnapshots
|
||||||
+ .clone();
|
+ .clone();
|
||||||
+ world.capturedBlockSnapshots.clear();
|
+ world.capturedBlockSnapshots.clear();
|
||||||
+ List<net.minecraftforge.common.util.EntitySnapshot> tDropItemSnapshots=(List<net.minecraftforge.common.util.EntitySnapshot>)world.capturedEntityItemSnapshots.clone();
|
+ List<net.minecraftforge.common.util.EntitySnapshot> tDropItemSnapshots=(List<net.minecraftforge.common.util.EntitySnapshot>)world.capturedEntitySnapshots.clone();
|
||||||
+ world.capturedEntityItemSnapshots.clear();
|
+ world.capturedEntitySnapshots.clear();
|
||||||
|
+ List<ItemStack> tCaptureItems=(List<ItemStack>)world.capturedItems.clone();
|
||||||
|
+ world.capturedItems.clear();
|
||||||
+
|
+
|
||||||
+ // make sure to set pre-placement item data for event
|
+ // make sure to set pre-placement item data for event
|
||||||
+ itemstack.setItemDamage(meta);
|
+ itemstack.setItemDamage(meta);
|
||||||
@ -247,6 +249,17 @@
|
|||||||
+ for(net.minecraftforge.common.util.EntitySnapshot sEntityItem : tDropItemSnapshots){
|
+ for(net.minecraftforge.common.util.EntitySnapshot sEntityItem : tDropItemSnapshots){
|
||||||
+ sEntityItem.apply();
|
+ 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);
|
||||||
}
|
}
|
||||||
- player.addStat(StatList.objectUseStats[Item.getIdFromItem(itemstack.getItem())], 1);
|
- player.addStat(StatList.objectUseStats[Item.getIdFromItem(itemstack.getItem())], 1);
|
||||||
|
Loading…
Reference in New Issue
Block a user