diff options
| author | NotAPenguin <michiel.vandeginste@gmail.com> | 2024-07-18 17:08:27 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-18 22:08:27 +0700 |
| commit | 11a2735b633623cb6a754247c4f42ff14810b38b (patch) | |
| tree | 1ff7c3e4c11a437f80d410e0800b3b2e5521417f /src/main/java | |
| parent | e3a650785887866e4b8533b61044479ecb80aee7 (diff) | |
| download | GT5-Unofficial-11a2735b633623cb6a754247c4f42ff14810b38b.tar.gz GT5-Unofficial-11a2735b633623cb6a754247c4f42ff14810b38b.tar.bz2 GT5-Unofficial-11a2735b633623cb6a754247c4f42ff14810b38b.zip | |
Add wireless computation and data stick hatches (#2724)
* start on wireless computation
* initial implementation of wireless computation hatch
* Implement wireless data sticks
* Fix wireless computation by simplifying the implementation greatly
* Delete dead code
* Add scanner output for wireless computation in network
* Rename wireless computation hatch to cloud hatch
* Final rename to client/server
Diffstat (limited to 'src/main/java')
14 files changed, 912 insertions, 21 deletions
diff --git a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java index 13681d2637..ecbe748705 100644 --- a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java @@ -59,9 +59,13 @@ import static com.github.technus.tectech.thing.CustomItemList.Uncertainty_Hatch; import static com.github.technus.tectech.thing.CustomItemList.UnusedStuff; import static com.github.technus.tectech.thing.CustomItemList.capacitor_Hatch; import static com.github.technus.tectech.thing.CustomItemList.dataInAss_Hatch; +import static com.github.technus.tectech.thing.CustomItemList.dataInAss_Wireless_Hatch; import static com.github.technus.tectech.thing.CustomItemList.dataIn_Hatch; +import static com.github.technus.tectech.thing.CustomItemList.dataIn_Wireless_Hatch; import static com.github.technus.tectech.thing.CustomItemList.dataOutAss_Hatch; +import static com.github.technus.tectech.thing.CustomItemList.dataOutAss_Wireless_Hatch; import static com.github.technus.tectech.thing.CustomItemList.dataOut_Hatch; +import static com.github.technus.tectech.thing.CustomItemList.dataOut_Wireless_Hatch; import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_EV; import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_IV; import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_LuV; @@ -318,7 +322,11 @@ import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_H import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_ParamText; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Rack; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Uncertainty; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessComputation_Input; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessComputation_Output; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessInputDataItems; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessMulti; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessOutputDataItems; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_EyeOfHarmony; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_ForgeOfGods; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_computer; @@ -1929,7 +1937,30 @@ public class MachineLoader implements Runnable { "hatch.dataoutass.tier.07", "Data Bank Master Connector", 7).getStackForm(1L)); - + dataOut_Wireless_Hatch.set( + new GT_MetaTileEntity_Hatch_WirelessComputation_Output( + 15444, + "hatch.dataout.wireless.tier.12", + "Cloud Computation Server Hatch", + 12).getStackForm(1L)); + dataIn_Wireless_Hatch.set( + new GT_MetaTileEntity_Hatch_WirelessComputation_Input( + 15445, + "hatch.datain.wireless.tier.12", + "Cloud Computation Client Hatch", + 12).getStackForm(1L)); + dataInAss_Wireless_Hatch.set( + new GT_MetaTileEntity_Hatch_WirelessInputDataItems( + 15446, + "hatch.datainass.wireless.tier.12", + "Wireless Assembly line Slave Connector", + 12).getStackForm(1L)); + dataOutAss_Wireless_Hatch.set( + new GT_MetaTileEntity_Hatch_WirelessOutputDataItems( + 15447, + "hatch.dataoutass.wireless.tier.12", + "Wireless Data Bank Master Connector", + 12).getStackForm(1L)); rack_Hatch .set(new GT_MetaTileEntity_Hatch_Rack(15450, "hatch.rack.tier.08", "Computer Rack", 8).getStackForm(1L)); holder_Hatch.set( diff --git a/src/main/java/com/github/technus/tectech/thing/CustomItemList.java b/src/main/java/com/github/technus/tectech/thing/CustomItemList.java index a45e342050..4e10eaa74f 100644 --- a/src/main/java/com/github/technus/tectech/thing/CustomItemList.java +++ b/src/main/java/com/github/technus/tectech/thing/CustomItemList.java @@ -309,6 +309,10 @@ public enum CustomItemList implements IItemContainer { UncertaintyX_Hatch, dataIn_Hatch, dataOut_Hatch, + dataOut_Wireless_Hatch, + dataIn_Wireless_Hatch, + dataInAss_Wireless_Hatch, + dataOutAss_Wireless_Hatch, dataInAss_Hatch, dataOutAss_Hatch, eM_Containment, diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java index 50e9eebd76..9fc12e6ac5 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java @@ -10,6 +10,10 @@ import static net.minecraft.util.StatCollector.translateToLocal; import static net.minecraft.util.StatCollector.translateToLocalFormatted; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -200,6 +204,13 @@ public class GT_MetaTileEntity_Hatch_InputDataItems extends GT_MetaTileEntity_Ha } @Override + public List<ItemStack> getInventoryItems(Predicate<ItemStack> filter) { + return Arrays.stream(stacks) + .filter(stack -> stack != null && filter.test(stack)) + .collect(Collectors.toList()); + } + + @Override public boolean shouldDropItemAt(int index) { return false; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Input.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Input.java new file mode 100644 index 0000000000..c29a5320dd --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Input.java @@ -0,0 +1,139 @@ +package com.github.technus.tectech.thing.metaTileEntity.hatch; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import com.github.technus.tectech.thing.gui.TecTechUITextures; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; + +import gregtech.api.gui.modularui.GT_UIInfos; +import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.common.WirelessComputationPacket; + +public class GT_MetaTileEntity_Hatch_WirelessComputation_Input extends GT_MetaTileEntity_Hatch_InputData + implements IAddGregtechLogo, IAddUIWidgets { + + public long requiredComputation = 10000; + + private String clientLocale = "en_US"; + + public GT_MetaTileEntity_Hatch_WirelessComputation_Input(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public GT_MetaTileEntity_Hatch_WirelessComputation_Input(String aName, int aTier, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new GT_MetaTileEntity_Hatch_WirelessComputation_Input(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + if (!aPlayer.isUsingItem()) { + GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + } + return super.onRightclick(aBaseMetaTileEntity, aPlayer); + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean canConnectData(ForgeDirection side) { + return false; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && q == null) { + q = WirelessComputationPacket.downloadData(aBaseMetaTileEntity.getOwnerUuid(), requiredComputation, aTick); + } + + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + } + + @Override + public boolean useModularUI() { + return true; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO) + .setSize(18, 18) + .setPos(151, 63)); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + requiredComputation = aNBT.getLong("requiredComputation"); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setLong("requiredComputation", requiredComputation); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + TextWidget.localised("tt.wirelessInputData.config.text") + .setPos(20, 12) + .setSize(140, 14)) + .widget( + new TextFieldWidget().setSetterInt(val -> requiredComputation = val) + .setGetterLong(() -> requiredComputation) + .setNumbers(1, Integer.MAX_VALUE) + .setOnScrollNumbers(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(70, 18) + .setPos(54, 36) + .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)); + } + + private static String[] tooltips; + + @Override + public String[] getDescription() { + if (tooltips == null) { + tooltips = new String[] { "Wireless Computation Data Input for Multiblocks" }; + } + return tooltips; + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Output.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Output.java new file mode 100644 index 0000000000..6e09554acd --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Output.java @@ -0,0 +1,61 @@ +package com.github.technus.tectech.thing.metaTileEntity.hatch; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.common.WirelessComputationPacket; + +public class GT_MetaTileEntity_Hatch_WirelessComputation_Output extends GT_MetaTileEntity_Hatch_OutputData { + + public GT_MetaTileEntity_Hatch_WirelessComputation_Output(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + + } + + public GT_MetaTileEntity_Hatch_WirelessComputation_Output(String aName, int aTier, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new GT_MetaTileEntity_Hatch_WirelessComputation_Output(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean canConnectData(ForgeDirection side) { + return false; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && q != null) { + WirelessComputationPacket.uploadData(aBaseMetaTileEntity.getOwnerUuid(), q.getContent(), aTick); + q = null; + } + } + + private static String[] tooltips; + + @Override + public String[] getDescription() { + if (tooltips == null) { + tooltips = new String[] { "Wireless Computation Output for Multiblocks" }; + } + return tooltips; + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessInputDataItems.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessInputDataItems.java new file mode 100644 index 0000000000..15f4b1f988 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessInputDataItems.java @@ -0,0 +1,146 @@ +package com.github.technus.tectech.thing.metaTileEntity.hatch; + +import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_ACTIVE; +import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_CONN; +import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_SIDES; +import static gregtech.api.enums.Dyes.MACHINE_METAL; +import static net.minecraft.util.StatCollector.translateToLocal; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.TT_Utility; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_DataAccess; +import gregtech.api.objects.GT_RenderedTexture; +import gregtech.common.WirelessDataStore; + +public class GT_MetaTileEntity_Hatch_WirelessInputDataItems extends GT_MetaTileEntity_Hatch_DataAccess { + + private String clientLocale = "en_US"; + + public GT_MetaTileEntity_Hatch_WirelessInputDataItems(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + TT_Utility.setTier(aTier, this); + } + + public GT_MetaTileEntity_Hatch_WirelessInputDataItems(String aName, int aTier, String aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public GT_MetaTileEntity_Hatch_WirelessInputDataItems(String aName, int aTier, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new GT_MetaTileEntity_Hatch_WirelessInputDataItems( + this.mName, + this.mTier, + mDescriptionArray, + this.mTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GT_RenderedTexture( + EM_D_ACTIVE, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GT_RenderedTexture(EM_D_CONN) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GT_RenderedTexture( + EM_D_SIDES, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GT_RenderedTexture(EM_D_CONN) }; + } + + @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; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + return true; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public String[] getDescription() { + return new String[] { CommonValues.TEC_MARK_EM, + translateToLocal("gt.blockmachines.hatch.datainasswireless.desc.0"), + translateToLocal("gt.blockmachines.hatch.datainasswireless.desc.1"), }; + } + + @Override + public List<ItemStack> getInventoryItems(Predicate<ItemStack> filter) { + WirelessDataStore wirelessData = WirelessDataStore + .getWirelessDataSticks(getBaseMetaTileEntity().getOwnerUuid()); + return wirelessData.downloadData() + .stream() + .filter(stack -> stack != null && filter.test(stack)) + .collect(Collectors.toList()); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return new String[] { translateToLocalFormatted("tt.keyphrase.Content_Stack_Count", clientLocale) + ": " + + getInventoryItems(_stack -> true).size() }; + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessOutputDataItems.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessOutputDataItems.java new file mode 100644 index 0000000000..02b8ef182f --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessOutputDataItems.java @@ -0,0 +1,148 @@ +package com.github.technus.tectech.thing.metaTileEntity.hatch; + +import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_ACTIVE; +import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_CONN; +import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_SIDES; +import static gregtech.api.enums.Dyes.MACHINE_METAL; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.Arrays; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.TT_Utility; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.objects.GT_RenderedTexture; +import gregtech.common.WirelessDataStore; + +public class GT_MetaTileEntity_Hatch_WirelessOutputDataItems extends GT_MetaTileEntity_Hatch { + + public InventoryDataPacket dataPacket = null; + + public boolean uploadedSinceReset = false; + + public GT_MetaTileEntity_Hatch_WirelessOutputDataItems(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { CommonValues.TEC_MARK_EM, + translateToLocal("gt.blockmachines.hatch.wirelessdataoutass.desc.0"), + translateToLocal("gt.blockmachines.hatch.wirelessdataoutass.desc.1"), }); + TT_Utility.setTier(aTier, this); + } + + public GT_MetaTileEntity_Hatch_WirelessOutputDataItems(String aName, int aTier, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new GT_MetaTileEntity_Hatch_WirelessOutputDataItems( + this.mName, + this.mTier, + this.mDescriptionArray, + this.mTextures); + } + + @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; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (dataPacket != null) { + aNBT.setTag("eDATA", dataPacket.toNbt()); + } + aNBT.setBoolean("uploadedSinceReset", uploadedSinceReset); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("eDATA")) { + dataPacket = new InventoryDataPacket(aNBT.getCompoundTag("eDATA")); + } + if (aNBT.hasKey("uploadedSinceReset")) { + uploadedSinceReset = aNBT.getBoolean("uploadedSinceReset"); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + // Upload data packet and mark it as uploaded, so it will not be uploaded again + // until the data bank resets the wireless network + if (dataPacket != null && !uploadedSinceReset) { + WirelessDataStore wirelessDataStore = WirelessDataStore + .getWirelessDataSticks(getBaseMetaTileEntity().getOwnerUuid()); + wirelessDataStore.uploadData(Arrays.asList(dataPacket.getContent())); + uploadedSinceReset = true; + } + } + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GT_RenderedTexture( + EM_D_ACTIVE, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GT_RenderedTexture(EM_D_CONN) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GT_RenderedTexture( + EM_D_SIDES, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GT_RenderedTexture(EM_D_CONN) }; + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java index 1be94b4333..12b69eeb47 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java @@ -18,12 +18,14 @@ import static gregtech.api.util.GT_Utility.filterValidMTEs; import static net.minecraft.util.StatCollector.translateToLocal; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import javax.annotation.Nonnull; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -37,6 +39,7 @@ import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Rack; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessComputation_Output; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; @@ -62,8 +65,10 @@ import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.recipe.check.SimpleCheckRecipeResult; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Utility; import gregtech.api.util.IGT_HatchAdder; import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.common.WirelessComputationPacket; /** * Created by danie_000 on 17.12.2016. @@ -74,6 +79,8 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB // region variables private final ArrayList<GT_MetaTileEntity_Hatch_Rack> eRacks = new ArrayList<>(); + private final ArrayList<GT_MetaTileEntity_Hatch_WirelessComputation_Output> eWirelessComputationOutputs = new ArrayList<>(); + private static Textures.BlockIcons.CustomIcon ScreenOFF; private static Textures.BlockIcons.CustomIcon ScreenON; // endregion @@ -103,7 +110,8 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB Energy.or(HatchElement.EnergyMulti), Maintenance, HatchElement.Uncertainty, - HatchElement.OutputData) + HatchElement.OutputData, + WirelessComputationHatchElement.INSTANCE) .casingIndex(textureOffset + 1) .dot(1) .buildAndChain(ofBlock(sBlockCasingsTT, 1))) @@ -115,6 +123,8 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB protected Parameters.Group.ParameterIn overclock, overvolt; protected Parameters.Group.ParameterOut maxCurrentTemp, availableData; + private boolean wirelessModeEnabled = false; + private static final INameFunction<GT_MetaTileEntity_EM_computer> OC_NAME = (base, p) -> translateToLocal("gt.blockmachines.multimachine.em.computer.cfgi.0"); // Overclock ratio private static final INameFunction<GT_MetaTileEntity_EM_computer> OV_NAME = (base, @@ -208,6 +218,7 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB public void saveNBTData(NBTTagCompound aNBT) { super.saveNBTData(aNBT); aNBT.setDouble("computation", availableData.get()); + aNBT.setBoolean("wirelessModeEnabled", wirelessModeEnabled); } @Override @@ -217,6 +228,22 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB availableData.set(aNBT.getDouble("computation")); eAvailableData = (long) availableData.get(); } + if (aNBT.hasKey("wirelessModeEnabled")) { + wirelessModeEnabled = aNBT.getBoolean("wirelessModeEnabled"); + if (wirelessModeEnabled) { + WirelessComputationPacket.enableWirelessNetWork(getBaseMetaTileEntity()); + } + } else { + wirelessModeEnabled = false; + } + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && wirelessModeEnabled && aTick % 20 == 0) { + WirelessComputationPacket.updatePacket(aBaseMetaTileEntity, aTick); + } } @Override @@ -307,7 +334,7 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB getBaseMetaTileEntity().getYCoord(), getBaseMetaTileEntity().getZCoord()); - QuantumDataPacket pack = new QuantumDataPacket(eAvailableData / eOutputData.size()).unifyTraceWith(pos); + QuantumDataPacket pack = new QuantumDataPacket(eAvailableData / (eOutputData.size())).unifyTraceWith(pos); if (pack == null) { return; } @@ -336,6 +363,8 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB // the Quantum Computer .addInfo(translateToLocal("gt.blockmachines.multimachine.em.computer.desc.1")) // Used to generate // computation (and heat) + .addInfo(translateToLocal("gt.blockma |
