From e27760ff6d7cc376920cfa9be51d7c7b19d77f8e Mon Sep 17 00:00:00 2001 From: MartinSVK12 <37455793+MartinSVK12@users.noreply.github.com> Date: Sun, 22 Oct 2023 17:29:32 +0200 Subject: [PATCH] Continued work on the Signalum Reactor. --- build.gradle | 11 +- settings.gradle | 8 +- .../signalindustries/SignalIndustries.java | 58 +++++- .../signalindustries/api/impl/itempipes.rar | Bin 0 -> 14638 bytes .../blocks/BlockDilithiumStabilizer.java | 17 +- .../blocks/BlockDimensionalAnchor.java | 1 - .../blocks/BlockInputBus.java | 14 +- .../blocks/BlockOutputBus.java | 14 +- .../blocks/BlockSignalumReactorCore.java | 7 +- ...ontainerBus.java => ContainerItemBus.java} | 7 +- .../signalindustries/gui/GuiFluidHatch.java | 8 +- .../gui/GuiFluidIOConfig.java | 7 + .../gui/{GuiBus.java => GuiItemBus.java} | 16 +- .../gui/GuiSignalumReactor.java | 35 +++- .../interfaces/IMultiblockPart.java | 11 ++ .../inventories/TileEntityBus.java | 20 -- .../inventories/TileEntityConduit.java | 9 +- .../TileEntityDimensionalAnchor.java | 14 +- .../TileEntityEnergyConnector.java | 33 +++- .../inventories/TileEntityFluidConduit.java | 3 + .../inventories/TileEntityIgnitor.java | 40 ++-- .../inventories/TileEntityItemBus.java | 40 ++++ .../TileEntitySignalumReactor.java | 179 +++++++++++++++++- .../inventories/TileEntityStabilizer.java | 56 ++++-- .../mixin/BlockFluidMixin.java | 32 ++++ .../mixin/ChunkDecoratorOverworldMixin.java | 6 +- .../mixin/MinecraftMixin.java | 2 +- .../render/RenderSignalumReactor.java | 35 ++++ .../util/BlockDataExporter.java | 68 +++++++ .../block/signalum_energy_transparent.png | Bin 0 -> 757 bytes .../gui/signalum_reactor_ui.png | Bin 0 -> 571 bytes .../structures/dimensionalAnchor.nbt | Bin 436 -> 764 bytes .../structures/dimensionalAnchorOld.nbt | Bin 0 -> 436 bytes .../structures/signalumReactor.nbt | Bin 0 -> 1698 bytes .../signalindustries/structures/test.nbt | Bin 0 -> 325 bytes .../lang/signalindustries/en_US.lang | 22 ++- .../resources/signalindustries.mixins.json | 1 + 37 files changed, 651 insertions(+), 123 deletions(-) create mode 100644 src/main/java/sunsetsatellite/signalindustries/api/impl/itempipes.rar rename src/main/java/sunsetsatellite/signalindustries/containers/{ContainerBus.java => ContainerItemBus.java} (75%) rename src/main/java/sunsetsatellite/signalindustries/gui/{GuiBus.java => GuiItemBus.java} (86%) create mode 100644 src/main/java/sunsetsatellite/signalindustries/interfaces/IMultiblockPart.java delete mode 100644 src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityBus.java create mode 100644 src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityItemBus.java create mode 100644 src/main/java/sunsetsatellite/signalindustries/mixin/BlockFluidMixin.java create mode 100644 src/main/java/sunsetsatellite/signalindustries/render/RenderSignalumReactor.java create mode 100644 src/main/java/sunsetsatellite/signalindustries/util/BlockDataExporter.java create mode 100644 src/main/resources/assets/signalindustries/block/signalum_energy_transparent.png create mode 100644 src/main/resources/assets/signalindustries/gui/signalum_reactor_ui.png create mode 100644 src/main/resources/assets/signalindustries/structures/dimensionalAnchorOld.nbt create mode 100644 src/main/resources/assets/signalindustries/structures/signalumReactor.nbt create mode 100644 src/main/resources/assets/signalindustries/structures/test.nbt diff --git a/build.gradle b/build.gradle index 5abd8979..e73f9e5e 100644 --- a/build.gradle +++ b/build.gradle @@ -106,6 +106,7 @@ repositories { } dependencies { + minecraft "bta-download-repo:bta:${project.bta_version}" mappings loom.layered() {} @@ -117,14 +118,12 @@ dependencies { modImplementation "bta-halplibe:halplibe:${project.halplibe_version}" modImplementation "ModMenu:ModMenu:2.0.0" - modImplementation "fluidapi:fluidapi:1.7.1" - modImplementation "sunsetutils:sunsetutils:1.8.2" + //modImplementation "fluidapi:fluidapi:1.7.1" + implementation project(path: ":fluidapi", configuration: "namedElements") + implementation project(path: ":sunsetutils", configuration: "namedElements") + implementation project(path: ":energyapi", configuration: "namedElements") modImplementation "guidebookpp:guidebookpp:1.5.6" modImplementation "BTWaila:btwaila:0.2.2" - modImplementation "energyapi:energyapi:1.1.5" - modImplementation "potato-logistics:PotatoLogistics:0.1.4" - - //modImplementation files("C:\\Users\\sunsetsatellite\\Projects\\BTA\\SignalIndustries\\PotatoLogistics-0.1.2.jar") //modImplementation "retrostorage:retrostorage:1.2.0" implementation "org.slf4j:slf4j-api:1.8.0-beta4" diff --git a/settings.gradle b/settings.gradle index 882a4c13..097a5092 100644 --- a/settings.gradle +++ b/settings.gradle @@ -18,4 +18,10 @@ pluginManagement { url = 'https://maven.quiltmc.org/repository/release' } } -} \ No newline at end of file +} +include(":sunsetutils") +include(":fluidapi") +include(":energyapi") +project(':sunsetutils').projectDir = new File("C:\\Users\\sunsetsatellite\\Projects\\BTA\\1.7.7.0\\sunsetutils") +project(':fluidapi').projectDir = new File("C:\\Users\\sunsetsatellite\\Projects\\BTA\\1.7.7.0\\fluidapi") +project(':energyapi').projectDir = new File("C:\\Users\\sunsetsatellite\\Projects\\BTA\\1.7.7.0\\energyapi") \ No newline at end of file diff --git a/src/main/java/sunsetsatellite/signalindustries/SignalIndustries.java b/src/main/java/sunsetsatellite/signalindustries/SignalIndustries.java index 4eee2235..5dbf88f6 100644 --- a/src/main/java/sunsetsatellite/signalindustries/SignalIndustries.java +++ b/src/main/java/sunsetsatellite/signalindustries/SignalIndustries.java @@ -51,10 +51,8 @@ import sunsetsatellite.signalindustries.render.RenderAutoMiner; import sunsetsatellite.signalindustries.render.RenderFluidInBlock; import sunsetsatellite.signalindustries.render.RenderFluidInConduit; -import sunsetsatellite.signalindustries.util.AttachmentPoint; -import sunsetsatellite.signalindustries.util.BlockTexture; -import sunsetsatellite.signalindustries.util.Mode; -import sunsetsatellite.signalindustries.util.Tier; +import sunsetsatellite.signalindustries.render.RenderSignalumReactor; +import sunsetsatellite.signalindustries.util.*; import sunsetsatellite.signalindustries.weather.WeatherBloodMoon; import sunsetsatellite.signalindustries.weather.WeatherEclipse; import sunsetsatellite.signalindustries.weather.WeatherSolarApocalypse; @@ -245,11 +243,44 @@ public class SignalIndustries implements ModInitializer { .setTextures("reinforced_energy_connector.png") .build(new BlockEnergyConnector("reinforced.energyConnector",config.getFromConfig("reinforcedEnergyConnector",availableBlockId++),Tier.REINFORCED,Material.metal)); + public static final Block reinforcedFluidInputHatch = new BlockBuilder(MOD_ID) + .setBlockSound(BlockSounds.METAL) + .setHardness(5) + .setResistance(20) + .setLuminance(0) + .setTextures("reinforced_fluid_input_hatch.png") + .build(new BlockFluidInputHatch("reinforced.fluidInputHatch",config.getFromConfig("reinforcedFluidInputHatch",availableBlockId++),Tier.REINFORCED,Material.metal)); + + public static final Block reinforcedFluidOutputHatch = new BlockBuilder(MOD_ID) + .setBlockSound(BlockSounds.METAL) + .setHardness(5) + .setResistance(20) + .setLuminance(0) + .setTextures("reinforced_fluid_output_hatch.png") + .build(new BlockFluidOutputHatch("reinforced.fluidOutputHatch",config.getFromConfig("reinforcedFluidOutputHatch",availableBlockId++),Tier.REINFORCED,Material.metal)); + + public static final Block reinforcedItemInputBus = new BlockBuilder(MOD_ID) + .setBlockSound(BlockSounds.METAL) + .setHardness(5) + .setResistance(20) + .setLuminance(0) + .setTextures("reinforced_input_bus.png") + .build(new BlockInputBus("reinforced.itemInputBus",config.getFromConfig("reinforcedItemInputBus",availableBlockId++),Tier.REINFORCED,Material.metal)); + + public static final Block reinforcedItemOutputBus = new BlockBuilder(MOD_ID) + .setBlockSound(BlockSounds.METAL) + .setHardness(5) + .setResistance(20) + .setLuminance(0) + .setTextures("reinforced_output_bus.png") + .build(new BlockOutputBus("reinforced.itemOutputBus",config.getFromConfig("reinforcedItemOutputBus",availableBlockId++),Tier.REINFORCED,Material.metal)); + + //this has to be after any other block - public static final int[] energyTex = TextureHelper.registerBlockTexture(MOD_ID,"signalum_energy.png"); + public static final int[] energyTex = TextureHelper.registerBlockTexture(MOD_ID,"signalum_energy_transparent.png"); public static final int[] burntSignalumTex = TextureHelper.registerBlockTexture(MOD_ID,"burnt_signalum.png");//registerFluidTexture(MOD_ID,"signalum_energy.png",0,4); - public static final Block energyFlowing = BlockHelper.createBlock(MOD_ID,new BlockFluidFlowing(key("signalumEnergy"),config.getFromConfig("signalumEnergy",availableBlockId++),Material.water),"signalum_energy.png",BlockSounds.DEFAULT,1.0f,1.0f,0).withTexCoords(energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1]).withTags(BlockTags.NOT_IN_CREATIVE_MENU,BlockTags.PLACE_OVERWRITES); - public static final Block energyStill = BlockHelper.createBlock(MOD_ID,new BlockFluidStill(key("signalumEnergy"),config.getFromConfig("signalumEnergy",availableBlockId++),Material.water),"signalum_energy.png",BlockSounds.DEFAULT,1.0f,1.0f,0).withTexCoords(energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1]).withTags(BlockTags.NOT_IN_CREATIVE_MENU,BlockTags.PLACE_OVERWRITES); + public static final Block energyFlowing = BlockHelper.createBlock(MOD_ID,new BlockFluidFlowing(key("signalumEnergy"),config.getFromConfig("signalumEnergy",availableBlockId++),Material.water),"signalum_energy_transparent.png",BlockSounds.DEFAULT,1.0f,1.0f,0).withTexCoords(energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1]).withTags(BlockTags.NOT_IN_CREATIVE_MENU,BlockTags.PLACE_OVERWRITES); + public static final Block energyStill = BlockHelper.createBlock(MOD_ID,new BlockFluidStill(key("signalumEnergy"),config.getFromConfig("signalumEnergy",availableBlockId++),Material.water),"signalum_energy_transparent.png",BlockSounds.DEFAULT,1.0f,1.0f,0).withTexCoords(energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1],energyTex[0],energyTex[1]).withTags(BlockTags.NOT_IN_CREATIVE_MENU,BlockTags.PLACE_OVERWRITES); public static final Block burntSignalumFlowing = new BlockBuilder(MOD_ID) .setTextures("burnt_signalum.png") @@ -380,6 +411,8 @@ public class SignalIndustries implements ModInitializer { public static final Dimension dimEternity = new Dimension(key("eternity"),Dimension.overworld,1,portalEternity.id).setDefaultWorldType(eternityWorld); public static final Multiblock dimAnchorMultiblock = new Multiblock(MOD_ID,new Class[]{SignalIndustries.class},"dimensionalAnchor","dimensionalAnchor",false); + public static final Multiblock testMultiblock = new Multiblock(MOD_ID,new Class[]{SignalIndustries.class},"test","test",false); + public static final Multiblock signalumReactor = new Multiblock(MOD_ID,new Class[]{SignalIndustries.class},"signalumReactor","signalumReactor",false); public static Map textures = new HashMap<>(); @@ -532,12 +565,18 @@ public SignalIndustries(){ EntityHelper.createTileEntity(TileEntityCentrifuge.class,"Separation Centrifuge"); addToNameGuiMap("Separation Centrifuge", GuiCentrifuge.class, TileEntityCentrifuge.class); - EntityHelper.createTileEntity(TileEntitySignalumReactor.class,"Signalum Reactor"); + EntityHelper.createSpecialTileEntity(TileEntitySignalumReactor.class,new RenderSignalumReactor(),"Signalum Reactor"); addToNameGuiMap("Signalum Reactor", GuiSignalumReactor.class, TileEntitySignalumReactor.class); EntityHelper.createTileEntity(TileEntityEnergyConnector.class,"Energy Connector"); addToNameGuiMap("Energy Connector", GuiEnergyConnector.class, TileEntityEnergyConnector.class); + EntityHelper.createTileEntity(TileEntityItemBus.class,"Item Bus"); + addToNameGuiMap("Item Bus", GuiItemBus.class, TileEntityItemBus.class); + + EntityHelper.createTileEntity(TileEntityFluidHatch.class,"Fluid Hatch"); + addToNameGuiMap("Fluid Hatch", GuiItemBus.class, TileEntityFluidHatch.class); + EntityHelper.createTileEntity(TileEntityIgnitor.class,"Signalum Ignitor"); addToNameGuiMap("The Pulsar", GuiPulsar.class, InventoryPulsar.class); @@ -548,12 +587,15 @@ public SignalIndustries(){ EntityHelper.createTileEntity(TileEntityBlockBreaker.class,"Block Breaker"); Multiblock.multiblocks.put("dimensionalAnchor",dimAnchorMultiblock); + Multiblock.multiblocks.put("test",testMultiblock); + Multiblock.multiblocks.put("signalumReactor",signalumReactor); SignalIndustries.LOGGER.info(String.format("Loaded %d multiblocks..",Multiblock.multiblocks.size())); SignalIndustries.LOGGER.info(String.format("Loaded %d internal structures.", Structure.internalStructures.size())); EntityHelper.createEntity(EntityInfernal.class,new MobRenderer(new ModelZombie(), 0.5F),config.getFromConfig("infernalId",50),"Infernal"); //crafting recipes in RecipeHandlerCraftingSI + BlockDataExporter.export(); } public static Map mapOf(K[] keys, V[] values){ diff --git a/src/main/java/sunsetsatellite/signalindustries/api/impl/itempipes.rar b/src/main/java/sunsetsatellite/signalindustries/api/impl/itempipes.rar new file mode 100644 index 0000000000000000000000000000000000000000..a478fcb1b1fbe50f265b436f8a17eb6d605874c1 GIT binary patch literal 14638 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 { public GuiSignalumReactor(InventoryPlayer inventory, TileEntitySignalumReactor tile) { super(inventory, tile); + xSize = 256; } @Override protected void drawGuiContainerBackgroundLayer(float f) { - + int i2 = this.mc.renderEngine.getTexture("/assets/signalindustries/gui/signalum_reactor_ui.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(i2); + int i3 = (this.width - this.xSize) / 2; + int i4 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i3, i4, 0, 0, this.xSize, this.ySize); } @Override protected void drawGuiContainerForegroundLayer() { - drawStringCentered(fontRenderer,"Testing",0,0,0xFFFF0000); + fontRenderer.drawCenteredString("Signalum Reactor", 128, 6, 0xFFFF0000); + fontRenderer.drawCenteredString("State: "+tile.state,128,20,0xFFFFFFFF); + fontRenderer.drawCenteredString("Fuel: "+tile.getFuel()+"|"+tile.getDepletedFuel(),128,30,0xFFFFFFFF); + } + + @Override + protected void buttonPressed(GuiButton guibutton) { + switch (guibutton.id){ + case 0: + tile.start(); + break; + } + } + + @Override + public boolean doesGuiPauseGame() { + return false; + } + + @Override + public void initGui() + { + controlList.add(new GuiButton(0, Math.round((float) width / 2) - 10, Math.round((float) height / 2) + 50, 20, 20, "S")); + super.initGui(); } } diff --git a/src/main/java/sunsetsatellite/signalindustries/interfaces/IMultiblockPart.java b/src/main/java/sunsetsatellite/signalindustries/interfaces/IMultiblockPart.java new file mode 100644 index 00000000..d076f829 --- /dev/null +++ b/src/main/java/sunsetsatellite/signalindustries/interfaces/IMultiblockPart.java @@ -0,0 +1,11 @@ +package sunsetsatellite.signalindustries.interfaces; + +import net.minecraft.core.block.entity.TileEntity; + +public interface IMultiblockPart { + boolean isConnected(); + + TileEntity getConnectedTileEntity(); + + boolean connect(TileEntity tileEntity); +} diff --git a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityBus.java b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityBus.java deleted file mode 100644 index 059a0792..00000000 --- a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityBus.java +++ /dev/null @@ -1,20 +0,0 @@ -package sunsetsatellite.signalindustries.inventories; - -import net.minecraft.core.item.ItemStack; -import sunsetsatellite.fluidapi.api.FluidStack; - -public class TileEntityBus extends TileEntityTieredContainer{ - - public TileEntityBus(){ - itemContents = new ItemStack[9]; - fluidContents = new FluidStack[0]; - fluidCapacity = new int[0]; - acceptedFluids.clear(); - } - - @Override - public void updateEntity() { - super.updateEntity(); - extractFluids(); - } -} diff --git a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityConduit.java b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityConduit.java index a94e403f..96c01d58 100644 --- a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityConduit.java +++ b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityConduit.java @@ -17,8 +17,13 @@ public TileEntityConduit(){ @Override public void updateEntity() { - fluidCapacity[0] = (int) Math.pow(2,((BlockContainerTiered)getBlockType()).tier.ordinal()) * 1000; - transferSpeed = 20 * (((BlockContainerTiered)getBlockType()).tier.ordinal()+1); + if(fluidContents[0] != null && fluidContents[0].amount < 0){ + fluidContents[0] = null; + } + if(getBlockType() != null){ + fluidCapacity[0] = (int) Math.pow(2,((BlockContainerTiered)getBlockType()).tier.ordinal()) * 1000; + transferSpeed = 20 * (((BlockContainerTiered)getBlockType()).tier.ordinal()+1); + } super.updateEntity(); } diff --git a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityDimensionalAnchor.java b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityDimensionalAnchor.java index 6d273325..894454b5 100644 --- a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityDimensionalAnchor.java +++ b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityDimensionalAnchor.java @@ -3,12 +3,12 @@ import com.mojang.nbt.CompoundTag; import net.minecraft.core.block.BlockFluid; -import net.minecraft.core.block.entity.TileEntity; import net.minecraft.core.item.ItemStack; import sunsetsatellite.fluidapi.api.FluidStack; import sunsetsatellite.signalindustries.SignalIndustries; import sunsetsatellite.signalindustries.entities.EntityColorParticleFX; import sunsetsatellite.signalindustries.interfaces.IStabilizable; +import sunsetsatellite.sunsetutils.util.BlockInstance; import sunsetsatellite.sunsetutils.util.Direction; import sunsetsatellite.sunsetutils.util.Vec3i; import sunsetsatellite.sunsetutils.util.multiblocks.IMultiblock; @@ -40,7 +40,15 @@ public void updateEntity() { speedMultiplier = 1; extractFluids(); stabilizers.clear(); - for (Direction value : Direction.values()) { + Direction dir = Direction.getDirectionFromSide(getBlockMetadata()); + ArrayList tileEntities = multiblock.getTileEntities(worldObj,new Vec3i(xCoord,yCoord,zCoord),dir); + for (BlockInstance tileEntity : tileEntities) { + if(tileEntity.tile instanceof TileEntityStabilizer){ + ((TileEntityStabilizer) tileEntity.tile).connectedTo = this; + stabilizers.add((TileEntityStabilizer) tileEntity.tile); + } + } + /* for (Direction value : Direction.values()) { if(value == Direction.Y_NEG || value == Direction.Y_POS) continue; Vec3i v = value.getVec().multiply(2); Vec3i tileVec = new Vec3i(xCoord,yCoord,zCoord); @@ -50,7 +58,7 @@ public void updateEntity() { stabilizers.add((TileEntityStabilizer) tile); } - } + }*/ boolean update = false; if(fuelBurnTicks > 0){ diff --git a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityEnergyConnector.java b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityEnergyConnector.java index 8fdb1cf9..9ca0d08f 100644 --- a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityEnergyConnector.java +++ b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityEnergyConnector.java @@ -1,11 +1,17 @@ package sunsetsatellite.signalindustries.inventories; import net.minecraft.core.block.BlockFluid; +import net.minecraft.core.block.entity.TileEntity; import net.minecraft.core.item.ItemStack; import sunsetsatellite.fluidapi.api.FluidStack; import sunsetsatellite.signalindustries.SignalIndustries; +import sunsetsatellite.signalindustries.interfaces.IMultiblockPart; +import sunsetsatellite.sunsetutils.util.Connection; +import sunsetsatellite.sunsetutils.util.Direction; -public class TileEntityEnergyConnector extends TileEntityTieredContainer{ +public class TileEntityEnergyConnector extends TileEntityTieredContainer implements IMultiblockPart { + + public TileEntity connectedTo; public TileEntityEnergyConnector(){ itemContents = new ItemStack[1]; @@ -13,11 +19,34 @@ public TileEntityEnergyConnector(){ fluidCapacity = new int[1]; fluidCapacity[0] = 16000; acceptedFluids.get(0).add((BlockFluid) SignalIndustries.energyFlowing); + connections.put(Direction.Y_POS, Connection.OUTPUT); } @Override public void updateEntity() { super.updateEntity(); - extractFluids(); + if(isConnected()){ + if(connectedTo instanceof TileEntitySignalumReactor){ + if(((TileEntitySignalumReactor) connectedTo).state != TileEntitySignalumReactor.State.INACTIVE){ + extractFluids(); + } + } + } + } + + @Override + public boolean isConnected() { + return connectedTo != null; + } + + @Override + public TileEntity getConnectedTileEntity() { + return connectedTo; + } + + @Override + public boolean connect(TileEntity tileEntity) { + connectedTo = tileEntity; + return true; } } diff --git a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityFluidConduit.java b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityFluidConduit.java index 8c1641e6..379743a8 100644 --- a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityFluidConduit.java +++ b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityFluidConduit.java @@ -23,6 +23,9 @@ public TileEntityFluidConduit(){ @Override public void updateEntity() { + if(fluidContents[0] != null && fluidContents[0].amount < 0){ + fluidContents[0] = null; + } if(getBlockType() != null){ fluidCapacity[0] = (int) Math.pow(2,((BlockContainerTiered)getBlockType()).tier.ordinal()) * 1000; transferSpeed = 20 * (((BlockContainerTiered)getBlockType()).tier.ordinal()+1); diff --git a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityIgnitor.java b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityIgnitor.java index 2799a2f1..928cc127 100644 --- a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityIgnitor.java +++ b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityIgnitor.java @@ -8,15 +8,17 @@ import sunsetsatellite.fluidapi.template.tiles.TileEntityFluidItemContainer; import sunsetsatellite.fluidapi.template.tiles.TileEntityFluidPipe; import sunsetsatellite.signalindustries.SignalIndustries; +import sunsetsatellite.signalindustries.interfaces.IMultiblockPart; import sunsetsatellite.sunsetutils.util.Connection; import sunsetsatellite.sunsetutils.util.Direction; import sunsetsatellite.sunsetutils.util.TickTimer; import java.util.*; -public class TileEntityIgnitor extends TileEntityFluidItemContainer { +public class TileEntityIgnitor extends TileEntityFluidItemContainer implements IMultiblockPart { public boolean isActivated = false; - private final TickTimer timer = new TickTimer(this,"work",5,true); + private final TickTimer timer = new TickTimer(this,"work",20,true); + public TileEntity connectedTo; public TileEntityIgnitor(){ itemContents = new ItemStack[0]; @@ -38,12 +40,12 @@ public TileEntityIgnitor(){ public void updateEntity() { super.updateEntity(); timer.tick(); + Random random = new Random(); spreadFluids(Direction.Y_POS); worldObj.markBlocksDirty(xCoord,yCoord,zCoord,xCoord,yCoord,zCoord); extractFluids(); if(getFluidInSlot(0) != null && getFluidInSlot(0).amount <= 0) fluidContents[0] = null; if(isActivated && getFluidInSlot(0) != null && getFluidInSlot(0).amount >= 5){ - Random random = new Random(); if(random.nextFloat() < 0.25){ float xd = random.nextFloat() / 10 - 0.05f; float yd = random.nextFloat() / 10 - 0.05f; @@ -69,18 +71,6 @@ public void spreadFluids(Direction dir) { if(getFluidInSlot(0) != null){ this.give(dir); } - /*if(tile.getFluidInSlot(0) == null && getFluidInSlot(0) != null){ - this.give(dir); - } else if (tile.getFluidInSlot(0) != null && getFluidInSlot(0) == null) { - this.take(tile.getFluidInSlot(0), dir); - } else { - if(tile.getFluidInSlot(0) == null || getFluidInSlot(0) == null) return; - if(tile.getFluidInSlot(0).amount < getFluidInSlot(0).amount){ - this.give(dir); - } else { - this.take(tile.getFluidInSlot(0), dir); - } - }*/ for (Direction direction : Direction.values()) { connections.put(dir, Connection.INPUT); } @@ -90,6 +80,10 @@ public boolean isBurning(){ return fluidContents[0] != null && fluidContents[0].liquid == SignalIndustries.energyFlowing && fluidContents[0].amount > 0 && isActivated; } + public boolean isEmpty(){ + return fluidContents[0] == null || fluidContents[0].liquid == SignalIndustries.energyFlowing && fluidContents[0].amount == 0; + } + public boolean isReady(){ return fluidContents[0] != null && fluidContents[0].liquid == SignalIndustries.energyFlowing && fluidContents[0].amount >= fluidCapacity[0]; } @@ -148,4 +142,20 @@ public void unpressurizePipes(TileEntityFluidPipe pipe,ArrayList stabilizers = new ArrayList<>(); + public List ignitors = new ArrayList<>(); + public TileEntityEnergyConnector connector; + public TileEntityItemBus input; + public TileEntityItemBus output; + public State state = State.INACTIVE; + public TileEntitySignalumReactor(){ + multiblock = Multiblock.multiblocks.get("signalumReactor"); + } + + @Override + public boolean isActive() { + return state == State.RUNNING; + } + + @Override + public boolean isReady() { + return state == State.STARTING; } + public enum State { + INACTIVE, + STARTING, + RUNNING, + } + + @Override + public void updateEntity() { + stabilizers.clear(); + ignitors.clear(); + Direction dir = Direction.getDirectionFromSide(getBlockMetadata()); + ArrayList tileEntities = multiblock.getTileEntities(worldObj,new Vec3i(xCoord,yCoord,zCoord),Direction.Z_POS); + for (BlockInstance tileEntity : tileEntities) { + if(tileEntity.tile instanceof IMultiblockPart){ + if(tileEntity.tile instanceof TileEntityStabilizer){ + stabilizers.add((TileEntityStabilizer) tileEntity.tile); + } + else if(tileEntity.tile instanceof TileEntityIgnitor){ + ignitors.add((TileEntityIgnitor) tileEntity.tile); + } + else if(tileEntity.tile instanceof TileEntityItemBus){ + if(tileEntity.block == SignalIndustries.reinforcedItemInputBus){ + input = (TileEntityItemBus) tileEntity.tile; + } else if (tileEntity.block == SignalIndustries.reinforcedItemOutputBus) { + output = (TileEntityItemBus) tileEntity.tile; + } + } + else if(tileEntity.tile instanceof TileEntityEnergyConnector){ + connector = (TileEntityEnergyConnector) tileEntity.tile; + } + ((IMultiblockPart) tileEntity.tile).connect(this); + } + } + if(state == State.STARTING && checkIfIgnitorsReady() && checkIfStabilizersReady()){ + state = State.RUNNING; + } + //TODO: state machine maybe? + if(state == State.RUNNING && checkIfStabilizersReady() && getFuel() > 0){ + depleteRandomFuelCell(); + } else if (state == State.RUNNING) { + state = State.INACTIVE; + } + if(state == State.RUNNING){ + ItemStack[] itemContents = input.itemContents; + for (int i = 0; i < itemContents.length; i++) { + ItemStack stack = itemContents[i]; + if (stack != null && stack.getItem() instanceof ItemFuelCell) { + if (stack.getData().getInteger("fuel") <= 0) { + if(output.itemContents[i] == null){ + output.itemContents[i] = stack; + input.itemContents[i] = null; + } + } + } + } + + if(getFuel() <= 0){ + state = State.INACTIVE; + } + for (TileEntityIgnitor ignitor : ignitors) { + if(ignitor.isEmpty()){ + state = State.INACTIVE; + break; + } + ignitor.isActivated = true; + } + } else { + for (TileEntityIgnitor ignitor : ignitors) { + ignitor.isActivated = false; + } + } + } + + public void depleteRandomFuelCell(){ + Random random = new Random(); + if(random.nextFloat() <= 0.25){ + //TODO: actually pick a random cell + for (ItemStack stack : input.itemContents) { + if (stack != null && stack.getItem() instanceof ItemFuelCell) { + int fuel = stack.getData().getInteger("fuel"); + int depleted = stack.getData().getInteger("depleted"); + if(fuel >= 0){ + stack.getData().putInt("fuel",fuel-1); + stack.getData().putInt("depleted",depleted+1); + } + } + } + } + } + + public boolean checkIfIgnitorsReady(){ + for (TileEntityIgnitor ignitor : ignitors) { + if(!ignitor.isReady()){ + return false; + } + } + return true; + } + + public boolean checkIfStabilizersReady(){ + boolean ready = true; + for (TileEntityStabilizer stabilizer : stabilizers) { + if (!stabilizer.canProcess()) { + ready = false; + } + } + return ready; + } + + public int getFuel(){ + if(input == null) return 0; + int fuel = 0; + for (ItemStack stack : input.itemContents) { + if(stack != null && stack.getItem() instanceof ItemFuelCell){ + fuel += stack.getData().getInteger("fuel"); + } + } + return fuel; + } + + public int getDepletedFuel(){ + if(input == null) return 0; + int depleted = 0; + for (ItemStack stack : input.itemContents) { + if(stack != null && stack.getItem() instanceof ItemFuelCell){ + depleted += stack.getData().getInteger("depleted"); + } + } + return depleted; + } + + public void start() { + if(getFuel() > 0 && state == State.INACTIVE){ + state = State.STARTING; + } else if (state == State.STARTING || state == State.RUNNING) { + state = State.INACTIVE; + } + } + + @Override + public Multiblock getMultiblock() { + return multiblock; + } } diff --git a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityStabilizer.java b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityStabilizer.java index 0676c9ac..d9261959 100644 --- a/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityStabilizer.java +++ b/src/main/java/sunsetsatellite/signalindustries/inventories/TileEntityStabilizer.java @@ -10,6 +10,7 @@ import sunsetsatellite.fluidapi.template.tiles.TileEntityFluidPipe; import sunsetsatellite.signalindustries.SignalIndustries; import sunsetsatellite.signalindustries.entities.EntityColorParticleFX; +import sunsetsatellite.signalindustries.interfaces.IMultiblockPart; import sunsetsatellite.signalindustries.interfaces.IStabilizable; import sunsetsatellite.sunsetutils.util.Connection; import sunsetsatellite.sunsetutils.util.Direction; @@ -20,7 +21,7 @@ import java.util.Map; import java.util.Random; -public class TileEntityStabilizer extends TileEntityFluidItemContainer { +public class TileEntityStabilizer extends TileEntityFluidItemContainer implements IMultiblockPart { public int fuelBurnTicks = 0; public int fuelMaxBurnTicks = 0; @@ -68,26 +69,31 @@ public void updateEntity() { /*SignalIndustries.spawnParticle(new EntityColorParticleFX(worldObj,xCoord+random.nextFloat(),yCoord+random.nextFloat(),zCoord+random.nextFloat(),0,0,0,1.0f,1.0f,0.0f,1.0f)); SignalIndustries.spawnParticle(new EntityColorParticleFX(worldObj,xCoord+random.nextFloat(),yCoord+random.nextFloat(),zCoord+random.nextFloat(),0,0,0,1.0f,1.0f,0.0f,1.0f));*/ if(connectedTo instanceof IStabilizable && ((IStabilizable) connectedTo).isActive()){ - progressTicks--; - Vec3i pos = new Vec3i(xCoord,yCoord,zCoord); - Vec3i connectedPos = new Vec3i(connectedTo.xCoord, connectedTo.yCoord, connectedTo.zCoord); - if(pos.x > connectedPos.x){ - int temp = pos.x; - pos.x = connectedPos.x; - connectedPos.x = temp; - } - if(pos.z > connectedPos.z){ - int temp = pos.z; - pos.z = connectedPos.z; - connectedPos.z = temp; - } - for (float i = pos.x; i <= connectedPos.x; i+=0.1f) { - for (float k = pos.z; k <= connectedPos.z; k+=0.1f) { - for (float l = 0; l < 4; l++) { - SignalIndustries.spawnParticle(new EntityColorParticleFX(worldObj,i+0.5,yCoord+0.5,k+0.5,0,0,0,1.0f,1.0f,0.0f,1.0f,6)); + if(connectedTo instanceof TileEntityDimensionalAnchor){ + Vec3i pos = new Vec3i(xCoord,yCoord,zCoord); + Vec3i connectedPos = new Vec3i(connectedTo.xCoord, connectedTo.yCoord, connectedTo.zCoord); + if(pos.x > connectedPos.x){ + int temp = pos.x; + pos.x = connectedPos.x; + connectedPos.x = temp; + } + if(pos.z > connectedPos.z){ + int temp = pos.z; + pos.z = connectedPos.z; + connectedPos.z = temp; + } + for (float i = pos.x; i <= connectedPos.x; i+=0.1f) { + for (float k = pos.z; k <= connectedPos.z; k+=0.1f) { + for (float l = 0; l < 4; l++) { + SignalIndustries.spawnParticle(new EntityColorParticleFX(worldObj,i+0.5,yCoord+0.5,k+0.5,0,0,0,1.0f,1.0f,0.0f,1.0f,6)); + } } } + } else if (connectedTo instanceof TileEntitySignalumReactor) { + for (float i = 0; i < 12; i+=0.2f) { + SignalIndustries.spawnParticle(new EntityColorParticleFX(worldObj,xCoord+0.5,yCoord+i,zCoord+0.5,0,0,0,1.0f,1.0f,0.0f,1.0f,6)); + } } } } @@ -242,5 +248,19 @@ public void readFromNBT(CompoundTag nBTTagCompound1) { } + @Override + public boolean isConnected() { + return connectedTo != null; + } + + @Override + public TileEntity getConnectedTileEntity() { + return connectedTo; + } + @Override + public boolean connect(TileEntity tileEntity) { + connectedTo = tileEntity; + return true; + } } diff --git a/src/main/java/sunsetsatellite/signalindustries/mixin/BlockFluidMixin.java b/src/main/java/sunsetsatellite/signalindustries/mixin/BlockFluidMixin.java new file mode 100644 index 00000000..b976057c --- /dev/null +++ b/src/main/java/sunsetsatellite/signalindustries/mixin/BlockFluidMixin.java @@ -0,0 +1,32 @@ +package sunsetsatellite.signalindustries.mixin; + +import net.minecraft.core.block.Block; +import net.minecraft.core.block.BlockFluid; +import net.minecraft.core.block.material.Material; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import sunsetsatellite.signalindustries.SignalIndustries; + +@Mixin( + value = BlockFluid.class, + remap = false +) +public abstract class BlockFluidMixin extends Block { + + @Unique + private final BlockFluid thisAs = (BlockFluid) ((Object)this); + + private BlockFluidMixin(String key, int id, Material material) { + super(key, id, material); + } + + @Inject(method = "getRenderBlockPass",at = @At("HEAD"), cancellable = true) + public void getRenderBlockPass(CallbackInfoReturnable cir) { + if(thisAs == SignalIndustries.energyFlowing || thisAs == SignalIndustries.energyStill){ + cir.setReturnValue(1); + } + } +} diff --git a/src/main/java/sunsetsatellite/signalindustries/mixin/ChunkDecoratorOverworldMixin.java b/src/main/java/sunsetsatellite/signalindustries/mixin/ChunkDecoratorOverworldMixin.java index 4130239c..9efc7ae9 100644 --- a/src/main/java/sunsetsatellite/signalindustries/mixin/ChunkDecoratorOverworldMixin.java +++ b/src/main/java/sunsetsatellite/signalindustries/mixin/ChunkDecoratorOverworldMixin.java @@ -32,17 +32,17 @@ public abstract class ChunkDecoratorOverworldMixin implements ChunkDecorator { locals = LocalCapture.CAPTURE_FAILHARD) public void decorate(Chunk chunk, CallbackInfo ci, int chunkX, int chunkZ, int minY, int maxY, int rangeY, float oreHeightModifier, int x, int z, int y, Biome biome, Random rand, long l1, long l2) { if(rand.nextInt(512) == 0){ - SignalIndustries.LOGGER.info(String.format("Meteor fell at X:%d Z:%d (X:%d Y:%d Z:%d)",chunkX,chunkZ,x,y,z)); + SignalIndustries.LOGGER.info(String.format("Iron Meteor fell at X:%d Z:%d (X:%d Y:%d Z:%d)",chunkX,chunkZ,x,y,z)); y = this.world.getHeightValue(x,z) - 4; new WorldFeatureMeteor(Block.oreIronBasalt.id,0,25).generate(world,rand,x,y,z); } if(rand.nextInt(1024) == 0){ - SignalIndustries.LOGGER.info(String.format("Meteor fell at X:%d Z:%d (X:%d Y:%d Z:%d)",chunkX,chunkZ,x,y,z)); + SignalIndustries.LOGGER.info(String.format("Signalum Meteor fell at X:%d Z:%d (X:%d Y:%d Z:%d)",chunkX,chunkZ,x,y,z)); y = this.world.getHeightValue(x,z) - 4; new WorldFeatureMeteor(SignalIndustries.signalumOre.id,0,15).generate(world,rand,x,y,z); } if(rand.nextInt(2048) == 0){ - SignalIndustries.LOGGER.info(String.format("Meteor fell at X:%d Z:%d (X:%d Y:%d Z:%d)",chunkX,chunkZ,x,y,z)); + SignalIndustries.LOGGER.info(String.format("Dilithium Meteor fell at X:%d Z:%d (X:%d Y:%d Z:%d)",chunkX,chunkZ,x,y,z)); y = this.world.getHeightValue(x,z) - 4; new WorldFeatureMeteor(SignalIndustries.dilithiumOre.id,0,3).generate(world,rand,x,y,z); } diff --git a/src/main/java/sunsetsatellite/signalindustries/mixin/MinecraftMixin.java b/src/main/java/sunsetsatellite/signalindustries/mixin/MinecraftMixin.java index 977a8981..e0bf968e 100644 --- a/src/main/java/sunsetsatellite/signalindustries/mixin/MinecraftMixin.java +++ b/src/main/java/sunsetsatellite/signalindustries/mixin/MinecraftMixin.java @@ -54,7 +54,7 @@ public void handleKeyboard(CallbackInfo ci){ KeyBinding switchModeKey = ((IKeybinds) Minecraft.getMinecraft(Minecraft.class).gameSettings).signalIndustries$getKeySwitchMode(); SignalumPowerSuit powerSuit = ((IPlayerPowerSuit)thePlayer).signalIndustries$getPowerSuit(); if(debounce <= 0){ - if(switchModeKey.isPressed()){ + if(switchModeKey.isPressed() && currentScreen == null){ debounce = 10; if(thePlayer != null){ if(thePlayer.getCurrentEquippedItem().getItem() == SignalIndustries.reinforcedSignalumDrill){ diff --git a/src/main/java/sunsetsatellite/signalindustries/render/RenderSignalumReactor.java b/src/main/java/sunsetsatellite/signalindustries/render/RenderSignalumReactor.java new file mode 100644 index 00000000..28bf8a8b --- /dev/null +++ b/src/main/java/sunsetsatellite/signalindustries/render/RenderSignalumReactor.java @@ -0,0 +1,35 @@ +package sunsetsatellite.signalindustries.render; + +import net.minecraft.core.block.entity.TileEntity; +import org.lwjgl.opengl.GL11; +import sunsetsatellite.signalindustries.SignalIndustries; +import sunsetsatellite.signalindustries.inventories.TileEntitySignalumReactor; +import sunsetsatellite.sunsetutils.util.multiblocks.RenderMultiblock; + +public class RenderSignalumReactor extends RenderMultiblock { + + @Override + public void doRender(TileEntity tileEntity, double d, double e, double f, float g) { + TileEntitySignalumReactor reactor = (TileEntitySignalumReactor) tileEntity; + super.doRender(tileEntity, d, e, f, g); + float fluidAmount = reactor.getFuel() + reactor.getDepletedFuel(); + float fluidMaxAmount = 4000*9; + int fluidId = SignalIndustries.energyFlowing.id; + + float amount = Math.max(Math.abs(fluidAmount / fluidMaxAmount),fluidAmount != 0 ? 0.14f : 0f); + float depletedAmount = Math.min(Math.abs(reactor.getDepletedFuel() / fluidAmount),0.9f); + if (fluidId != 0 && reactor.isActive()) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)d, (float)e, (float)f); + GL11.glScalef(2.99F, 7f, 2.99F); + GL11.glTranslatef(0.70F, -0.42F, -0.35F); + GL11.glColor4f(1-depletedAmount,1-depletedAmount,1-depletedAmount,amount); + GL11.glDisable(2896); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA,GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glEnable( GL11.GL_BLEND ); + this.drawBlock(this.getFontRenderer(), this.renderDispatcher.renderEngine.minecraft.renderEngine, fluidId, 0, 0, 0, 0, tileEntity); + GL11.glEnable(2896); + GL11.glPopMatrix(); + } + } +} diff --git a/src/main/java/sunsetsatellite/signalindustries/util/BlockDataExporter.java b/src/main/java/sunsetsatellite/signalindustries/util/BlockDataExporter.java new file mode 100644 index 00000000..d7d6f9ba --- /dev/null +++ b/src/main/java/sunsetsatellite/signalindustries/util/BlockDataExporter.java @@ -0,0 +1,68 @@ +package sunsetsatellite.signalindustries.util; + +import com.mojang.nbt.CompoundTag; +import com.mojang.nbt.NbtIo; +import net.minecraft.client.Minecraft; +import net.minecraft.core.block.Block; +import net.minecraft.core.block.BlockTileEntity; +import net.minecraft.core.util.helper.Side; +import sunsetsatellite.signalindustries.SignalIndustries; +import turniplabs.halplibe.helper.TextureHelper; + +import java.io.DataOutputStream; +import java.io.File; +import java.lang.reflect.Field; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +public class BlockDataExporter { + public static void export() { + List fields = new ArrayList<>(Arrays.asList(SignalIndustries.class.getDeclaredFields())); + fields.removeIf((F)->F.getType() != Block.class); + CompoundTag data = new CompoundTag(); + for (Field field : fields) { + Block block; + try { + block = (Block) field.get(null); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + CompoundTag tag = new CompoundTag(); + tag.putString("name",field.getName()); + tag.putString("mod",SignalIndustries.class.getName()); + CompoundTag uv = new CompoundTag(); + for (Side side : Side.values()) { + if(side == Side.NONE) continue; + int index = block.atlasIndices[side.getId()]; + String file = ""; + for (Map.Entry entry : TextureHelper.registeredBlockTextures.entrySet()) { + String K = entry.getKey(); + int[] V = entry.getValue(); + int texIndex = Block.texCoordToIndex(V[0],V[1]); + if(texIndex == index){ + file = K; + } + } + uv.putString(side.name(),file.split(":")[1]); + } + tag.putCompound("uv",uv); + tag.putString("main_uv",uv.getString("SOUTH")); + tag.putString("draw_type","normal"); + tag.putBoolean("tile_entity", BlockTileEntity.class.isAssignableFrom(block.getClass())); + data.putCompound(field.getName(),tag); + } + String s = String.format("%s\\%s.nbt", Minecraft.getMinecraft(Minecraft.class).getMinecraftDir(), "blockInfo"); + File file = new File(s); + try { + try (DataOutputStream output = new DataOutputStream(Files.newOutputStream(file.toPath()))) { + NbtIo.write(data, output); + SignalIndustries.LOGGER.info("exported block data"); + } + } catch (Exception e){ + throw new RuntimeException(e); + } + } +} diff --git a/src/main/resources/assets/signalindustries/block/signalum_energy_transparent.png b/src/main/resources/assets/signalindustries/block/signalum_energy_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..232aad0ce55a0b8a1a2a27d4823e6f809742bb40 GIT binary patch literal 757 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0*XmQK~y+T9g|s- z)G!c4QY?qM&pucX69s!LhTQE6I~E|b(vN(1Zl z+maM#DMqWvZz%+69Qe1F!YCe+Sx?^i@X|`pC#9#e(o3&&3`%X1E-Q#tNJe3X+3BC+ z+q2T?RqDAjjdDLfe*Tf3xcv7ly@AY27cve;22v&%DJ7XSu}0Q>Vb9t-$yvEy`G+6& zWsp72a=n$E(G_Yg6a+sB7SK&=peZgRvKGl&&Pecn|Mf8~=q5|Fxq{nhv6W^A?F8+B ztkB9u=mKEPB3D?IhpqC%PUcd5drXd^l}52D6>dz+EnXn=9M1Z;Ue7=1n2L+rS{!(u_5S z95;H!KF2%-ZSxch1~AJiVoNlE{m7-&jT8E*SETQ8AUdL@jVI!qDd7pNj=h?RwnrX# zAk70w=m>L?T0jPuYg)L(z=ReCXKK-!tCg?Ot(KxsKtTIMtqwUUYT0#9=IGjcV%w7CTXm^7LNpamrN#uN<*K`#0>P2 n`M{|wgAO3}n36idHg5DE-A`~nB{-+F00000NkvXXu0mjfNSa&U literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/signalindustries/gui/signalum_reactor_ui.png b/src/main/resources/assets/signalindustries/gui/signalum_reactor_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..2155de9ece84398353201c859a257ca40076214d GIT binary patch literal 571 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&eBK7W8uh%1o(&%jX6z@VwA31p|cCSL|ptR+Ey!T*7P;rBMaV4whJfk$L9 z0|Vbd5N6ylG5amh@Fkuujv*CsZ!aG#JZvDq;@IW(&yc$)SM2iV$h*R4FBPA={PxcE z`Oh!E{r~xW`KIr6|K$(FZ~eaafAfdmAg6*s87s)SAn=BZ4Z>i!A<6?~ZP1p0vJ%1# zpsWMy5}>SxSfFztV0RPDM0y%{is3!~1Do<)u?<@e{QdWwt7LcoeukF}Ihz@8q%m(e w%a$;k_kfvnL#`Ra?Hq<}H|Z^*%U5ttJa(_!9n~inK7zu@)78&qol`;+0GL#yDgXcg literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/signalindustries/structures/dimensionalAnchor.nbt b/src/main/resources/assets/signalindustries/structures/dimensionalAnchor.nbt index 29f7426c2e1d36ced299a6591b59e68c9ef17a40..ce08f3baba1b16b4099ae28cd2792a441645dc1d 100644 GIT binary patch literal 764 zcmVI3_M02#F!oGA|4 z)^CS0hlVz3u0gHvDK7!5)j2-CzW1J+0b>L9`L>WtsRpd~JJ&tN|1$G2&wusvfjxcc zuhKHvnGa|EQf4Xt!aTWP*LtmVTI!@svrLxhg_cW|WKu2Gx-4X>FQ)s2AI}Tl7jl&< zEpxMaspfZiQL(tn^7*|UFfR;Ws8nz@6<$#>Keq%G_C)3K?NpXo{zt0i?M%ysOcbl| zM=dEh96##rzkXuyV=@%H)A(0!$1hT;e&xkHU0f&H5ZMzLlLUG-fk*cQCM1D=O>fcK3m^qTG7sX8K#1-U zG!*dME6}b4J@_>gem4))u>gvJsHK1h&jW(Eh7ARJ?iDyv4Iu+!PkZUML z_85RPB%=vgj1CGMsRifh$VB@V_M06c<`%|X0u6TnD28J@0Z2zCCL{rlIs!fHxUkZAPH`r|ZxLbptqIiW|L<>lDNZPmF}8E%Ekr^qmJjw(lMRKkhbRNGHGv zJKWg5dp{lxNhboUzmc%lf57>B5t00$_yHOJu!)pEBm?k(zi}UcA=v`6*8)^a?dj;v zd#0o25AWo9H7%2w`Tmd=dlA|}xPdo;5$%RMBjTz(awdXrkAw=>y$F##5}J0f%G1t7 z2*`BAaMvMj5!fDygip>ypr=zf5q!dxvX|Ec00L1rAwWHmAKM8)T%kWE3BXL5=hK4$ z21`c)-5CK15WcW+1ONhbZ*(AVWIlJE-Xx%tF%F+LhC3KO?F@1F5!sdS(^>FL_^}-y z;Z1^Z7r)UPyWjuBj*r-XNWUtD=^qL^K0^PHeno`SKd|FF-@hU7ZMvT6QkLsd=1QA| uuRjgMjWSE-KiY%S53+8rW~U!voH*f|z_x`GfdVxRjQt1GImH|ABme-rtzA$6 literal 436 zcmV;l0ZaZLiwFP!00000|Am%KQo}F|g=ITzdYaa5f$q6TXJEmCT^GRFI0hVmgES#O zHj(5fr<+V?`bC!BdscTuJL;Y;*UOIl@ffIkd%0d{`~-6E`S~#nLq9%0$FDw+e|;wE zzGxy&HZf!(NaDUGydp>v4>b|m#G_rK$HaLh?j~aV$om!lN2|x-)Uu*PT17^WT{`Y!glraoZ(|NQ%hHH3;oQK&U>n6E(4X=LB#f zwF%%vm-XzW}qQA zt^n?xGNk|kOKb+nBWbP6k<1D}YEhvYtEIH*zX;M@NR=(M(HtZ)eFH~Li7in0?1KZ3IG5qoy~6m diff --git a/src/main/resources/assets/signalindustries/structures/dimensionalAnchorOld.nbt b/src/main/resources/assets/signalindustries/structures/dimensionalAnchorOld.nbt new file mode 100644 index 0000000000000000000000000000000000000000..29f7426c2e1d36ced299a6591b59e68c9ef17a40 GIT binary patch literal 436 zcmV;l0ZaZLiwFP!00000|Am%KQo}F|g=ITzdYaa5f$q6TXJEmCT^GRFI0hVmgES#O zHj(5fr<+V?`bC!BdscTuJL;Y;*UOIl@ffIkd%0d{`~-6E`S~#nLq9%0$FDw+e|;wE zzGxy&HZf!(NaDUGydp>v4>b|m#G_rK$HaLh?j~aV$om!lN2|x-)Uu*PT17^WT{`Y!glraoZ(|NQ%hHH3;oQK&U>n6E(4X=LB#f zwF%%vm-XzW}qQA zt^n?xGNk|kOKb+nBWbP6k<1D}YEhvYtEIH*zX;M@NR=(M(HtZ)eFH~Li7in0?1KZ3IG5qoy~6m literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/signalindustries/structures/signalumReactor.nbt b/src/main/resources/assets/signalindustries/structures/signalumReactor.nbt new file mode 100644 index 0000000000000000000000000000000000000000..178ec2c4c3b0407b051adbdef442b82575b5886e GIT binary patch literal 1698 zcmV;T23`3diwFP!00000|IJ+OZre5#l_)1Dg6&lbOO|bE|CS(IjSVQU^ab2lbA>r_ zVM)N6Cts5~o)k-sOdU}kOr9)%92g1i;pOG!xnI1ntPAV>{U%<<$%W;7UZ;*_|7{gN z#pjpm^WNJ3GPsMfdHI`d4YGI@*>5ZnFRbe{Ptqt$=UKE`#aZ+=jhD%M6(@^4%{FnA zzP)+=V)p%upZ0%|-~AEIZ?pC0YQ2d{9G9#0?O*AIC4%4pj8lPeDlkqBW>@@FV5~iu z%l{5$6UE7&>&VS#BgE}~q zZPFlu5j4azq7Hnx3rro1yLC`}+5`j>h~S*10}&3D{)piYrtPCp2>Zq|L=n31EHYIP zbgO`2ha&Xg73mOnZM1CXeZ zU7dobejE7t6ac@j=4tw@fS{WkauncpD?n|7niLRr-vt~6c<>O4emA5?0TL~=B>BcI z(8XSmCm%aO!7@OJ5DIDi3NoTeK6ZgT`G5*h<%i1kE8=r4@*US3b`v2653z^P0oXh$ z=(+7JD1<$-c!-VfpdC>I9<+f+76KbzLamIMK@E&xM8wkojs}>g!0$c<6h8ni;`$VD z@D1-pMlA;4UY;z-KcrJ0nGj?z& zF*8}d`Sp9<@)^OI#7fTT>-XENsIh)Uc0!YUTrc6tR|Llt`HJ9JouJetAE)Q)OUQU| z?BUw6MUwBhBb*<7ARWL00FDihh)Z+<0HIlFdOQFiGHT=}2mo+kwB;Eg@PZ8u5CGtq z;E@La_`wDZBLKi$_<;u?Y%>ue5fvkxCESq|AV#2rron{G%lF_-OuGq3xO;|m6N(Ne z$lHJH19|(8OU3p6n@-aUXP5c2L-uh~HH{GYxQUWRh0`0&;ayrEpz* z8)th6AUf_L#}$O%PJwWpM4RQ80!TKGljnkA0R;rgJuFqbHq;42QxIm$B+k~A7S!P~ z1p=mus;(yO5Y$041p*$wQ}y*|hoJ5-G!H?HLGqA!S0E4BkZ+tTjB$J2j<$a66M6Ch zSES0v-f&0Tf4~)YFGB|A*N=l{o_suR#*?o|9uoH7aVP4bN5(BM!9H-ngaC&AdKiJ; zS(gcJXF8&%PLCZXz|x1A6Kwg?Zje=3s|&v-l-4m zk0&1wSkQ)Tr#K~17mv)(dr$Gx6Gv39bO8Vjom>F8p?=$M0=mW;hC_G>5uctIVj4($ z_n<(4i6B!4z!f$S5XM`EAWLh#yvbzzC=>|ru$L+%(~SUkHPr}=zeFPfF#Nkas;Nbr z3Z~EyX`3Jd+~K_?o&?c$l#Ka@4~2~Dr1+}%m-ajyztk*G#JygnS)PsK z7nSK^UhQ|mm9=5*j<9kfoPK?HbGr*#?)BEXSt>ogiffSWU0r_mq+@PR-2U zDTMmM3wD;&mv-=QH&qLm&{JQTQNMhp(1PZe!d8s;aDk`?z7;?;#Wpsk^{wE_8~{A# s(~7M$19-W?Y}~Vi02sPLz5hppyZi{yF>OOe?k>yv7bE{e)#GCT034kh6aWAK literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/signalindustries/structures/test.nbt b/src/main/resources/assets/signalindustries/structures/test.nbt new file mode 100644 index 0000000000000000000000000000000000000000..2aac6b6b8e7256b5940c40f914c0759da181195f GIT binary patch literal 325 zcmV-L0lNMliwFRbpc!QV|GkynZh}A%g=fJu4QXG+l>WC@wZ@Cyv={URR@vypWijj! zi|?-OAXtM9L~Uemc5+y9z8p3O55R-7j|9hPJaA{RbwPXqFW$3qUqCT*B1MuXM?i;A zD{&4EhS0aEv5KrDr8Sc3S{xgx(S)g`1eNUuYvJuzcn&dA#$wEB&x|H*h zh^u;%Z(bXcd@f0#AbCHWM9$?@85I@}(x{(gmZV;@FqGr_6&QDqSW1||F|qK$38qm% za>(;S<-rKQF^^T7d5G&qmSw9fH(Qq6ukO?QW$7KxlF0e4{cXj5)wcaz#eUhg{e5Fy zhOw^`%60)B8UdWs13WeYxTgnrssM=nZ@|kxs%hJd)tYwNv}gazARSslN{N3X XmW7K?b{H6z_yvF;$zo7a+6DjsehZs8 literal 0 HcmV?d00001 diff --git a/src/main/resources/lang/signalindustries/en_US.lang b/src/main/resources/lang/signalindustries/en_US.lang index 3fb24406..ff1468e8 100644 --- a/src/main/resources/lang/signalindustries/en_US.lang +++ b/src/main/resources/lang/signalindustries/en_US.lang @@ -98,7 +98,7 @@ item.signalindustries.monsterShard.desc=Horrendous and corrupted. item.signalindustries.evilCatalyst.name=Evil Catalyst item.signalindustries.evilCatalyst.desc=A deep evil sealed within, there's probably a machine to could unleash it. item.signalindustries.infernalEye.name=Infernal Eye -item.signalindustries.infernalEye.desc=But they were, all of them, deceived for an even greater evil could be unleashed. +item.signalindustries.infernalEye.desc=But they were, all of them, deceived for an even greater evil was made. item.signalindustries.infernalFragment.name=Infernal Fragment item.signalindustries.infernalFragment.desc=When the eclipse reaches totality, the monsters come out of hiding. @@ -177,7 +177,7 @@ item.signalindustries.reinforced.attachment.secondaryEnergyPack.desc=Provides an item.signalindustries.reinforced.attachment.pulsar.name=The Pulsar (Attachment) item.signalindustries.reinforced.attachment.pulsar.desc=A modified version of [The Pulsar] that can be connected to a [Signalum Power Suit] utilizing it's energy network. item.signalindustries.basic.attachment.backpack.name=Basic Backpack -item.signalindustries.basic.attachment.backpack.desc=Portable item & fluid storage. Capable of storing a the same amount of items as a chest and 2 fluids (that aren't Signalum Energy). +item.signalindustries.basic.attachment.backpack.desc=Portable item & fluid storage. Capable of storing the same amount of items as a chest and 2 fluids (that aren't Signalum Energy). item.signalindustries.reinforced.attachment.backpack.name=Reinforced Backpack item.signalindustries.reinforced.attachment.backpack.desc=Portable item & fluid storage. Using latest object shrinking technology it is capable of storing the same amount of items as a double chest and 4 fluids (that aren't Signalum Energy). item.signalindustries.basic.attachment.jetpack.name=Jetpack @@ -263,10 +263,18 @@ tile.signalindustries.awakened.signalumReactorCore.name=Awakened Signalum Igniti tile.signalindustries.awakened.signalumReactorCore.desc=The cutting edge of Signalum technology. Welcome to the far end of your adventure. tile.signalindustries.reinforced.ignitor.name=Reinforced Signalum Ignitor -tile.signalindustries.reinforced.ignitor.desc=A core part of the [Signalum Reactor]. +tile.signalindustries.reinforced.ignitor.desc=A core part of the [Signalum Reactor]. Drives the reaction by forcibly igniting [Signalum Energy]. tile.signalindustries.reinforced.energyConnector.name=Reinforced Energy Connector tile.signalindustries.reinforced.energyConnector.desc=A dedicated energy hatch for Reinforced-tier multiblocks. +tile.signalindustries.reinforced.fluidInputHatch.name=Reinforced Fluid Input Hatch +tile.signalindustries.reinforced.fluidInputHatch.desc=A dedicated fluid input for Reinforced-tier multiblocks. +tile.signalindustries.reinforced.fluidOutputHatch.name=Reinforced Fluid Output Hatch +tile.signalindustries.reinforced.fluidOutputHatch.desc=A dedicated fluid output for Reinforced-tier multiblocks. +tile.signalindustries.reinforced.itemInputBus.name=Reinforced Item Input Bus +tile.signalindustries.reinforced.itemInputBus.desc=A dedicated item input for Reinforced-tier multiblocks. +tile.signalindustries.reinforced.itemOutputBus.name=Reinforced Item Output Bus +tile.signalindustries.reinforced.itemOutputBus.desc=A dedicated item output for Reinforced-tier multiblocks. tile.signalindustries.reinforced.centrifuge.name=Separation Centrifuge tile.signalindustries.reinforced.centrifuge.desc=Separates a liquid substance into its components. @@ -293,10 +301,10 @@ tile.signalindustries.prototype.plateFormer.name=Prototype Plate Former tile.signalindustries.prototype.plateFormer.desc=Welcome to the hydraulic pressing channel. Makes more [Plates] than the [Plate Hammer] and out of more materials. tile.signalindustries.basic.plateFormer.name=Basic Metal Press tile.signalindustries.basic.plateFormer.desc=Bends and shapes metal ingots. -tile.signalindustries.reinforced.plateFormer.name=Reinforced Forming Press +tile.signalindustries.reinforced.plateFormer.name=Reinforced Compressor tile.signalindustries.reinforced.plateFormer.desc=Bends and shapes materials with more pressure. tile.signalindustries.awakened.plateFormer.name=Awakened Singularity Compressor Controller -tile.signalindustries.awakened.plateFormer.desc=Could compress something down to a black hole if it didn't mean the destruction of this world. +tile.signalindustries.awakened.plateFormer.desc=The raw power of this machine would be capable of compressing materials into black holes if it wasn't controlled. tile.signalindustries.prototype.crystalCutter.name=Prototype Crystal Cutter tile.signalindustries.prototype.crystalCutter.desc=Cuts and removes impurities from [Raw S. Crystals], turning them into brilliant [Signalum Crystals]! @@ -305,7 +313,7 @@ tile.signalindustries.basic.crystalCutter.desc=An upgraded [Crystal Cutter] that tile.signalindustries.reinforced.crystalCutter.name=Reinforced Crystal Cutter tile.signalindustries.reinforced.crystalCutter.desc=Better, faster, stronger. tile.signalindustries.awakened.crystalCutter.name=Awakened Precision Laser Cutter Controller -tile.signalindustries.awakened.crystalCutter.desc=Uses frigging laser beams! What more could you want. +tile.signalindustries.awakened.crystalCutter.desc=Uses frigging laser beams to slice through almost anything! What more could you want. tile.signalindustries.basic.crystalChamber.name=Basic Crystal Chamber tile.signalindustries.basic.crystalChamber.desc=Combines the heat of an [Alloy Smelter] and the pressure of a [Plate Former] to fuse 2 [S. Crystals] together! @@ -406,7 +414,7 @@ ability.signalindustries.normal.testingAbility.name=Testing Ability ability.signalindustries.normal.testingAbility.desc=Does not do anything. For testing only. ability.signalindustries.awakened.clockwork.name=Clockwork -ability.signalindustries.awakened.clockwork.desc= +ability.signalindustries.awakened.clockwork.desc=The sands of time freeze on your command. achievements.page.signalindustries.desc=Achievements for Signal Industries! achievement.signalindustries.init=Initialization diff --git a/src/main/resources/signalindustries.mixins.json b/src/main/resources/signalindustries.mixins.json index 5fa2ea4e..c21e6eb8 100644 --- a/src/main/resources/signalindustries.mixins.json +++ b/src/main/resources/signalindustries.mixins.json @@ -5,6 +5,7 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "AchievementMixin", + "BlockFluidMixin", "BlockRailMixin", "ChunkDecoratorOverworldMixin", "EntityArrowMixin",