Horrible quick port of gui handling, tiles still need fixing first tho

This commit is contained in:
modmuss50 2019-02-24 00:13:27 +00:00
parent db3a6f2c7e
commit 4d32e6e292
3 changed files with 204 additions and 2 deletions

View file

@ -24,10 +24,54 @@
package techreborn.client; 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.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.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.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.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 { public enum EGui implements IMachineGuiHandler {
@ -81,10 +125,154 @@ public enum EGui implements IMachineGuiHandler {
this.containerBuilder = containerBuilder; 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 @Override
public void open(EntityPlayer player, BlockPos pos, World world) { public void open(EntityPlayer player, BlockPos pos, World world) {
if(!world.isRemote){ 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<PacketBuffer>() {
@Override
public void accept(PacketBuffer packetBuffer) {
packetBuffer.writeBlockPos(pos);
}
});
//player.openGui(TechReborn.INSTANCE, this.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); //player.openGui(TechReborn.INSTANCE, this.ordinal(), world, pos.getX(), pos.getY(), pos.getZ());
} }
} }

View file

@ -7,6 +7,7 @@ import net.minecraft.block.Block;
import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
@ -20,6 +21,7 @@ import techreborn.config.ConfigTechReborn;
import techreborn.init.TRArmorMaterial; import techreborn.init.TRArmorMaterial;
import techreborn.init.TRContent; import techreborn.init.TRContent;
import techreborn.init.TRContent.*; import techreborn.init.TRContent.*;
import techreborn.init.TRTileEntities;
import techreborn.init.TRToolTeir; import techreborn.init.TRToolTeir;
import techreborn.itemblocks.ItemBlockRubberSapling; import techreborn.itemblocks.ItemBlockRubberSapling;
import techreborn.items.DynamicCell; import techreborn.items.DynamicCell;
@ -50,6 +52,7 @@ import techreborn.items.tool.vanilla.ItemTRSword;
import techreborn.utils.InitUtils; import techreborn.utils.InitUtils;
import java.util.Arrays; import java.util.Arrays;
import java.util.function.Consumer;
/** /**
* @author drcrazy * @author drcrazy
@ -195,6 +198,11 @@ public class RegistryEventHandler {
TechReborn.LOGGER.debug("TechReborns Items Loaded"); TechReborn.LOGGER.debug("TechReborns Items Loaded");
} }
@SubscribeEvent
public static void registerTiles(RegistryEvent.Register<TileEntityType<?>> 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 // @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<IRecipe> event) { // public static void registerRecipes(RegistryEvent.Register<IRecipe> event) {
// //Register ModRecipes // //Register ModRecipes

View file

@ -31,6 +31,7 @@ import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.datafix.DataFixesManager; import net.minecraft.util.datafix.DataFixesManager;
import net.minecraft.util.datafix.TypeReferences; import net.minecraft.util.datafix.TypeReferences;
import net.minecraft.util.registry.IRegistry;
import reborncore.common.tile.TileMachineBase; import reborncore.common.tile.TileMachineBase;
import techreborn.tiles.*; import techreborn.tiles.*;
import techreborn.tiles.cable.TileCable; import techreborn.tiles.cable.TileCable;
@ -58,6 +59,8 @@ import techreborn.tiles.transformers.TileHVTransformer;
import techreborn.tiles.transformers.TileLVTransformer; import techreborn.tiles.transformers.TileLVTransformer;
import techreborn.tiles.transformers.TileMVTransformer; import techreborn.tiles.transformers.TileMVTransformer;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier; import java.util.function.Supplier;
public class TRTileEntities { public class TRTileEntities {
@ -121,8 +124,10 @@ public class TRTileEntities {
public static final TileEntityType ALARM = register(TileAlarm.class, "alarm"); public static final TileEntityType ALARM = register(TileAlarm.class, "alarm");
public static final TileEntityType FLUID_REPLICATOR = register(TileFluidReplicator.class, "fluid_replicator"); public static final TileEntityType FLUID_REPLICATOR = register(TileFluidReplicator.class, "fluid_replicator");
public static List<TileEntityType<?>> TYPES = new ArrayList<>();
public static <T extends TileEntity> TileEntityType<T> register(Class<T> tClass, String name) { public static <T extends TileEntity> TileEntityType<T> register(Class<T> 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 //TODO clean this up
try { try {
return tClass.newInstance(); return tClass.newInstance();
@ -134,6 +139,7 @@ public class TRTileEntities {
public static <T extends TileEntity> TileEntityType<T> register(String id, TileEntityType.Builder<T> builder) { public static <T extends TileEntity> TileEntityType<T> register(String id, TileEntityType.Builder<T> builder) {
TileEntityType<T> tileEntityType = builder.build(null); TileEntityType<T> tileEntityType = builder.build(null);
tileEntityType.setRegistryName(new ResourceLocation(id));
return tileEntityType; return tileEntityType;
} }