aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLéa Gris <lea.gris@noiraude.net>2019-03-03 01:46:55 +0100
committerLéa Gris <lea.gris@noiraude.net>2019-03-03 01:46:55 +0100
commit25a7ee77ba9cdb176dec070358641554c2f75d9f (patch)
tree86278be5ed8f23a30b98310f0d623deb2e396774
parentdd980d9b98508037ad542fd958f2dcf4dcd29bd8 (diff)
downloadGT5-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.java20
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);
}
}