diff options
author | NotAPenguin <michiel.vandeginste@gmail.com> | 2024-09-02 23:17:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-02 23:17:17 +0200 |
commit | 1b820de08a05070909a267e17f033fcf58ac8710 (patch) | |
tree | 02831a025986a06b20f87e5bcc69d1e0c639a342 /src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java | |
parent | afd3fd92b6a6ab9ab0d0dc3214e6bc8ff7a86c9b (diff) | |
download | GT5-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/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java')
-rw-r--r-- | src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java b/src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java new file mode 100644 index 0000000000..cfea9b7b28 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java @@ -0,0 +1,186 @@ +package gregtech.common.covers.redstone; + +import java.util.Arrays; +import java.util.UUID; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.covers.CoverLiquidMeter; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerNumericWidget; +import io.netty.buffer.ByteBuf; + +public class CoverWirelessFluidDetector + extends CoverAdvancedRedstoneTransmitterBase<CoverWirelessFluidDetector.FluidTransmitterData> { + + public CoverWirelessFluidDetector(ITexture coverTexture) { + super(FluidTransmitterData.class, coverTexture); + } + + @Override + public FluidTransmitterData createDataObject() { + return new FluidTransmitterData(); + } + + @Override + public FluidTransmitterData createDataObject(int aLegacyData) { + return createDataObject(); + } + + @Override + public FluidTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + FluidTransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + final byte signal = CoverLiquidMeter + .computeSignalBasedOnFluid(aTileEntity, aCoverVariable.invert, aCoverVariable.threshold); + final long hash = hashCoverCoords(aTileEntity, side); + setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); + + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, FluidTransmitterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, + FluidTransmitterData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + public static class FluidTransmitterData extends CoverAdvancedRedstoneTransmitterBase.TransmitterData { + + /** The special value {@code 0} means threshold check is disabled. */ + private int threshold; + + public FluidTransmitterData(int frequency, UUID uuid, boolean invert, int threshold) { + super(frequency, uuid, invert); + this.threshold = threshold; + } + + public FluidTransmitterData() { + super(); + this.threshold = 0; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new FluidTransmitterData(frequency, uuid, invert, threshold); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); + tag.setInteger("threshold", threshold); + + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + super.writeToByteBuf(aBuf); + aBuf.writeInt(threshold); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + super.loadDataFromNBT(aNBT); + + NBTTagCompound tag = (NBTTagCompound) aNBT; + threshold = tag.getInteger("threshold"); + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + super.readFromPacket(aBuf, aPlayer); + threshold = aBuf.readInt(); + + return this; + } + } + + // GUI stuff + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new WirelessFluidDetectorUIFactory(buildContext).createWindow(); + } + + private class WirelessFluidDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { + + private int maxCapacity; + + public WirelessFluidDetectorUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected int getFrequencyRow() { + return 0; + } + + @Override + protected int getButtonRow() { + return 1; + } + + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + setMaxCapacity(); + super.addUIWidgets(builder); + builder.widget( + new TextWidget(GTUtility.trans("222", "Fluid threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5, 4 + startY + spaceY * 2)); + } + + @Override + protected void addUIForDataController(CoverDataControllerWidget<FluidTransmitterData> controller) { + super.addUIForDataController(controller); + controller.addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) coverData.threshold, + (coverData, state) -> { + coverData.threshold = state.intValue(); + return coverData; + }, + widget -> widget.setBounds(0, maxCapacity > 0 ? maxCapacity : Integer.MAX_VALUE) + .setScrollValues(1000, 144, 100000) + .setFocusOnGuiOpen(true) + .setPos(1, 2 + spaceY * 2) + .setSize(spaceX * 5 - 4, 12)); + } + + private void setMaxCapacity() { + final ICoverable tile = getUIBuildContext().getTile(); + if (!tile.isDead() && tile instanceof IFluidHandler) { + FluidTankInfo[] tanks = ((IFluidHandler) tile).getTankInfo(ForgeDirection.UNKNOWN); + maxCapacity = Arrays.stream(tanks) + .mapToInt(tank -> tank.capacity) + .sum(); + } else { + maxCapacity = -1; + } + } + } +} |