diff options
author | Jakub <53441451+kuba6000@users.noreply.github.com> | 2022-03-05 15:11:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-05 15:11:44 +0100 |
commit | 41a36c2ebe9834cd1d716ad89f3d2b40d093358f (patch) | |
tree | ff67f12833d00757279741cb01e99cde16509c12 | |
parent | dbab3423566f64c354977acc362ccdd3335bb865 (diff) | |
download | GT5-Unofficial-41a36c2ebe9834cd1d716ad89f3d2b40d093358f.tar.gz GT5-Unofficial-41a36c2ebe9834cd1d716ad89f3d2b40d093358f.tar.bz2 GT5-Unofficial-41a36c2ebe9834cd1d716ad89f3d2b40d093358f.zip |
Fix invalid materials being accepted in radio hatch (#100)
* Fix invalid materials being accepted in radio hatch
* Dont show decay ticks when there is no material inside
Former-commit-id: 707c6e793f7844f900762eed26a17d5b2de0621a
3 files changed, 122 insertions, 82 deletions
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_RadioHatch.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_RadioHatch.java index d4269cc534..dab124781a 100644 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_RadioHatch.java +++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_RadioHatch.java @@ -167,79 +167,123 @@ public class GT_MetaTileEntity_RadioHatch extends GT_MetaTileEntity_Hatch { } } + if(this.mass >= this.cap) + return; + ItemStack lStack = this.mInventory[0]; - if (lStack == null) - return; + isStackValidRadioMaterial(lStack, true); + + } + } + + public boolean isStackValidRadioMaterial(ItemStack lStack) + { + return isStackValidRadioMaterial(lStack, false); + } - IRadMaterial radmat = null; - //gt++ compat - if (LoaderReference.miscutils) - radmat = RadioHatchCompat.GTppRadChecker(lStack); - - if (lStack.getItem() instanceof IRadMaterial || radmat != null) { - if (radmat == null) - radmat = ((IRadMaterial) lStack.getItem()); - int sv = radmat.getRadiationLevel(lStack); - if (sv > BioVatLogicAdder.RadioHatch.getMaxSv()) - BioVatLogicAdder.RadioHatch.MaxSV = sv; - if (this.mass == 0 || this.sievert == sv) { - if (this.mass + radmat.getAmountOfMaterial(lStack) <= this.cap) { - this.mass += radmat.getAmountOfMaterial(lStack); - this.sievert = sv; - this.mInventory[0].stackSize--; - this.updateSlots(); - this.colorForGUI = radmat.getColorForGUI(lStack); - this.material = radmat.getNameForGUI(lStack); - return; + public boolean isStackValidRadioMaterial(ItemStack lStack, boolean use){ + if (lStack == null) + return false; + + IRadMaterial radmat = null; + //gt++ compat + if (LoaderReference.miscutils) + radmat = RadioHatchCompat.GTppRadChecker(lStack); + + //GT++ and BW Materials check + + if (lStack.getItem() instanceof IRadMaterial || radmat != null) { + if (radmat == null) + radmat = ((IRadMaterial) lStack.getItem()); + int sv = radmat.getRadiationLevel(lStack); + int amount = radmat.getAmountOfMaterial(lStack); + if (sv > BioVatLogicAdder.RadioHatch.getMaxSv()) + BioVatLogicAdder.RadioHatch.MaxSV = sv; + if ((this.mass == 0 || this.sievert == sv) && sv > 0 && amount > 0) { + if(use) { + if (this.mass + amount <= this.cap) { + String name = radmat.getNameForGUI(lStack); + if (this.mass == 0 || this.material.equals(name)) { + this.mass += amount; + this.sievert = sv; + this.mInventory[0].stackSize--; + this.updateSlots(); + this.colorForGUI = radmat.getColorForGUI(lStack); + this.material = name; + return true; + } } + return false; } + return true; } + } - for (ItemStack varStack : BioVatLogicAdder.RadioHatch.getIsSv().keySet()) { - if (GT_Utility.areStacksEqual(varStack, lStack, true)) { - if (this.mass == 0 || this.sievert == BioVatLogicAdder.RadioHatch.getIsSv().get(varStack)) { - int massToAdd = BioVatLogicAdder.RadioHatch.getIsKg().getOrDefault(varStack,1); - if (this.mass + massToAdd <= this.cap) { - this.mass += massToAdd; - this.sievert = BioVatLogicAdder.RadioHatch.getIsSv().get(varStack); - this.mInventory[0].stackSize--; - this.updateSlots(); - this.colorForGUI = BioVatLogicAdder.RadioHatch.getIsColor().get(varStack); - this.material = StatCollector.translateToLocal(varStack.getUnlocalizedName()); - return; + // Predefined materials check + + for (ItemStack varStack : BioVatLogicAdder.RadioHatch.getIsSv().keySet()) { + if (GT_Utility.areStacksEqual(varStack, lStack, true)) { + int amount = BioVatLogicAdder.RadioHatch.getIsKg().getOrDefault(varStack,0); + int sv = BioVatLogicAdder.RadioHatch.getIsSv().get(varStack); + if ((this.mass == 0 || this.sievert == sv) && sv > 0 && amount > 0) { + if (use) { + if (this.mass + amount <= this.cap) { + String name = StatCollector.translateToLocal(varStack.getUnlocalizedName()); + if (this.mass == 0 || this.material.equals(name)) { + this.mass += amount; + this.sievert = BioVatLogicAdder.RadioHatch.getIsSv().get(varStack); + this.mInventory[0].stackSize--; + this.updateSlots(); + this.colorForGUI = BioVatLogicAdder.RadioHatch.getIsColor().get(varStack); + this.material = name; + return true; + } } + return false; } + return true; } } + } - //check material for general validity - if (GT_OreDictUnificator.getAssociation(lStack) != null && GT_OreDictUnificator.getAssociation(lStack).mMaterial != null && GT_OreDictUnificator.getAssociation(lStack).mMaterial.mMaterial != null) { - //check orePrefix for general validity - if (GT_OreDictUnificator.getAssociation(lStack).mPrefix != null) { - OrePrefixes orePrefixes = GT_OreDictUnificator.getAssociation(lStack).mPrefix; - //check orePrefix for specialised validity - if (orePrefixes.equals(OrePrefixes.stickLong) || orePrefixes.equals(OrePrefixes.stick)) { - Materials materials = GT_OreDictUnificator.getAssociation(lStack).mMaterial.mMaterial; - //check material for specialised validity - if (materials.getProtons() >= 83 && materials.getProtons() != 125 || materials.getProtons() == 61 || materials.getProtons() == 43) { - if (this.mass == 0 || this.sievert == calculateSv(materials)) { - if ((this.mass + (orePrefixes.equals(OrePrefixes.stickLong) ? 2 : 1)) <= this.cap) { - this.sievert = calculateSv(materials); - this.mass += orePrefixes.equals(OrePrefixes.stickLong) ? 2 : 1; - this.mInventory[0].stackSize--; - this.updateSlots(); - this.colorForGUI = materials.mColor.mRGBa; - this.material = materials.mName; + // Rest + + //check material for general validity + if (GT_OreDictUnificator.getAssociation(lStack) != null && GT_OreDictUnificator.getAssociation(lStack).mMaterial != null && GT_OreDictUnificator.getAssociation(lStack).mMaterial.mMaterial != null) { + //check orePrefix for general validity + if (GT_OreDictUnificator.getAssociation(lStack).mPrefix != null) { + OrePrefixes orePrefixes = GT_OreDictUnificator.getAssociation(lStack).mPrefix; + //check orePrefix for specialised validity + if (orePrefixes.equals(OrePrefixes.stickLong) || orePrefixes.equals(OrePrefixes.stick)) { + Materials materials = GT_OreDictUnificator.getAssociation(lStack).mMaterial.mMaterial; + //check material for specialised validity + if (materials.getProtons() >= 83 && materials.getProtons() != 125 || materials.getProtons() == 61 || materials.getProtons() == 43) { + if (use) { + int sv = calculateSv(materials); + int amount = (orePrefixes.equals(OrePrefixes.stickLong) ? 2 : 1); + if (this.mass == 0 || this.sievert == sv) { + if ((this.mass + amount) <= this.cap) { + String name = materials.mName; + if (this.mass == 0 || this.material.equals(name)) { + this.sievert = sv; + this.mass += orePrefixes.equals(OrePrefixes.stickLong) ? 2 : 1; + this.mInventory[0].stackSize--; + this.updateSlots(); + this.colorForGUI = materials.mColor.mRGBa; + this.material = materials.mName; + return true; + } } } + return false; } + return true; } } } - - } + return false; } @Override @@ -249,7 +293,7 @@ public class GT_MetaTileEntity_RadioHatch extends GT_MetaTileEntity_Hatch { @Override public String[] getInfoData() { - if (GT_MetaTileEntity_RadioHatch.calcDecayTicks(this.sievert) != 0) + if (this.sievert != 0) return new String[]{ StatCollector.translateToLocal("tooltip.tile.radhatch.2.name") + " " + this.material, StatCollector.translateToLocal("tooltip.tile.radhatch.3.name") + " " + this.sievert, @@ -291,7 +335,8 @@ public class GT_MetaTileEntity_RadioHatch extends GT_MetaTileEntity_Hatch { } public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) { - return aSide == this.getBaseMetaTileEntity().getFrontFacing(); + return (aSide == this.getBaseMetaTileEntity().getFrontFacing() && + isStackValidRadioMaterial(aStack)); } public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/server/container/GT_Container_RadioHatch.java b/src/main/java/com/github/bartimaeusnek/bartworks/server/container/GT_Container_RadioHatch.java index e576296d7b..9d89ad03b3 100644 --- a/src/main/java/com/github/bartimaeusnek/bartworks/server/container/GT_Container_RadioHatch.java +++ b/src/main/java/com/github/bartimaeusnek/bartworks/server/container/GT_Container_RadioHatch.java @@ -22,18 +22,11 @@ package com.github.bartimaeusnek.bartworks.server.container; -import com.github.bartimaeusnek.bartworks.API.BioVatLogicAdder; -import com.github.bartimaeusnek.bartworks.API.IRadMaterial; import com.github.bartimaeusnek.bartworks.common.tileentities.tiered.GT_MetaTileEntity_RadioHatch; -import com.github.bartimaeusnek.bartworks.util.BW_Util; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.OrePrefixes; import gregtech.api.gui.GT_Container_1by1; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ICrafting; @@ -43,7 +36,6 @@ import net.minecraft.item.ItemStack; import java.nio.ByteBuffer; import java.util.Iterator; -import java.util.Optional; public class GT_Container_RadioHatch extends GT_Container_1by1 { @@ -168,6 +160,21 @@ public class GT_Container_RadioHatch extends GT_Container_1by1 { return true; } + // Handle shift-clicking + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int id){ + Slot slot = (Slot)this.inventorySlots.get(id); + ItemStack stack = slot.getStack(); + if(stack == null) + return null; + if(slot instanceof RadioSlot) + return super.transferStackInSlot(player, id); + else if (((GT_MetaTileEntity_RadioHatch)this.mTileEntity.getMetaTileEntity()).isStackValidRadioMaterial(stack)) + return super.transferStackInSlot(player, id); + else + return null; + } + private static class RadioSlot extends Slot{ public RadioSlot(IInventory p_i1824_1_, int p_i1824_2_, int p_i1824_3_, int p_i1824_4_) { super(p_i1824_1_, p_i1824_2_, p_i1824_3_, p_i1824_4_); @@ -175,22 +182,7 @@ public class GT_Container_RadioHatch extends GT_Container_1by1 { @Override public boolean isItemValid(ItemStack p_75214_1_) { - if (BioVatLogicAdder.RadioHatch.getIsSv() - .keySet() - .stream() - .anyMatch( - stack -> GT_Utility.areStacksEqual(stack, p_75214_1_,true) - )) - return true; - - if (!BW_Util.checkStackAndPrefix(p_75214_1_)) - return false; - - ItemData ass = GT_OreDictUnificator.getAssociation(p_75214_1_); - return IRadMaterial.class.isAssignableFrom(p_75214_1_.getItem().getClass()) || - ass.mPrefix == OrePrefixes.rod || - ass.mPrefix == OrePrefixes.stick || - ass.mPrefix == OrePrefixes.stickLong; + return ((GT_MetaTileEntity_RadioHatch)((IGregTechTileEntity)this.inventory).getMetaTileEntity()).isStackValidRadioMaterial(p_75214_1_); } } diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/GTpp/loader/RadioHatchCompat.java b/src/main/java/com/github/bartimaeusnek/crossmod/GTpp/loader/RadioHatchCompat.java index 2b46acee0f..e362bdd5e4 100644 --- a/src/main/java/com/github/bartimaeusnek/crossmod/GTpp/loader/RadioHatchCompat.java +++ b/src/main/java/com/github/bartimaeusnek/crossmod/GTpp/loader/RadioHatchCompat.java @@ -165,7 +165,10 @@ public class RadioHatchCompat { if (RadioHatchCompat.intf.isAssignableFrom(lStack.getItem().getClass())){ if (!RadioHatchCompat.isRadioactive.getBoolean(RadioHatchCompat.f.get(lStack.getItem()))) return null; - return new RadioHatchCompat.GTPPRadAdapter(RadioHatchCompat.componentType.get(lStack.getItem()).equals(RadioHatchCompat.rod) ? 1 : RadioHatchCompat.componentType.get(lStack.getItem()).equals(RadioHatchCompat.longRod) ? 2 : 0, RadioHatchCompat.f.get(lStack.getItem())); + int amount = RadioHatchCompat.componentType.get(lStack.getItem()).equals(RadioHatchCompat.rod) ? 1 : RadioHatchCompat.componentType.get(lStack.getItem()).equals(RadioHatchCompat.longRod) ? 2 : 0; + if (amount == 0) + return null; + return new RadioHatchCompat.GTPPRadAdapter(amount, RadioHatchCompat.f.get(lStack.getItem())); } } catch (IllegalAccessException e) { e.printStackTrace(); @@ -268,4 +271,4 @@ public class RadioHatchCompat { } } -}
\ No newline at end of file +} |