summaryrefslogtreecommitdiff
path: root/src/main/java/jp/plusplus/fbs/storage/ContainerMealTerminal.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/jp/plusplus/fbs/storage/ContainerMealTerminal.java')
-rw-r--r--src/main/java/jp/plusplus/fbs/storage/ContainerMealTerminal.java301
1 files changed, 301 insertions, 0 deletions
diff --git a/src/main/java/jp/plusplus/fbs/storage/ContainerMealTerminal.java b/src/main/java/jp/plusplus/fbs/storage/ContainerMealTerminal.java
new file mode 100644
index 0000000..7e6e3d8
--- /dev/null
+++ b/src/main/java/jp/plusplus/fbs/storage/ContainerMealTerminal.java
@@ -0,0 +1,301 @@
+package jp.plusplus.fbs.storage;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import jp.plusplus.fbs.FBS;
+import jp.plusplus.fbs.ProxyClient;
+import jp.plusplus.fbs.block.BlockCore;
+import jp.plusplus.fbs.packet.PacketHandler;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.*;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+import java.lang.reflect.Field;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Created by plusplus_F on 2016/03/08.
+ */
+public class ContainerMealTerminal extends Container {
+ public InventoryTerminal inv;
+ public TileEntityMeal meal;
+ private int state;
+ private int fuck1=-1;
+ private Set fuckSet1=new HashSet();
+ public EntityPlayer player;
+
+ public ContainerMealTerminal(EntityPlayer player, TileEntityMealTerminal meal){
+ this.player=player;
+ this.meal=ItemMealFragment.getTileEntity(meal.getFragment());
+ inv=new InventoryTerminal(this.meal);
+ inv.openInventory();
+
+ SlotTerminal.dontUpdate=inv.dontUpdate=true;
+ for(int i=0;i<54;i++) addSlotToContainer(new SlotTerminal(inv, i, 8+18*(i%9), 18+18*(i/9)));
+
+ for(int i=0;i<27;i++) addSlotToContainer(new Slot(player.inventory, 9+i, 8+18*(i%9), 140+18*(i/9)));
+ for(int i=0;i<9;i++) addSlotToContainer(new Slot(player.inventory, i, 8+18*(i%9), 198+18*(i/9)));
+ SlotTerminal.dontUpdate=inv.dontUpdate=false;
+ }
+
+ public void scrollTo(float f){
+ int preShift=(int)(((inv.allItem.length-54)/9+1)*inv.scroll);
+
+ inv.scroll=f;
+ inv.markDirty();
+
+ if(player.worldObj.isRemote && preShift!=(int)(((inv.allItem.length-54)/9+1)*inv.scroll)){
+ PacketHandler.INSTANCE.sendToServer(new MessageMealTerminalScroll(player.worldObj.provider.dimensionId, player, inv.scroll));
+ }
+ }
+
+ @Override
+ public boolean canInteractWith(EntityPlayer p_75145_1_) {
+ return meal.getWorldObj().getBlock(meal.xCoord, meal.yCoord, meal.zCoord)==BlockCore.mealCrystal;
+ }
+
+ @Override
+ public void onContainerClosed(EntityPlayer p_75134_1_) {
+ super.onContainerClosed(p_75134_1_);
+ inv.closeInventory();
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void putStacksInSlots(ItemStack[] p_75131_1_) {
+ SlotTerminal.dontUpdate=true;
+ super.putStacksInSlots(p_75131_1_);
+ SlotTerminal.dontUpdate=false;
+ }
+
+ @Override
+ public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int p_82846_2_) {
+ Slot slot=(Slot)inventorySlots.get(p_82846_2_);
+ if(slot instanceof SlotTerminal || slot.getStack()==null) return null;
+
+ ItemStack itemStack=slot.getStack();
+ slot.putStack(null);
+
+ if(!p_82846_1_.worldObj.isRemote){
+ ItemStack tmp = itemStack.copy();
+ meal.insertItemStack(tmp);
+ inv.markDirty();
+ }
+
+
+ return null;
+ }
+
+ /*
+ @Mojang
+     fニヽ
+     |_||
+     |= |
+     | |
+     |= |
+    i⌒| |⌒i_
+   /| | | | ヽ
+  | ( ( ( ( |
+  |/      |
+  |       |
+   \      ノ
+    \    /
+    |   |
+ */
+ @Override
+ public ItemStack slotClick(int slotIndex, int button, int type, EntityPlayer player) {
+ boolean isClient=(player.worldObj.isRemote);
+
+ //FBS.logger.info("slot:"+slotIndex+","+button+","+type+","+player.toString());
+
+ ItemStack itemstack = null;
+ InventoryPlayer inventoryplayer = player.inventory;
+ int i1;
+ //ItemStack itemstack3;
+ //FBS.logger.info("item:"+inventoryplayer.getItemStack());
+
+ //通常のスロットであれば普通に処理する
+ if (slotIndex!=-999 && (slotIndex<0 || !(inventorySlots.get(slotIndex) instanceof SlotTerminal))){
+ return super.slotClick(slotIndex, button, type, player);
+ }
+
+ try{
+ Class c=Container.class;
+ Field field=c.getDeclaredField("field_94536_g");
+ field.setAccessible(true);
+ if(field.getInt(this)!=0){
+ func_94533_d();
+ return null;
+ }
+ }catch (Exception e){
+ FBS.logger.error(e);
+ }
+
+ if(state!=0){
+ this.func_94533_d();
+ return null;
+ }
+
+ Slot slot2;
+ int size;
+ ItemStack itemstack5;
+
+ if(slotIndex==-999 && button==0 && type==0){
+ return inventoryplayer.getItemStack();
+ }
+ if(type==1){
+ return inventoryplayer.getItemStack();
+ }
+
+ if(!isClient) return inventoryplayer.getItemStack();
+
+ ///////////////////////////////////////////////////////////////////////////////////////
+ //
+ // シフトを押さない左または右クリック
+ //
+ ///////////////////////////////////////////////////////////////////////////////////////
+ if (type==0 && (button == 0 || button == 1)) {
+ if (slotIndex == -999) {
+ ///////////////////////////////////////////////////////////////////////////////////////
+ //
+ // 持っているアイテムを捨てる処理
+ //
+ ///////////////////////////////////////////////////////////////////////////////////////
+
+ if (inventoryplayer.getItemStack() != null && slotIndex == -999) {
+ if (button == 0) {
+ player.dropPlayerItemWithRandomChoice(inventoryplayer.getItemStack(), true);
+ inventoryplayer.setItemStack((ItemStack) null);
+ }
+
+ if (button == 1) {
+ player.dropPlayerItemWithRandomChoice(inventoryplayer.getItemStack().splitStack(1), true);
+
+ if (inventoryplayer.getItemStack().stackSize == 0) {
+ inventoryplayer.setItemStack((ItemStack) null);
+ }
+ }
+ }
+ } else {
+ if (slotIndex < 0) {
+ return null;
+ }
+
+ slot2 = (Slot) this.inventorySlots.get(slotIndex);
+ if (slot2 == null) return null;
+
+ ItemStack slotItem = slot2.getStack();
+ ItemStack playerCurrentItem = inventoryplayer.getItemStack();
+ if (slotItem != null) itemstack = slotItem.copy();
+
+ if (slotItem == null) {
+ ////////////////////////////////////////////////////////////////////////////////////////
+ //
+ // スロットが空の場合
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////
+ if (playerCurrentItem != null && slot2.isItemValid(playerCurrentItem)) {
+ ////////////////////////////////////////////////////////////////////////////////////////
+ //
+ // 空のスロットに持っているアイテムを置く処理
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////
+ size = button == 0 ? playerCurrentItem.stackSize : 1;
+ playerCurrentItem.splitStack(size);
+
+ ItemStack tmp = playerCurrentItem.copy();
+ tmp.stackSize = size;
+ //meal.insertItemStack(tmp);
+ //inv.markDirty();
+
+ if (isClient) {
+ PacketHandler.INSTANCE.sendToServer(new MessageMealTerminal(player, meal, 0, tmp));
+ }
+
+ if (playerCurrentItem.stackSize == 0) {
+ inventoryplayer.setItemStack((ItemStack) null);
+ }
+
+ }
+ } else if (slot2.canTakeStack(player)) {
+ if (playerCurrentItem == null) {
+ ////////////////////////////////////////////////////////////////////////////////////////
+ //
+ // 何も持っていないときにスロットからアイテムを取り出す処理
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////
+ size = (button == 0 ? slotItem.stackSize : (slotItem.stackSize + 1) / 2);
+ if (size > slotItem.getMaxStackSize()) size = slotItem.getMaxStackSize();
+
+ //itemstack5 = slot2.decrStackSize(size);
+ itemstack5=slotItem.copy();
+ itemstack5.stackSize=size;
+ inventoryplayer.setItemStack(itemstack5);
+
+ FBS.logger.info("picked up:"+itemstack5);
+
+ ItemStack tmp = itemstack5.copy();
+ //meal.exportItemStack(tmp, tmp.stackSize);
+ //inv.markDirty();
+
+ if(isClient){
+ //PacketHandler.INSTANCE.sendTo(new MessageMealTerminal(player, meal, 1, tmp), (EntityPlayerMP) player);
+ PacketHandler.INSTANCE.sendToServer(new MessageMealTerminal(player, meal, 1, tmp));
+ }
+
+ //slot2.onPickupFromSlot(player, inventoryplayer.getItemStack());
+ } else if (slot2.isItemValid(playerCurrentItem)) {
+ ////////////////////////////////////////////////////////////////////////////////////////
+ //
+ // アイテムをミールへ送る処理
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////
+ size = button == 0 ? playerCurrentItem.stackSize : 1;
+
+ playerCurrentItem.splitStack(size);
+ if (playerCurrentItem.stackSize == 0) {
+ inventoryplayer.setItemStack((ItemStack) null);
+ }
+
+ ItemStack tmp = playerCurrentItem.copy();
+ tmp.stackSize = size;
+ //meal.insertItemStack(tmp);
+ //inv.markDirty();
+
+ if(isClient){
+ PacketHandler.INSTANCE.sendToServer(new MessageMealTerminal(player, meal, 0, tmp));
+ }
+ }
+ }
+ }
+ }
+ return itemstack;
+ }
+
+
+ @Override
+ protected void func_94533_d() {
+ super.func_94533_d();
+ state = 0;
+ fuckSet1.clear();
+ }
+
+ public static class SlotTerminal extends Slot{
+ public static boolean dontUpdate;
+
+ public SlotTerminal(InventoryTerminal inv, int index, int x, int y) {
+ super(inv, index, x, y);
+ }
+
+ @Override
+ public int getSlotStackLimit() {
+ return Integer.MAX_VALUE;
+ }
+ }
+}