diff --git a/src/main/java/gregtech/GregTechMod.java b/src/main/java/gregtech/GregTechMod.java index 925807f0356..9ed18f28d8b 100644 --- a/src/main/java/gregtech/GregTechMod.java +++ b/src/main/java/gregtech/GregTechMod.java @@ -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; @@ -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; @@ -66,7 +64,6 @@ public class GregTechMod { BlockOreFactory.init(); BlockCompressedFactory.init(); BlockFrameFactory.init(); - ((SimpleReloadableResourceManager)Minecraft.getMinecraft().getResourceManager()).registerReloadListener(new GuideJsonLoader()); } } diff --git a/src/main/java/gregtech/api/capability/GregtechCapabilities.java b/src/main/java/gregtech/api/capability/GregtechCapabilities.java index dd765489b68..9829eaa3677 100644 --- a/src/main/java/gregtech/api/capability/GregtechCapabilities.java +++ b/src/main/java/gregtech/api/capability/GregtechCapabilities.java @@ -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; @@ -41,6 +42,9 @@ public class GregtechCapabilities { @CapabilityInject(IMultiblockController.class) public static Capability CAPABILITY_MULTIBLOCK_CONTROLLER = null; + @CapabilityInject(HardwareProvider.class) + public static Capability CAPABILITY_HARDWARE_PROVIDER = null; + private static final ResourceLocation CAPABILITY_EU_TO_FE = new ResourceLocation(GTValues.MODID, "fe_capability"); @SubscribeEvent diff --git a/src/main/java/gregtech/api/capability/SimpleCapabilityManager.java b/src/main/java/gregtech/api/capability/SimpleCapabilityManager.java index b13cb856062..9e2432286e7 100644 --- a/src/main/java/gregtech/api/capability/SimpleCapabilityManager.java +++ b/src/main/java/gregtech/api/capability/SimpleCapabilityManager.java @@ -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; @@ -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); diff --git a/src/main/java/gregtech/api/terminal/TerminalRegistry.java b/src/main/java/gregtech/api/terminal/TerminalRegistry.java index 3e517af283b..a537fa0cc36 100644 --- a/src/main/java/gregtech/api/terminal/TerminalRegistry.java +++ b/src/main/java/gregtech/api/terminal/TerminalRegistry.java @@ -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; @@ -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 appRegister = new HashMap<>(); - private static final List defaultApps = new ArrayList<>(); + public static final RegistrySimple APP_REGISTER = new RegistrySimple<>(); + public static final RegistrySimple HW_REGISTER = new RegistrySimple<>(); + public static final RegistrySimple> APP_HW_DEMAND = new RegistryDefaulted<>(Collections.emptyList()); + public static final RegistrySimple>> APP_UPGRADE_CONDITIONS = new RegistryDefaulted<>(Collections.emptyList()); + public static final List 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, @Nullable List> 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 getDefaultApps() { - return defaultApps; + public static List getDefaultApps() { + return DEFAULT_APPS.stream().map(APP_REGISTER::getObject).collect(Collectors.toList()); } - public static List getAllApps() { - return new ArrayList<>(appRegister.keySet()); + public static List 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 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 getAppHardwareDemand(String name) { + return APP_HW_DEMAND.getObject(name); + } + + public static List> getAppHardwareUpgradeConditions(String name) { + return APP_UPGRADE_CONDITIONS.getObject(name); + } + + private static class AppBuilder { + AbstractApplication app; + boolean isDefaultApp; + List hardware; + List> 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 objects) { + if (tier < upgrade.size()) { + upgrade.set(tier, objects); + } + return this; + } + + public void build() { + TerminalRegistry.registerApp(app); + TerminalRegistry.registerHardwareDemand(app.getRegistryName(), isDefaultApp, hardware, upgrade); + } } } diff --git a/src/main/java/gregtech/api/terminal/app/AbstractApplication.java b/src/main/java/gregtech/api/terminal/app/AbstractApplication.java index 9ad4b1170fc..64e5418e7c1 100644 --- a/src/main/java/gregtech/api/terminal/app/AbstractApplication.java +++ b/src/main/java/gregtech/api/terminal/app/AbstractApplication.java @@ -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; @@ -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)); @@ -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; } @@ -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 packetBufferWriter) { if (!isClientSideApp()) { diff --git a/src/main/java/gregtech/api/terminal/gui/widgets/TreeListWidget.java b/src/main/java/gregtech/api/terminal/gui/widgets/TreeListWidget.java index 2303c7f6d0a..afd9ce0ca43 100644 --- a/src/main/java/gregtech/api/terminal/gui/widgets/TreeListWidget.java +++ b/src/main/java/gregtech/api/terminal/gui/widgets/TreeListWidget.java @@ -179,10 +179,12 @@ public TreeNode jumpTo(List path) { list.add(index + 1 + j, node.getChildren().get(j)); } } - index = i + 1; + index++; dim++; flag = true; break; + } else { + index++; } } if (!flag) return null; diff --git a/src/main/java/gregtech/api/terminal/hardware/BatteryHardware.java b/src/main/java/gregtech/api/terminal/hardware/BatteryHardware.java new file mode 100644 index 00000000000..f2454601670 --- /dev/null +++ b/src/main/java/gregtech/api/terminal/hardware/BatteryHardware.java @@ -0,0 +1,150 @@ +package gregtech.api.terminal.hardware; + +import gregtech.api.GTValues; +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IElectricItem; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.capabilities.Capability; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiConsumer; + +/** + * Created with IntelliJ IDEA. + * + * @Author: KilaBash + * @Date: 2021/08/28 + * @Description: + */ +public class BatteryHardware extends Hardware implements IElectricItem { + protected final List> listeners = new ArrayList<>(); + + public BatteryHardware() { + } + + @Override + public boolean isHardwareAdequate(Hardware demand) { + return demand instanceof BatteryHardware && ((BatteryHardware) demand).getTier() < this.getTier(); + } + + @Override + public Hardware createHardware(ItemStack itemStack) { + return new BatteryHardware(); + } + + @Override + public String getRegistryName() { + return "battery"; + } + + @Override + public void addChargeListener(BiConsumer chargeListener) { + listeners.add(chargeListener); + } + + protected void setCharge(long change) { + getNBT().setLong("charge", change); + listeners.forEach(l -> l.accept(provider.getItemStack(), change)); + } + + @Override + public long getTransferLimit() { + return GTValues.V[getTier()]; + } + + @Override + public long getMaxCharge() { + return isCreative() ? Long.MAX_VALUE : getNBT().getLong("maxCharge"); + } + + public long getCharge() { + return isCreative() ? Long.MAX_VALUE : getNBT().getLong("charge"); + } + + @Override + public boolean canProvideChargeExternally() { + return false; + } + + @Override + public long charge(long amount, int chargerTier, boolean ignoreTransferLimit, boolean simulate) { + if (provider.getItemStack().getCount() != 1) { + return 0L; + } + if ((chargerTier >= getTier()) && amount > 0L) { + long canReceive = getMaxCharge() - getCharge(); + if (!ignoreTransferLimit) { + amount = Math.min(amount, getTransferLimit()); + } + long charged = Math.min(amount, canReceive); + if (!simulate) { + setCharge(getCharge() + charged); + } + return charged; + } + return 0; + } + + @Override + public long discharge(long amount, int chargerTier, boolean ignoreTransferLimit, boolean externally, boolean simulate) { + if (provider.getItemStack().getCount() != 1) { + return 0L; + } + if ((!externally || amount == Long.MAX_VALUE) && (chargerTier >= getTier()) && amount > 0L) { + if (!ignoreTransferLimit) { + amount = Math.min(amount, getTransferLimit()); + } + long charge = getCharge(); + long discharged = Math.min(amount, charge); + if (!simulate) { + setCharge(charge - discharged); + } + return discharged; + } + return 0; + } + + @Override + public int getTier() { + return isCreative() ? GTValues.V.length - 1 : getNBT().getInteger("tier"); + } + + @Override + public boolean hasCapability(@Nonnull Capability capability) { + return capability == GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM; + } + + @Nullable + @Override + public T getCapability(@Nonnull Capability capability) { + return capability == GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM ? GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM.cast(this) : null; + } + + public static class BatteryDemand extends BatteryHardware { + + public final int tier; + public final long cost; + + public BatteryDemand(int tier, long cost) { + this.tier = tier; + this.cost = cost; + } + + @Override + public int getTier() { + return super.getTier(); + } + + @Override + public long getCharge() { + return this.getCost(); + } + + public long getCost() { + return cost; + } + } +} diff --git a/src/main/java/gregtech/api/terminal/hardware/Hardware.java b/src/main/java/gregtech/api/terminal/hardware/Hardware.java new file mode 100644 index 00000000000..90b047b5a0f --- /dev/null +++ b/src/main/java/gregtech/api/terminal/hardware/Hardware.java @@ -0,0 +1,78 @@ +package gregtech.api.terminal.hardware; + +import gregtech.common.items.behaviors.TerminalBehaviour; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +/** + * Created with IntelliJ IDEA. + * + * @Author: KilaBash + * @Date: 2021/08/27 + * @Description: + */ +public abstract class Hardware implements ICapabilityProvider { + protected HardwareProvider provider; + + public abstract String getRegistryName(); + + public final String getUnlocalizedName() { + return "terminal.hw." + getRegistryName(); + } + + public boolean isHardwareAdequate(Hardware demand) { + return this.getClass() == demand.getClass() || this.getRegistryName().equals(demand.getRegistryName()); + } + + public final boolean hasHW() { + return provider.hasHardware(getRegistryName()); + } + + public final NBTTagCompound getNBT() { + return provider.getHardwareNBT(getRegistryName()); + } + + public final boolean isCreative(){ + return TerminalBehaviour.isCreative(provider.getItemStack()); + } + + @SideOnly(Side.CLIENT) + public String addInformation() { + return null; + } + + protected abstract Hardware createHardware(ItemStack itemStack); + + @Override + public final boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) { + if (!isCreative() && !hasHW()) { + return false; + } + return hasCapability(capability); + } + + protected boolean hasCapability(@Nonnull Capability capability) { + return false; + } + + @Nullable + @Override + public final T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) { + if (!isCreative() && !hasHW()) { + return null; + } + return getCapability(capability); + } + + protected T getCapability(@Nonnull Capability capability) { + return null; + } +} diff --git a/src/main/java/gregtech/api/terminal/hardware/HardwareProvider.java b/src/main/java/gregtech/api/terminal/hardware/HardwareProvider.java new file mode 100644 index 00000000000..e2b7d3e8e39 --- /dev/null +++ b/src/main/java/gregtech/api/terminal/hardware/HardwareProvider.java @@ -0,0 +1,93 @@ +package gregtech.api.terminal.hardware; + +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.items.metaitem.stats.IItemCapabilityProvider; +import gregtech.api.terminal.TerminalRegistry; +import gregtech.common.items.behaviors.TerminalBehaviour; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Created with IntelliJ IDEA. + * + * @Author: KilaBash + * @Date: 2021/08/28 + * @Description: + */ +public class HardwareProvider implements ICapabilityProvider, IItemCapabilityProvider { + private Map providers; + private ItemStack itemStack; + + + public HardwareProvider() { + + } + + public ItemStack getItemStack() { + return itemStack; + } + + public List getHardware() { + if (TerminalBehaviour.isCreative(itemStack)) { + return new ArrayList<>(providers.values()); + } + return itemStack.getOrCreateSubCompound("terminal").getCompoundTag("_hw").getKeySet().stream().map(providers::get).filter(Objects::nonNull).collect(Collectors.toList()); + } + + public boolean hasHardware(String name) { + return itemStack.getOrCreateSubCompound("terminal").getCompoundTag("_hw").hasKey(name); + } + + public NBTTagCompound getHardwareNBT(String name) { + return itemStack.getOrCreateSubCompound("terminal").getCompoundTag("_hw").getCompoundTag(name); + } + + @Override + public ICapabilityProvider createProvider(ItemStack itemStack) { + HardwareProvider provider = new HardwareProvider(); + provider.providers = new HashMap<>(); + provider.itemStack = itemStack; + for (Hardware hardware : TerminalRegistry.getAllHardware()) { + Hardware instance = hardware.createHardware(itemStack); + if (instance != null) { + instance.provider = provider; + provider.providers.put(hardware.getRegistryName(), instance); + } + } + return provider; + } + + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) { + if (providers != null) { + for (ICapabilityProvider provider : providers.values()) { + if (provider.hasCapability(capability, facing)) { + return true; + } + } + } + return capability == GregtechCapabilities.CAPABILITY_HARDWARE_PROVIDER; + } + + @Nullable + @Override + public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) { + if (providers != null) { + for (ICapabilityProvider provider : providers.values()) { + T cap = provider.getCapability(capability, facing); + if (cap != null) { + return cap; + } + } + } + return capability == GregtechCapabilities.CAPABILITY_HARDWARE_PROVIDER ? GregtechCapabilities.CAPABILITY_HARDWARE_PROVIDER.cast(this) : null; + } +} diff --git a/src/main/java/gregtech/api/terminal/os/TerminalOSWidget.java b/src/main/java/gregtech/api/terminal/os/TerminalOSWidget.java index be1c87e2f78..f09271a001e 100644 --- a/src/main/java/gregtech/api/terminal/os/TerminalOSWidget.java +++ b/src/main/java/gregtech/api/terminal/os/TerminalOSWidget.java @@ -1,15 +1,20 @@ package gregtech.api.terminal.os; +import gregtech.api.capability.GregtechCapabilities; import gregtech.api.gui.IRenderContext; import gregtech.api.gui.ModularUI; import gregtech.api.gui.resources.IGuiTexture; import gregtech.api.gui.widgets.AbstractWidgetGroup; import gregtech.api.terminal.TerminalRegistry; import gregtech.api.terminal.app.AbstractApplication; +import gregtech.api.terminal.hardware.HardwareProvider; +import gregtech.api.terminal.hardware.Hardware; import gregtech.api.terminal.os.menu.TerminalMenuWidget; import gregtech.api.util.Position; import gregtech.api.util.RenderUtil; import gregtech.api.util.Size; +import gregtech.common.items.behaviors.TerminalBehaviour; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.*; import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.BlockPos; @@ -19,6 +24,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class TerminalOSWidget extends AbstractWidgetGroup { @@ -29,22 +35,30 @@ public class TerminalOSWidget extends AbstractWidgetGroup { public final TerminalMenuWidget menu; public final TerminalDesktopWidget desktop; public final BlockPos clickPos; + public final ItemStack itemStack; + public final HardwareProvider hardwareProvider; - public TerminalOSWidget(int xPosition, int yPosition, int width, int height, NBTTagCompound tabletNBT) { + public TerminalOSWidget(int xPosition, int yPosition, int width, int height, ItemStack itemStack) { super(new Position(xPosition, yPosition), new Size(width, height)); this.openedApps = new ArrayList<>(); this.desktop = new TerminalDesktopWidget(Position.ORIGIN, new Size(333, 232), this); this.menu = new TerminalMenuWidget(Position.ORIGIN, new Size(31, 232), this).setBackground(TerminalTheme.COLOR_B_2); this.addWidget(desktop); this.addWidget(menu); - this.tabletNBT = tabletNBT; - TerminalRegistry.getDefaultApps().forEach(name-> installApplication(TerminalRegistry.getApplication(name))); - NBTTagList installed = tabletNBT.getTagList("_installed", Constants.NBT.TAG_STRING); - for (NBTBase nbtBase : installed) { - if (nbtBase instanceof NBTTagString) { - AbstractApplication app = TerminalRegistry.getApplication(((NBTTagString) nbtBase).getString()); - if (app != null) { - installApplication(app); + this.itemStack = itemStack; + this.tabletNBT = itemStack.getOrCreateSubCompound("terminal"); + this.hardwareProvider = itemStack.getCapability(GregtechCapabilities.CAPABILITY_HARDWARE_PROVIDER, null); + if (TerminalBehaviour.isCreative(itemStack)) { + TerminalRegistry.getAllApps().forEach(this::installApplication); + } else { + TerminalRegistry.getDefaultApps().forEach(this::installApplication); + NBTTagList installed = tabletNBT.getTagList("_installed", Constants.NBT.TAG_STRING); + for (NBTBase nbtBase : installed) { + if (nbtBase instanceof NBTTagString) { + AbstractApplication app = TerminalRegistry.getApplication(((NBTTagString) nbtBase).getString()); + if (app != null) { + installApplication(app); + } } } } @@ -68,11 +82,25 @@ public AbstractApplication getFocusApp() { return focusApp; } + public List getHardware() { + if (hardwareProvider == null) { + return Collections.emptyList(); + } + return hardwareProvider.getHardware(); + } + public void installApplication(AbstractApplication application){ desktop.installApplication(application); } public void openApplication(AbstractApplication application, boolean isClient) { + List hwDemand = TerminalRegistry.getAppHardwareDemand(application.getRegistryName()); + if (hwDemand.stream().anyMatch(demand -> getHardware().stream().noneMatch(hw -> hw.isHardwareAdequate(demand)))) { + return; + } + if (!application.canPlayerUse(gui.entityPlayer)) { + return; + } if (focusApp != null ) { closeApplication(focusApp, isClient); } @@ -82,8 +110,10 @@ public void openApplication(AbstractApplication application, boolean isClient) { return; } } - AbstractApplication app = application.createApp(this, isClient, tabletNBT.getCompoundTag(application.getRegistryName())).setOs(this); + NBTTagCompound nbt = tabletNBT.getCompoundTag(application.getRegistryName()); + AbstractApplication app = application.createAppInstance(this, isClient, nbt); if (app != null) { + app.setOs(this).initApp(); openedApps.add(app); desktop.addWidget(app); maximizeApplication(app, isClient); @@ -105,7 +135,7 @@ public void maximizeApplication(AbstractApplication application, boolean isClien public void minimizeApplication(AbstractApplication application, boolean isClient) { if (application != null) { - if (application.isBackgroundApp()) { + if (!application.isBackgroundApp()) { application.setActive(false); } if (isClient) { @@ -122,7 +152,7 @@ public void minimizeApplication(AbstractApplication application, boolean isClien public void closeApplication(AbstractApplication application, boolean isClient) { if (application != null) { String appName = application.getRegistryName(); - NBTTagCompound synced = application.closeApp(isClient, tabletNBT.getCompoundTag(appName)); + NBTTagCompound synced = application.closeApp(); if (synced != null && !synced.isEmpty()) { tabletNBT.setTag(appName, synced); @@ -163,7 +193,7 @@ private void shutdown() { NBTTagCompound nbt = new NBTTagCompound(); for (AbstractApplication openedApp : openedApps) { String appName = openedApp.getRegistryName(); - NBTTagCompound synced = openedApp.closeApp(true, tabletNBT.getCompoundTag(appName)); + NBTTagCompound synced = openedApp.closeApp(); if (synced != null && !synced.isEmpty()) { tabletNBT.setTag(appName, synced); if (openedApp.isClientSideApp()) {//if its a clientSideApp and the nbt not null, meaning this nbt should be synced to the server side. @@ -204,7 +234,7 @@ public void handleClientAction(int id, PacketBuffer buffer) { } for (AbstractApplication openedApp : openedApps) { String appName = openedApp.getRegistryName(); - NBTTagCompound data = openedApp.closeApp(false, tabletNBT.getCompoundTag(appName)); + NBTTagCompound data = openedApp.closeApp(); if (data != null && !data.isEmpty()) { tabletNBT.setTag(appName, data); } else if (nbt != null && openedApp.isClientSideApp() && nbt.hasKey(appName)) { diff --git a/src/main/java/gregtech/api/terminal/os/TerminalTheme.java b/src/main/java/gregtech/api/terminal/os/TerminalTheme.java index f0fcc590987..28ce58f7eab 100644 --- a/src/main/java/gregtech/api/terminal/os/TerminalTheme.java +++ b/src/main/java/gregtech/api/terminal/os/TerminalTheme.java @@ -5,13 +5,15 @@ import gregtech.api.gui.resources.ColorRectTexture; import gregtech.api.gui.resources.ModifyGuiTexture; import gregtech.api.gui.resources.TextureArea; -import gregtech.api.terminal.util.FileUtils; +import gregtech.api.util.FileUtility; import java.awt.*; import java.io.File; +import static gregtech.api.terminal.TerminalRegistry.TERMINAL_PATH; + public class TerminalTheme { - private static final String FILE_PATH = "terminal\\config\\theme.json"; + private static final String FILE_PATH = "config/theme.json"; public static final ColorRectTexture COLOR_1 = new ColorRectTexture(new Color(144, 243, 116)); public static final ColorRectTexture COLOR_2 = new ColorRectTexture(new Color(243, 208, 116)); public static final ColorRectTexture COLOR_3 = new ColorRectTexture(new Color(231, 95, 95)); @@ -30,7 +32,7 @@ public class TerminalTheme { public static final ModifyGuiTexture WALL_PAPER = new ModifyGuiTexture(TextureArea.fullImage("textures/gui/terminal/terminal_background.png")); static { - JsonElement element = FileUtils.loadJson(new File(FILE_PATH)); + JsonElement element = FileUtility.loadJson(new File(TERMINAL_PATH, FILE_PATH)); if (element == null || !element.isJsonObject()) { saveConfig(); } else { @@ -66,6 +68,6 @@ public static boolean saveConfig() { config.addProperty("COLOR_B_2", COLOR_B_2.getColor()); config.addProperty("COLOR_B_3", COLOR_B_3.getColor()); config.add("WALL_PAPER", WALL_PAPER.saveConfig()); - return FileUtils.saveJson(new File(FILE_PATH), config); + return FileUtility.saveJson(new File(TERMINAL_PATH, FILE_PATH), config); } } diff --git a/src/main/java/gregtech/api/terminal/util/FileUtils.java b/src/main/java/gregtech/api/terminal/util/FileUtils.java deleted file mode 100644 index 245cd7c0587..00000000000 --- a/src/main/java/gregtech/api/terminal/util/FileUtils.java +++ /dev/null @@ -1,39 +0,0 @@ -package gregtech.api.terminal.util; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; -import com.google.gson.stream.JsonReader; - -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; - -public class FileUtils { - public static JsonElement loadJson(File file) { - try { - FileReader reader = new FileReader(file); - JsonElement json = new JsonParser().parse(new JsonReader(reader)); - reader.close(); - return json; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - public static boolean saveJson(File file, JsonElement element) { - try { - if (!file.getParentFile().isDirectory()) { - file.getParentFile().mkdirs(); - } - FileWriter writer = new FileWriter(file); - writer.write(new Gson().toJson(element)); - writer.close(); - return true; - } catch (Exception e) { - e.printStackTrace(); - } - return false; - } -} diff --git a/src/main/java/gregtech/api/terminal/util/GuideJsonLoader.java b/src/main/java/gregtech/api/terminal/util/GuideJsonLoader.java index af2ccced8c8..6bc1c6b86f4 100644 --- a/src/main/java/gregtech/api/terminal/util/GuideJsonLoader.java +++ b/src/main/java/gregtech/api/terminal/util/GuideJsonLoader.java @@ -2,6 +2,8 @@ import com.google.gson.JsonObject; import gregtech.api.terminal.TerminalRegistry; +import gregtech.api.terminal.app.AbstractApplication; +import gregtech.api.util.GTLog; import gregtech.common.terminal.app.guide.GuideApp; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.IResourceManager; @@ -9,7 +11,10 @@ import net.minecraftforge.common.crafting.CraftingHelper; import net.minecraftforge.fml.common.Loader; +import java.io.File; +import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.List; @@ -17,30 +22,29 @@ public class GuideJsonLoader implements IResourceManagerReloadListener { @Override public void onResourceManagerReload(IResourceManager manager) { - if(Loader.instance().activeModContainer() == null) return; - if (Minecraft.getMinecraft().getLanguageManager().getCurrentLanguage() == null) return; String lang = Minecraft.getMinecraft().getLanguageManager().getCurrentLanguage().getLanguageCode(); - for (String appName : TerminalRegistry.getAllApps()) { - if (TerminalRegistry.getApplication(appName) instanceof GuideApp) { + for (AbstractApplication app : TerminalRegistry.getAllApps()) { + if (app instanceof GuideApp) { List jsons = new ArrayList<>(); - GuideApp app = (GuideApp) TerminalRegistry.getApplication(appName); - CraftingHelper.findFiles(Loader.instance().activeModContainer(), "assets/gregtech/terminal/guide/" + appName + "/en_us", Files::exists, (path, file) -> { - if(file.toString().endsWith(".json")) { - String fileName = file.getFileName().toString(); - JsonObject json = app.getConfig(fileName, lang); + GuideApp guideApp = (GuideApp) app; + try { + Path guidePath = TerminalRegistry.TERMINAL_PATH.toPath().resolve("guide/" + app.getRegistryName()); + Path en_us = guidePath.resolve("en_us"); + Files.walk(en_us).filter(Files::isRegularFile).filter(f -> f.toString().endsWith(".json")).forEach(file -> { + File langFile = guidePath.resolve(lang + "/" + en_us.relativize(file).toString()).toFile(); + JsonObject json = guideApp.getConfig(langFile); if (json == null) { - json = app.getConfig(fileName, "en_us"); + json = guideApp.getConfig(file.toFile()); } if (json != null) { jsons.add(json); } - } - return true; - },false, true); - app.loadJsonFiles(jsons); + }); + } catch (IOException e) { + GTLog.logger.error("Failed to save file on path {}", "terminal", e); + } + guideApp.loadJsonFiles(jsons); } } - - } } diff --git a/src/main/java/gregtech/api/util/FileUtility.java b/src/main/java/gregtech/api/util/FileUtility.java index ecb08443602..a04fbb7971a 100644 --- a/src/main/java/gregtech/api/util/FileUtility.java +++ b/src/main/java/gregtech/api/util/FileUtility.java @@ -1,20 +1,22 @@ package gregtech.api.util; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonParser; +import com.google.gson.*; +import com.google.gson.stream.JsonReader; +import gregtech.api.worldgen.config.WorldGenRegistry; import org.apache.commons.io.IOUtils; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; +import java.io.*; +import java.net.URI; +import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; +import java.nio.file.*; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; public class FileUtility { - private static final JsonParser jsonParser = new JsonParser(); + public static final JsonParser jsonParser = new JsonParser(); + public static final Gson gson = new Gson(); private FileUtility() { } @@ -49,4 +51,71 @@ public static JsonObject tryExtractFromFile(Path filePath) { return null; } + public static JsonElement loadJson(File file) { + try { + if (!file.isFile()) return null; + FileReader reader = new FileReader(file); + JsonElement json = jsonParser.parse(new JsonReader(reader)); + reader.close(); + return json; + } catch (Exception e) { + GTLog.logger.error("Failed to read file on path {}", file, e); + } + return null; + } + + public static boolean saveJson(File file, JsonElement element) { + try { + if (!file.getParentFile().isDirectory()) { + if (!file.getParentFile().mkdirs()){ + GTLog.logger.error("Failed to create file dirs on path {}", file); + } + } + FileWriter writer = new FileWriter(file); + writer.write(gson.toJson(element)); + writer.close(); + return true; + } catch (Exception e) { + GTLog.logger.error("Failed to save file on path {}", file, e); + } + return false; + } + + public static void extractJarFiles(String resource, File targetPath, boolean replace) { //terminal/guide + FileSystem zipFileSystem = null; + try { + URI sampleUri = WorldGenRegistry.class.getResource("/assets/gregtech/.gtassetsroot").toURI(); + Path resourcePath; + if (sampleUri.getScheme().equals("jar") || sampleUri.getScheme().equals("zip")) { + zipFileSystem = FileSystems.newFileSystem(sampleUri, Collections.emptyMap()); + resourcePath = zipFileSystem.getPath(resource); + } else if (sampleUri.getScheme().equals("file")) { + resourcePath = Paths.get(WorldGenRegistry.class.getResource(resource).toURI()); + } else { + throw new IllegalStateException("Unable to locate absolute path to directory: " + sampleUri); + } + + List jarFiles = Files.walk(resourcePath) + .filter(Files::isRegularFile) + .collect(Collectors.toList()); + for (Path jarFile : jarFiles) { + Path genPath = targetPath.toPath().resolve(resourcePath.relativize(jarFile).toString()); + Files.createDirectories(genPath.getParent()); + if (replace || !genPath.toFile().isFile()) { + Files.copy(jarFile, genPath, StandardCopyOption.REPLACE_EXISTING); + } + } + } catch (URISyntaxException impossible) { + throw new RuntimeException(impossible); + } catch (IOException exception) { + GTLog.logger.error("error while extracting jar files: {} {}", resource, targetPath, exception); + } + finally { + if (zipFileSystem != null) { + //close zip file system to avoid issues + IOUtils.closeQuietly(zipFileSystem); + } + } + + } } diff --git a/src/main/java/gregtech/common/ClientProxy.java b/src/main/java/gregtech/common/ClientProxy.java index afc45f2aaeb..ab7a5520ec7 100644 --- a/src/main/java/gregtech/common/ClientProxy.java +++ b/src/main/java/gregtech/common/ClientProxy.java @@ -8,6 +8,7 @@ import gregtech.api.GTValues; import gregtech.api.render.MetaTileEntityRenderer; import gregtech.api.render.ToolRenderHandler; +import gregtech.api.terminal.TerminalRegistry; import gregtech.api.unification.OreDictUnifier; import gregtech.api.unification.material.Material; import gregtech.api.unification.stack.UnificationEntry; @@ -121,6 +122,7 @@ public void onLoad() { @Override public void onPostLoad() { super.onPostLoad(); + TerminalRegistry.initTerminalFiles(); ResourceUtils.registerReloadListener(ToolRenderHandler.INSTANCE); ModCompatibility.initCompat(); FacadeRenderer.init(); diff --git a/src/main/java/gregtech/common/CommonProxy.java b/src/main/java/gregtech/common/CommonProxy.java index d9da0173efe..4293af6624e 100644 --- a/src/main/java/gregtech/common/CommonProxy.java +++ b/src/main/java/gregtech/common/CommonProxy.java @@ -8,14 +8,13 @@ import gregtech.api.recipes.recipeproperties.BlastTemperatureProperty; import gregtech.api.recipes.recipeproperties.FusionEUToStartProperty; import gregtech.api.terminal.TerminalRegistry; -import gregtech.api.terminal.util.GuideJsonLoader; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.properties.DustProperty; import gregtech.api.unification.material.properties.PropertyKey; import gregtech.api.unification.ore.OrePrefix; import gregtech.api.util.GTLog; -import gregtech.common.advancement.GTTriggers; import gregtech.api.util.advancement.GTTrigger; +import gregtech.common.advancement.GTTriggers; import gregtech.common.blocks.*; import gregtech.common.blocks.wood.BlockGregLeaves; import gregtech.common.blocks.wood.BlockGregLog; @@ -295,6 +294,5 @@ public void onLoad() { public void onPostLoad() { WoodMachineRecipes.postInit(); TerminalRegistry.init(); - new GuideJsonLoader().onResourceManagerReload(null); } } diff --git a/src/main/java/gregtech/common/ConfigHolder.java b/src/main/java/gregtech/common/ConfigHolder.java index bf3385425e4..0673bde8ccd 100644 --- a/src/main/java/gregtech/common/ConfigHolder.java +++ b/src/main/java/gregtech/common/ConfigHolder.java @@ -99,6 +99,19 @@ public class ConfigHolder { @Config.RequiresMcRestart public static int gasTurbineBonusOutput = 6144; + @Config.Comment("Whether to give the terminal to new players") + public static boolean spawnTerminal = true; + + @Config.Comment("Client configs for file path, rendering and so on") + @Config.Name("Client Options") + @Config.RequiresMcRestart + public static ClientConfig clientConfig = new ClientConfig(); + + public static class ClientConfig { + @Config.Comment("Terminal root path. Default: gregtech/terminal") + public String terminalRootPath = "gregtech/terminal"; + } + public static class VanillaRecipes { @Config.Comment("Whether to make glass related recipes harder. Default: true") diff --git a/src/main/java/gregtech/common/events/EventHandlerPlayer.java b/src/main/java/gregtech/common/events/EventHandlerPlayer.java new file mode 100644 index 00000000000..927f4164093 --- /dev/null +++ b/src/main/java/gregtech/common/events/EventHandlerPlayer.java @@ -0,0 +1,38 @@ +package gregtech.common.events; + +import gregtech.api.GTValues; +import gregtech.common.ConfigHolder; +import gregtech.common.items.MetaItems; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent; +import net.minecraftforge.items.ItemHandlerHelper; + +/** + * Created with IntelliJ IDEA. + * + * @Author: KilaBash + * @Date: 2021/08/27 + * @Description: reference forestry code + */ + +@Mod.EventBusSubscriber +public class EventHandlerPlayer { + private static final String HAS_TERMINAL = GTValues.MODID + ".terminal"; + + @SubscribeEvent + public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) { + if (ConfigHolder.spawnTerminal) { + NBTTagCompound playerData = event.player.getEntityData(); + NBTTagCompound data = playerData.hasKey(EntityPlayer.PERSISTED_NBT_TAG) ? playerData.getCompoundTag(EntityPlayer.PERSISTED_NBT_TAG) : new NBTTagCompound(); + + if (!data.getBoolean(HAS_TERMINAL)) { + ItemHandlerHelper.giveItemToPlayer(event.player, MetaItems.TERMINAL.getStackForm()); + data.setBoolean(HAS_TERMINAL, true); + playerData.setTag(EntityPlayer.PERSISTED_NBT_TAG, data); + } + } + } +} diff --git a/src/main/java/gregtech/common/items/MetaItem1.java b/src/main/java/gregtech/common/items/MetaItem1.java index f8cb1ee73e2..531dc42b09e 100644 --- a/src/main/java/gregtech/common/items/MetaItem1.java +++ b/src/main/java/gregtech/common/items/MetaItem1.java @@ -8,6 +8,7 @@ import gregtech.api.items.metaitem.StandardMetaItem; import gregtech.api.items.metaitem.stats.IItemComponent; import gregtech.api.items.metaitem.stats.IItemContainerItemProvider; +import gregtech.api.terminal.hardware.HardwareProvider; import gregtech.api.unification.OreDictUnifier; import gregtech.api.unification.material.MarkerMaterials.Tier; import gregtech.api.unification.material.MarkerMaterials.Component; @@ -379,7 +380,7 @@ public void registerSubItems() { // Free ID 464 SCANNER = addItem(465, "scanner").addComponents(ElectricStats.createElectricItem(200_000L, GTValues.LV), new ScannerBehavior(50)); CLIPBOARD = addItem(466, "clipboard").addComponents(new ClipboardBehavior()).setMaxStackSize(1); - TERMINAL = addItem(467, "terminal").addComponents(new TerminalBehaviour()); + TERMINAL = addItem(467, "terminal").addComponents(new HardwareProvider(), new TerminalBehaviour()); // Misc Crafting Items: ID 491-515 ENERGIUM_DUST = addItem(491, "energium_dust"); diff --git a/src/main/java/gregtech/common/items/behaviors/TerminalBehaviour.java b/src/main/java/gregtech/common/items/behaviors/TerminalBehaviour.java index 509e535ccb2..629b3b8f2a6 100644 --- a/src/main/java/gregtech/common/items/behaviors/TerminalBehaviour.java +++ b/src/main/java/gregtech/common/items/behaviors/TerminalBehaviour.java @@ -1,5 +1,6 @@ package gregtech.common.items.behaviors; +import gregtech.api.capability.GregtechCapabilities; import gregtech.api.gui.ModularUI; import gregtech.api.gui.resources.EmptyTextureArea; import gregtech.api.gui.resources.TextureArea; @@ -7,24 +8,25 @@ import gregtech.api.items.gui.ItemUIFactory; import gregtech.api.items.gui.PlayerInventoryHolder; import gregtech.api.items.metaitem.stats.IItemBehaviour; -import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.items.metaitem.stats.ISubItemHandler; import gregtech.api.metatileentity.MetaTileEntityHolder; import gregtech.api.terminal.gui.widgets.CircleButtonWidget; +import gregtech.api.terminal.hardware.Hardware; +import gregtech.api.terminal.hardware.HardwareProvider; import gregtech.api.terminal.os.TerminalOSWidget; import gregtech.api.terminal.os.TerminalTheme; +import net.minecraft.client.resources.I18n; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTUtil; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; +import net.minecraft.util.*; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import java.util.List; -public class TerminalBehaviour implements IItemBehaviour, ItemUIFactory { +public class TerminalBehaviour implements IItemBehaviour, ItemUIFactory, ISubItemHandler { private static final TextureArea TERMINAL_FRAME = TextureArea.fullImage("textures/gui/terminal/terminal_frame.png"); @Override @@ -55,11 +57,27 @@ public ActionResult onItemRightClick(World world, EntityPlayer player @Override public void addInformation(ItemStack itemStack, List lines) { + HardwareProvider provider = itemStack.getCapability(GregtechCapabilities.CAPABILITY_HARDWARE_PROVIDER, null); + if (isCreative(itemStack)) { + lines.add(I18n.format("metaitem.terminal.tooltip.creative")); + } + if (provider != null) { + List hardware = provider.getHardware(); + lines.add(I18n.format("metaitem.terminal.tooltip.hardware", hardware.size())); + for (Hardware hw : hardware) { + String info = hw.addInformation(); + if (info == null) { + lines.add(I18n.format(hw.getUnlocalizedName())); + } else { + lines.add(String.format("%s (%s)", I18n.format(hw.getUnlocalizedName()), info)); + } + } + } } @Override public ModularUI createUI(PlayerInventoryHolder holder, EntityPlayer entityPlayer) { - TerminalOSWidget os = new TerminalOSWidget(12, 11, 333, 232, holder.getCurrentItem().getOrCreateSubCompound("terminal")) + TerminalOSWidget os = new TerminalOSWidget(12, 11, 333, 232, holder.getCurrentItem()) .setBackground(TerminalTheme.WALL_PAPER); CircleButtonWidget home = new CircleButtonWidget(363, 126, 11, 2, 0) .setColors(0, TerminalTheme.COLOR_F_1.getColor(), 0) @@ -70,4 +88,21 @@ public ModularUI createUI(PlayerInventoryHolder holder, EntityPlayer entityPlaye .widget(home) .build(holder, entityPlayer); } + + public static boolean isCreative(ItemStack itemStack) { + return itemStack.getOrCreateSubCompound("terminal").getBoolean("_creative"); + } + + @Override + public String getItemSubType(ItemStack itemStack) { + return ""; + } + + @Override + public void getSubItems(ItemStack itemStack, CreativeTabs creativeTab, NonNullList subItems) { + subItems.add(itemStack); + ItemStack copy = itemStack.copy(); + copy.getOrCreateSubCompound("terminal").setBoolean("_creative", true); + subItems.add(copy); + } } diff --git a/src/main/java/gregtech/common/render/WrenchOverlayRenderer.java b/src/main/java/gregtech/common/render/WrenchOverlayRenderer.java index eff34535b33..49d21bbfb37 100644 --- a/src/main/java/gregtech/common/render/WrenchOverlayRenderer.java +++ b/src/main/java/gregtech/common/render/WrenchOverlayRenderer.java @@ -93,7 +93,7 @@ public static boolean useGridForRayTraceResult(RayTraceResult result) { } public static boolean shouldDrawOverlayForItem(ItemStack itemStack, TileEntity tileEntity) { - if (tileEntity instanceof MetaTileEntityHolder) { + if (tileEntity instanceof MetaTileEntityHolder && ((MetaTileEntityHolder) tileEntity).getMetaTileEntity() != null) { if(!((MetaTileEntityHolder) tileEntity).getMetaTileEntity().canRenderMachineGrid()) return false; } diff --git a/src/main/java/gregtech/common/terminal/app/ThemeSettingApp.java b/src/main/java/gregtech/common/terminal/app/ThemeSettingApp.java index 10d2461bbdd..0307bbeff95 100644 --- a/src/main/java/gregtech/common/terminal/app/ThemeSettingApp.java +++ b/src/main/java/gregtech/common/terminal/app/ThemeSettingApp.java @@ -6,6 +6,7 @@ import gregtech.api.gui.widgets.LabelWidget; import gregtech.api.gui.widgets.TextFieldWidget; import gregtech.api.gui.widgets.WidgetGroup; +import gregtech.api.terminal.TerminalRegistry; import gregtech.api.terminal.app.AbstractApplication; import gregtech.api.terminal.gui.widgets.CircleButtonWidget; import gregtech.api.terminal.gui.widgets.ColorWidget; @@ -30,7 +31,7 @@ public ThemeSettingApp() { private WidgetGroup textureGroup; @Override - protected AbstractApplication initApp(boolean isClient, NBTTagCompound nbt) { + public AbstractApplication initApp() { if (isClient) { //333 232 float x = 333 * 1.0f / 13; int y = 50; @@ -123,7 +124,7 @@ private void onModifyTextureChanged(String type, AbstractApplication app) { .setColors(TerminalTheme.COLOR_B_1.getColor(), TerminalTheme.COLOR_1.getColor(), TerminalTheme.COLOR_B_1.getColor()) - .setClickListener(cd-> TerminalDialogWidget.showFileDialog(app.getOs(), "terminal.theme_settings.image", new File("terminal"), true, file->{ + .setClickListener(cd-> TerminalDialogWidget.showFileDialog(app.getOs(), "terminal.theme_settings.image", TerminalRegistry.TERMINAL_PATH, true, file->{ if (file != null && file.isFile()) { TerminalTheme.WALL_PAPER.setTexture(new FileTexture(file)); TerminalTheme.saveConfig(); diff --git a/src/main/java/gregtech/common/terminal/app/console/ConsoleApp.java b/src/main/java/gregtech/common/terminal/app/console/ConsoleApp.java index 233272b78cd..4f7a7f93a09 100644 --- a/src/main/java/gregtech/common/terminal/app/console/ConsoleApp.java +++ b/src/main/java/gregtech/common/terminal/app/console/ConsoleApp.java @@ -18,7 +18,7 @@ public ConsoleApp() { } @Override - protected AbstractApplication initApp(boolean isClient, NBTTagCompound nbt) { + public AbstractApplication initApp() { if (os.clickPos == null) { // 333 232 TerminalDialogWidget.showInfoDialog(os, "terminal.dialog.notice", diff --git a/src/main/java/gregtech/common/terminal/app/guide/GuideApp.java b/src/main/java/gregtech/common/terminal/app/guide/GuideApp.java index 0d55a95e205..2282a217eb7 100644 --- a/src/main/java/gregtech/common/terminal/app/guide/GuideApp.java +++ b/src/main/java/gregtech/common/terminal/app/guide/GuideApp.java @@ -1,28 +1,25 @@ package gregtech.common.terminal.app.guide; -import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import gregtech.api.GTValues; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.resources.IGuiTexture; +import gregtech.api.terminal.TerminalRegistry; import gregtech.api.terminal.app.AbstractApplication; -import gregtech.common.terminal.app.guide.widget.GuidePageWidget; import gregtech.api.terminal.gui.widgets.TreeListWidget; import gregtech.api.terminal.os.TerminalOSWidget; import gregtech.api.terminal.os.menu.IMenuComponent; -import gregtech.common.terminal.component.SearchComponent; +import gregtech.api.terminal.util.GuideJsonLoader; import gregtech.api.terminal.util.TreeNode; -import net.minecraft.client.Minecraft; +import gregtech.api.util.FileUtility; +import gregtech.common.terminal.app.guide.widget.GuidePageWidget; +import gregtech.common.terminal.component.ClickComponent; +import gregtech.common.terminal.component.SearchComponent; import net.minecraft.client.resources.I18n; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.FMLCommonHandler; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; +import java.io.File; import java.util.*; import java.util.function.Consumer; import java.util.stream.Collectors; @@ -40,26 +37,29 @@ public GuideApp(String name, IGuiTexture icon) { } @Override - public AbstractApplication createApp(TerminalOSWidget os, boolean isClient, NBTTagCompound nbt) { - try { - GuideApp app = this.getClass().newInstance(); - app.ROOT = ROOT; - app.jsonObjectMap = jsonObjectMap; - if (isClient && getTree() != null) { - app.tree = new TreeListWidget<>(0, 0, 133, 232, getTree(), app::loadPage).setContentIconSupplier(this::itemIcon) - .setContentNameSupplier(this::itemName) - .setKeyNameSupplier(key -> key) - .setNodeTexture(GuiTextures.BORDERED_BACKGROUND) - .setLeafTexture(GuiTextures.SLOT_DARKENED); - app.addWidget(app.tree); - } + public AbstractApplication createAppInstance(TerminalOSWidget os, boolean isClient, NBTTagCompound nbt) { + AbstractApplication app = super.createAppInstance(os, isClient, nbt); + if (app instanceof GuideApp) { + ((GuideApp) app).ROOT = ROOT; + ((GuideApp) app).jsonObjectMap = jsonObjectMap; return app; - } catch (Exception e) { - e.printStackTrace(); } return null; } + @Override + public AbstractApplication initApp() { + if (isClient && getTree() != null) { + this.tree = new TreeListWidget<>(0, 0, 133, 232, getTree(), this::loadPage).setContentIconSupplier(this::itemIcon) + .setContentNameSupplier(this::itemName) + .setKeyNameSupplier(key -> key) + .setNodeTexture(GuiTextures.BORDERED_BACKGROUND) + .setLeafTexture(GuiTextures.SLOT_DARKENED); + this.addWidget(this.tree); + } + return this; + } + protected void loadPage(TreeNode leaf) { if (leaf == null) { return; @@ -113,17 +113,9 @@ public final void loadJsonFiles(List jsons) { protected abstract T ofJson(JsonObject json); - public JsonObject getConfig(String fileName, String lang) { - try { - InputStream inputStream = Minecraft.getMinecraft().getResourceManager().getResource(new ResourceLocation(GTValues.MODID, "terminal/guide/" + getRegistryName() + "/" + lang + "/" + fileName)).getInputStream(); - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - JsonElement je = new Gson().fromJson(reader, JsonElement.class); - reader.close(); - inputStream.close(); - return je.getAsJsonObject(); - } catch (IOException e) { - return null; - } + public JsonObject getConfig(File file) { + JsonElement je = FileUtility.loadJson(file); + return je == null ? null : je.isJsonObject() ? je.getAsJsonObject() : null; } // ISearch @@ -203,6 +195,24 @@ public String resultDisplay(Stack> result) { @Override public List getMenuComponents() { - return Collections.singletonList(new SearchComponent<>(this)); + ClickComponent reloadResource = new ClickComponent().setIcon(GuiTextures.ICON_NEW_PAGE).setHoverText("terminal.component.reload").setClickConsumer(cd->{ + if (cd.isClient) { + new GuideJsonLoader().onResourceManagerReload(null); + AbstractApplication app = TerminalRegistry.getApplication(getRegistryName()); + if (app != null && app.getClass() == this.getClass()) { + this.ROOT = ((GuideApp) app).ROOT; + this.jsonObjectMap = ((GuideApp) app).jsonObjectMap; + this.clearAllWidgets(); + this.pageWidget = null; + this.tree = new TreeListWidget<>(0, 0, 133, 232, getTree(), this::loadPage).setContentIconSupplier(this::itemIcon) + .setContentNameSupplier(this::itemName) + .setKeyNameSupplier(key -> key) + .setNodeTexture(GuiTextures.BORDERED_BACKGROUND) + .setLeafTexture(GuiTextures.SLOT_DARKENED); + this.addWidget(this.tree); + } + } + }); + return Arrays.asList(new SearchComponent<>(this), reloadResource); } } diff --git a/src/main/java/gregtech/common/terminal/app/guideeditor/GuideEditorApp.java b/src/main/java/gregtech/common/terminal/app/guideeditor/GuideEditorApp.java index 6030aa4d318..4fae5f89a0b 100644 --- a/src/main/java/gregtech/common/terminal/app/guideeditor/GuideEditorApp.java +++ b/src/main/java/gregtech/common/terminal/app/guideeditor/GuideEditorApp.java @@ -5,7 +5,6 @@ import gregtech.api.terminal.app.AbstractApplication; import gregtech.common.terminal.app.guideeditor.widget.GuideConfigEditor; import gregtech.common.terminal.app.guideeditor.widget.GuidePageEditorWidget; -import gregtech.api.terminal.os.TerminalOSWidget; import gregtech.common.terminal.component.ClickComponent; import gregtech.api.terminal.os.menu.IMenuComponent; import net.minecraft.nbt.NBTTagCompound; @@ -25,7 +24,7 @@ public GuideEditorApp() { } @Override - protected AbstractApplication initApp(boolean isClient, NBTTagCompound nbt) { + public AbstractApplication initApp() { if (isClient) { this.configEditor = new GuideConfigEditor(0, 0, 133, 232, this); GuidePageEditorWidget pageEditor = new GuidePageEditorWidget(133, 0, 200, 232, 5); @@ -41,17 +40,17 @@ protected AbstractApplication initApp(boolean isClient, NBTTagCompound nbt) { public List getMenuComponents() { ClickComponent newPage = new ClickComponent().setIcon(GuiTextures.ICON_NEW_PAGE).setHoverText("terminal.component.new_page").setClickConsumer(cd->{ if (configEditor != null) { - configEditor.newPage(cd); + configEditor.newPage(); } }); ClickComponent importPage = new ClickComponent().setIcon(GuiTextures.ICON_LOAD).setHoverText("terminal.component.load_file").setClickConsumer(cd->{ if (configEditor != null) { - configEditor.loadJson(cd); + configEditor.loadJson(); } }); ClickComponent exportPage = new ClickComponent().setIcon(GuiTextures.ICON_SAVE).setHoverText("terminal.component.save_file").setClickConsumer(cd->{ if (configEditor != null) { - configEditor.saveJson(cd); + configEditor.saveJson(); } }); return Arrays.asList(newPage, importPage, exportPage); diff --git a/src/main/java/gregtech/common/terminal/app/guideeditor/widget/GuideConfigEditor.java b/src/main/java/gregtech/common/terminal/app/guideeditor/widget/GuideConfigEditor.java index 0bfe6c1aac5..e22da7f3bdb 100644 --- a/src/main/java/gregtech/common/terminal/app/guideeditor/widget/GuideConfigEditor.java +++ b/src/main/java/gregtech/common/terminal/app/guideeditor/widget/GuideConfigEditor.java @@ -7,6 +7,8 @@ import gregtech.api.gui.resources.TextTexture; import gregtech.api.gui.widgets.*; import gregtech.api.gui.widgets.tab.IGuiTextureTabInfo; +import gregtech.api.terminal.TerminalRegistry; +import gregtech.api.util.FileUtility; import gregtech.common.terminal.app.guide.widget.GuidePageWidget; import gregtech.common.terminal.app.guide.widget.IGuideWidget; import gregtech.common.terminal.app.guideeditor.GuideEditorApp; @@ -16,7 +18,6 @@ import gregtech.api.terminal.gui.widgets.TextEditorWidget; import gregtech.api.terminal.os.TerminalDialogWidget; import gregtech.api.terminal.os.TerminalTheme; -import gregtech.api.terminal.util.FileUtils; import gregtech.api.util.Position; import gregtech.api.util.Size; @@ -145,7 +146,7 @@ public void loadConfigurator(IGuideWidget widget) { } } - public void newPage(ClickData data) { + public void newPage() { TerminalDialogWidget.showConfirmDialog(app.getOs(), "terminal.component.new_page", "terminal.component.confirm", res->{ if (res) { pageEditor.loadJsonConfig("{\"section\":\"default\",\"title\":\"Template\",\"stream\":[],\"fixed\":[]}"); @@ -155,13 +156,13 @@ public void newPage(ClickData data) { }).setClientSide().open(); } - public void loadJson(ClickData data) { + public void loadJson() { if (pageEditor != null) { - File file = new File("terminal\\guide_editor"); + File file = new File(TerminalRegistry.TERMINAL_PATH,"guide"); TerminalDialogWidget.showFileDialog(app.getOs(), "terminal.component.load_file", file, true, result->{ if (result != null && result.isFile()) { try { - JsonObject config = Objects.requireNonNull(FileUtils.loadJson(result)).getAsJsonObject(); + JsonObject config = Objects.requireNonNull(FileUtility.loadJson(result)).getAsJsonObject(); pageEditor.loadJsonConfig(config); getPageEditor().setSection(config.get("section").getAsString()); updateTitle(config.get("title").getAsString()); @@ -173,12 +174,12 @@ public void loadJson(ClickData data) { } } - public void saveJson(ClickData data) { + public void saveJson() { if(pageEditor != null) { - File file = new File("terminal\\guide_editor"); + File file = new File(TerminalRegistry.TERMINAL_PATH,"guide"); TerminalDialogWidget.showFileDialog(app.getOs(), "terminal.component.save_file", file, false, result->{ if (result != null) { - if(!FileUtils.saveJson(result, pageEditor.getJsonConfig())) { + if(!FileUtility.saveJson(result, pageEditor.getJsonConfig())) { TerminalDialogWidget.showInfoDialog(app.getOs(), "terminal.component.error", "terminal.component.save_file.error").setClientSide().open(); } } diff --git a/src/main/java/gregtech/common/terminal/app/prospector/OreProspectorApp.java b/src/main/java/gregtech/common/terminal/app/prospector/OreProspectorApp.java index 32e3ba39360..998ffaecfcf 100644 --- a/src/main/java/gregtech/common/terminal/app/prospector/OreProspectorApp.java +++ b/src/main/java/gregtech/common/terminal/app/prospector/OreProspectorApp.java @@ -27,7 +27,7 @@ public OreProspectorApp() { } @Override - protected AbstractApplication initApp(boolean isClient, NBTTagCompound nbt) { + public AbstractApplication initApp() { int chunkRadius = 7; int offset = (232 - 32 * 7 + 16) / 2; this.addWidget(new ImageWidget(0, 0, 333, 232, TerminalTheme.COLOR_B_2)); diff --git a/src/main/java/gregtech/common/terminal/app/recipechart/RecipeChartApp.java b/src/main/java/gregtech/common/terminal/app/recipechart/RecipeChartApp.java index 7ee0c531e31..71d48231ace 100644 --- a/src/main/java/gregtech/common/terminal/app/recipechart/RecipeChartApp.java +++ b/src/main/java/gregtech/common/terminal/app/recipechart/RecipeChartApp.java @@ -8,10 +8,10 @@ import gregtech.api.gui.resources.TextureArea; import gregtech.api.gui.widgets.TabGroup; import gregtech.api.gui.widgets.tab.IGuiTextureTabInfo; +import gregtech.api.terminal.TerminalRegistry; import gregtech.api.terminal.app.AbstractApplication; import gregtech.api.terminal.gui.CustomTabListRenderer; import gregtech.api.terminal.os.TerminalDialogWidget; -import gregtech.api.terminal.os.TerminalOSWidget; import gregtech.api.terminal.os.TerminalTheme; import gregtech.api.terminal.os.menu.IMenuComponent; import gregtech.common.terminal.app.recipechart.widget.RGContainer; @@ -43,7 +43,7 @@ public RecipeChartApp() { } @Override - protected AbstractApplication initApp(boolean isClient, NBTTagCompound nbt) { + public AbstractApplication initApp() { if (isClient) { this.containers = new LinkedHashMap<>(); this.tabGroup = new TabGroup<>(0, 10, new CustomTabListRenderer(TerminalTheme.COLOR_F_2, TerminalTheme.COLOR_B_3, 60, 10)); @@ -105,7 +105,7 @@ public List getMenuComponents() { ClickComponent importPage = new ClickComponent().setIcon(GuiTextures.ICON_LOAD).setHoverText("terminal.component.load_file").setClickConsumer(cd->{ if (tabGroup == null) return; if (tabGroup.getAllTag().size() < 5) { - File file = new File("terminal\\recipe_chart"); + File file = new File(TerminalRegistry.TERMINAL_PATH, "recipe_chart"); TerminalDialogWidget.showFileDialog(getOs(), "terminal.component.load_file", file, true, result->{ if (result != null && result.isFile()) { try { @@ -123,7 +123,7 @@ public List getMenuComponents() { ClickComponent exportPage = new ClickComponent().setIcon(GuiTextures.ICON_SAVE).setHoverText("terminal.component.save_file").setClickConsumer(cd->{ if (tabGroup == null) return; if (tabGroup.getCurrentTag() != null) { - File file = new File("terminal\\recipe_chart"); + File file = new File(TerminalRegistry.TERMINAL_PATH, "recipe_chart"); TerminalDialogWidget.showFileDialog(getOs(), "terminal.component.save_file", file, false, result->{ if (result != null) { try { @@ -139,7 +139,7 @@ public List getMenuComponents() { } @Override - public NBTTagCompound closeApp(boolean isClient, NBTTagCompound nbt) { //synced data to server side. + public NBTTagCompound closeApp() { //synced data to server side. if (isClient) { NBTTagList list = new NBTTagList(); for (Map.Entry entry : containers.entrySet()) { @@ -151,7 +151,7 @@ public NBTTagCompound closeApp(boolean isClient, NBTTagCompound nbt) { //synced nbt.setTag("list", list); return nbt; } - return super.closeApp(false, nbt); + return super.closeApp(); } @Override diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 83f8022497f..13e6fff2a29 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -2001,7 +2001,9 @@ behavior.scanner.analyzing_complete=Analyzing complete! behavior.scanner.not_enough_energy=Analyzing failed: Not Enough Energy! metaitem.terminal.name=Terminal -metaitem.terminal.tooltip=Hope it will help you +metaitem.terminal.tooltip=Sharp tools make good work +metaitem.terminal.tooltip.creative=§bCreative Mode +metaitem.terminal.tooltip.hardware=§aHardware: %d tile.casing.ulv=ULV Machine Casing tile.casing.lv=LV Machine Casing @@ -3859,6 +3861,8 @@ gregtech.terminal.app_name.console=GT Console texture.modify_gui_texture.missing=Missing Texture texture.url_texture.fail=Load Failed +terminal.hw.battery=Battery + terminal.os.shutdown_confirm=Confirm the shutdown? (Press ESC again to see ok) terminal.menu.close=Close @@ -3875,6 +3879,7 @@ terminal.component.confirm=Are you sure? terminal.component.error=ERROR terminal.component.warning=WARNING terminal.component.searching=searching +terminal.component.reload=reload resource terminal.dialog.notice=NOTICE terminal.dialog.error_path=error file path: @@ -3907,7 +3912,7 @@ terminal.recipe_chart.drag=Drag ingredients here. terminal.recipe_chart.visible=Visible terminal.recipe_chart.jei=JEI Focus terminal.recipe_chart.tier=Tier: -terminal.recipe_chart.ratio=Ratio +terminal.recipe_chart.ratio=Weight terminal.prospector.vis_mode=dark mode terminal.prospector.list=All Resources diff --git a/src/main/resources/assets/gregtech/terminal/config/theme.json b/src/main/resources/assets/gregtech/terminal/config/theme.json new file mode 100644 index 00000000000..ac33fcf5bdf --- /dev/null +++ b/src/main/resources/assets/gregtech/terminal/config/theme.json @@ -0,0 +1 @@ +{"COLOR_1":-7277708,"COLOR_2":-798604,"COLOR_3":-1613985,"COLOR_4":-16747521,"COLOR_5":-9364519,"COLOR_6":-14803426,"COLOR_7":-1644826,"COLOR_F_1":-7019839,"COLOR_F_2":-2085683200,"COLOR_B_1":1342177280,"COLOR_B_2":-1610612736,"COLOR_B_3":-1594460040,"WALL_PAPER":{"type":"resource","resource":"gregtech:textures/gui/terminal/terminal_background.png"}} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/3dmax_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/3dmax_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/3dmax_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/3dmax_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/AE_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/AE_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/AE_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/AE_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/AIR_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/AIR_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/AIR_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/AIR_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/AIR_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/AIR_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/AIR_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/AIR_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Ai_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Ai_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Ai_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Ai_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Apps_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Apps_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Apps_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Apps_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Autocad_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Autocad_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Autocad_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Autocad_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Br_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Br_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Br_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Br_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Flash_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Flash_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Flash_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Flash_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/IC_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/IC_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/IC_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/IC_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/IC_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/IC_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/IC_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/IC_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/ID_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/ID_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/ID_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/ID_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Office1_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Office1_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Office1_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Office1_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Office1_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Office1_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Office1_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Office1_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Office2010_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Office2010_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Office2010_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Office2010_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/One-Note_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/One-Note_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/One-Note_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/One-Note_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Outlook_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Outlook_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Outlook_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Outlook_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Power-Point_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Power-Point_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Power-Point_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Power-Point_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Ps_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Ps_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Ps_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Ps_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Sb_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Sb_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/Sb_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/Sb_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/adobe-acrobat_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/adobe-acrobat_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/adobe-acrobat_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/adobe-acrobat_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/android2_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/android2_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/android2_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/android2_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/android2_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/android2_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/android2_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/android2_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/android_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/android_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/android_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/android_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/programs_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/programs_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/programs_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/programs_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/smartbuble_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/smartbuble_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/Suite/smartbuble_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/suite/smartbuble_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/3D_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/3D_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/3D_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/3D_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/3D_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/3D_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/3D_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/3D_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/APP-info_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/APP-info_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/APP-info_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/APP-info_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/APP-info_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/APP-info_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/APP-info_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/APP-info_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Base_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Base_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Base_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Base_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Base_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Base_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Base_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Base_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Computer_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Computer_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Computer_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Computer_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Computer_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Computer_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Computer_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Computer_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Control-Panel1_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Control-Panel1_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Control-Panel1_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Control-Panel1_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Control-Panel1_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Control-Panel1_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Control-Panel1_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Control-Panel1_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Control-Panel2_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Control-Panel2_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Control-Panel2_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Control-Panel2_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Control-Panel2_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Control-Panel2_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Control-Panel2_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Control-Panel2_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Desktop_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Desktop_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Desktop_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Desktop_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Desktop_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Desktop_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/Desktop_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/Desktop_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/HDD-system_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/HDD-system_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/HDD-system_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/HDD-system_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/HDD-system_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/HDD-system_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/HDD-system_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/HDD-system_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/HDD_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/HDD_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/HDD_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/HDD_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/HDD_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/HDD_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/HDD_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/HDD_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/HW_info_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/HW_info_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/HW_info_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/HW_info_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/HW_info_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/HW_info_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/HW_info_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/HW_info_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/LOCK_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/LOCK_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/LOCK_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/LOCK_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/LOCK_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/LOCK_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/LOCK_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/LOCK_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/SW-info_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/SW-info_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/SW-info_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/SW-info_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/SW-info_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/SW-info_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/SW-info_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/SW-info_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/apps4_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/apps4_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/apps4_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/apps4_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/apps9_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/apps9_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/apps9_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/apps9_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/apps9_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/apps9_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/apps9_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/apps9_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/back_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/back_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/back_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/back_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/back_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/back_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/back_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/back_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/bat1_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/bat1_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/bat1_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/bat1_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/bat1_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/bat1_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/bat1_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/bat1_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/expand2_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/expand2_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/expand2_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/expand2_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/expand2_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/expand2_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/expand2_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/expand2_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/expand3_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/expand3_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/expand3_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/expand3_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/expand3_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/expand3_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/expand3_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/expand3_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/help_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/help_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/help_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/help_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/help_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/help_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/help_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/help_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/home2_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/home2_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/home2_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/home2_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/home2_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/home2_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/home2_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/home2_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/info2_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/info2_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/info2_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/info2_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/info2_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/info2_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/info2_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/info2_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/info3_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/info3_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/info3_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/info3_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/info3_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/info3_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/info3_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/info3_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/info_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/info_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/info_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/info_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/info_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/info_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/info_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/info_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/keyboard2_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/keyboard2_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/keyboard2_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/keyboard2_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/keyboard_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/keyboard_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/keyboard_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/keyboard_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/keyboard_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/keyboard_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/keyboard_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/keyboard_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/loading_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/loading_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/loading_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/loading_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/loading_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/loading_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/loading_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/loading_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/memory_card_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/memory_card_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/memory_card_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/memory_card_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/memory_card_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/memory_card_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/memory_card_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/memory_card_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/multitask1_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/multitask1_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/multitask1_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/multitask1_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/multitask1_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/multitask1_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/multitask1_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/multitask1_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/off_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/off_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/off_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/off_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/print_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/print_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/print_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/print_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/print_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/print_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/print_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/print_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/reload_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/reload_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/reload_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/reload_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/rotate_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/rotate_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/rotate_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/rotate_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/rotate_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/rotate_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/rotate_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/rotate_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/save_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/save_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/save_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/save_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/save_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/save_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/save_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/save_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sd_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sd_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sd_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sd_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sd_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sd_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sd_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sd_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sett-big_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sett-big_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sett-big_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sett-big_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sett-big_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sett-big_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sett-big_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sett-big_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sett_small_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sett_small_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sett_small_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sett_small_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sett_small_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sett_small_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sett_small_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sett_small_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/shut-down_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/shut-down_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/shut-down_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/shut-down_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/shut-down_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/shut-down_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/shut-down_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/shut-down_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sim_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sim_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sim_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sim_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sim_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sim_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/sim_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/sim_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/skaner-1_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/skaner-1_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/skaner-1_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/skaner-1_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/skaner_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/skaner_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/skaner_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/skaner_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/skaner_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/skaner_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/skaner_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/skaner_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/taskmgr-copy_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/taskmgr-copy_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/taskmgr-copy_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/taskmgr-copy_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/taskmgr-copy_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/taskmgr-copy_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/taskmgr-copy_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/taskmgr-copy_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/taskmgr_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/taskmgr_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/taskmgr_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/taskmgr_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/taskmgr_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/taskmgr_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/taskmgr_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/taskmgr_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/tok_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/tok_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/tok_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/tok_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/tok_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/tok_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/tok_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/tok_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/tools_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/tools_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/tools_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/tools_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/tools_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/tools_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/tools_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/tools_normal.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/windows_hover.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/windows_hover.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/windows_hover.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/windows_hover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/windows_normal.png b/src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/windows_normal.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/terminal/icon/System/windows_normal.png rename to src/main/resources/assets/gregtech/textures/gui/terminal/icon/system/windows_normal.png