Fixed covers behavior & digital tank recipe

Closes #36
This commit is contained in:
TheDarkDnKTv 2020-08-20 22:05:44 +03:00
parent a54195b0ac
commit a5398f3351
3 changed files with 24 additions and 19 deletions

View file

@ -1,5 +1,6 @@
package gregtechmod.api.metatileentity;
import java.lang.ref.SoftReference;
import gregtechmod.api.GregTech_API;
import gregtechmod.api.interfaces.IGregTechTileEntity;
import gregtechmod.api.interfaces.IHasWorldObjectAndCoords;
@ -33,10 +34,18 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje
*
* "this" means that there is no TileEntity, while "null" means that it doesn't know if there is even a TileEntity and still needs to check that if needed.
*/
private final TileEntity[] mBufferedTileEntities = new TileEntity[6];
@SuppressWarnings({ "unchecked"})
private final SoftReference<TileEntity> mBufferedTileEntities[] = new SoftReference[6];
private final void clearNullMarkersFromTileEntityBuffer() {
for (int i = 0; i < mBufferedTileEntities.length; i++) if (mBufferedTileEntities[i] == this) mBufferedTileEntities[i] = null;
for (int i = 0; i < mBufferedTileEntities.length; i++) {
SoftReference<TileEntity> reference = mBufferedTileEntities[i];
if (reference != null && reference.get() != null) {
if (reference.get() == this || reference.get().isInvalid()) {
mBufferedTileEntities[i] = null;
}
}
}
}
@Override public final World getWorld () {return worldObj;}
@ -130,22 +139,18 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje
@Override
public final TileEntity getTileEntityAtSide(byte aSide) {
if (aSide < 0 || aSide >= 6 || mBufferedTileEntities[aSide] == this) return null;
if (mBufferedTileEntities[aSide] == null) {
mBufferedTileEntities[aSide] = getTileEntity(getOffsetX(aSide, 1), getOffsetY(aSide, 1), getOffsetZ(aSide, 1));
if (mBufferedTileEntities[aSide] == null) {
mBufferedTileEntities[aSide] = this;
return null;
if (aSide >= 0 && aSide < 6) {
SoftReference<TileEntity> reference = mBufferedTileEntities[aSide];
if (reference != null && reference.get() != null && !reference.get().isInvalid()) {
if (reference.get() == this || reference.isEnqueued()) this.clearNullMarkersFromTileEntityBuffer();
return reference.get();
} else {
TileEntity tile = getTileEntity(getOffsetX(aSide, 1), getOffsetY(aSide, 1), getOffsetZ(aSide, 1));
mBufferedTileEntities[aSide] = new SoftReference<TileEntity>(tile);
return tile;
}
return mBufferedTileEntities[aSide];
}
if (mBufferedTileEntities[aSide].isInvalid()) {
mBufferedTileEntities[aSide] = null;
return getTileEntityAtSide(aSide);
}
if (mBufferedTileEntities[aSide].xCoord == getOffsetX(aSide, 1) && mBufferedTileEntities[aSide].yCoord == getOffsetY(aSide, 1) && mBufferedTileEntities[aSide].zCoord == getOffsetZ(aSide, 1)) {
return mBufferedTileEntities[aSide];
}
}
return null;
}

View file

@ -142,7 +142,7 @@ public class GT_ItemIterator implements Runnable {
}
} catch (Throwable e) {}
try {
if (tItem instanceof IToolWrench) {
if (tItem instanceof IToolWrench && !(tItem instanceof IToolCrowbar)) {
if (!tItem.isDamageable() && !GT_ModHandler.isElectricItem(new ItemStack(tItem, 1, 0))) {
if (GregTech_API.sRecipeFile.get(GT_ConfigCategories.Recipes.disabledrecipes, "infiniteDurabilityBCWrenches", false) && GT_ModHandler.removeRecipeByOutput(new ItemStack(tItem, 1, GregTech_API.ITEM_WILDCARD_DAMAGE))) {
GT_Log.log.info("GT_Mod: Removed infinite BC Wrench: " + tName);

View file

@ -386,7 +386,7 @@ public class GT_CraftingRecipeLoader implements Runnable {
if (GregTech_API.sRecipeFile.get(GT_ConfigCategories.Recipes.gregtechrecipes, "digitalchest", true)) {
GT_ModHandler.addCraftingRecipe(new ItemStack(GregTech_API.sBlockList[1], 1,48), new Object[] {"AAA", "ADA", "ASA", 'D', OrePrefixes.circuit.get(Materials.Ultimate), 'S', GT_OreDictNames.craftingMonitorTier02, 'A', OrePrefixes.plate.get(Materials.Iron)});
GT_ModHandler.addCraftingRecipe(new ItemStack(GregTech_API.sBlockList[1], 1,48), new Object[] {"AAA", "ADA", "ASA", 'D', OrePrefixes.circuit.get(Materials.Ultimate), 'S', GT_OreDictNames.craftingMonitorTier02, 'A', OrePrefixes.plate.get(Materials.Aluminium)});
GT_ModHandler.addCraftingRecipe(new ItemStack(GregTech_API.sBlockList[1], 1,48), new Object[] {"AAA", "ADA", "ASA", 'D', OrePrefixes.circuit.get(Materials.Ultimate), 'S', GT_OreDictNames.craftingMonitorTier02, 'A', GT_OreDictNames.craftingPlateSteel});
GT_ModHandler.addCraftingRecipe(new ItemStack(GregTech_API.sBlockList[1], 1,75), new Object[] {"AAA", "ADA", "ASA", 'D', OrePrefixes.circuit.get(Materials.Ultimate), 'S', GT_OreDictNames.craftingMonitorTier02, 'A', GT_OreDictNames.craftingPlateSteel});
}
if (GregTech_API.sRecipeFile.get(GT_ConfigCategories.Recipes.gregtechrecipes, "quantumchest", true)) {