aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtnhlanth/common/beamline
diff options
context:
space:
mode:
authorNotAPenguin <michiel.vandeginste@gmail.com>2024-09-02 23:17:17 +0200
committerGitHub <noreply@github.com>2024-09-02 23:17:17 +0200
commit1b820de08a05070909a267e17f033fcf58ac8710 (patch)
tree02831a025986a06b20f87e5bcc69d1e0c639a342 /src/main/java/gtnhlanth/common/beamline
parentafd3fd92b6a6ab9ab0d0dc3214e6bc8ff7a86c9b (diff)
downloadGT5-Unofficial-1b820de08a05070909a267e17f033fcf58ac8710.tar.gz
GT5-Unofficial-1b820de08a05070909a267e17f033fcf58ac8710.tar.bz2
GT5-Unofficial-1b820de08a05070909a267e17f033fcf58ac8710.zip
The Great Renaming (#3014)
* move kekztech to a single root dir * move detrav to a single root dir * move gtnh-lanthanides to a single root dir * move tectech and delete some gross reflection in gt++ * remove more reflection inside gt5u * delete more reflection in gt++ * fix imports * move bartworks and bwcrossmod * fix proxies * move galactigreg and ggfab * move gtneioreplugin * try to fix gt++ bee loader * apply the rename rules to BW * apply rename rules to bwcrossmod * apply rename rules to detrav scanner mod * apply rename rules to galacticgreg * apply rename rules to ggfab * apply rename rules to goodgenerator * apply rename rules to gtnh-lanthanides * apply rename rules to gt++ * apply rename rules to kekztech * apply rename rules to kubatech * apply rename rules to tectech * apply rename rules to gt apply the rename rules to gt * fix tt import * fix mui hopefully * fix coremod except intergalactic * rename assline recipe class * fix a class name i stumbled on * rename StructureUtility to GTStructureUtility to prevent conflict with structurelib * temporary rename of GTTooltipDataCache to old name * fix gt client/server proxy names
Diffstat (limited to 'src/main/java/gtnhlanth/common/beamline')
-rw-r--r--src/main/java/gtnhlanth/common/beamline/BeamInformation.java51
-rw-r--r--src/main/java/gtnhlanth/common/beamline/BeamLinePacket.java51
-rw-r--r--src/main/java/gtnhlanth/common/beamline/IConnectsToBeamline.java14
-rw-r--r--src/main/java/gtnhlanth/common/beamline/MTEBeamlinePipe.java256
-rw-r--r--src/main/java/gtnhlanth/common/beamline/Particle.java71
5 files changed, 443 insertions, 0 deletions
diff --git a/src/main/java/gtnhlanth/common/beamline/BeamInformation.java b/src/main/java/gtnhlanth/common/beamline/BeamInformation.java
new file mode 100644
index 0000000000..3d2ff841c4
--- /dev/null
+++ b/src/main/java/gtnhlanth/common/beamline/BeamInformation.java
@@ -0,0 +1,51 @@
+package gtnhlanth.common.beamline;
+
+public class BeamInformation {
+
+ private float energy; // in keV
+ private int rate;
+
+ private Particle particle;
+ private int particleId;
+
+ private float focus;
+
+ public BeamInformation(float energy, int rate, int particleId, float focus) {
+ this.energy = energy;
+ this.rate = rate;
+ this.particleId = particleId;
+ this.particle = Particle.values()[particleId];
+ this.focus = focus;
+ }
+
+ public float getEnergy() {
+ return this.energy;
+ }
+
+ public int getRate() {
+ return this.rate;
+ }
+
+ public Particle getParticle() {
+ return this.particle;
+ }
+
+ public int getParticleId() {
+ return this.particleId;
+ }
+
+ public float getFocus() {
+ return this.focus;
+ }
+
+ @Override
+ public String toString() {
+ return "Energy=" + this.getEnergy()
+ + ",Rate="
+ + this.getRate()
+ + ",Particle="
+ + this.getParticleId()
+ + ",Focus="
+ + this.getFocus();
+ }
+}
diff --git a/src/main/java/gtnhlanth/common/beamline/BeamLinePacket.java b/src/main/java/gtnhlanth/common/beamline/BeamLinePacket.java
new file mode 100644
index 0000000000..7137c6ab7d
--- /dev/null
+++ b/src/main/java/gtnhlanth/common/beamline/BeamLinePacket.java
@@ -0,0 +1,51 @@
+package gtnhlanth.common.beamline;
+
+import net.minecraft.nbt.NBTTagCompound;
+
+import tectech.mechanics.dataTransport.DataPacket;
+
+public class BeamLinePacket extends DataPacket<BeamInformation> {
+
+ public BeamLinePacket(BeamInformation content) {
+ super(content);
+ }
+
+ public BeamLinePacket(NBTTagCompound compound) {
+ super(compound);
+ }
+
+ @Override
+ protected BeamInformation contentFromNBT(NBTTagCompound nbt) {
+ /*
+ * NBTTagCompound compound = nbt.getCompoundTag("beamline");
+ */
+ return new BeamInformation(
+ nbt.getFloat("energy"),
+ nbt.getInteger("rate"),
+ nbt.getInteger("particleId"),
+ nbt.getInteger("focus"));
+ }
+
+ @Override
+ protected NBTTagCompound contentToNBT() {
+
+ NBTTagCompound compound = new NBTTagCompound();
+
+ compound.setFloat("energy", content.getEnergy());
+ compound.setInteger("rate", content.getRate());
+ compound.setInteger("particleId", content.getParticleId());
+ compound.setFloat("focus", content.getFocus());
+
+ return compound;
+ }
+
+ @Override
+ public boolean extraCheck() {
+ return true;
+ }
+
+ @Override
+ protected BeamInformation unifyContentWith(BeamInformation arg0) {
+ throw new NoSuchMethodError("Unavailable to unify beam info data packet");
+ }
+}
diff --git a/src/main/java/gtnhlanth/common/beamline/IConnectsToBeamline.java b/src/main/java/gtnhlanth/common/beamline/IConnectsToBeamline.java
new file mode 100644
index 0000000000..6b9c9785f1
--- /dev/null
+++ b/src/main/java/gtnhlanth/common/beamline/IConnectsToBeamline.java
@@ -0,0 +1,14 @@
+package gtnhlanth.common.beamline;
+
+import net.minecraftforge.common.util.ForgeDirection;
+
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+
+public interface IConnectsToBeamline extends IMetaTileEntity {
+
+ boolean canConnect(ForgeDirection side);
+
+ IConnectsToBeamline getNext(IConnectsToBeamline source);
+
+ boolean isDataInputFacing(ForgeDirection side);
+}
diff --git a/src/main/java/gtnhlanth/common/beamline/MTEBeamlinePipe.java b/src/main/java/gtnhlanth/common/beamline/MTEBeamlinePipe.java
new file mode 100644
index 0000000000..fbfb0eb9c6
--- /dev/null
+++ b/src/main/java/gtnhlanth/common/beamline/MTEBeamlinePipe.java
@@ -0,0 +1,256 @@
+package gtnhlanth.common.beamline;
+
+import static gregtech.api.enums.Dyes.MACHINE_METAL;
+
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.GTMod;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.metatileentity.MetaPipeEntity;
+import gregtech.common.GTClient;
+import gregtech.common.render.GTTextureBuilder;
+
+public class MTEBeamlinePipe extends MetaPipeEntity implements IConnectsToBeamline {
+
+ private static Textures.BlockIcons.CustomIcon pipe;
+
+ private byte connectionCount = 0;
+
+ private boolean active;
+
+ public MTEBeamlinePipe(int id, String name, String nameRegional) {
+ super(id, name, nameRegional, 0);
+ }
+
+ public MTEBeamlinePipe(String name) {
+ super(name, 0);
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide()) {
+ if ((aTick & 31) == 31) {
+ mConnections = 0;
+ connectionCount = 0;
+
+ for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
+ ForgeDirection d1 = dir.getOpposite();
+ TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(dir);
+ if (tTileEntity instanceof IConnectsToBeamline) {
+ if (((IConnectsToBeamline) tTileEntity).canConnect(d1)) {
+ mConnections |= 1 << dir.ordinal();
+ connectionCount++;
+ }
+ } else if (tTileEntity instanceof IGregTechTileEntity) {
+ IMetaTileEntity meta = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity();
+ if (meta instanceof IConnectsToBeamline) {
+ if (((IConnectsToBeamline) meta).canConnect(d1)) {
+ mConnections |= 1 << dir.ordinal();
+ connectionCount++;
+ }
+ }
+ }
+ }
+ }
+ } else if (aBaseMetaTileEntity.isClientSide() && GTClient.changeDetected == 4) {
+ aBaseMetaTileEntity.issueTextureUpdate();
+ }
+ }
+
+ @Override
+ public byte getTileEntityBaseType() {
+ return 7;
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound arg0) {}
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) {
+ return new MTEBeamlinePipe(mName);
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound arg0) {}
+
+ @Override
+ public float getThickNess() {
+ if (GTMod.instance.isClientSide() && GTClient.hideValue == 1) {
+ return 0.0625F;
+ }
+ return 0.5f;
+ }
+
+ @Override
+ public boolean renderInside(ForgeDirection arg0) {
+ return false;
+ }
+
+ @Override
+ public boolean canConnect(ForgeDirection side) {
+ return true;
+ }
+
+ // Largely taken from Tec's DataPipe
+
+ @Override
+ public IConnectsToBeamline getNext(IConnectsToBeamline source) {
+
+ for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
+
+ if ((mConnections & 1 << dir.ordinal()) == 0) {
+ continue;
+ }
+
+ TileEntity next = this.getBaseMetaTileEntity()
+ .getTileEntityAtSide(dir);
+ if (next instanceof IConnectsToBeamline && next != source) {
+
+ if (((IConnectsToBeamline) next).isDataInputFacing(dir.getOpposite())) {
+ return (IConnectsToBeamline) next;
+ }
+
+ } else if (next instanceof IGregTechTileEntity) {
+
+ IMetaTileEntity meta = ((IGregTechTileEntity) next).getMetaTileEntity();
+ if (meta instanceof IConnectsToBeamline && meta != source) {
+
+ if (meta instanceof MTEBeamlinePipe && (((MTEBeamlinePipe) meta).connectionCount == 2)) {
+
+ ((MTEBeamlinePipe) meta).markUsed();
+ return (IConnectsToBeamline) meta;
+ }
+
+ if (((IConnectsToBeamline) meta).isDataInputFacing(dir.getOpposite())) {
+
+ return (IConnectsToBeamline) meta;
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister aBlockIconRegister) {
+ pipe = new Textures.BlockIcons.CustomIcon("iconsets/pipe");
+ super.registerIcons(aBlockIconRegister);
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection aSide, int aConnections,
+ int aColorIndex, boolean aConnected, boolean aRedstone) {
+ return new ITexture[] { new GTTextureBuilder().addIcon(pipe)
+ .build(),
+ new GTTextureBuilder().addIcon(pipe)
+ .setRGBA(Dyes.getModulation((byte) aColorIndex, MACHINE_METAL.getRGBA()))
+ .build() };
+ }
+
+ public void markUsed() {
+ this.active = true;
+ }
+
+ @Override
+ public boolean isDataInputFacing(ForgeDirection side) {
+ return true;
+ }
+
+ @Override
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) {
+ float tSpace = (1f - 0.375f) / 2;
+ float tSide0 = tSpace;
+ float tSide1 = 1f - tSpace;
+ float tSide2 = tSpace;
+ float tSide3 = 1f - tSpace;
+ float tSide4 = tSpace;
+ float tSide5 = 1f - tSpace;
+
+ if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.DOWN) != 0) {
+ tSide0 = tSide2 = tSide4 = 0;
+ tSide3 = tSide5 = 1;
+ }
+ if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.UP) != 0) {
+ tSide2 = tSide4 = 0;
+ tSide1 = tSide3 = tSide5 = 1;
+ }
+ if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.NORTH) != 0) {
+ tSide0 = tSide2 = tSide4 = 0;
+ tSide1 = tSide5 = 1;
+ }
+ if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.SOUTH) != 0) {
+ tSide0 = tSide4 = 0;
+ tSide1 = tSide3 = tSide5 = 1;
+ }
+ if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.WEST) != 0) {
+ tSide0 = tSide2 = tSide4 = 0;
+ tSide1 = tSide3 = 1;
+ }
+ if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.EAST) != 0) {
+ tSide0 = tSide2 = 0;
+ tSide1 = tSide3 = tSide5 = 1;
+ }
+
+ byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections;
+ if ((tConn & 1 << ForgeDirection.DOWN.ordinal()) != 0) {
+ tSide0 = 0f;
+ }
+ if ((tConn & 1 << ForgeDirection.UP.ordinal()) != 0) {
+ tSide1 = 1f;
+ }
+ if ((tConn & 1 << ForgeDirection.NORTH.ordinal()) != 0) {
+ tSide2 = 0f;
+ }
+ if ((tConn & 1 << ForgeDirection.SOUTH.ordinal()) != 0) {
+ tSide3 = 1f;
+ }
+ if ((tConn & 1 << ForgeDirection.WEST.ordinal()) != 0) {
+ tSide4 = 0f;
+ }
+ if ((tConn & 1 << ForgeDirection.EAST.ordinal()) != 0) {
+ tSide5 = 1f;
+ }
+
+ return AxisAlignedBB
+ .getBoundingBox(aX + tSide4, aY + tSide0, aZ + tSide2, aX + tSide5, aY + tSide1, aZ + tSide3);
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] { StatCollector.translateToLocal("beamline.pipe.desc.0"), // Beamline pipe
+ EnumChatFormatting.AQUA + StatCollector.translateToLocal("beamline.pipe.desc.1"), // Does not cross, split
+ // or turn
+ "Added by " + EnumChatFormatting.GREEN + "GTNH: Lanthanides"
+
+ };
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side,
+ ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side,
+ ItemStack aStack) {
+ return false;
+ }
+}
diff --git a/src/main/java/gtnhlanth/common/beamline/Particle.java b/src/main/java/gtnhlanth/common/beamline/Particle.java
new file mode 100644
index 0000000000..856bb383db
--- /dev/null
+++ b/src/main/java/gtnhlanth/common/beamline/Particle.java
@@ -0,0 +1,71 @@
+package gtnhlanth.common.beamline;
+
+import net.minecraft.util.StatCollector;
+
+public enum Particle {
+
+ ELECTRON(true, 0, 0.511f, 5000, "electron", "e\u207B", -1, null),
+ PHOTON(false, 1, 0, 0, "photon", "\u03B3", 0, null),
+ NEUTRON(false, 2, 939.57f, 15000, "neutron", "n\u2070", 0, null),
+ PROTON(true, 3, 938.27f, 15000, "proton", "p\u207A", 1, null),
+ ALPHA(true, 4, 3727.38f, 8000, "alpha", "\u03B1", 2, null);
+
+ private boolean canAcc;
+
+ private float restMass; // in MeV
+
+ private float maxSourceEnergy; // in keV
+
+ private String name;
+ private String shortName;
+
+ private float charge; // in multiples of elemental charge
+
+ private String chargeSpecial;
+
+ private Particle(boolean canAcc, int id, float restMass, float maxSourceEnergy, String name, String shortName,
+ float charge, String chargeSpecial) { // ID
+ // is
+ // symbolic
+ // only
+ this.canAcc = canAcc;
+ this.restMass = restMass;
+ this.maxSourceEnergy = maxSourceEnergy;
+ this.name = name;
+ this.shortName = shortName;
+ this.charge = charge;
+ this.chargeSpecial = chargeSpecial;
+ }
+
+ public float getMass() {
+ return this.restMass;
+ }
+
+ public float getCharge() {
+ return this.charge;
+ }
+
+ public String getChargeSpecial() {
+ return this.chargeSpecial;
+ }
+
+ public boolean canAccelerate() {
+ return this.canAcc;
+ }
+
+ public float maxSourceEnergy() {
+ return this.maxSourceEnergy;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public String getLocalisedName() {
+ return StatCollector.translateToLocal("particle." + this.name) + " (" + this.shortName + ")";
+ }
+
+ public static Particle getParticleFromId(int id) {
+ return Particle.values()[id];
+ }
+}