Skip to content

Commit e74f1c9

Browse files
committed
sensor improvements and von da graagg generator WIP
1 parent 0fd6a95 commit e74f1c9

16 files changed

Lines changed: 61 additions & 20 deletions

File tree

CHANGELOG.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ This is the most recent Changelog. It also contains some of the changes inside t
55
Nothing (I tend to only add finished Stuff to the Changelog).
66

77

8-
6.17.06: (Not released yet)
8+
6.17.06: (to be released somewhen today if everything still works)
99
[FIXED] Crucibles did not accept excessive amounts of Air while nearly full. We talking >1000KU worth of Air in ONE go, while only one Ingot worth of space is in the Crucible.
1010
[FIXED] GT6 Alexandrite Ore Veins will no longer generate when HBM NTM is installed (balance concerns), it also generally wont be on the "Small Gem Ores List" anymore. You can still use the Matter Replicator to make Alexandrite though, if you find a sample first.
1111
[CHANGED] GT6 Mossy Cobble (Not Vanilla Mossy Cobble) will make you (and Mobs) slide off if you are not sneaking. This Block spawns Mobs AND makes them slide off if there is space, which is Ideal for Mob Farms.
@@ -15,9 +15,16 @@ Nothing (I tend to only add finished Stuff to the Changelog).
1515
[CHANGED] Can now rightclick a Tap or Nozzle with an Ender Garbage Bin or similar other Mod Voiding Items, to drain one attached Fluid Tank entirely.
1616
[CHANGED] Bedrock Drill can now accept the "Running Possible Detector" to check if there is 100L of Lubricant inside (and if the Structure is Okay).
1717
[CHANGED] Crucibles are now 1000 times harder to break when not empty.
18+
[CHANGED] Sensors are now able to cleanly read GT6 Multiblock Stats without needing to be adjacent to the Controller. (before this there was plenty of hacks that made it work somewhat)
1819
[ADDED] Steel Rope, which is just another type of Rope.
1920
[ADDED] Ultimet Boilers corresponding to the TaHFC Burning Boxes.
2021
[ADDED] Yellow and Brown Grass now indicate Lava, Gas and Oil Springs. Greener Grass indicates Water Springs.
22+
[ADDED]
23+
Von Da Graagg Generator
24+
A Multiblock that turns Energy into "Mobs wont spawn except on Mossy Cobblestone", in a Range of up to 256m. It consumes 16EU/m/t to do so.
25+
Its Design is like what english people tend to call a Tesla Coil, see https://en.wikipedia.org/wiki/Van_de_Graaff_generator for its inspiration.
26+
The exception of Mossy Cobblestone (from both Vanilla and GregTech) was made so people can use this for highly efficient Mob Farms.
27+
As always, if you have trouble understanding the Tooltip, just use the GT Builder Wand to build it.
2128

2229

2330
6.17.05:

src/main/java/gregapi/tileentity/machines/MultiTileEntitySensorTE.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright (c) 2021 GregTech-6 Team
2+
* Copyright (c) 2025 GregTech-6 Team
33
*
44
* This file is part of GregTech.
55
*
@@ -19,10 +19,6 @@
1919

2020
package gregapi.tileentity.machines;
2121

22-
import static gregapi.data.CS.*;
23-
24-
import java.util.List;
25-
2622
import gregapi.GT_API_Proxy;
2723
import gregapi.computer.ITileEntityComputerizable;
2824
import gregapi.data.BI;
@@ -31,6 +27,7 @@
3127
import gregapi.render.IIconContainer;
3228
import gregapi.tileentity.ITileEntityServerTickPost;
3329
import gregapi.tileentity.delegate.DelegatorTileEntity;
30+
import gregapi.tileentity.multiblocks.MultiTileEntityMultiBlockPart;
3431
import gregapi.util.UT;
3532
import net.minecraft.entity.Entity;
3633
import net.minecraft.entity.player.EntityPlayer;
@@ -39,6 +36,10 @@
3936
import net.minecraft.nbt.NBTTagCompound;
4037
import net.minecraft.tileentity.TileEntity;
4138

39+
import java.util.List;
40+
41+
import static gregapi.data.CS.*;
42+
4243
/**
4344
* @author Gregorius Techneticies
4445
*/
@@ -126,6 +127,12 @@ public void onServerTickPost(boolean aFirst) {
126127
mDisplayedNumber = mSetNumber = UT.Code.bind16(mSetNumber);
127128

128129
DelegatorTileEntity<TileEntity> tDelegator = getAdjacentTileEntity(mSecondFacing);
130+
if (tDelegator.mTileEntity instanceof MultiTileEntityMultiBlockPart) {
131+
if (((MultiTileEntityMultiBlockPart)tDelegator.mTileEntity).mTarget != null) {
132+
tDelegator = new DelegatorTileEntity<>((TileEntity)((MultiTileEntityMultiBlockPart)tDelegator.mTileEntity).mTarget, tDelegator.mSideOfTileEntity);
133+
}
134+
}
135+
129136
mValues[mIndex] = UT.Code.bindInt(getCurrentValue(tDelegator));
130137
mCurrentValue = (mValues.length == 1 ? mValues[0] : UT.Code.averageInts(mValues));
131138
mCurrentMax = UT.Code.bindInt(getCurrentMax(tDelegator));

src/main/java/gregtech/loaders/b/Loader_MultiTileEntities.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,6 +1277,7 @@ private static void multiblocks(MultiTileEntityRegistry aRegistry, MultiTileEnti
12771277
aMat = MT.Ad; aRegistry.add("Large Adamantium Crucible" , "Multiblock Machines", 17305, 17101, MultiTileEntityCrucible.class , aMat.mToolQuality, 16, aMachine , UT.NBT.make(NBT_MATERIAL, aMat, NBT_HARDNESS, 100.0F, NBT_RESISTANCE, 100.0F, NBT_TEXTURE, "crucible" , NBT_DESIGN, 18005, NBT_ACIDPROOF, T), "hMy", 'M', aRegistry.getItem(18005));
12781278

12791279

1280+
aMat = MT.SteelGalvanized; aRegistry.add("Von da Graagg Generator" , "Multiblock Machines", 17996, 17101, MultiTileEntityVonDaGraagg.class , aMat.mToolQuality, 16, aMachine , UT.NBT.make(NBT_MATERIAL, aMat, NBT_HARDNESS, 6.0F, NBT_RESISTANCE, 6.0F, NBT_TEXTURE, "vondagraagg" , NBT_ENERGY_ACCEPTED, TD.Energy.EU), "CSC", "PMP", "CEC", 'M', OP.casingMachine.dat(aMat), 'P', IL.Processor_Crystal_Ruby, 'C', OD_CIRCUITS[6], 'S', OP.gem.dat(MT.NetherStar), 'E', OP.gem.dat(MT.EnderEye));
12801281
aMat = MT.SteelGalvanized; aRegistry.add("Logistics Core" , "Logistics" , 17997, 17997, MultiTileEntityLogisticsCore.class , aMat.mToolQuality, 16, aMachine , UT.NBT.make(NBT_MATERIAL, aMat, NBT_HARDNESS, 6.0F, NBT_RESISTANCE, 6.0F, NBT_TEXTURE, "logisticscore" , NBT_ENERGY_ACCEPTED, TD.Energy.EU), "CCC", "PMP", "CCC", 'M', OP.casingMachine.dat(aMat), 'P', IL.Processor_Crystal_Emerald, 'C', OD_CIRCUITS[6]);
12811282
aMat = ANY.W; aRegistry.add("Lightning Rod Electric Output" , "Multiblock Machines", 17998, 17101, MultiTileEntityLightningRod.class , aMat.mToolQuality, 16, aMachine , UT.NBT.make(NBT_MATERIAL, aMat, NBT_HARDNESS, 10.0F, NBT_RESISTANCE, 10.0F, NBT_TEXTURE, "lightningrod" , NBT_ENERGY_EMITTED, TD.Energy.EU, NBT_CAPACITY, 18000 * VREC[6]), "CWC", "PMP", "CWC", 'M', OP.casingMachine.dat(aMat), 'W', OP.wireGt16.dat(MT.NiobiumTitanium), 'P', IL.Processor_Crystal_Sapphire, 'C', OD_CIRCUITS[6]);
12821283
aMat = MT.Ti; aRegistry.add("Bedrock Mining Drill Controller" , "Multiblock Machines", 17999, 17101, MultiTileEntityBedrockDrill.class , aMat.mToolQuality, 16, aMachine , UT.NBT.make(NBT_MATERIAL, aMat, NBT_HARDNESS, 9.0F, NBT_RESISTANCE, 9.0F, NBT_TEXTURE, "bedrockdrill" , NBT_RECIPEMAP, RM.BedrockOreList, NBT_ENERGY_ACCEPTED, TD.Energy.RU), "PYP", "CMC", "GIG", 'M', OP.casingMachineDense.dat(aMat), 'G', OP.gearGt.dat(MT.TungstenSteel), 'I', OP.toolHeadDrill.dat(MT.TungstenSteel), 'P', IL.Processor_Crystal_Ruby, 'Y', IL.CONVEYERS[5], 'C', OD_CIRCUITS[6]);

src/main/java/gregtech/tileentity/multiblocks/MultiTileEntityVonDaGraagg.java

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,12 @@
2626
import gregapi.data.LH.Chat;
2727
import gregapi.data.TD;
2828
import gregapi.tileentity.ITileEntityMobSpawnInhibitor;
29+
import gregapi.tileentity.data.ITileEntityGibbl;
30+
import gregapi.tileentity.data.ITileEntityProgress;
2931
import gregapi.tileentity.energy.ITileEntityEnergy;
3032
import gregapi.tileentity.multiblocks.IMultiBlockEnergy;
33+
import gregapi.tileentity.multiblocks.ITileEntityMultiBlockController;
34+
import gregapi.tileentity.multiblocks.MultiTileEntityMultiBlockPart;
3135
import gregapi.tileentity.multiblocks.TileEntityBase10MultiBlockBase;
3236
import gregapi.util.UT;
3337
import net.minecraft.block.Block;
@@ -48,7 +52,7 @@
4852
/**
4953
* @author Gregorius Techneticies
5054
*/
51-
public class MultiTileEntityVonDaGraagg extends TileEntityBase10MultiBlockBase implements ITileEntityEnergy, ITileEntityMobSpawnInhibitor, IMultiBlockEnergy {
55+
public class MultiTileEntityVonDaGraagg extends TileEntityBase10MultiBlockBase implements ITileEntityEnergy, ITileEntityMobSpawnInhibitor, IMultiBlockEnergy, ITileEntityProgress, ITileEntityGibbl {
5256
public long mEnergy = 0, mCurrentRange = 256;
5357
public TagData mEnergyTypeAccepted = TD.Energy.EU;
5458

@@ -60,36 +64,53 @@ public void readFromNBT2(NBTTagCompound aNBT) {
6064

6165
@Override
6266
public boolean checkStructure2(ChunkCoordinates aCoordinates, Entity aPlayer, IInventory aInventory) {
63-
int tX = getOffsetXN(mFacing, 2), tY = yCoord-1, tZ = getOffsetZN(mFacing, 2);
67+
int tX = xCoord, tY = yCoord, tZ = zCoord;
6468
if (worldObj.blockExists(tX-2, tY, tZ-2) && worldObj.blockExists(tX+2, tY, tZ-2) && worldObj.blockExists(tX-2, tY, tZ+2) && worldObj.blockExists(tX+2, tY, tZ+2)) {
6569
boolean tSuccess = T;
6670

71+
for (int i = -2; i <= 2; i++) for (int j = -2; j <= 2; j++) {
72+
if (!ITileEntityMultiBlockController.Util.checkAndSetTargetOffset(this, i, +0, j, 18028, getMultiTileEntityRegistryID(), 0, MultiTileEntityMultiBlockPart.ONLY_ENERGY_IN, aCoordinates, aPlayer, aInventory)) tSuccess = F;
73+
if (!ITileEntityMultiBlockController.Util.checkAndSetTargetOffset(this, i, +1, j, 18028, getMultiTileEntityRegistryID(), 0, MultiTileEntityMultiBlockPart.ONLY_ENERGY_IN, aCoordinates, aPlayer, aInventory)) tSuccess = F;
74+
}
75+
if (!ITileEntityMultiBlockController.Util.checkAndSetTargetOffset(this, 0, +2, 0, 18040, getMultiTileEntityRegistryID(), 0, MultiTileEntityMultiBlockPart.NOTHING , aCoordinates, aPlayer, aInventory)) tSuccess = F;
76+
if (!ITileEntityMultiBlockController.Util.checkAndSetTargetOffset(this, 0, +3, 0, 18040, getMultiTileEntityRegistryID(), 0, MultiTileEntityMultiBlockPart.NOTHING , aCoordinates, aPlayer, aInventory)) tSuccess = F;
77+
if (!ITileEntityMultiBlockController.Util.checkAndSetTargetOffset(this, 0, +4, 0, 18040, getMultiTileEntityRegistryID(), 0, MultiTileEntityMultiBlockPart.NOTHING , aCoordinates, aPlayer, aInventory)) tSuccess = F;
78+
if (!ITileEntityMultiBlockController.Util.checkAndSetTargetOffset(this, 0, +5, 0, 18040, getMultiTileEntityRegistryID(), 0, MultiTileEntityMultiBlockPart.NOTHING , aCoordinates, aPlayer, aInventory)) tSuccess = F;
79+
if (!ITileEntityMultiBlockController.Util.checkAndSetTargetOffset(this, 0, +6, 0, 18040, getMultiTileEntityRegistryID(), 0, MultiTileEntityMultiBlockPart.NOTHING , aCoordinates, aPlayer, aInventory)) tSuccess = F;
80+
81+
if (!ITileEntityMultiBlockController.Util.checkAndSetTargetOffset(this, 0, +7, 0, 18029, getMultiTileEntityRegistryID(), 0, MultiTileEntityMultiBlockPart.NOTHING , aCoordinates, aPlayer, aInventory)) tSuccess = F;
82+
for (int i = -1; i <= 1; i++) for (int j = -1; j <= 1; j++) if (i != 0 || j != 0) {
83+
if (!ITileEntityMultiBlockController.Util.checkAndSetTargetOffset(this, i, +5, j, 18029, getMultiTileEntityRegistryID(), 0, MultiTileEntityMultiBlockPart.NOTHING , aCoordinates, aPlayer, aInventory)) tSuccess = F;
84+
if (!ITileEntityMultiBlockController.Util.checkAndSetTargetOffset(this, i, +6, j, 18029, getMultiTileEntityRegistryID(), 0, MultiTileEntityMultiBlockPart.NOTHING , aCoordinates, aPlayer, aInventory)) tSuccess = F;
85+
if (!ITileEntityMultiBlockController.Util.checkAndSetTargetOffset(this, i, +7, j, 18029, getMultiTileEntityRegistryID(), 0, MultiTileEntityMultiBlockPart.NOTHING , aCoordinates, aPlayer, aInventory)) tSuccess = F;
86+
}
6787
return tSuccess;
6888
}
6989
return mStructureOkay;
7090
}
7191

7292
static {
73-
LH.add("gt.tooltip.multiblock.largeboiler.1", "TODO");
74-
LH.add("gt.tooltip.multiblock.largeboiler.2", "TODO");
75-
LH.add("gt.tooltip.multiblock.largeboiler.3", "TODO");
76-
LH.add("gt.tooltip.multiblock.largeboiler.4", "TODO");
93+
LH.add("gt.tooltip.multiblock.von.da.graagg.1", "5x5x2 Base of 49 Dense Galvanized Steel Wall with Main at bottom Center");
94+
LH.add("gt.tooltip.multiblock.von.da.graagg.2", "A 5m long Pole of Large Copper Coil with +1 Dense Steel Wall ontop");
95+
LH.add("gt.tooltip.multiblock.von.da.graagg.3", "Wrap a 3x3x3 of 24 Dense Steel Wall around the Top");
96+
LH.add("gt.tooltip.multiblock.von.da.graagg.4", "Prevents Mob Spawns except on Mossy Cobblestone, Range depends on Input.");
7797
}
7898

7999
@Override
80100
public void addToolTips(List<String> aList, ItemStack aStack, boolean aF3_H) {
81101
aList.add(Chat.CYAN + LH.get(LH.STRUCTURE) + ":");
82-
aList.add(Chat.WHITE + LH.get("gt.tooltip.multiblock.von.da.graag.1"));
83-
aList.add(Chat.WHITE + LH.get("gt.tooltip.multiblock.von.da.graag.2"));
84-
aList.add(Chat.WHITE + LH.get("gt.tooltip.multiblock.von.da.graag.3"));
85-
aList.add(Chat.WHITE + LH.get("gt.tooltip.multiblock.von.da.graag.4"));
102+
aList.add(Chat.WHITE + LH.get("gt.tooltip.multiblock.von.da.graagg.1"));
103+
aList.add(Chat.WHITE + LH.get("gt.tooltip.multiblock.von.da.graagg.2"));
104+
aList.add(Chat.WHITE + LH.get("gt.tooltip.multiblock.von.da.graagg.3"));
105+
aList.add(Chat.CYAN + LH.get("gt.tooltip.multiblock.von.da.graagg.4"));
106+
LH.addEnergyToolTips(this, aList, mEnergyTypeAccepted, null, LH.get(LH.FACE_BOTTOM), "");
86107
super.addToolTips(aList, aStack, aF3_H);
87108
}
88109

89110
@Override
90111
public boolean isInsideStructure(int aX, int aY, int aZ) {
91112
// TODO actual dimensions of Structure
92-
int tX = getOffsetXN(mFacing, 2), tY = yCoord-1, tZ = getOffsetZN(mFacing, 2);
113+
int tX = xCoord, tY = yCoord, tZ = zCoord;
93114
return aX >= tX - 2 && aY >= tY && aZ >= tZ - 2 && aX <= tX + 2 && aY <= tY + 8 && aZ <= tZ + 2;
94115
}
95116

@@ -123,19 +144,24 @@ public void onTick2(long aTimer, boolean aIsServerSide) {
123144
GT_API_Proxy.MOB_SPAWN_INHIBITORS.add(this);
124145
mHasToAddToList = F;
125146
}
126-
mCurrentRange = UT.Code.bind8(mStructureOkay ? mEnergy / 16 : 0);
127-
mEnergy = 0;
147+
mCurrentRange = UT.Code.bind8(mStructureOkay ? Math.min(mEnergy, 4096) / 16 : 0);
148+
mEnergy -= 4096; if (mEnergy < 0) mEnergy = 0;
128149
}
129150
}
130151

131152
@Override
132153
public void onMagnifyingGlass2(List<String> aChatReturn) {
133-
aChatReturn.add("Square Radius: " + mCurrentRange + "m");
154+
aChatReturn.add("Square Radius: " + mCurrentRange + "m of 256m");
134155
}
135156

136157
@Override public byte getDefaultSide() {return SIDE_FRONT;}
137158
@Override public boolean[] getValidSides() {return SIDES_HORIZONTAL;}
138159

160+
@Override public long getGibblValue (byte aSide) {return mCurrentRange;}
161+
@Override public long getGibblMax (byte aSide) {return 256;}
162+
@Override public long getProgressValue(byte aSide) {return mCurrentRange;}
163+
@Override public long getProgressMax (byte aSide) {return 256;}
164+
139165
@Override public boolean isEnergyType(TagData aEnergyType, byte aSide, boolean aEmitting) {return !aEmitting && aEnergyType == mEnergyTypeAccepted;}
140166
@Override public boolean isEnergyAcceptingFrom(TagData aEnergyType, byte aSide, boolean aTheoretical) {return isEnergyType(aEnergyType, aSide, F);}
141167
@Override public boolean isEnergyCapacitorType(TagData aEnergyType, byte aSide) {return aEnergyType == mEnergyTypeAccepted;}
443 Bytes
Loading
443 Bytes
Loading
443 Bytes
Loading
443 Bytes
Loading
443 Bytes
Loading
443 Bytes
Loading

0 commit comments

Comments
 (0)