From 4d32e6e2926e2e8376537ddd85a8903332ba2be0 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Sun, 24 Feb 2019 00:13:27 +0000 Subject: [PATCH] Horrible quick port of gui handling, tiles still need fixing first tho --- src/main/java/techreborn/client/EGui.java | 190 +++++++++++++++++- .../events/RegistryEventHandler.java | 8 + .../java/techreborn/init/TRTileEntities.java | 8 +- 3 files changed, 204 insertions(+), 2 deletions(-) diff --git a/src/main/java/techreborn/client/EGui.java b/src/main/java/techreborn/client/EGui.java index 14a9e2b52..cdadb425d 100644 --- a/src/main/java/techreborn/client/EGui.java +++ b/src/main/java/techreborn/client/EGui.java @@ -24,10 +24,54 @@ package techreborn.client; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.IInteractionObject; import net.minecraft.world.World; +import net.minecraftforge.fml.ExtensionPoint; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.network.FMLPlayMessages; +import net.minecraftforge.fml.network.NetworkHooks; import reborncore.api.tile.IMachineGuiHandler; +import reborncore.client.containerBuilder.IContainerProvider; +import techreborn.client.container.ContainerDestructoPack; +import techreborn.tiles.*; +import techreborn.tiles.fusionReactor.TileFusionControlComputer; +import techreborn.tiles.generator.*; +import techreborn.tiles.generator.advanced.TileDieselGenerator; +import techreborn.tiles.generator.advanced.TileGasTurbine; +import techreborn.tiles.generator.advanced.TileSemiFluidGenerator; +import techreborn.tiles.generator.advanced.TileThermalGenerator; +import techreborn.tiles.generator.basic.TileSolidFuelGenerator; +import techreborn.tiles.machine.iron.TileIronAlloyFurnace; +import techreborn.tiles.machine.iron.TileIronFurnace; +import techreborn.tiles.machine.multiblock.*; +import techreborn.tiles.machine.tier1.*; +import techreborn.tiles.storage.TileAdjustableSU; +import techreborn.tiles.storage.TileHighVoltageSU; +import techreborn.tiles.storage.TileLowVoltageSU; +import techreborn.tiles.storage.TileMediumVoltageSU; + +import javax.annotation.Nullable; +import java.util.Arrays; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; +import techreborn.client.gui.*; +import techreborn.tiles.storage.idsu.TileInterdimensionalSU; +import techreborn.tiles.storage.lesu.TileLapotronicSU; public enum EGui implements IMachineGuiHandler { @@ -81,10 +125,154 @@ public enum EGui implements IMachineGuiHandler { this.containerBuilder = containerBuilder; } + static { + ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.GUIFACTORY, ()-> EGui::getClientGuiElement); + } + + public static GuiContainer getClientGuiElement(FMLPlayMessages.OpenContainer msg) { + EGui gui = byID(msg.getId()); + EntityPlayer player = Minecraft.getInstance().player; + BlockPos pos = msg.getAdditionalData().readBlockPos(); + TileEntity tile = player.world.getTileEntity(pos); + + switch (gui) { + case AESU: + return new GuiAESU(player, (TileAdjustableSU) tile); + case ALLOY_FURNACE: + return new GuiAlloyFurnace(player, (TileIronAlloyFurnace) tile); + case ALLOY_SMELTER: + return new GuiAlloySmelter(player, (TileAlloySmelter) tile); + case ASSEMBLING_MACHINE: + return new GuiAssemblingMachine(player, (TileAssemblingMachine) tile); + case LOW_VOLTAGE_SU: + return new GuiBatbox(player, (TileLowVoltageSU) tile); + case BLAST_FURNACE: + return new GuiBlastFurnace(player, (TileIndustrialBlastFurnace) tile); + case CENTRIFUGE: + return new GuiCentrifuge(player, (TileIndustrialCentrifuge) tile); + case CHARGEBENCH: + return new GuiChargeBench(player, (TileChargeOMat) tile); + case CHEMICAL_REACTOR: + return new GuiChemicalReactor(player, (TileChemicalReactor) tile); + case CHUNK_LOADER: + return new GuiChunkLoader(player, (TileChunkLoader) tile); + case COMPRESSOR: + return new GuiCompressor(player, (TileCompressor) tile); + case DESTRUCTOPACK: + return new GuiDestructoPack(new ContainerDestructoPack(player)); + case DIESEL_GENERATOR: + return new GuiDieselGenerator(player, (TileDieselGenerator) tile); + case DIGITAL_CHEST: + return new GuiDigitalChest(player, (TileDigitalChest) tile); + case ELECTRIC_FURNACE: + return new GuiElectricFurnace(player, (TileElectricFurnace) tile); + case EXTRACTOR: + return new GuiExtractor(player, (TileExtractor) tile); + case FUSION_CONTROLLER: + return new GuiFusionReactor(player, (TileFusionControlComputer) tile); + case GAS_TURBINE: + return new GuiGasTurbine(player, (TileGasTurbine) tile); + case GENERATOR: + return new GuiGenerator(player, (TileSolidFuelGenerator) tile); + case GRINDER: + return new GuiGrinder(player, (TileGrinder) tile); + case IDSU: + return new GuiIDSU(player, (TileInterdimensionalSU) tile); + case IMPLOSION_COMPRESSOR: + return new GuiImplosionCompressor(player, (TileImplosionCompressor) tile); + case INDUSTRIAL_ELECTROLYZER: + return new GuiIndustrialElectrolyzer(player, (TileIndustrialElectrolyzer) tile); + case INDUSTRIAL_GRINDER: + return new GuiIndustrialGrinder(player, (TileIndustrialGrinder) tile); + case IRON_FURNACE: + return new GuiIronFurnace(player, (TileIronFurnace) tile); + case LESU: + return new GuiLESU(player, (TileLapotronicSU) tile); + case MATTER_FABRICATOR: + return new GuiMatterFabricator(player, (TileMatterFabricator) tile); + case MEDIUM_VOLTAGE_SU: + return new GuiMFE(player, (TileMediumVoltageSU) tile); + case HIGH_VOLTAGE_SU: + return new GuiMFSU(player, (TileHighVoltageSU) tile); + case QUANTUM_CHEST: + return new GuiQuantumChest(player, (TileQuantumChest) tile); + case QUANTUM_TANK: + return new GuiQuantumTank(player, (TileQuantumTank) tile); + case RECYCLER: + return new GuiRecycler(player, (TileRecycler) tile); + case ROLLING_MACHINE: + return new GuiRollingMachine(player, (TileRollingMachine) tile); + case SAWMILL: + return new GuiIndustrialSawmill(player, (TileIndustrialSawmill) tile); + case SCRAPBOXINATOR: + return new GuiScrapboxinator(player, (TileScrapboxinator) tile); + case SEMIFLUID_GENERATOR: + return new GuiSemifluidGenerator(player, (TileSemiFluidGenerator) tile); + case THERMAL_GENERATOR: + return new GuiThermalGenerator(player, (TileThermalGenerator) tile); + case VACUUM_FREEZER: + return new GuiVacuumFreezer(player, (TileVacuumFreezer) tile); + case AUTO_CRAFTING_TABLE: + return new GuiAutoCrafting(player, (TileAutoCraftingTable) tile); + case PLASMA_GENERATOR: + return new GuiPlasmaGenerator(player, (TilePlasmaGenerator) tile); + case DISTILLATION_TOWER: + return new GuiDistillationTower(player, (TileDistillationTower) tile); + case FLUID_REPLICATOR: + return new GuiFluidReplicator(player, (TileFluidReplicator) tile); + default: + throw new RuntimeException("No gui found for " + msg.getId()); + + } + } + + public static EGui byID(ResourceLocation resourceLocation){ + return Arrays.stream(values()) + .filter(eGui -> eGui.name().toLowerCase().equals(resourceLocation.toString())) + .findFirst() + .orElseThrow(() -> new RuntimeException("Failed to find gui for " + resourceLocation)); + } + @Override public void open(EntityPlayer player, BlockPos pos, World world) { if(!world.isRemote){ - throw new UnsupportedOperationException("fix opening guis"); + EGui gui = this; + NetworkHooks.openGui((EntityPlayerMP) player, new IInteractionObject() { + @Override + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) { + TileEntity tileEntity = playerIn.world.getTileEntity(pos); + if (tileEntity instanceof IContainerProvider) { + return ((IContainerProvider) tileEntity).createContainer(player); + } + return null; + } + + @Override + public String getGuiID() { + return gui.name().toLowerCase(); + } + + @Override + public ITextComponent getName() { + return new TextComponentString(gui.name().toLowerCase()); + } + + @Override + public boolean hasCustomName() { + return false; + } + + @Nullable + @Override + public ITextComponent getCustomName() { + return null; + } + }, new Consumer() { + @Override + public void accept(PacketBuffer packetBuffer) { + packetBuffer.writeBlockPos(pos); + } + }); //player.openGui(TechReborn.INSTANCE, this.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); } } diff --git a/src/main/java/techreborn/events/RegistryEventHandler.java b/src/main/java/techreborn/events/RegistryEventHandler.java index 477a6415e..8027ab57e 100644 --- a/src/main/java/techreborn/events/RegistryEventHandler.java +++ b/src/main/java/techreborn/events/RegistryEventHandler.java @@ -7,6 +7,7 @@ import net.minecraft.block.Block; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntityType; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -20,6 +21,7 @@ import techreborn.config.ConfigTechReborn; import techreborn.init.TRArmorMaterial; import techreborn.init.TRContent; import techreborn.init.TRContent.*; +import techreborn.init.TRTileEntities; import techreborn.init.TRToolTeir; import techreborn.itemblocks.ItemBlockRubberSapling; import techreborn.items.DynamicCell; @@ -50,6 +52,7 @@ import techreborn.items.tool.vanilla.ItemTRSword; import techreborn.utils.InitUtils; import java.util.Arrays; +import java.util.function.Consumer; /** * @author drcrazy @@ -194,6 +197,11 @@ public class RegistryEventHandler { TechReborn.LOGGER.debug("TechReborns Items Loaded"); } + + @SubscribeEvent + public static void registerTiles(RegistryEvent.Register> event) { + TRTileEntities.TYPES.forEach(tileEntityType -> event.getRegistry().register(tileEntityType)); + } // @SubscribeEvent(priority = EventPriority.LOW)//LOW is used as we want it to load as late as possible, but before crafttweaker // public static void registerRecipes(RegistryEvent.Register event) { diff --git a/src/main/java/techreborn/init/TRTileEntities.java b/src/main/java/techreborn/init/TRTileEntities.java index dce6bc636..33916fae2 100644 --- a/src/main/java/techreborn/init/TRTileEntities.java +++ b/src/main/java/techreborn/init/TRTileEntities.java @@ -31,6 +31,7 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.ResourceLocation; import net.minecraft.util.datafix.DataFixesManager; import net.minecraft.util.datafix.TypeReferences; +import net.minecraft.util.registry.IRegistry; import reborncore.common.tile.TileMachineBase; import techreborn.tiles.*; import techreborn.tiles.cable.TileCable; @@ -58,6 +59,8 @@ import techreborn.tiles.transformers.TileHVTransformer; import techreborn.tiles.transformers.TileLVTransformer; import techreborn.tiles.transformers.TileMVTransformer; +import java.util.ArrayList; +import java.util.List; import java.util.function.Supplier; public class TRTileEntities { @@ -121,8 +124,10 @@ public class TRTileEntities { public static final TileEntityType ALARM = register(TileAlarm.class, "alarm"); public static final TileEntityType FLUID_REPLICATOR = register(TileFluidReplicator.class, "fluid_replicator"); + public static List> TYPES = new ArrayList<>(); + public static TileEntityType register(Class tClass, String name) { - return register(new ResourceLocation("techrebonr", name).toString(), TileEntityType.Builder.create(() -> { + return register(new ResourceLocation("techrebon", name).toString(), TileEntityType.Builder.create(() -> { //TODO clean this up try { return tClass.newInstance(); @@ -134,6 +139,7 @@ public class TRTileEntities { public static TileEntityType register(String id, TileEntityType.Builder builder) { TileEntityType tileEntityType = builder.build(null); + tileEntityType.setRegistryName(new ResourceLocation(id)); return tileEntityType; }