1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
package jp.plusplus.fbs.storage;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityChest;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraftforge.common.util.ForgeDirection;
/**
* Created by plusplus_F on 2016/03/07.
*/
public class TileEntityMealOutletSingle extends TileEntityMealInlet {
public ItemStack requirement;
@Override
public void readFromNBT(NBTTagCompound par1NBTTagCompound){
super.readFromNBT(par1NBTTagCompound);
if(par1NBTTagCompound.hasKey("Requirement")) requirement=ItemStack.loadItemStackFromNBT(par1NBTTagCompound.getCompoundTag("Requirement"));
else requirement=null;
}
@Override
public void writeToNBT(NBTTagCompound par1NBTTagCompound){
super.writeToNBT(par1NBTTagCompound);
if(requirement!=null) par1NBTTagCompound.setTag("Requirement", requirement.writeToNBT(new NBTTagCompound()));
}
public boolean hasRequirement(){
return requirement!=null;
}
public ItemStack getRequirement(){
return requirement;
}
public void setRequirement(ItemStack req){
requirement=req;
}
protected ItemStack getItemStack(){
if(!hasRequirement() && !hasFragment()) return null;
TileEntityMeal tem=ItemMealFragment.getTileEntity(getFragment());
return tem.exportItemStack(requirement, requirement.stackSize);
}
@Override
public void updateEntity(){
if(!worldObj.isRemote && requirement!=null && worldObj.getWorldTime()%10==0){
TileEntityMeal tem=ItemMealFragment.getTileEntity(fragment);
if(tem==null) return;
ForgeDirection dir=ForgeDirection.getOrientation(worldObj.getBlockMetadata(xCoord, yCoord, zCoord)&7);
TileEntity te=worldObj.getTileEntity(xCoord+dir.offsetX, yCoord+dir.offsetY, zCoord+dir.offsetZ);
if(te instanceof ISidedInventory){
ISidedInventory inv=(ISidedInventory)te;
int side=dir.ordinal()^1;
int[] index=inv.getAccessibleSlotsFromSide(side);
for(int i=0;i<index.length;i++){
if(((ISidedInventory) te).canInsertItem(index[i], requirement, side)){
ItemStack itemStack=inv.getStackInSlot(index[i]);
if((itemStack==null || (itemStack.isItemEqual(requirement) && ItemStack.areItemStackTagsEqual(itemStack, requirement) && itemStack.stackSize+1<=itemStack.getMaxStackSize()))){
ItemStack p=tem.exportItemStack(requirement, 1);
if(p==null) return;
if(itemStack==null) inv.setInventorySlotContents(i, p.copy());
else itemStack.stackSize++;
te.markDirty();
return;
}
}
}
}
else if(te instanceof TileEntityChest){
TileEntityChest[] c=new TileEntityChest[2];
c[0]=(TileEntityChest)te;
if(c[0].adjacentChestXPos!=null) c[1]=c[0].adjacentChestXPos;
if(c[0].adjacentChestXNeg!=null) c[1]=c[0].adjacentChestXNeg;
if(c[0].adjacentChestZPos!=null) c[1]=c[0].adjacentChestZPos;
if(c[0].adjacentChestZNeg!=null) c[1]=c[0].adjacentChestZNeg;
for(TileEntityChest inv : c){
if(inv==null) break;
int size=inv.getSizeInventory();
for(int i=0;i<size;i++){
ItemStack itemStack=inv.getStackInSlot(i);
if((itemStack==null || (itemStack.isItemEqual(requirement) && ItemStack.areItemStackTagsEqual(itemStack, requirement) && itemStack.stackSize+1<=itemStack.getMaxStackSize()))){
ItemStack p=tem.exportItemStack(requirement, 1);
if(p==null) return;
if(itemStack==null) inv.setInventorySlotContents(i, p.copy());
else itemStack.stackSize++;
te.markDirty();
return;
}
}
}
}
else if(te instanceof IInventory){
IInventory inv=(IInventory)te;
int size=inv.getSizeInventory();
for(int i=0;i<size;i++){
ItemStack itemStack=inv.getStackInSlot(i);
if((itemStack==null || (itemStack.isItemEqual(requirement) && ItemStack.areItemStackTagsEqual(itemStack, requirement) && itemStack.stackSize+1<=itemStack.getMaxStackSize()))){
ItemStack p=tem.exportItemStack(requirement, 1);
if(p==null) return;
if(itemStack==null) inv.setInventorySlotContents(i, p.copy());
else itemStack.stackSize++;
te.markDirty();
return;
}
}
}
}
}
}
|