Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions src/main/java/gregtech/GregTechMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import gregtech.api.model.ResourcePackHook;
import gregtech.api.net.NetworkHandler;
import gregtech.api.recipes.RecipeMap;
import gregtech.api.terminal.util.GuideJsonLoader;
import gregtech.api.terminal.TerminalRegistry;
import gregtech.api.unification.OreDictUnifier;
import gregtech.api.unification.material.IMaterialHandler;
import gregtech.api.unification.material.MaterialRegistry;
Expand All @@ -37,8 +37,6 @@
import gregtech.common.worldgen.WorldGenRubberTree;
import gregtech.integration.theoneprobe.TheOneProbeCompatibility;
import gregtech.loaders.dungeon.DungeonLootLoader;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.SimpleReloadableResourceManager;
import gregtech.loaders.recipe.component.AnnotatedComponentHandlerLoader;
import net.minecraftforge.classloading.FMLForgePlugin;
import net.minecraftforge.fluids.FluidRegistry;
Expand Down Expand Up @@ -66,7 +64,6 @@ public class GregTechMod {
BlockOreFactory.init();
BlockCompressedFactory.init();
BlockFrameFactory.init();
((SimpleReloadableResourceManager)Minecraft.getMinecraft().getResourceManager()).registerReloadListener(new GuideJsonLoader());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import gregtech.api.capability.tool.IScrewdriverItem;
import gregtech.api.capability.tool.ISoftHammerItem;
import gregtech.api.capability.tool.IWrenchItem;
import gregtech.api.terminal.hardware.HardwareProvider;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
Expand Down Expand Up @@ -41,6 +42,9 @@ public class GregtechCapabilities {
@CapabilityInject(IMultiblockController.class)
public static Capability<IMultiblockController> CAPABILITY_MULTIBLOCK_CONTROLLER = null;

@CapabilityInject(HardwareProvider.class)
public static Capability<HardwareProvider> CAPABILITY_HARDWARE_PROVIDER = null;

private static final ResourceLocation CAPABILITY_EU_TO_FE = new ResourceLocation(GTValues.MODID, "fe_capability");

@SubscribeEvent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import gregtech.api.capability.tool.ISoftHammerItem;
import gregtech.api.capability.tool.IWrenchItem;
import gregtech.api.cover.ICoverable;
import gregtech.api.terminal.hardware.HardwareProvider;
import gregtech.api.worldgen.generator.GTWorldGenCapability;
import net.minecraft.nbt.NBTBase;
import net.minecraft.util.EnumFacing;
Expand Down Expand Up @@ -44,6 +45,7 @@ public static void init() {
registerCapabilityWithNoDefault(IFuelable.class);
registerCapabilityWithNoDefault(IMultiblockController.class);
registerCapabilityWithNoDefault(AbstractRecipeLogic.class);
registerCapabilityWithNoDefault(HardwareProvider.class);

registerCapabilityWithNoDefault(IWrenchItem.class);
registerCapabilityWithNoDefault(ICutterItem.class);
Expand Down
163 changes: 141 additions & 22 deletions src/main/java/gregtech/api/terminal/TerminalRegistry.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
package gregtech.api.terminal;

import gregtech.api.GTValues;
import gregtech.api.terminal.app.*;
import gregtech.api.terminal.app.AbstractApplication;
import gregtech.api.terminal.hardware.BatteryHardware;
import gregtech.api.terminal.hardware.Hardware;
import gregtech.api.terminal.util.GuideJsonLoader;
import gregtech.api.util.FileUtility;
import gregtech.api.util.GTLog;
import gregtech.common.ConfigHolder;
import gregtech.common.terminal.app.ThemeSettingApp;
import gregtech.common.terminal.app.console.ConsoleApp;
import gregtech.common.terminal.app.guide.ItemGuideApp;
Expand All @@ -11,43 +17,156 @@
import gregtech.common.terminal.app.guideeditor.GuideEditorApp;
import gregtech.common.terminal.app.prospector.OreProspectorApp;
import gregtech.common.terminal.app.recipechart.RecipeChartApp;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.SimpleReloadableResourceManager;
import net.minecraft.util.registry.RegistryDefaulted;
import net.minecraft.util.registry.RegistrySimple;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

import java.util.*;
import javax.annotation.Nullable;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class TerminalRegistry {
private static final Map<String, AbstractApplication> appRegister = new HashMap<>();
private static final List<String> defaultApps = new ArrayList<>();
public static final RegistrySimple<String, AbstractApplication> APP_REGISTER = new RegistrySimple<>();
public static final RegistrySimple<String, Hardware> HW_REGISTER = new RegistrySimple<>();
public static final RegistrySimple<String, List<Hardware>> APP_HW_DEMAND = new RegistryDefaulted<>(Collections.emptyList());
public static final RegistrySimple<String, List<List<Object>>> APP_UPGRADE_CONDITIONS = new RegistryDefaulted<>(Collections.emptyList());
public static final List<String> DEFAULT_APPS = new ArrayList<>();
@SideOnly(Side.CLIENT)
public static final File TERMINAL_PATH = new File(Loader.instance().getConfigDir(), ConfigHolder.clientConfig.terminalRootPath);

public static void init() {
registerApp(new SimpleMachineGuideApp(), true);
registerApp(new MultiBlockGuideApp(), true);
registerApp(new ItemGuideApp(), true);
registerApp(new TutorialGuideApp(), true);
registerApp(new GuideEditorApp(), true);
registerApp(new ThemeSettingApp(), true);
registerApp(new OreProspectorApp(), true);
// register hardware
registerHardware(new BatteryHardware());
// register applications
AppBuilder.create(new SimpleMachineGuideApp()).defaultApp(true).build();
AppBuilder.create(new MultiBlockGuideApp()).defaultApp(true).build();
AppBuilder.create(new ItemGuideApp()).defaultApp(true).build();
AppBuilder.create(new TutorialGuideApp()).defaultApp(true).build();
AppBuilder.create(new GuideEditorApp()).defaultApp(true).build();
AppBuilder.create(new ThemeSettingApp()).defaultApp(true).build();
AppBuilder.create(new OreProspectorApp()).defaultApp(false).build();
if (GTValues.isModLoaded(GTValues.MODID_JEI)) {
registerApp(new RecipeChartApp(), true);
AppBuilder.create(new RecipeChartApp()).defaultApp(false).build();
}
registerApp(new ConsoleApp(), true);
AppBuilder.create(new ConsoleApp()).defaultApp(false).build();

}

@SideOnly(Side.CLIENT)
public static void initTerminalFiles() {
FileUtility.extractJarFiles(String.format("/assets/%s/%s", GTValues.MODID, "terminal"), TERMINAL_PATH, false);
((SimpleReloadableResourceManager) Minecraft.getMinecraft().getResourceManager()).registerReloadListener(new GuideJsonLoader());
}

public static void registerApp(AbstractApplication application) {
String name = application.getRegistryName();
if (APP_REGISTER.containsKey(name)) {
GTLog.logger.warn("Duplicate APP registry names exist: {}", name);
return;
}
APP_REGISTER.putObject(name, application);
}

public static void registerHardware(Hardware hardware) {
String name = hardware.getRegistryName();
if (APP_REGISTER.containsKey(name)) {
GTLog.logger.warn("Duplicate APP registry names exist: {}", name);
return;
}
HW_REGISTER.putObject(name, hardware);
}

public static void registerApp(AbstractApplication application, boolean isDefaultApp) {
appRegister.put(application.getRegistryName(), application);
if (isDefaultApp) {
defaultApps.add(application.getRegistryName());
public static void registerHardwareDemand(String name, boolean isDefaultApp, @Nullable List<Hardware> hardware, @Nullable List<List<Object>> upgrade) {
if (name != null && APP_REGISTER.containsKey(name)) {
if (isDefaultApp) {
DEFAULT_APPS.add(name);
}
if (hardware != null && !hardware.isEmpty()) {
APP_HW_DEMAND.putObject(name, hardware);
}
if (upgrade != null && !upgrade.isEmpty()) {
APP_UPGRADE_CONDITIONS.putObject(name, upgrade);
}
} else {
GTLog.logger.error("Not found the app {}", name);
}
}

public static List<String> getDefaultApps() {
return defaultApps;
public static List<AbstractApplication> getDefaultApps() {
return DEFAULT_APPS.stream().map(APP_REGISTER::getObject).collect(Collectors.toList());
}

public static List<String> getAllApps() {
return new ArrayList<>(appRegister.keySet());
public static List<AbstractApplication> getAllApps() {
return APP_REGISTER.getKeys().stream().map(APP_REGISTER::getObject).collect(Collectors.toList());
}

public static AbstractApplication getApplication(String name) {
return appRegister.get(name);
return APP_REGISTER.getObject(name);
}

public static List<Hardware> getAllHardware() {
return HW_REGISTER.getKeys().stream().map(HW_REGISTER::getObject).collect(Collectors.toList());
}

public static Hardware getHardware(String name) {
return HW_REGISTER.getObject(name);
}

public static List<Hardware> getAppHardwareDemand(String name) {
return APP_HW_DEMAND.getObject(name);
}

public static List<List<Object>> getAppHardwareUpgradeConditions(String name) {
return APP_UPGRADE_CONDITIONS.getObject(name);
}

private static class AppBuilder {
AbstractApplication app;
boolean isDefaultApp;
List<Hardware> hardware;
List<List<Object>> upgrade;

public static AppBuilder create(AbstractApplication app){
AppBuilder builder = new AppBuilder();
builder.app = app;
builder.hardware = new ArrayList<>();
builder.upgrade = new ArrayList<>(Collections.nCopies(app.getMaxTier(), null));
return builder;
}

public AppBuilder defaultApp(boolean isDefaultApp){
this.isDefaultApp = isDefaultApp;
return this;
}

public AppBuilder battery(int tier, long cost) {
this.hardware.add(new BatteryHardware.BatteryDemand(tier, cost));
return this;
}

public AppBuilder hardware(Hardware... hardware) {
this.hardware.addAll(Arrays.asList(hardware));
return this;
}

public AppBuilder upgrade(int tier, List<Object> objects) {
if (tier < upgrade.size()) {
upgrade.set(tier, objects);
}
return this;
}

public void build() {
TerminalRegistry.registerApp(app);
TerminalRegistry.registerHardwareDemand(app.getRegistryName(), isDefaultApp, hardware, upgrade);
}
}
}
29 changes: 24 additions & 5 deletions src/main/java/gregtech/api/terminal/app/AbstractApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import gregtech.api.util.GTLog;
import gregtech.api.util.Position;
import gregtech.api.util.Size;
import gregtech.common.terminal.app.guide.GuideApp;
import gregtech.common.items.behaviors.TerminalBehaviour;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.PacketBuffer;
Expand All @@ -20,6 +20,8 @@ public abstract class AbstractApplication extends AnimaWidgetGroup {
protected final String name;
protected final IGuiTexture icon;
protected TerminalOSWidget os;
protected boolean isClient;
protected NBTTagCompound nbt;

public AbstractApplication(String name, IGuiTexture icon) {
super(Position.ORIGIN, new Size(333, 232));
Expand All @@ -44,20 +46,23 @@ public IGuiTexture getIcon() {
return icon;
}

public AbstractApplication createApp(TerminalOSWidget os, boolean isClient, NBTTagCompound nbt) {
public AbstractApplication createAppInstance(TerminalOSWidget os, boolean isClient, NBTTagCompound nbt) {
try {
return this.getClass().newInstance().setOs(os).initApp(isClient, nbt);
AbstractApplication app = this.getClass().newInstance();
app.isClient = isClient;
app.nbt = nbt;
return app;
} catch (InstantiationException | IllegalAccessException e) {
GTLog.logger.error("Error while create default app. {}", this.getClass(), e);
}
return null;
}

protected AbstractApplication initApp(boolean isClient, NBTTagCompound nbt) {
public AbstractApplication initApp() {
return this;
}

public NBTTagCompound closeApp(boolean isClient, NBTTagCompound nbt) {
public NBTTagCompound closeApp() {
return null;
}

Expand All @@ -79,6 +84,20 @@ public boolean canPlayerUse(EntityPlayer player) {
return true;
}

public final int getAppTier() {
if (nbt != null) {
if (TerminalBehaviour.isCreative(getOs().itemStack)) {
return getMaxTier();
}
return Math.min(nbt.getInteger("_tier"), getMaxTier());
}
return 0;
}

public int getMaxTier() {
return 0;
}

@Override
protected void writeClientAction(int id, Consumer<PacketBuffer> packetBufferWriter) {
if (!isClientSideApp()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,12 @@ public TreeNode<K, T> jumpTo(List<K> path) {
list.add(index + 1 + j, node.getChildren().get(j));
}
}
index = i + 1;
index++;
dim++;
flag = true;
break;
} else {
index++;
}
}
if (!flag) return null;
Expand Down
Loading