package mods.ocminecart.common.container; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mods.ocminecart.common.entityextend.RemoteCartExtender; import mods.ocminecart.common.entityextend.RemoteExtenderRegister; import net.minecraft.entity.item.EntityMinecart; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import java.util.ArrayList; public class RemoteModuleContainer extends Container{ protected final boolean IS_SERVER = FMLCommonHandler.instance().getEffectiveSide().isServer(); private RemoteCartExtender module; private EntityMinecart cart; private ArrayList<EntityPlayer> toBan; @SideOnly(Side.CLIENT) public int passstate; @SideOnly(Side.CLIENT) public boolean perm; public boolean locked = false; public RemoteModuleContainer(){ super(); } public RemoteModuleContainer(EntityMinecart cart){ super(); if(IS_SERVER) toBan = new ArrayList<EntityPlayer>(); else{ passstate = 0; perm = false; } this.cart=cart; this.module = RemoteExtenderRegister.getExtender(cart); } @Override public boolean canInteractWith(EntityPlayer player) { if(IS_SERVER){ if(this.toBan.size()>0 && this.toBan.contains(player)) return false; return player.worldObj == cart.worldObj && player.getDistanceSq(cart.posX, cart.posY, cart.posZ) <= 64.0D && module.isEnabled(); } return true; } public RemoteCartExtender getModule() { return module; } public void detectAndSendChanges() { super.detectAndSendChanges(); for(int i=0;i<this.crafters.size();i+=1){ ICrafting craft = (ICrafting) this.crafters.get(i); if(this.module.isLocked()!=this.locked){ craft.sendProgressBarUpdate(this, 2, (module.isLocked())? 1:0); } } this.locked = this.module.isLocked(); } public void addCraftingToCrafters(ICrafting craft){ super.addCraftingToCrafters(craft); if(!IS_SERVER) return; craft.sendProgressBarUpdate(this, 0, 0); if(craft instanceof EntityPlayer) craft.sendProgressBarUpdate(this, 1, module.editableByPlayer((EntityPlayer) craft, true) ? 1:0); else craft.sendProgressBarUpdate(this, 1, 0); craft.sendProgressBarUpdate(this, 2, (module.isLocked())? 1:0); } public void sendPassState(EntityPlayer p, int i){ if(p instanceof ICrafting){ ((ICrafting)p).sendProgressBarUpdate(this, 0, i); } } public void lockGui(){ for(int i=0;i<this.crafters.size();i+=1){ ICrafting craft = (ICrafting) this.crafters.get(i); if(!(craft instanceof EntityPlayer)) continue; if(!module.editableByPlayer((EntityPlayer) craft, false)){ this.toBan.add((EntityPlayer) craft); } } } @SideOnly(Side.CLIENT) public void updateProgressBar(int updateid, int value){ switch(updateid){ case 0: this.passstate=value; break; case 1: this.perm=(value==1); break; case 2: this.locked=(value==1); break; } } }