package gtPlusPlus.xmod.gregtech.api.gui; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.gui.GT_ContainerMetaTile_Machine; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_Recipe; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; /** * NEVER INCLUDE THIS FILE IN YOUR MOD!!! *

* The Container I use for all my Basic Machines */ public class CONTAINER_MultiMachine extends GT_ContainerMetaTile_Machine { public String[] mTileDescription; private String[] oTileDescription; private GregtechMeta_MultiBlockBase mMCTEI; private boolean mControllerSet = false; public CONTAINER_MultiMachine(final InventoryPlayer aInventoryPlayer, final IGregTechTileEntity aTileEntity) { super(aInventoryPlayer, aTileEntity); } public CONTAINER_MultiMachine(final InventoryPlayer aInventoryPlayer, final IGregTechTileEntity aTileEntity, final boolean bindInventory) { super(aInventoryPlayer, aTileEntity, bindInventory); } public static void setControllerInstance(CONTAINER_MultiMachine aContainer, IGregTechTileEntity aTile) { if (aTile == null) { return; } final IMetaTileEntity aMetaTileEntity = aTile.getMetaTileEntity(); if (aMetaTileEntity == null) { return; } if (aMetaTileEntity instanceof GregtechMeta_MultiBlockBase) { aContainer.mMCTEI = (GregtechMeta_MultiBlockBase) aMetaTileEntity; } } public int aTotalTickTime = 0; public int aMaxParallel = 0; public int aPollutionTick = 0; public int aMaxInputVoltage = 0; public int aInputTier = 0; public int aOutputTier = 0; public int aRecipeDuration = 0; public int aRecipeEU = 0; public int aRecipeSpecial = 0; public int aPollutionReduction = 0; public int aStoredEnergy = 0; public int aMaxEnergy = 0; public int aEfficiency = 0; private int oTotalTickTime = 0; private int oMaxParallel = 0; private int oPollutionTick = 0; private int oMaxInputVoltage = 0; private int oInputTier = 0; private int oOutputTier = 0; private int oRecipeDuration = 0; private int oRecipeEU = 0; private int oRecipeSpecial = 0; private int oPollutionReduction = 0; private int oStoredEnergy = 0; private int oMaxEnergy = 0; private int oEfficiency = 0; private static Field timer; //private static Field crafters; @Override public final void detectAndSendChanges() { super.detectAndSendChanges(); if (this.mTileEntity.isClientSide() || this.mTileEntity.getMetaTileEntity() == null) { return; } if (!mControllerSet) { setControllerInstance(this, this.mTileEntity); } mControllerSet = (mMCTEI != null); if (timer == null) { timer = ReflectionUtils.getField(getClass(), "mTimer"); } if (crafters == null) { //crafters = ReflectionUtils.getField(getClass(), "crafters"); } if (timer != null && crafters != null && mControllerSet) { //Logger.INFO("Trying to update clientside GUI data"); try { //Logger.INFO("0"); int aTimer = (int) ReflectionUtils.getFieldValue(timer, this); //List crafters1List = (List) crafters1; List crafters2 = new ArrayList(); //Logger.INFO("1"); for (Object o : crafters) { if (o instanceof ICrafting) { crafters2.add((ICrafting) o); } } //Logger.INFO("2"); if (!crafters2.isEmpty()) { //Logger.INFO("3"); handleInitialFieldSetting(); try { //Logger.INFO("4"); for (final ICrafting var3 : crafters2) { handleCraftingEvent(aTimer, var3); } //Logger.INFO("5"); handleInternalFieldSetting(); //Logger.INFO("6"); } catch (Throwable t) { } } } catch (Throwable t) { t.printStackTrace(); } } else { Logger.INFO("Failed."); } } public void handleInitialFieldSetting() { this.aTotalTickTime = MathUtils.balance((int) mMCTEI.getTotalRuntimeInTicks(), Integer.MIN_VALUE, Integer.MAX_VALUE); this.aMaxParallel = mMCTEI.getMaxParallelRecipes(); this.aPollutionTick = mMCTEI.getPollutionPerTick(null); this.aMaxInputVoltage = MathUtils.balance((int) mMCTEI.getMaxInputVoltage(), Integer.MIN_VALUE, Integer.MAX_VALUE); this.aInputTier = MathUtils.balance((int) mMCTEI.getInputTier(), Integer.MIN_VALUE, Integer.MAX_VALUE); this.aOutputTier = MathUtils.balance((int) mMCTEI.getOutputTier(), Integer.MIN_VALUE, Integer.MAX_VALUE); if (mMCTEI.mLastRecipe != null) { GT_Recipe aRecipe = mMCTEI.mLastRecipe; this.aRecipeDuration = MathUtils.balance(aRecipe.mDuration, Integer.MIN_VALUE, Integer.MAX_VALUE); this.aRecipeEU = MathUtils.balance(aRecipe.mEUt, Integer.MIN_VALUE, Integer.MAX_VALUE); this.aRecipeSpecial = MathUtils.balance(aRecipe.mSpecialValue, Integer.MIN_VALUE, Integer.MAX_VALUE); } this.aPollutionReduction = mMCTEI.getPollutionReductionForAllMufflers(); this.aStoredEnergy = MathUtils.balance((int) mMCTEI.getStoredEnergyInAllEnergyHatches(), Integer.MIN_VALUE, Integer.MAX_VALUE); this.aMaxEnergy = MathUtils.balance((int) mMCTEI.getMaxEnergyStorageOfAllEnergyHatches(), Integer.MIN_VALUE, Integer.MAX_VALUE); this.aEfficiency = MathUtils.balance(mMCTEI.mEfficiency, Integer.MIN_VALUE, Integer.MAX_VALUE); } public void handleCraftingEvent(int aTimer, ICrafting aCrafter) { int aID = 750; if (aTimer % 500 == 10 || this.oTotalTickTime != this.aTotalTickTime) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aTotalTickTime); } if (aTimer % 500 == 10 || this.oMaxParallel != this.aMaxParallel) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aMaxParallel); } if (aTimer % 500 == 10 || this.oPollutionTick != this.aPollutionTick) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aPollutionTick); } if (aTimer % 500 == 10 || this.oMaxInputVoltage != this.aMaxInputVoltage) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aMaxInputVoltage); } if (aTimer % 500 == 10 || this.oInputTier != this.aInputTier) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aInputTier); } if (aTimer % 500 == 10 || this.oOutputTier != this.aOutputTier) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aOutputTier); } if (aTimer % 500 == 10 || this.oRecipeDuration != this.aRecipeDuration) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aRecipeDuration); } if (aTimer % 500 == 10 || this.oRecipeEU != this.aRecipeEU) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aRecipeEU); } if (aTimer % 500 == 10 || this.oRecipeSpecial != this.aRecipeSpecial) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aRecipeSpecial); } if (aTimer % 500 == 10 || this.oPollutionReduction != this.aPollutionReduction) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aPollutionReduction); } if (aTimer % 500 == 10 || this.oStoredEnergy != this.aStoredEnergy) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aStoredEnergy); } if (aTimer % 500 == 10 || this.oMaxEnergy != this.aMaxEnergy) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aMaxEnergy); } if (aTimer % 500 == 10 || this.oEfficiency != this.aEfficiency) { aCrafter.sendProgressBarUpdate((Container) this, aID++, this.aEfficiency); } } public void handleInternalFieldSetting() { this.oTotalTickTime = this.aTotalTickTime; this.oMaxParallel = this.aMaxParallel; this.oPollutionTick = this.aPollutionTick; this.oMaxInputVoltage = this.aMaxInputVoltage; this.oInputTier = this.aInputTier; this.oOutputTier = this.aOutputTier; this.oRecipeDuration = this.aRecipeDuration; this.oRecipeEU = this.aRecipeEU; this.oRecipeSpecial = this.aRecipeSpecial; this.oPollutionReduction = this.aPollutionReduction; this.oStoredEnergy = this.aStoredEnergy; this.oMaxEnergy = this.aMaxEnergy; this.oEfficiency = this.aEfficiency; } @SideOnly(Side.CLIENT) @Override public void updateProgressBar(final int par1, final int par2) { super.updateProgressBar(par1, par2); int shiftedSwitch = par1 - 750; switch (shiftedSwitch) { case 0: { this.aTotalTickTime = par2; break; } case 1: { this.aMaxParallel = par2; break; } case 2: { this.aPollutionTick = par2; break; } case 3: { this.aMaxInputVoltage = par2; break; } case 4: { this.aInputTier = par2; break; } case 5: { this.aOutputTier = par2; break; } case 6: { this.aRecipeDuration = par2; break; } case 7: { this.aRecipeEU = par2; break; } case 8: { this.aRecipeSpecial = par2; break; } case 9: { this.aPollutionReduction = par2; break; } case 10: { this.aStoredEnergy = par2; break; } case 11: { this.aMaxEnergy = par2; break; } case 12: { this.aEfficiency = par2; break; } } } }