diff options
author | Léa Gris <lea.gris@noiraude.net> | 2019-03-03 01:46:55 +0100 |
---|---|---|
committer | Léa Gris <lea.gris@noiraude.net> | 2019-03-03 01:46:55 +0100 |
commit | 25a7ee77ba9cdb176dec070358641554c2f75d9f (patch) | |
tree | 86278be5ed8f23a30b98310f0d623deb2e396774 | |
parent | dd980d9b98508037ad542fd958f2dcf4dcd29bd8 (diff) | |
download | GT5-Unofficial-25a7ee77ba9cdb176dec070358641554c2f75d9f.tar.gz GT5-Unofficial-25a7ee77ba9cdb176dec070358641554c2f75d9f.tar.bz2 GT5-Unofficial-25a7ee77ba9cdb176dec070358641554c2f75d9f.zip |
fix(magical energy absorber): crash in scanAvailableAspects
Adds null checks and bound check when getting aspects list from an aspects container (jar or addon euquivallent)
Related issue: https://github.com/GTNewHorizons/NewHorizons/issues/4145
-rw-r--r-- | src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java index bb3b24f5e3..0f73cb46d3 100644 --- a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java +++ b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java @@ -7,6 +7,7 @@ import gregtech.api.enums.TC_Aspects; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.BaseMetaPipeEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; import gregtech.api.objects.GT_RenderedTexture; @@ -27,9 +28,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraftforge.common.util.ForgeDirection; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectSourceHelper; -import thaumcraft.api.aspects.IAspectSource; +import thaumcraft.api.aspects.*; import thaumcraft.api.visnet.VisNetHandler; import java.util.*; @@ -567,14 +566,21 @@ public class GT_MetaTileEntity_MagicalEnergyAbsorber extends GT_MetaTileEntity_B IGregTechTileEntity tBaseMetaTileEntity = mAbsorber.getBaseMetaTileEntity(); if (tBaseMetaTileEntity.isInvalidTileEntity()) return; int tRange = getRange(); + int tY = tBaseMetaTileEntity.getYCoord(); + int tMaxY = tBaseMetaTileEntity.getWorld().getHeight()-1; + // Make sure relative Y range stays between 0 and world max Y + int rYMin = (tY - tRange >= 0) ? -tRange : -(tY); + int rYMax = (((tY + tRange) <= tMaxY)? tRange : tMaxY - tY); mAvailableAspects.clear(); for (int rX = -tRange; rX <= tRange; rX++) { for (int rZ = -tRange; rZ <= tRange; rZ++) { - // rY < tRange is not a bug. See: thaumcraft.common.lib.events.EssentiaHandler.getSources() - for (int rY = -tRange; rY < tRange; rY++) { + // rY < rYMax is not a bug. See: thaumcraft.common.lib.events.EssentiaHandler.getSources() + for (int rY = rYMin; rY < rYMax; rY++) { TileEntity tTile = tBaseMetaTileEntity.getTileEntityOffset(rX, rY, rZ); - if (tTile instanceof IAspectSource) { - Set<Aspect> tAspects = ((IAspectSource) tTile).getAspects().aspects.keySet(); + if (tTile instanceof IAspectContainer) { + AspectList tAspectList = ((IAspectContainer) tTile).getAspects(); + if (tAspectList == null || tAspectList.aspects.isEmpty()) continue; + Set<Aspect> tAspects = tAspectList.aspects.keySet(); mAvailableAspects.addAll(tAspects); } } |