aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java
diff options
context:
space:
mode:
authorGlodBlock <1356392126@qq.com>2021-12-07 23:02:17 +0800
committerGlodBlock <1356392126@qq.com>2021-12-07 23:02:17 +0800
commit92238a0f3b06a80683f50dfd2d6e9164d2d0f1ab (patch)
tree2d1118c74e43d5f4337266c3d64f1921c0526d42 /src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java
parent06cac63657f40c489477abe923ea3f144fe6749c (diff)
downloadGT5-Unofficial-92238a0f3b06a80683f50dfd2d6e9164d2d0f1ab.tar.gz
GT5-Unofficial-92238a0f3b06a80683f50dfd2d6e9164d2d0f1ab.tar.bz2
GT5-Unofficial-92238a0f3b06a80683f50dfd2d6e9164d2d0f1ab.zip
rename package
Diffstat (limited to 'src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java')
-rw-r--r--src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java225
1 files changed, 225 insertions, 0 deletions
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java b/src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java
new file mode 100644
index 0000000000..c8a4b1c713
--- /dev/null
+++ b/src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java
@@ -0,0 +1,225 @@
+package goodgenerator.blocks.tileEntity;
+
+import goodgenerator.crossmod.thaumcraft.LargeEssentiaEnergyData;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraft.network.NetworkManager;
+import net.minecraft.network.Packet;
+import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraftforge.common.util.ForgeDirection;
+import thaumcraft.api.ThaumcraftApiHelper;
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.api.aspects.IAspectContainer;
+import thaumcraft.api.aspects.IEssentiaTransport;
+
+import java.util.ArrayList;
+
+public class EssentiaHatch extends TileEntity implements IAspectContainer, IEssentiaTransport {
+
+ private Aspect mLocked;
+ private AspectList current = new AspectList();
+ public int mState = 0;
+
+ public void setLockedAspect(Aspect aAspect) {
+ this.mLocked = aAspect;
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound tagCompound) {
+ super.readFromNBT(tagCompound);
+
+ this.mLocked = Aspect.getAspect(tagCompound.getString("mLocked"));
+ this.mState = tagCompound.getInteger("mState");
+ current = new AspectList();
+ NBTTagList tlist = tagCompound.getTagList("Aspects", 10);
+ for (int j = 0; j < tlist.tagCount(); ++j) {
+ NBTTagCompound rs = tlist.getCompoundTagAt(j);
+ if (rs.hasKey("key")) {
+ current.add(Aspect.getAspect(rs.getString("key")), rs.getInteger("amount"));
+ }
+ }
+ }
+
+ @Override
+ public void writeToNBT(NBTTagCompound tagCompound) {
+ super.writeToNBT(tagCompound);
+
+ tagCompound.setString("mLocked", this.mLocked == null ? "" : this.mLocked.getTag());
+ tagCompound.setInteger("mState", mState);
+ NBTTagList tlist = new NBTTagList();
+ Aspect[] aspectA = current.getAspects();
+ for (Aspect aspect : aspectA) {
+ if (aspect != null) {
+ NBTTagCompound f = new NBTTagCompound();
+ f.setString("key", aspect.getTag());
+ f.setInteger("amount", current.getAmount(aspect));
+ tlist.appendTag(f);
+ }
+ }
+ tagCompound.setTag("Aspects", tlist);
+ }
+
+ public final Packet getDescriptionPacket() {
+ NBTTagCompound nbt = new NBTTagCompound();
+ writeToNBT(nbt);
+ return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt);
+ }
+
+ public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
+ NBTTagCompound nbt = pkt.func_148857_g();
+ readFromNBT(nbt);
+ }
+
+ public void markDirty() {
+ super.markDirty();
+ if (this.worldObj.isRemote) {
+ return;
+ }
+ this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
+ }
+
+ @Override
+ public void updateEntity() {
+ fillfrompipe();
+ }
+
+ public void fillfrompipe() {
+ if (getEssentiaAmount(null) > 1000)
+ return;
+ TileEntity[] te = new TileEntity[ForgeDirection.VALID_DIRECTIONS.length];
+ for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) {
+ te[i] = ThaumcraftApiHelper.getConnectableTile(this.worldObj, this.xCoord, this.yCoord, this.zCoord, ForgeDirection.VALID_DIRECTIONS[i]);
+ if (te[i] != null) {
+ IEssentiaTransport pipe = (IEssentiaTransport) te[i];
+ if (!pipe.canOutputTo(ForgeDirection.VALID_DIRECTIONS[i])) {
+ return;
+ }
+ if ((pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i].getOpposite()) != null) && (pipe.getSuctionAmount(ForgeDirection.VALID_DIRECTIONS[i]) < getSuctionAmount(ForgeDirection.VALID_DIRECTIONS[i]))) {
+ Aspect readyInput = pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i].getOpposite());
+ int type = LargeEssentiaEnergyData.getAspectTypeIndex(readyInput);
+ if (type != -1 && (mState & (1 << type)) == 0) continue;
+ if (readyInput.equals(mLocked)) {
+ addToContainer(mLocked, pipe.takeEssentia(mLocked, 1, ForgeDirection.VALID_DIRECTIONS[i]));
+ }
+ if (mLocked == null)
+ addToContainer(pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i]), pipe.takeEssentia(pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i]), 1, ForgeDirection.VALID_DIRECTIONS[i]));
+ }
+ }
+ }
+ }
+
+ @Override
+ public AspectList getAspects() {
+ return current;
+ }
+
+ @Override
+ public void setAspects(AspectList aspectList) {
+ this.current.add(aspectList);
+ }
+
+ @Override
+ public boolean doesContainerAccept(Aspect aspect) {
+ return mLocked == null || mLocked.equals(aspect);
+ }
+
+ @Override
+ public int addToContainer(Aspect aspect, int i) {
+ current.add(aspect, i);
+ this.markDirty();
+ return 0;
+ }
+
+ @Override
+ public boolean takeFromContainer(Aspect aspect, int i) {
+ return false;
+ }
+
+ @Override
+ public boolean takeFromContainer(AspectList aspectList) {
+ return false;
+ }
+
+ @Override
+ public boolean doesContainerContainAmount(Aspect aspect, int i) {
+ return current.aspects.containsKey(aspect) && i <= current.getAmount(aspect);
+ }
+
+ @Override
+ public boolean doesContainerContain(AspectList aspectList) {
+ ArrayList<Boolean> ret = new ArrayList<Boolean>();
+ for (Aspect a : aspectList.aspects.keySet())
+ ret.add(current.aspects.containsKey(a));
+ return !ret.contains(false);
+ }
+
+ @Override
+ public int containerContains(Aspect aspect) {
+ return current.aspects.containsKey(aspect) ? current.getAmount(aspect) : 0;
+ }
+
+ @Override
+ public boolean isConnectable(ForgeDirection forgeDirection) {
+ return true;
+ }
+
+ @Override
+ public boolean canInputFrom(ForgeDirection forgeDirection) {
+ return true;
+ }
+
+ @Override
+ public boolean canOutputTo(ForgeDirection forgeDirection) {
+ return false;
+ }
+
+ @Override
+ public void setSuction(Aspect aspect, int i) { }
+
+ @Override
+ public Aspect getSuctionType(ForgeDirection forgeDirection) {
+ return this.mLocked;
+ }
+
+ @Override
+ public int getSuctionAmount(ForgeDirection forgeDirection) {
+ return 256;
+ }
+
+ @Override
+ public int takeEssentia(Aspect aspect, int i, ForgeDirection forgeDirection) {
+ return 0;
+ }
+
+ @Override
+ public int addEssentia(Aspect aspect, int i, ForgeDirection forgeDirection) {
+ current.add(aspect, i);
+ return 0;
+ }
+
+ @Override
+ public Aspect getEssentiaType(ForgeDirection forgeDirection) {
+ return current.getAspects()[0];
+ }
+
+ @Override
+ public int getEssentiaAmount(ForgeDirection forgeDirection) {
+ int ret = 0;
+ for (final Aspect A : current.aspects.keySet()) {
+ ret += current.getAmount(A);
+ }
+ return ret;
+ }
+
+ @Override
+ public int getMinimumSuction() {
+ return Integer.MAX_VALUE;
+ }
+
+ @Override
+ public boolean renderExtendedTube() {
+ return true;
+ }
+}