All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.minecraft.server.TileEntityChest Maven / Gradle / Ivy

package net.minecraft.server;

import org.bukkit.craftbukkit.entity.CraftHumanEntity;
import org.bukkit.entity.HumanEntity;

import java.util.Iterator;
import java.util.List;
// CraftBukkit end

public class TileEntityChest extends TileEntityContainer implements IUpdatePlayerListBox, IInventory {

  public boolean a;
  public TileEntityChest f;
  public TileEntityChest g;
  public TileEntityChest h;
  public TileEntityChest i;
  public float j;
  public float k;
  public int l;
  // CraftBukkit start - add fields and methods
  public List transaction = new java.util.ArrayList();
  private ItemStack[] items = new ItemStack[27];
  private int n;
  private int o = -1;
  private String p;
  private int maxStack = MAX_STACK;
  public TileEntityChest() {
  }

  public ItemStack[] getContents() {
    return this.items;
  }

  public void onOpen(CraftHumanEntity who) {
    transaction.add(who);
  }

  public void onClose(CraftHumanEntity who) {
    transaction.remove(who);
  }

  public List getViewers() {
    return transaction;
  }

  public int getSize() {
    return 27;
  }
  // CraftBukkit end

  public ItemStack getItem(int i) {
    return this.items[i];
  }

  public ItemStack splitStack(int i, int j) {
    if (this.items[i] != null) {
      ItemStack itemstack;

      if (this.items[i].count <= j) {
        itemstack = this.items[i];
        this.items[i] = null;
      } else {
        itemstack = this.items[i].cloneAndSubtract(j);
        if (this.items[i].count == 0) {
          this.items[i] = null;
        }

      }
      this.update();
      return itemstack;
    } else {
      return null;
    }
  }

  public ItemStack splitWithoutUpdate(int i) {
    if (this.items[i] != null) {
      ItemStack itemstack = this.items[i];

      this.items[i] = null;
      return itemstack;
    } else {
      return null;
    }
  }

  public void setItem(int i, ItemStack itemstack) {
    this.items[i] = itemstack;
    if (itemstack != null && itemstack.count > this.getMaxStackSize()) {
      itemstack.count = this.getMaxStackSize();
    }

    this.update();
  }

  public String getName() {
    return this.hasCustomName() ? this.p : "container.chest";
  }

  public boolean hasCustomName() {
    return this.p != null && this.p.length() > 0;
  }

  public void a(String s) {
    this.p = s;
  }

  public void a(NBTTagCompound nbttagcompound) {
    super.a(nbttagcompound);
    NBTTagList nbttaglist = nbttagcompound.getList("Items", 10);

    this.items = new ItemStack[this.getSize()];
    if (nbttagcompound.hasKeyOfType("CustomName", 8)) {
      this.p = nbttagcompound.getString("CustomName");
    }

    for (int i = 0; i < nbttaglist.size(); ++i) {
      NBTTagCompound nbttagcompound1 = nbttaglist.get(i);
      int j = nbttagcompound1.getByte("Slot") & 255;

      if (j >= 0 && j < this.items.length) {
        this.items[j] = ItemStack.createStack(nbttagcompound1);
      }
    }

  }

  public void b(NBTTagCompound nbttagcompound) {
    super.b(nbttagcompound);
    NBTTagList nbttaglist = new NBTTagList();

    for (int i = 0; i < this.items.length; ++i) {
      if (this.items[i] != null) {
        NBTTagCompound nbttagcompound1 = new NBTTagCompound();

        nbttagcompound1.setByte("Slot", (byte) i);
        this.items[i].save(nbttagcompound1);
        nbttaglist.add(nbttagcompound1);
      }
    }

    nbttagcompound.set("Items", nbttaglist);
    if (this.hasCustomName()) {
      nbttagcompound.setString("CustomName", this.p);
    }

  }

  public int getMaxStackSize() {
    return maxStack; // CraftBukkit
  }

  public void setMaxStackSize(int size) {
    maxStack = size;
  }

  public boolean a(EntityHuman entityhuman) {
    if (this.world == null) return true; // CraftBukkit
    return this.world.getTileEntity(this.position) == this && entityhuman.e((double) this.position.getX() + 0.5D, (double) this.position.getY() + 0.5D, (double) this.position.getZ() + 0.5D) <= 64.0D;
  }

  public void E() {
    super.E();
    this.a = false;
  }

  private void a(TileEntityChest tileentitychest, EnumDirection enumdirection) {
    if (tileentitychest.x()) {
      this.a = false;
    } else if (this.a) {
      switch (TileEntityChest.SyntheticClass_1.a[enumdirection.ordinal()]) {
        case 1:
          if (this.f != tileentitychest) {
            this.a = false;
          }
          break;

        case 2:
          if (this.i != tileentitychest) {
            this.a = false;
          }
          break;

        case 3:
          if (this.g != tileentitychest) {
            this.a = false;
          }
          break;

        case 4:
          if (this.h != tileentitychest) {
            this.a = false;
          }
      }
    }

  }

  public void m() {
    if (!this.a) {
      this.a = true;
      this.h = this.a(EnumDirection.WEST);
      this.g = this.a(EnumDirection.EAST);
      this.f = this.a(EnumDirection.NORTH);
      this.i = this.a(EnumDirection.SOUTH);
    }
  }

  protected TileEntityChest a(EnumDirection enumdirection) {
    BlockPosition blockposition = this.position.shift(enumdirection);

    if (this.b(blockposition)) {
      TileEntity tileentity = this.world.getTileEntity(blockposition);

      if (tileentity instanceof TileEntityChest) {
        TileEntityChest tileentitychest = (TileEntityChest) tileentity;

        tileentitychest.a(this, enumdirection.opposite());
        return tileentitychest;
      }
    }

    return null;
  }

  private boolean b(BlockPosition blockposition) {
    if (this.world == null) {
      return false;
    } else {
      Block block = this.world.getType(blockposition).getBlock();

      return block instanceof BlockChest && ((BlockChest) block).b == this.n();
    }
  }

  public void c() {
    this.m();
    int i = this.position.getX();
    int j = this.position.getY();
    int k = this.position.getZ();

    ++this.n;
    float f;

    if (!this.world.isClientSide && this.l != 0 && (this.n + i + j + k) % 200 == 0) {
      this.l = 0;
      f = 5.0F;
      List list = this.world.a(EntityHuman.class, new AxisAlignedBB((float) i - f, (float) j - f, (float) k - f, (float) (i + 1) + f, (float) (j + 1) + f, (float) (k + 1) + f));
      Iterator iterator = list.iterator();

      while (iterator.hasNext()) {
        EntityHuman entityhuman = (EntityHuman) iterator.next();

        if (entityhuman.activeContainer instanceof ContainerChest) {
          IInventory iinventory = ((ContainerChest) entityhuman.activeContainer).e();

          if (iinventory == this || iinventory instanceof InventoryLargeChest && ((InventoryLargeChest) iinventory).a(this)) {
            ++this.l;
          }
        }
      }
    }

    this.k = this.j;
    f = 0.1F;
    double d0;

    if (this.l > 0 && this.j == 0.0F && this.f == null && this.h == null) {
      double d1 = (double) i + 0.5D;

      d0 = (double) k + 0.5D;
      if (this.i != null) {
        d0 += 0.5D;
      }

      if (this.g != null) {
        d1 += 0.5D;
      }

      this.world.makeSound(d1, (double) j + 0.5D, d0, "random.chestopen", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
    }

    if (this.l == 0 && this.j > 0.0F || this.l > 0 && this.j < 1.0F) {
      float f1 = this.j;

      if (this.l > 0) {
        this.j += f;
      } else {
        this.j -= f;
      }

      if (this.j > 1.0F) {
        this.j = 1.0F;
      }

      float f2 = 0.5F;

      if (this.j < f2 && f1 >= f2 && this.f == null && this.h == null) {
        d0 = (double) i + 0.5D;
        double d2 = (double) k + 0.5D;

        if (this.i != null) {
          d2 += 0.5D;
        }

        if (this.g != null) {
          d0 += 0.5D;
        }

        this.world.makeSound(d0, (double) j + 0.5D, d2, "random.chestclosed", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
      }

      if (this.j < 0.0F) {
        this.j = 0.0F;
      }
    }

  }

  public boolean c(int i, int j) {
    if (i == 1) {
      this.l = j;
      return true;
    } else {
      return super.c(i, j);
    }
  }

  public void startOpen(EntityHuman entityhuman) {
    if (!entityhuman.isSpectator()) {
      if (this.l < 0) {
        this.l = 0;
      }
      int oldPower = Math.max(0, Math.min(15, this.l)); // CraftBukkit - Get power before new viewer is added

      ++this.l;
      if (this.world == null) return; // CraftBukkit
      this.world.playBlockAction(this.position, this.w(), 1, this.l);

      // CraftBukkit start - Call redstone event
      if (this.w() == Blocks.TRAPPED_CHEST) {
        int newPower = Math.max(0, Math.min(15, this.l));

        if (oldPower != newPower) {
          org.bukkit.craftbukkit.event.CraftEventFactory.callRedstoneChange(world, position.getX(), position.getY(), position.getZ(), oldPower, newPower);
        }
      }
      // CraftBukkit end
      this.world.applyPhysics(this.position, this.w());
      this.world.applyPhysics(this.position.down(), this.w());
    }

  }

  public void closeContainer(EntityHuman entityhuman) {
    if (!entityhuman.isSpectator() && this.w() instanceof BlockChest) {
      int oldPower = Math.max(0, Math.min(15, this.l)); // CraftBukkit - Get power before new viewer is added
      --this.l;
      if (this.world == null) return; // CraftBukkit
      this.world.playBlockAction(this.position, this.w(), 1, this.l);

      // CraftBukkit start - Call redstone event
      if (this.w() == Blocks.TRAPPED_CHEST) {
        int newPower = Math.max(0, Math.min(15, this.l));

        if (oldPower != newPower) {
          org.bukkit.craftbukkit.event.CraftEventFactory.callRedstoneChange(world, position.getX(), position.getY(), position.getZ(), oldPower, newPower);
        }
      }
      // CraftBukkit end
      this.world.applyPhysics(this.position, this.w());
      this.world.applyPhysics(this.position.down(), this.w());
    }

  }

  public boolean b(int i, ItemStack itemstack) {
    return true;
  }

  public void y() {
    super.y();
    this.E();
    this.m();
  }

  public int n() {
    if (this.o == -1) {
      if (this.world == null || !(this.w() instanceof BlockChest)) {
        return 0;
      }

      this.o = ((BlockChest) this.w()).b;
    }

    return this.o;
  }

  public String getContainerName() {
    return "minecraft:chest";
  }

  public Container createContainer(PlayerInventory playerinventory, EntityHuman entityhuman) {
    return new ContainerChest(playerinventory, this, entityhuman);
  }

  public int getProperty(int i) {
    return 0;
  }

  public void b(int i, int j) {
  }

  public int g() {
    return 0;
  }

  public void l() {
    for (int i = 0; i < this.items.length; ++i) {
      this.items[i] = null;
    }

  }

  // CraftBukkit start
  // PAIL
  @Override
  public boolean F() {
    return true;
  }
  // CraftBukkit end

  static class SyntheticClass_1 {

    static final int[] a = new int[EnumDirection.values().length];

    static {
      try {
        TileEntityChest.SyntheticClass_1.a[EnumDirection.NORTH.ordinal()] = 1;
      } catch (NoSuchFieldError nosuchfielderror) {
      }

      try {
        TileEntityChest.SyntheticClass_1.a[EnumDirection.SOUTH.ordinal()] = 2;
      } catch (NoSuchFieldError nosuchfielderror1) {
      }

      try {
        TileEntityChest.SyntheticClass_1.a[EnumDirection.EAST.ordinal()] = 3;
      } catch (NoSuchFieldError nosuchfielderror2) {
      }

      try {
        TileEntityChest.SyntheticClass_1.a[EnumDirection.WEST.ordinal()] = 4;
      } catch (NoSuchFieldError nosuchfielderror3) {
      }

    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy