diff --git a/src/main/java/net/silentclient/client/Client.java b/src/main/java/net/silentclient/client/Client.java index 4d64db0..851d39b 100644 --- a/src/main/java/net/silentclient/client/Client.java +++ b/src/main/java/net/silentclient/client/Client.java @@ -374,6 +374,17 @@ public class Client { Client.logger.info("STARTING > config-manager-post-init"); configManager.postInit(); + if(!globalSettings.isResourcePacksFetched()) { + Client.logger.info("STARTING > resource-packs-fetching"); + if(Minecraft.getMinecraft().getResourcePackRepository().getDirResourcepacks() != null && Minecraft.getMinecraft().getResourcePackRepository().getDirResourcepacks().listFiles() != null) { + for (File file : Minecraft.getMinecraft().getResourcePackRepository().getDirResourcepacks().listFiles()) { + globalSettings.addToUsedResourcePacks(file.getName()); + } + globalSettings.setResourcePacksFetched(true); + globalSettings.save(); + } + } + if(!globalSettings.isDisplayedTutorial()) { Minecraft.getMinecraft().displayGuiScreen(new UserTutorial()); } diff --git a/src/main/java/net/silentclient/client/gui/resourcepacks/SilentResourcePacksGui.java b/src/main/java/net/silentclient/client/gui/resourcepacks/SilentResourcePacksGui.java index 6e945a3..0c46d20 100644 --- a/src/main/java/net/silentclient/client/gui/resourcepacks/SilentResourcePacksGui.java +++ b/src/main/java/net/silentclient/client/gui/resourcepacks/SilentResourcePacksGui.java @@ -26,6 +26,7 @@ import java.awt.*; import java.io.File; import java.io.IOException; import java.net.URI; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; @@ -170,6 +171,12 @@ public class SilentResourcePacksGui extends SilentScreen { { this.mc.fontRendererObj.drawStringWithShadow(list.get(l), x + 5 + 31 + 3, itemY + 3 + 12 + 10 * l, 8421504); } + if(!Client.getInstance().getGlobalSettings().getUsedResourcePacks().contains(entry.getResourcePackName())) { + RenderUtil.drawRoundedRect(x + 187 - 23, itemY + 35 - 12, 23, 10, 8, new Color(255, 255, 255).getRGB()); + ColorUtils.setColor(new Color(0, 0, 0).getRGB()); + Client.getInstance().getSilentFontRenderer().drawCenteredString("NEW", (int) x + 187 - 23 + (23 / 2), (int) (itemY + 35 - 12 + 10 - 9), 8, SilentFontRenderer.FontType.HEADER); + ColorUtils.resetColor(); + } } itemY += 37; } @@ -256,6 +263,12 @@ public class SilentResourcePacksGui extends SilentScreen { { this.mc.fontRendererObj.drawStringWithShadow(list.get(l), x + 5 + 31 + 3, itemY + 3 + 12 + 10 * l, 8421504); } + if(!Client.getInstance().getGlobalSettings().getUsedResourcePacks().contains(entry.getResourcePackName())) { + RenderUtil.drawRoundedRect(x + 187 - 23, itemY + 35 - 12, 23, 10, 8, new Color(255, 255, 255).getRGB()); + ColorUtils.setColor(new Color(0, 0, 0).getRGB()); + Client.getInstance().getSilentFontRenderer().drawCenteredString("NEW", (int) x + 187 - 23 + (23 / 2), (int) (itemY + 35 - 12 + 10 - 9), 8, SilentFontRenderer.FontType.HEADER); + ColorUtils.resetColor(); + } } itemY += 37; packIndex++; @@ -329,7 +342,7 @@ public class SilentResourcePacksGui extends SilentScreen { for (ResourcePackRepository.Entry resourcepackrepository$entry : list) { this.mc.gameSettings.resourcePacks.add(resourcepackrepository$entry.getResourcePackName()); - + Client.getInstance().getGlobalSettings().addToUsedResourcePacks(resourcepackrepository$entry.getResourcePackName()); if (resourcepackrepository$entry.func_183027_f() != 1) { this.mc.gameSettings.incompatibleResourcePacks.add(resourcepackrepository$entry.getResourcePackName()); @@ -341,6 +354,7 @@ public class SilentResourcePacksGui extends SilentScreen { this.initGui(); this.scrollHelper2.resetScroll(); this.scrollHelper.resetScroll(); + Client.getInstance().getGlobalSettings().save(); } } @@ -428,7 +442,19 @@ public class SilentResourcePacksGui extends SilentScreen { this.selectedResourcePacks.clear(); } - ResourcePackRepository.Entry randomPack = this.availableResourcePacks.get(random.nextInt(this.availableResourcePacks.size())); + ArrayList newPacks = new ArrayList<>(); + for(ResourcePackRepository.Entry entry : this.availableResourcePacks) { + if(!Client.getInstance().getGlobalSettings().getUsedResourcePacks().contains(entry.getResourcePackName())) { + newPacks.add(entry); + } + } + ResourcePackRepository.Entry randomPack; + + if(!newPacks.isEmpty()) { + randomPack = newPacks.get(random.nextInt(newPacks.size())); + } else { + randomPack = this.availableResourcePacks.get(random.nextInt(this.availableResourcePacks.size())); + } if(randomPack != null) { this.selectedResourcePacks.add(0, randomPack); diff --git a/src/main/java/net/silentclient/client/mixin/mixins/skins/PlayerRendererMixin.java b/src/main/java/net/silentclient/client/mixin/mixins/skins/PlayerRendererMixin.java index 00315b4..380a3b4 100644 --- a/src/main/java/net/silentclient/client/mixin/mixins/skins/PlayerRendererMixin.java +++ b/src/main/java/net/silentclient/client/mixin/mixins/skins/PlayerRendererMixin.java @@ -55,12 +55,12 @@ public abstract class PlayerRendererMixin extends RendererLivingEntity playerRenderer.getMainModel().bipedLeftLeg, () -> Client.getInstance().getSettingsManager().getSettingByClass(SkinsMod.class, "3D Left Pants").getValBoolean())); - bodyLayers.add(new Layer(1, false, EnumPlayerModelParts.RIGHT_PANTS_LEG, Shape.LEGS, () -> playerRenderer.getMainModel().bipedRightLeg, () -> Client.getInstance().getSettingsManager().getSettingByClass(SkinsMod.class, "3D Right Pants").getValBoolean())); - bodyLayers.add(new Layer(2, false, EnumPlayerModelParts.LEFT_SLEEVE, thinArms ? Shape.ARMS_SLIM : Shape.ARMS, () -> playerRenderer.getMainModel().bipedLeftArm, () -> Client.getInstance().getSettingsManager().getSettingByClass(SkinsMod.class, "3D Left Sleeve").getValBoolean())); - bodyLayers.add(new Layer(3, true, EnumPlayerModelParts.RIGHT_SLEEVE, thinArms ? Shape.ARMS_SLIM : Shape.ARMS, () -> playerRenderer.getMainModel().bipedRightArm, () -> Client.getInstance().getSettingsManager().getSettingByClass(SkinsMod.class, "3D Right Sleeve").getValBoolean())); - bodyLayers.add(new Layer(4, false, EnumPlayerModelParts.JACKET, Shape.BODY, () -> playerRenderer.getMainModel().bipedBody, () -> Client.getInstance().getSettingsManager().getSettingByClass(SkinsMod.class, "3D Jacket").getValBoolean())); + bodyLayers.add(new Layer(0, false, EnumPlayerModelParts.LEFT_PANTS_LEG, Shape.LEGS, () -> playerRenderer.getMainModel().bipedLeftLeg, () -> Client.getInstance().getSettingsManager().getSettingByClass(SkinsMod.class, "Left Leg").getValBoolean())); + bodyLayers.add(new Layer(1, false, EnumPlayerModelParts.RIGHT_PANTS_LEG, Shape.LEGS, () -> playerRenderer.getMainModel().bipedRightLeg, () -> Client.getInstance().getSettingsManager().getSettingByClass(SkinsMod.class, "Right Leg").getValBoolean())); + bodyLayers.add(new Layer(2, false, EnumPlayerModelParts.LEFT_SLEEVE, thinArms ? Shape.ARMS_SLIM : Shape.ARMS, () -> playerRenderer.getMainModel().bipedLeftArm, () -> Client.getInstance().getSettingsManager().getSettingByClass(SkinsMod.class, "Left Arm").getValBoolean())); + bodyLayers.add(new Layer(3, true, EnumPlayerModelParts.RIGHT_SLEEVE, thinArms ? Shape.ARMS_SLIM : Shape.ARMS, () -> playerRenderer.getMainModel().bipedRightArm, () -> Client.getInstance().getSettingsManager().getSettingByClass(SkinsMod.class, "Right Arm").getValBoolean())); + bodyLayers.add(new Layer(4, false, EnumPlayerModelParts.JACKET, Shape.BODY, () -> playerRenderer.getMainModel().bipedBody, () -> Client.getInstance().getSettingsManager().getSettingByClass(SkinsMod.class, "Body").getValBoolean())); } @Override diff --git a/src/main/java/net/silentclient/client/mods/render/skins/renderlayers/HeadLayerFeatureRenderer.java b/src/main/java/net/silentclient/client/mods/render/skins/renderlayers/HeadLayerFeatureRenderer.java index cb0782f..74d831f 100644 --- a/src/main/java/net/silentclient/client/mods/render/skins/renderlayers/HeadLayerFeatureRenderer.java +++ b/src/main/java/net/silentclient/client/mods/render/skins/renderlayers/HeadLayerFeatureRenderer.java @@ -32,7 +32,7 @@ public class HeadLayerFeatureRenderer implements LayerRenderer Client.getInstance().getSettingsManager().getSettingByClass(SkinsMod.class, "Level Of Detail Distance").getValInt()*Client.getInstance().getSettingsManager().getSettingByClass(SkinsMod.class, "Level Of Detail Distance").getValInt())return; diff --git a/src/main/java/net/silentclient/client/utils/RawInputHandler.java b/src/main/java/net/silentclient/client/utils/RawInputHandler.java index e58b450..b783e5c 100644 --- a/src/main/java/net/silentclient/client/utils/RawInputHandler.java +++ b/src/main/java/net/silentclient/client/utils/RawInputHandler.java @@ -13,6 +13,7 @@ public class RawInputHandler { public static Mouse mouse; public static int dx = 0; public static int dy = 0; + public static Thread inputThread; public static void init() { controllers = ControllerEnvironment.getDefaultEnvironment().getControllers(); @@ -44,9 +45,11 @@ public class RawInputHandler { Minecraft.getMinecraft().mouseHelper = new MouseHelper(); Minecraft.getMinecraft().mouseHelper.grabMouseCursor(); Minecraft.getMinecraft().mouseHelper.ungrabMouseCursor(); + inputThread.interrupt(); } else { Client.logger.info("[SC]: Enabling Raw Mouse Input"); Minecraft.getMinecraft().mouseHelper = new RawMouseHelper(); + startThread(); Minecraft.getMinecraft().mouseHelper.grabMouseCursor(); Minecraft.getMinecraft().mouseHelper.ungrabMouseCursor(); } @@ -59,8 +62,13 @@ public class RawInputHandler { } public static void startThread() { - Thread inputThread = new Thread(() -> { + inputThread = new Thread(() -> { while(true){ + if (Thread.currentThread().isInterrupted()) { + break; + } +// reload(); +// rescan(); if (mouse != null && Minecraft.getMinecraft().currentScreen == null) { mouse.poll(); dx += (int)mouse.getX().getPollData(); @@ -74,7 +82,7 @@ public class RawInputHandler { try { Thread.sleep(1); } catch(InterruptedException e) { - e.printStackTrace(); + Client.logger.catching(e); } } }); diff --git a/src/main/java/net/silentclient/client/utils/types/GlobalSettings.java b/src/main/java/net/silentclient/client/utils/types/GlobalSettings.java index a6f2e06..e22c446 100644 --- a/src/main/java/net/silentclient/client/utils/types/GlobalSettings.java +++ b/src/main/java/net/silentclient/client/utils/types/GlobalSettings.java @@ -15,6 +15,8 @@ public class GlobalSettings { public boolean packsPanoramaEnabled; public ArrayList savedFeaturedServers; public ArrayList latestColors; + public boolean resourcePacksFetched; + public ArrayList usedResourcePacks; public GlobalSettings() { @@ -24,6 +26,8 @@ public class GlobalSettings { this.packsPanoramaEnabled = true; this.savedFeaturedServers = new ArrayList<>(); this.latestColors = new ArrayList<>(); + this.resourcePacksFetched = false; + this.usedResourcePacks = new ArrayList<>(); } public String getConfig() { @@ -107,6 +111,27 @@ public class GlobalSettings { latestColors.add(0, new CustomColor(color)); } + public boolean isResourcePacksFetched() { + return resourcePacksFetched; + } + + public void setResourcePacksFetched(boolean resourcePacksFetched) { + this.resourcePacksFetched = resourcePacksFetched; + } + + public ArrayList getUsedResourcePacks() { + if(usedResourcePacks == null) { + this.usedResourcePacks = new ArrayList<>(); + } + return usedResourcePacks; + } + + public void addToUsedResourcePacks(String pack) { + if(!this.usedResourcePacks.contains(pack)) { + this.usedResourcePacks.add(pack); + } + } + public void save() { try { FileOutputStream outputStream = new FileOutputStream(Client.getInstance().getGlobalSettingsFile());