diff --git a/build.gradle b/build.gradle index 49aeede..f33e346 100644 --- a/build.gradle +++ b/build.gradle @@ -68,8 +68,8 @@ repositories { url 'https://maven.gegy.dev' } maven { - name 'CottonMC' - url 'https://server.bbkr.space/artifactory/libs-snapshot' + name = "CottonMC" + url = "https://server.bbkr.space/artifactory/libs-release" } maven { url "https://maven.terraformersmc.com/releases/" } maven { url 'https://maven.kosmx.dev' } @@ -109,6 +109,7 @@ dependencies { // modImplementation("maven.modrinth:ok-zoomer:${project.ok_zoomer_version}") // modImplementation "io.github.ennuil:LibZoomer:${project.libzoomer_version}" + modImplementation "io.github.cottonmc:LibGui:${project.libgui_version}" modImplementation "org.quiltmc:quilt-json5:1.0.0" modCompileOnly "maven.modrinth:sodium:${project.sodium_version}" modImplementation("maven.modrinth:emi:${project.emi_version}") @@ -120,6 +121,7 @@ dependencies { shadow 'com.electronwill.night-config:core:3.6.3' shadow 'com.electronwill.night-config:toml:3.6.3' + apply plugin: 'java-library' } loom { accessWidenerPath = file("src/main/resources/midnightcontrols.accesswidener") diff --git a/gradle.properties b/gradle.properties index 254642e..ad32238 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=1.19+build.1 loader_version=0.14.7 # Mod Properties -mod_version = 1.4.1 +mod_version = 1.4.2 maven_group = eu.midnightdust archives_base_name = midnightcontrols modrinth_id=bXX9h73M @@ -23,6 +23,7 @@ modmenu_version=4.0.0 emotecraft_version=2.1.3-SNAPSHOT-build.29-MC1.19-fabric bendylib_version=2.0.+ emi_version=0.2.0+1.19 +libgui_version=6.0.0+1.19 # Ok Zoomer and LibZoomer are temporarily disabled for the time being, as we are currently using Reflection at runtime instead in OkZoomerCompat due to there being two major, completely incompatible API versions. # ok_zoomer_version=5.0.0-beta.3+1.17.1 diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java index 3c344bb..054ae39 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java @@ -119,8 +119,10 @@ public class MidnightControlsClient extends MidnightControls implements ClientMo }); HudManager.register(this.hud = new MidnightControlsHud(this)); - FabricLoader.getInstance().getModContainer("midnightcontrols").ifPresent(modContainer -> - ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("midnightcontrols","bedrock"), modContainer, ResourcePackActivationType.NORMAL)); + FabricLoader.getInstance().getModContainer("midnightcontrols").ifPresent(modContainer -> { + ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("midnightcontrols","bedrock"), modContainer, ResourcePackActivationType.NORMAL); + ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("midnightcontrols","legacy"), modContainer, ResourcePackActivationType.NORMAL); + }); } /** @@ -192,7 +194,7 @@ public class MidnightControlsClient extends MidnightControls implements ClientMo // } } public void onRender(MinecraftClient client) { - this.input.onRender(client.getTickDelta(), client); + this.input.onRender(client); } /** diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java index 5cfd05d..e206e44 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java @@ -61,7 +61,11 @@ public class MidnightControlsConfig extends MidnightConfig { @Entry(name = "Controller ID") public static Object controllerID = 0; @Entry(name = "2nd Controller ID") public static Object secondControllerID = -1; @Entry(name = "midnightcontrols.menu.controller_type") public static ControllerType controllerType = ControllerType.DEFAULT; - @Entry(name = "Mouse screens") public static List mouseScreens = Lists.newArrayList("me.jellysquid.mods.sodium.client.gui", "net.coderbot.iris.gui", "net.minecraft.client.gui.screen.advancement", "net.minecraft.client.gui.screen.pack.PackScreen", "net.minecraft.class_5375", "net.minecraft.class_457", "net.minecraft.class_408", "me.flashyreese.mods.reeses_sodium_options.client.gui", "dev.emi.emi.screen", "hardcorequesting.client.interfaces.GuiQuestBook", "hardcorequesting.client.interfaces.GuiReward", "hardcorequesting.client.interfaces.EditTrackerScreen"); + @Entry(name = "Mouse screens") public static List mouseScreens = Lists.newArrayList("me.jellysquid.mods.sodium.client.gui", + "net.coderbot.iris.gui", "net.minecraft.client.gui.screen.advancement", "net.minecraft.client.gui.screen.pack.PackScreen", "net.minecraft.class_5375", + "net.minecraft.class_457", "net.minecraft.class_408", "me.flashyreese.mods.reeses_sodium_options.client.gui", "dev.emi.emi.screen", + "hardcorequesting.client.interfaces.GuiQuestBook", "hardcorequesting.client.interfaces.GuiReward", "hardcorequesting.client.interfaces.EditTrackerScreen", + "io.github.kosmx.emotes.arch.gui.screen.ingame.FastChosseScreen"); @Entry(name = "Keybindings") public static Map BINDINGS = new HashMap<>(); private static final Pattern BUTTON_BINDING_PATTERN = Pattern.compile("(-?\\d+)\\+?"); diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java index 093dcb0..49c6abb 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java @@ -10,9 +10,12 @@ package eu.midnightdust.midnightcontrols.client; import com.google.common.collect.ImmutableSet; +import dev.lambdaurora.spruceui.widget.AbstractSpruceWidget; import dev.lambdaurora.spruceui.widget.container.SpruceEntryListWidget; +import dev.lambdaurora.spruceui.widget.container.SpruceOptionListWidget; import eu.midnightdust.midnightcontrols.MidnightControls; import eu.midnightdust.midnightcontrols.client.compat.EMICompat; +import eu.midnightdust.midnightcontrols.client.compat.LibGuiCompat; import eu.midnightdust.midnightcontrols.client.compat.MidnightControlsCompat; import eu.midnightdust.midnightcontrols.client.compat.SodiumCompat; import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding; @@ -20,9 +23,7 @@ import eu.midnightdust.midnightcontrols.client.controller.Controller; import eu.midnightdust.midnightcontrols.client.controller.InputManager; import eu.midnightdust.midnightcontrols.client.gui.TouchscreenOverlay; import eu.midnightdust.midnightcontrols.client.gui.widget.ControllerControlsWidget; -import eu.midnightdust.midnightcontrols.client.mixin.AdvancementsScreenAccessor; -import eu.midnightdust.midnightcontrols.client.mixin.CreativeInventoryScreenAccessor; -import eu.midnightdust.midnightcontrols.client.mixin.EntryListWidgetAccessor; +import eu.midnightdust.midnightcontrols.client.mixin.*; import eu.midnightdust.midnightcontrols.client.util.HandledScreenAccessor; import eu.midnightdust.midnightcontrols.client.util.MouseAccessor; import dev.lambdaurora.spruceui.navigation.NavigationDirection; @@ -45,10 +46,7 @@ import net.minecraft.client.gui.screen.ingame.MerchantScreen; import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; import net.minecraft.client.gui.screen.multiplayer.MultiplayerServerListWidget; import net.minecraft.client.gui.screen.world.WorldListWidget; -import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; -import net.minecraft.client.gui.widget.EntryListWidget; -import net.minecraft.client.gui.widget.PressableWidget; -import net.minecraft.client.gui.widget.SliderWidget; +import net.minecraft.client.gui.widget.*; import net.minecraft.screen.slot.Slot; import net.minecraft.util.math.MathHelper; import org.aperlambda.lambdacommon.utils.Pair; @@ -82,6 +80,7 @@ public class MidnightInput { private float mouseSpeedX = 0.f; private float mouseSpeedY = 0.f; public int inventoryInteractionCooldown = 0; + public int screenCloseCooldown = 0; private ControllerControlsWidget controlsInput = null; @@ -122,6 +121,8 @@ public class MidnightInput { // Decreases the cooldown for GUI actions. if (this.actionGuiCooldown > 0) --this.actionGuiCooldown; + if (this.screenCloseCooldown > 0) + --this.screenCloseCooldown; InputManager.updateStates(); @@ -176,7 +177,7 @@ public class MidnightInput { * * @param client the client instance */ - public void onRender(float tickDelta, @NotNull MinecraftClient client) { + public void onRender(@NotNull MinecraftClient client) { if (!(client.currentScreen == null || client.currentScreen instanceof TouchscreenOverlay)) return; @@ -185,8 +186,8 @@ public class MidnightInput { return; if (this.targetYaw != 0.f || this.targetPitch != 0.f) { - float rotationYaw = (float) (player.prevYaw + (this.targetYaw / 0.10) * tickDelta); - float rotationPitch = (float) (player.prevPitch + (this.targetPitch / 0.10) * tickDelta); + float rotationYaw = (float) (player.prevYaw + (this.targetYaw / 0.10) * client.getTickDelta()); + float rotationPitch = (float) (player.prevPitch + (this.targetPitch / 0.10) * client.getTickDelta()); client.player.setYaw(rotationYaw); client.player.setPitch(MathHelper.clamp(rotationPitch, -90.f, 90.f)); if (client.player.isRiding() && client.player.getVehicle() != null) { @@ -302,6 +303,7 @@ public class MidnightInput { return; } } + else if (FabricLoader.getInstance().isModLoaded("libgui")) LibGuiCompat.handlePress(client.currentScreen); } } @@ -330,7 +332,7 @@ public class MidnightInput { Screen.wrapScreenError(() -> client.currentScreen.mouseReleased(mouseX, mouseY, GLFW.GLFW_MOUSE_BUTTON_1), "mouseReleased event handler", client.currentScreen.getClass().getCanonicalName()); } - //this.actionGuiCooldown = 5; + this.screenCloseCooldown = 5; } else { this.ignoreNextARelease = false; } @@ -472,6 +474,14 @@ public class MidnightInput { } else if (client.currentScreen != null) { if (axis == GLFW_GAMEPAD_AXIS_RIGHT_Y && absValue >= deadZone) { float finalValue = value; + client.currentScreen.children().stream().filter(element -> element instanceof SpruceEntryListWidget) + .map(element -> (SpruceEntryListWidget) element) + .filter(AbstractSpruceWidget::isFocusedOrHovered) + .anyMatch(element -> { + MidnightControls.get().log(String.valueOf(finalValue)); + element.mouseScrolled(0.0, 0.0, -finalValue); + return true; + }); client.currentScreen.children().stream().filter(element -> element instanceof EntryListWidget) .map(element -> (EntryListWidget) element) .filter(element -> element.getType().isFocused()) @@ -479,14 +489,6 @@ public class MidnightInput { element.mouseScrolled(0.0, 0.0, -finalValue); return true; }); - client.currentScreen.children().stream().filter(element -> element instanceof SpruceEntryListWidget) - .map(element -> (SpruceEntryListWidget) element) - .filter(element -> element.getType().isFocused()) - .anyMatch(element -> { - MidnightControls.get().log(String.valueOf(finalValue)); - element.mouseScrolled(0.0, 0.0, -finalValue); - return true; - }); return; } } @@ -621,7 +623,7 @@ public class MidnightInput { this.actionGuiCooldown = 2; // Prevent to press too quickly the focused element, so we have to skip 5 ticks. return false; } else if (element instanceof AlwaysSelectedEntryListWidget) { - ((EntryListWidgetAccessor) element).midnightcontrols$moveSelection(right ? EntryListWidget.MoveDirection.UP : EntryListWidget.MoveDirection.DOWN); + ((EntryListWidgetAccessor) element).midnightcontrols$moveSelection(right ? EntryListWidget.MoveDirection.DOWN : EntryListWidget.MoveDirection.UP); return false; } else if (element instanceof ParentElement entryList) { var focused = entryList.getFocused(); @@ -672,6 +674,69 @@ public class MidnightInput { } if (FabricLoader.getInstance().isModLoaded("sodium")) SodiumCompat.handleInput(screen, direction.isLookingForward()); + // This still needs some work +// ScreenAccessor accessor = (ScreenAccessor) screen; +// if (accessor.getSelected() != null && accessor.getSelected() instanceof ClickableWidget selected && accessor.getSelectables() != null) { +// //System.out.println(direction); +// if (accessor.getSelectables().size() >= 2) { +// //System.out.println(direction + " 2"); +// int xDifference = Integer.MAX_VALUE; +// int yDifference = Integer.MAX_VALUE; +// ClickableWidget newWidget = null; +// for (int i = 0; i < accessor.getSelectables().size(); ++i) { +// if (accessor.getSelectables().get(i) instanceof ClickableWidget candidate) { +// if (!(candidate.x == selected.x && candidate.y == selected.y)) { +// int canXDifference = Math.abs(candidate.x - selected.x); +// int canYDifference = Math.abs(candidate.y - selected.y); +// if (direction.isHorizontal()) { +// if (direction.isLookingForward()) { +// if (candidate.x >= selected.x && canYDifference <= yDifference && canXDifference <= xDifference) { +// System.out.println(direction + " forward horizontal " + candidate); +// newWidget = candidate; +// xDifference = canXDifference; +// yDifference = canYDifference; +// } +// } else { +// if (candidate.x <= selected.x && canYDifference <= yDifference && canXDifference >= xDifference) { +// System.out.println(direction + " backward horizontal " + candidate); +// newWidget = candidate; +// xDifference = canXDifference; +// yDifference = canYDifference; +// } +// } +// } else { +// if (direction.isLookingForward()) { +// if (candidate.y >= selected.y && canYDifference <= yDifference && canXDifference <= xDifference) { +// System.out.println(direction + " forward vertical " + candidate); +// newWidget = candidate; +// xDifference = canXDifference; +// yDifference = canYDifference; +// } +// } else { +// if (candidate.y <= selected.y && canYDifference >= yDifference && canXDifference <= xDifference) { +// System.out.println(direction + " backward vertical " + candidate); +// newWidget = candidate; +// xDifference = canXDifference; +// yDifference = canYDifference; +// } +// } +// } +// } +// } +// } +// if (newWidget != null) { +// //selected.changeFocus(true); +// ((ClickableWidgetAccessor) selected).setFocused(false); +// ((ClickableWidgetAccessor) newWidget).setFocused(true); +// screen.setFocused(newWidget); +// screen.changeFocus(false); +// screen.changeFocus(true); +// this.actionGuiCooldown = 5; +// return true; +// } +// +// } +// } if (!screen.changeFocus(direction.isLookingForward())) { if (screen.changeFocus(direction.isLookingForward())) { this.actionGuiCooldown = 5; diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/compat/LibGuiCompat.java b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/LibGuiCompat.java new file mode 100644 index 0000000..270fd9d --- /dev/null +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/compat/LibGuiCompat.java @@ -0,0 +1,25 @@ +package eu.midnightdust.midnightcontrols.client.compat; + +import io.github.cottonmc.cotton.gui.impl.client.CottonScreenImpl; +import io.github.cottonmc.cotton.gui.widget.WButton; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.sound.PositionedSoundInstance; +import net.minecraft.sound.SoundEvents; +import org.jetbrains.annotations.NotNull; + +@SuppressWarnings("UnstableApiUsage") +public class LibGuiCompat { + public static boolean handlePress(@NotNull Screen screen) { + if (screen instanceof CottonScreenImpl cottonScreen) { + if (cottonScreen.getDescription() != null && cottonScreen.getDescription().getFocus() != null) { + if (cottonScreen.getDescription().getFocus() instanceof WButton button && button.getOnClick() != null) { + button.getOnClick().run(); + MinecraftClient.getInstance().getSoundManager().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + return true; + } + } + } + return false; + } +} diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java b/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java index 4885c4e..c37c9e3 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/controller/InputHandlers.java @@ -328,7 +328,7 @@ public class InputHandlers { * @return true if the client is in game, else false */ public static boolean inGame(@NotNull MinecraftClient client, @NotNull ButtonBinding binding) { - return client.currentScreen == null; + return client.currentScreen == null && MidnightControlsClient.get().input.screenCloseCooldown <= 0; } /** diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/controller/MovementHandler.java b/src/main/java/eu/midnightdust/midnightcontrols/client/controller/MovementHandler.java index 04d653e..3d47a28 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/controller/MovementHandler.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/controller/MovementHandler.java @@ -13,7 +13,17 @@ import eu.midnightdust.midnightcontrols.client.ButtonState; import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.input.Input; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.tutorial.MovementTutorialStepHandler; +import net.minecraft.client.util.InputUtil; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.enchantment.SoulSpeedEnchantment; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.NbtList; +import net.minecraft.nbt.scanner.SimpleNbtScanner; +import net.minecraft.util.math.MathHelper; import org.jetbrains.annotations.NotNull; /** @@ -79,18 +89,20 @@ public final class MovementHandler implements PressAction { this.pressingBack = direction < 0; this.movementForward = direction * value; - // Slowing down if sneaking. - if (client.player.input.sneaking) - this.movementForward *= 0.3D; + // Slowing down if sneaking or crawling. + if (client.player.shouldSlowDown()) { + this.movementForward *= MathHelper.clamp(0.3F + EnchantmentHelper.getSwiftSneakSpeedBoost(client.player), 0.0F, 1.0F); + } } else { // Handle sideways movement. this.pressingLeft = direction > 0; this.pressingRight = direction < 0; this.movementSideways = direction * value; - // Slowing down if sneaking. - if (client.player.input.sneaking) - this.movementSideways *= 0.3D; + // Slowing down if sneaking or crawling. + if (client.player.shouldSlowDown()) { + this.movementSideways *= MathHelper.clamp(0.3F + EnchantmentHelper.getSwiftSneakSpeedBoost(client.player), 0.0F, 1.0F); + } } return this.shouldOverrideMovement; diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ClickableWidgetAccessor.java b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ClickableWidgetAccessor.java index f94af4c..0457c00 100644 --- a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ClickableWidgetAccessor.java +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ClickableWidgetAccessor.java @@ -17,4 +17,6 @@ import org.spongepowered.asm.mixin.gen.Accessor; public interface ClickableWidgetAccessor { @Accessor("height") int getHeight(); + @Accessor("focused") + void setFocused(boolean value); } diff --git a/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ScreenAccessor.java b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ScreenAccessor.java new file mode 100644 index 0000000..f9b2b01 --- /dev/null +++ b/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ScreenAccessor.java @@ -0,0 +1,17 @@ +package eu.midnightdust.midnightcontrols.client.mixin; + +import net.minecraft.client.gui.Selectable; +import net.minecraft.client.gui.screen.Screen; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.List; + +@Mixin(Screen.class) +public interface ScreenAccessor { + @Accessor + List getSelectables(); + @Accessor @Nullable + Selectable getSelected(); +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 8f087aa..2276825 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -12,6 +12,7 @@ "akemin-dayo", "DioEgizio", "Ivanoks", + "KiskaUWU", "FlashyReese", "Hambaka", "joaoh1", @@ -53,7 +54,7 @@ "modmenu": ">=1.12.2" }, "suggests": { - "quilt_loader": "*" + "kontrolo": "*" }, "breaks": { "lambdacontrols": "*", diff --git a/src/main/resources/midnightcontrols.mixins.json b/src/main/resources/midnightcontrols.mixins.json index bec043d..6e78115 100644 --- a/src/main/resources/midnightcontrols.mixins.json +++ b/src/main/resources/midnightcontrols.mixins.json @@ -17,7 +17,8 @@ "MouseMixin", "RecipeBookWidgetAccessor", "WorldRendererMixin", - "KeyBindingRegistryImplAccessor" + "KeyBindingRegistryImplAccessor", + "ScreenAccessor" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/resourcepacks/legacy/CREDITS b/src/main/resources/resourcepacks/legacy/CREDITS new file mode 100644 index 0000000..ddea80e --- /dev/null +++ b/src/main/resources/resourcepacks/legacy/CREDITS @@ -0,0 +1,4 @@ +Some of the textures in this Resourcepack are directly taken from the Console Edition assets and are therefore © Mojang Studios. +Credits go to Ivanoks for redrawing the Console Generic, Dualshock, DualSense, Switch, Xbox 360 and XBox One controller icons in 15x15, +Motschen for creating the assets for the other controllers +and LambdAurora for the original assets, part of which are also included. diff --git a/src/main/resources/resourcepacks/legacy/assets/midnightcontrols/textures/gui/controller_axis.png b/src/main/resources/resourcepacks/legacy/assets/midnightcontrols/textures/gui/controller_axis.png new file mode 100644 index 0000000..fccf05b Binary files /dev/null and b/src/main/resources/resourcepacks/legacy/assets/midnightcontrols/textures/gui/controller_axis.png differ diff --git a/src/main/resources/resourcepacks/legacy/assets/midnightcontrols/textures/gui/controller_buttons.png b/src/main/resources/resourcepacks/legacy/assets/midnightcontrols/textures/gui/controller_buttons.png new file mode 100644 index 0000000..50a9c22 Binary files /dev/null and b/src/main/resources/resourcepacks/legacy/assets/midnightcontrols/textures/gui/controller_buttons.png differ diff --git a/src/main/resources/resourcepacks/legacy/pack.mcmeta b/src/main/resources/resourcepacks/legacy/pack.mcmeta new file mode 100644 index 0000000..bc7a032 --- /dev/null +++ b/src/main/resources/resourcepacks/legacy/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "pack_format": 9, + "description": "Makes the controller buttons look like from Console Edition" + } +} diff --git a/src/main/resources/resourcepacks/legacy/pack.png b/src/main/resources/resourcepacks/legacy/pack.png new file mode 100644 index 0000000..663cdc8 Binary files /dev/null and b/src/main/resources/resourcepacks/legacy/pack.png differ