From 3af990b3c3843beb2d47a626c2ae9e361618e566 Mon Sep 17 00:00:00 2001 From: Surya Date: Sat, 22 May 2021 20:17:57 +0530 Subject: [PATCH] Fix bugs --- .../mods/SaveCoordinatesClient.java | 64 ++++---- .../mods/api/ICoordinateListHandler.java | 10 -- .../mods/api/ICoordinateSaveHandler.java | 8 - .../me/bionicbeanie/mods/api/IFileStore.java | 4 +- .../java/me/bionicbeanie/mods/api/IGui.java | 13 ++ .../me/bionicbeanie/mods/api/IGuiHandler.java | 7 + ...ionCalculator.java => IPlayerLocator.java} | 2 +- .../bionicbeanie/mods/api/IRootGridPanel.java | 13 ++ .../me/bionicbeanie/mods/api/IScreen.java | 6 - .../mods/api/IScreenController.java | 10 ++ .../bionicbeanie/mods/gui/CoordinatesGui.java | 144 ------------------ ...ateListItem.java => CoordinatesPanel.java} | 26 ++-- .../bionicbeanie/mods/gui/GuiHandlerBase.java | 22 +++ .../bionicbeanie/mods/gui/ListGuiHandler.java | 78 ++++++++++ .../bionicbeanie/mods/gui/RootGridPanel.java | 35 +++++ .../mods/gui/SaveCoordinatesGui.java | 58 +++++++ ...Screen.java => SaveCoordinatesScreen.java} | 7 +- .../bionicbeanie/mods/gui/SaveGuiHandler.java | 84 ++++++++++ .../mods/gui/ScreenController.java | 24 +++ .../mods/impl/CoordinateListHandler.java | 29 ---- .../mods/impl/CoordinateSaveHandler.java | 26 ---- .../me/bionicbeanie/mods/impl/FileStore.java | 20 +-- ...tionCalculator.java => PlayerLocator.java} | 4 +- .../mods/model/PlayerPosition.java | 12 +- .../mods/util/DimensionSpriteUtil.java | 2 +- 25 files changed, 418 insertions(+), 290 deletions(-) delete mode 100644 src/main/java/me/bionicbeanie/mods/api/ICoordinateListHandler.java delete mode 100644 src/main/java/me/bionicbeanie/mods/api/ICoordinateSaveHandler.java create mode 100644 src/main/java/me/bionicbeanie/mods/api/IGui.java create mode 100644 src/main/java/me/bionicbeanie/mods/api/IGuiHandler.java rename src/main/java/me/bionicbeanie/mods/api/{IPositionCalculator.java => IPlayerLocator.java} (83%) create mode 100644 src/main/java/me/bionicbeanie/mods/api/IRootGridPanel.java delete mode 100644 src/main/java/me/bionicbeanie/mods/api/IScreen.java create mode 100644 src/main/java/me/bionicbeanie/mods/api/IScreenController.java delete mode 100644 src/main/java/me/bionicbeanie/mods/gui/CoordinatesGui.java rename src/main/java/me/bionicbeanie/mods/gui/{CoordinateListItem.java => CoordinatesPanel.java} (70%) create mode 100644 src/main/java/me/bionicbeanie/mods/gui/GuiHandlerBase.java create mode 100644 src/main/java/me/bionicbeanie/mods/gui/ListGuiHandler.java create mode 100644 src/main/java/me/bionicbeanie/mods/gui/RootGridPanel.java create mode 100644 src/main/java/me/bionicbeanie/mods/gui/SaveCoordinatesGui.java rename src/main/java/me/bionicbeanie/mods/gui/{CoordinatesScreen.java => SaveCoordinatesScreen.java} (52%) create mode 100644 src/main/java/me/bionicbeanie/mods/gui/SaveGuiHandler.java create mode 100644 src/main/java/me/bionicbeanie/mods/gui/ScreenController.java delete mode 100644 src/main/java/me/bionicbeanie/mods/impl/CoordinateListHandler.java delete mode 100644 src/main/java/me/bionicbeanie/mods/impl/CoordinateSaveHandler.java rename src/main/java/me/bionicbeanie/mods/impl/{PositionCalculator.java => PlayerLocator.java} (82%) diff --git a/src/main/java/me/bionicbeanie/mods/SaveCoordinatesClient.java b/src/main/java/me/bionicbeanie/mods/SaveCoordinatesClient.java index 80c4d1c..897ba3a 100644 --- a/src/main/java/me/bionicbeanie/mods/SaveCoordinatesClient.java +++ b/src/main/java/me/bionicbeanie/mods/SaveCoordinatesClient.java @@ -2,50 +2,60 @@ package me.bionicbeanie.mods; import org.lwjgl.glfw.GLFW; -import me.bionicbeanie.mods.api.ICoordinateListHandler; -import me.bionicbeanie.mods.api.ICoordinateSaveHandler; import me.bionicbeanie.mods.api.IFileStore; -import me.bionicbeanie.mods.api.IPositionCalculator; -import me.bionicbeanie.mods.api.IScreen; -import me.bionicbeanie.mods.gui.CoordinatesGui; -import me.bionicbeanie.mods.gui.CoordinatesScreen; -import me.bionicbeanie.mods.impl.CoordinateListHandler; -import me.bionicbeanie.mods.impl.CoordinateSaveHandler; +import me.bionicbeanie.mods.api.IGui; +import me.bionicbeanie.mods.api.IGuiHandler; +import me.bionicbeanie.mods.api.IPlayerLocator; +import me.bionicbeanie.mods.api.IScreenController; +import me.bionicbeanie.mods.gui.ListGuiHandler; +import me.bionicbeanie.mods.gui.SaveCoordinatesGui; +import me.bionicbeanie.mods.gui.SaveGuiHandler; +import me.bionicbeanie.mods.gui.ScreenController; import me.bionicbeanie.mods.impl.FileStore; -import me.bionicbeanie.mods.impl.PositionCalculator; -import me.bionicbeanie.mods.model.PlayerRawPosition; +import me.bionicbeanie.mods.impl.PlayerLocator; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.options.KeyBinding; import net.minecraft.client.util.InputUtil; public class SaveCoordinatesClient implements ClientModInitializer { - private static IPositionCalculator positionCalculator = new PositionCalculator(); + private static IPlayerLocator locator = new PlayerLocator(); @Override public void onInitializeClient() { - - KeyBinding keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding("key.savecoords.coords", - InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_H, "category.savecoords.generic")); + + KeyBinding keyBinding = registerKeyBinding(); ClientTickEvents.END_CLIENT_TICK.register(client -> { while (keyBinding.wasPressed()) { - PlayerRawPosition rawPosition = positionCalculator.locate(client); - IFileStore fileStore = new FileStore(client.runDirectory.getAbsolutePath()); - ICoordinateSaveHandler saveHandler = new CoordinateSaveHandler(fileStore); - ICoordinateListHandler listHandler = new CoordinateListHandler(fileStore); - IScreen screen = new IScreen() { - - @Override - public void close() { - client.openScreen(null); - } - }; - client.openScreen( - new CoordinatesScreen(new CoordinatesGui(rawPosition, saveHandler, screen, listHandler))); + IGui gui = CreateModGui(client); + gui.showDefaultView(); } }); } + + private KeyBinding registerKeyBinding() { + String translationKey = "key.savecoords.coords"; + String category = "category.savecoords.generic"; + int keyBind = GLFW.GLFW_KEY_H; + + KeyBinding keyBinding = new KeyBinding(translationKey, InputUtil.Type.KEYSYM, keyBind, category); + + return KeyBindingHelper.registerKeyBinding(keyBinding); + } + + private IGui CreateModGui(MinecraftClient client) { + IGui gui = new SaveCoordinatesGui(); + IFileStore fileStore = new FileStore(client.runDirectory.getAbsolutePath()); + IGuiHandler saveHandler = new SaveGuiHandler(fileStore, locator, client, gui); + IGuiHandler listHandler = new ListGuiHandler(fileStore, gui, client); + IScreenController screenController = new ScreenController(client); + + gui.init(saveHandler, listHandler, screenController); + + return gui; + } } diff --git a/src/main/java/me/bionicbeanie/mods/api/ICoordinateListHandler.java b/src/main/java/me/bionicbeanie/mods/api/ICoordinateListHandler.java deleted file mode 100644 index 2c4c2da..0000000 --- a/src/main/java/me/bionicbeanie/mods/api/ICoordinateListHandler.java +++ /dev/null @@ -1,10 +0,0 @@ -package me.bionicbeanie.mods.api; - -import java.util.List; - -import me.bionicbeanie.mods.model.PlayerPosition; - -public interface ICoordinateListHandler { - - List list(); -} diff --git a/src/main/java/me/bionicbeanie/mods/api/ICoordinateSaveHandler.java b/src/main/java/me/bionicbeanie/mods/api/ICoordinateSaveHandler.java deleted file mode 100644 index 0434723..0000000 --- a/src/main/java/me/bionicbeanie/mods/api/ICoordinateSaveHandler.java +++ /dev/null @@ -1,8 +0,0 @@ -package me.bionicbeanie.mods.api; - -import me.bionicbeanie.mods.model.PlayerPosition; - -public interface ICoordinateSaveHandler{ - - void save(PlayerPosition position); -} diff --git a/src/main/java/me/bionicbeanie/mods/api/IFileStore.java b/src/main/java/me/bionicbeanie/mods/api/IFileStore.java index 9f751f8..c8b875a 100644 --- a/src/main/java/me/bionicbeanie/mods/api/IFileStore.java +++ b/src/main/java/me/bionicbeanie/mods/api/IFileStore.java @@ -8,8 +8,8 @@ import me.bionicbeanie.mods.model.PlayerPosition; public interface IFileStore { public void save(List positions) throws IOException; - + public void save(PlayerPosition position) throws IOException; - + public List list() throws IOException; } diff --git a/src/main/java/me/bionicbeanie/mods/api/IGui.java b/src/main/java/me/bionicbeanie/mods/api/IGui.java new file mode 100644 index 0000000..b7c35fc --- /dev/null +++ b/src/main/java/me/bionicbeanie/mods/api/IGui.java @@ -0,0 +1,13 @@ +package me.bionicbeanie.mods.api; + +public interface IGui { + + public void init(IGuiHandler saveHandler, IGuiHandler listHandler, IScreenController screenController); + + public void showDefaultView(); + + public void showListView(); + + public void close(); + +} diff --git a/src/main/java/me/bionicbeanie/mods/api/IGuiHandler.java b/src/main/java/me/bionicbeanie/mods/api/IGuiHandler.java new file mode 100644 index 0000000..570e025 --- /dev/null +++ b/src/main/java/me/bionicbeanie/mods/api/IGuiHandler.java @@ -0,0 +1,7 @@ +package me.bionicbeanie.mods.api; + +public interface IGuiHandler { + + void placeWidgets(IRootGridPanel rootPanel); + +} diff --git a/src/main/java/me/bionicbeanie/mods/api/IPositionCalculator.java b/src/main/java/me/bionicbeanie/mods/api/IPlayerLocator.java similarity index 83% rename from src/main/java/me/bionicbeanie/mods/api/IPositionCalculator.java rename to src/main/java/me/bionicbeanie/mods/api/IPlayerLocator.java index d237f4f..7adec47 100644 --- a/src/main/java/me/bionicbeanie/mods/api/IPositionCalculator.java +++ b/src/main/java/me/bionicbeanie/mods/api/IPlayerLocator.java @@ -3,7 +3,7 @@ package me.bionicbeanie.mods.api; import me.bionicbeanie.mods.model.PlayerRawPosition; import net.minecraft.client.MinecraftClient; -public interface IPositionCalculator { +public interface IPlayerLocator { public PlayerRawPosition locate(MinecraftClient client); } diff --git a/src/main/java/me/bionicbeanie/mods/api/IRootGridPanel.java b/src/main/java/me/bionicbeanie/mods/api/IRootGridPanel.java new file mode 100644 index 0000000..a23bb5d --- /dev/null +++ b/src/main/java/me/bionicbeanie/mods/api/IRootGridPanel.java @@ -0,0 +1,13 @@ +package me.bionicbeanie.mods.api; + +import io.github.cottonmc.cotton.gui.GuiDescription; +import io.github.cottonmc.cotton.gui.widget.WWidget; + +public interface IRootGridPanel { + + public void add(WWidget widget, int x, int y, int w, int h); + + public void validate(GuiDescription gui); + + public void reset(); +} diff --git a/src/main/java/me/bionicbeanie/mods/api/IScreen.java b/src/main/java/me/bionicbeanie/mods/api/IScreen.java deleted file mode 100644 index 0337741..0000000 --- a/src/main/java/me/bionicbeanie/mods/api/IScreen.java +++ /dev/null @@ -1,6 +0,0 @@ -package me.bionicbeanie.mods.api; - -public interface IScreen { - - void close(); -} diff --git a/src/main/java/me/bionicbeanie/mods/api/IScreenController.java b/src/main/java/me/bionicbeanie/mods/api/IScreenController.java new file mode 100644 index 0000000..5da4cbc --- /dev/null +++ b/src/main/java/me/bionicbeanie/mods/api/IScreenController.java @@ -0,0 +1,10 @@ +package me.bionicbeanie.mods.api; + +import net.minecraft.client.gui.screen.Screen; + +public interface IScreenController { + + public void openScreen(Screen screen); + + public void closeScreen(); +} diff --git a/src/main/java/me/bionicbeanie/mods/gui/CoordinatesGui.java b/src/main/java/me/bionicbeanie/mods/gui/CoordinatesGui.java deleted file mode 100644 index 2cbea72..0000000 --- a/src/main/java/me/bionicbeanie/mods/gui/CoordinatesGui.java +++ /dev/null @@ -1,144 +0,0 @@ -package me.bionicbeanie.mods.gui; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.BiConsumer; - -import io.github.cottonmc.cotton.gui.client.LightweightGuiDescription; -import io.github.cottonmc.cotton.gui.widget.WButton; -import io.github.cottonmc.cotton.gui.widget.WGridPanel; -import io.github.cottonmc.cotton.gui.widget.WListPanel; -import io.github.cottonmc.cotton.gui.widget.WText; -import io.github.cottonmc.cotton.gui.widget.WTextField; -import io.github.cottonmc.cotton.gui.widget.WWidget; -import me.bionicbeanie.mods.api.ICoordinateListHandler; -import me.bionicbeanie.mods.api.ICoordinateSaveHandler; -import me.bionicbeanie.mods.api.IScreen; -import me.bionicbeanie.mods.model.PlayerPosition; -import me.bionicbeanie.mods.model.PlayerRawPosition; -import me.bionicbeanie.mods.util.DimensionSpriteUtil; -import net.minecraft.text.LiteralText; - -public class CoordinatesGui extends LightweightGuiDescription { - - private WGridPanel root; - private ICoordinateSaveHandler coordinateSaveHandler; - private ICoordinateListHandler coordinateListHandler; - private PlayerRawPosition rawPosition; - private List children; - private IScreen screen; - - public CoordinatesGui(PlayerRawPosition rawPosition, ICoordinateSaveHandler onSave, IScreen screen, - ICoordinateListHandler onList) { - this.root = createRootPanel(); - this.rawPosition = rawPosition; - this.coordinateSaveHandler = onSave; - this.coordinateListHandler = onList; - this.screen = screen; - this.children = new ArrayList<>(); - - reset(); - initializeDefaultView(); - - root.validate(this); - } - - private void initializeDefaultView() { - WWidget xText = CreateWidgetForCoordinate(rawPosition.getX()); - WWidget yText = CreateWidgetForCoordinate(rawPosition.getY()); - WWidget zText = CreateWidgetForCoordinate(rawPosition.getZ()); - - add(xText, 0, 1, 2, 1); - add(yText, 0, 2, 2, 1); - add(zText, 0, 3, 2, 1); - - WWidget icon = DimensionSpriteUtil.CreateWorldIcon(rawPosition.getWorldDimension()); - add(icon, 4, 0, 1, 1); - - WTextField name = CreateNameField(); - add(name, 2, 2, 5, 1); - - WWidget save = CreateSaveButton(coordinateSaveHandler, rawPosition, name); - add(save, 5, 5, 2, 1); - - WWidget list = CreateListButton(); - add(list, 0, 5, 2, 1); - } - - private void initializeListView(List playerPositions) { - BiConsumer configurator = (PlayerPosition position, - CoordinateListItem panel) -> { - panel.setPosition(position); - }; - - WListPanel listPanel = new WListPanel<>(playerPositions, - CoordinateListItem::new, configurator); - - listPanel.setListItemHeight(2 * 18); - - add(listPanel, 0, 0, 7, 7); - - } - - private void add(WWidget widget, int x, int y, int w, int h) { - root.add(widget, x, y, w, h); - children.add(widget); - } - - private void reset() { - children.forEach(root::remove); - children.clear(); - } - - private WGridPanel createRootPanel() { - WGridPanel panel = new WGridPanel(18); - panel.setSize(7 * 18, 7 * 18); - - setRootPanel(panel); - return panel; - } - - private WWidget CreateWidgetForCoordinate(long l) { - return new WText(new LiteralText(String.valueOf(l)), 0x3939ac); - } - - private WTextField CreateNameField() { - return new WTextField(new LiteralText("name")); - } - - private WWidget CreateSaveButton(ICoordinateSaveHandler onSaveHandler, PlayerRawPosition rawPosition, - WTextField textField) { - WButton button = new WButton(new LiteralText("save")); - button.setOnClick(new Runnable() { - @Override - public void run() { - onSaveHandler.save(new PlayerPosition(rawPosition, textField.getText())); - reset(); - screen.close(); - } - }); - return button; - } - - private WWidget CreateListButton() { - - CoordinatesGui gui = this; - WButton button = new WButton(new LiteralText("list")); - - button.setOnClick(new Runnable() { - - @Override - public void run() { - reset(); - root.validate(gui); - - List playerPositions = coordinateListHandler.list(); - initializeListView(playerPositions); - - root.validate(gui); - } - }); - - return button; - } -} diff --git a/src/main/java/me/bionicbeanie/mods/gui/CoordinateListItem.java b/src/main/java/me/bionicbeanie/mods/gui/CoordinatesPanel.java similarity index 70% rename from src/main/java/me/bionicbeanie/mods/gui/CoordinateListItem.java rename to src/main/java/me/bionicbeanie/mods/gui/CoordinatesPanel.java index 477f4bb..6db157d 100644 --- a/src/main/java/me/bionicbeanie/mods/gui/CoordinateListItem.java +++ b/src/main/java/me/bionicbeanie/mods/gui/CoordinatesPanel.java @@ -8,27 +8,27 @@ import me.bionicbeanie.mods.util.DimensionSpriteUtil; import net.minecraft.text.LiteralText; import net.minecraft.util.Identifier; -public class CoordinateListItem extends WPlainPanel{ +public class CoordinatesPanel extends WPlainPanel { private WLabel coordinates; private WLabel location; private WSprite icon; - - public CoordinateListItem() { + + public CoordinatesPanel() { this.coordinates = new WLabel("Foo"); this.location = new WLabel("Foo"); this.icon = new WSprite(new Identifier("minecraft:textures/item/ender_eye.png")); - - this.add(icon, 0, 0, 1*18, 1*18); - this.add(coordinates, 1*18, 0, 2*18, 1*18); - this.add(location, 0, 1*18, 3*18, 1*18); - - this.icon.setSize(1*18, 1*18); - this.coordinates.setSize(2*18, 1*18); - this.location.setSize(3*18, 1*18); - this.setSize(3*18, 2*18); + + this.add(icon, 0, 0, 1 * 18, 1 * 18); + this.add(coordinates, 1 * 18, 0, 2 * 18, 1 * 18); + this.add(location, 0, 1 * 18, 3 * 18, 1 * 18); + + this.icon.setSize(1 * 18, 1 * 18); + this.coordinates.setSize(2 * 18, 1 * 18); + this.location.setSize(3 * 18, 1 * 18); + this.setSize(3 * 18, 2 * 18); } - + public void setPosition(PlayerPosition position) { this.icon.setImage(DimensionSpriteUtil.CreateWorldIconIdentifier(position.getWorldDimension())); this.location.setText(new LiteralText(position.getLocationName())); diff --git a/src/main/java/me/bionicbeanie/mods/gui/GuiHandlerBase.java b/src/main/java/me/bionicbeanie/mods/gui/GuiHandlerBase.java new file mode 100644 index 0000000..f3c6e6a --- /dev/null +++ b/src/main/java/me/bionicbeanie/mods/gui/GuiHandlerBase.java @@ -0,0 +1,22 @@ +package me.bionicbeanie.mods.gui; + +import io.github.cottonmc.cotton.gui.widget.WWidget; +import me.bionicbeanie.mods.api.IFileStore; +import me.bionicbeanie.mods.api.IGui; +import me.bionicbeanie.mods.api.IGuiHandler; +import net.minecraft.client.MinecraftClient; + +public abstract class GuiHandlerBase implements IGuiHandler { + + protected IFileStore fileStore; + protected IGui gui; + protected MinecraftClient client; + protected WWidget panel; + + protected GuiHandlerBase(IFileStore fileStore, IGui gui, MinecraftClient client) { + this.fileStore = fileStore; + this.gui = gui; + this.client = client; + } + +} diff --git a/src/main/java/me/bionicbeanie/mods/gui/ListGuiHandler.java b/src/main/java/me/bionicbeanie/mods/gui/ListGuiHandler.java new file mode 100644 index 0000000..19fdb6a --- /dev/null +++ b/src/main/java/me/bionicbeanie/mods/gui/ListGuiHandler.java @@ -0,0 +1,78 @@ +package me.bionicbeanie.mods.gui; + +import java.io.IOException; +import java.util.List; +import java.util.function.BiConsumer; + +import io.github.cottonmc.cotton.gui.widget.WLabel; +import io.github.cottonmc.cotton.gui.widget.WListPanel; +import io.github.cottonmc.cotton.gui.widget.WPlainPanel; +import io.github.cottonmc.cotton.gui.widget.WSprite; +import me.bionicbeanie.mods.api.IFileStore; +import me.bionicbeanie.mods.api.IGui; +import me.bionicbeanie.mods.api.IRootGridPanel; +import me.bionicbeanie.mods.model.PlayerPosition; +import me.bionicbeanie.mods.util.DimensionSpriteUtil; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.LiteralText; +import net.minecraft.util.Identifier; + +public class ListGuiHandler extends GuiHandlerBase { + + public ListGuiHandler(IFileStore fileStore, IGui gui, MinecraftClient client) { + super(fileStore, gui, client); + } + + @Override + public void placeWidgets(IRootGridPanel root) { + + BiConsumer configurator = (PlayerPosition position, + CoordinatesListItemPanel panel) -> { + panel.setPosition(position); + }; + + List positions; + try { + positions = fileStore.list(); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + WListPanel listPanel = new WListPanel<>(positions, + CoordinatesListItemPanel::new, configurator); + + listPanel.setListItemHeight(2 * 18); + + root.add(listPanel, 0, 0, 7, 7); + } + + public static class CoordinatesListItemPanel extends WPlainPanel { + + private WLabel coordinates; + private WLabel location; + private WSprite icon; + + public CoordinatesListItemPanel() { + this.coordinates = new WLabel("Foo"); + this.location = new WLabel("Foo"); + this.icon = new WSprite(new Identifier("minecraft:textures/item/ender_eye.png")); + + this.add(icon, 0, 0, 1 * 18, 1 * 18); + this.add(coordinates, 1 * 18, 0, 2 * 18, 1 * 18); + this.add(location, 0, 1 * 18, 3 * 18, 1 * 18); + + this.icon.setSize(1 * 18, 1 * 18); + this.coordinates.setSize(2 * 18, 1 * 18); + this.location.setSize(3 * 18, 1 * 18); + this.setSize(3 * 18, 2 * 18); + } + + public void setPosition(PlayerPosition position) { + this.icon.setImage(DimensionSpriteUtil.CreateWorldIconIdentifier(position.getWorldDimension())); + this.location.setText(new LiteralText(position.getLocationName())); + this.coordinates.setText(new LiteralText(position.getX() + "," + position.getY() + "," + position.getZ())); + } + } + +} diff --git a/src/main/java/me/bionicbeanie/mods/gui/RootGridPanel.java b/src/main/java/me/bionicbeanie/mods/gui/RootGridPanel.java new file mode 100644 index 0000000..fcf378b --- /dev/null +++ b/src/main/java/me/bionicbeanie/mods/gui/RootGridPanel.java @@ -0,0 +1,35 @@ +package me.bionicbeanie.mods.gui; + +import java.util.ArrayList; +import java.util.List; + +import io.github.cottonmc.cotton.gui.widget.WGridPanel; +import io.github.cottonmc.cotton.gui.widget.WWidget; +import me.bionicbeanie.mods.api.IRootGridPanel; + +public class RootGridPanel extends WGridPanel implements IRootGridPanel{ + + private List children; + + public RootGridPanel() { + this(18); + } + + public RootGridPanel(int gridSize){ + super(gridSize); + children = new ArrayList<>(); + } + + @Override + public void add(WWidget widget, int x, int y, int w, int h) { + super.add(widget, x, y, w, h); + this.children.add(widget); + } + + @Override + public void reset() { + children.forEach(this::remove); + children.clear(); + } + +} diff --git a/src/main/java/me/bionicbeanie/mods/gui/SaveCoordinatesGui.java b/src/main/java/me/bionicbeanie/mods/gui/SaveCoordinatesGui.java new file mode 100644 index 0000000..5312fab --- /dev/null +++ b/src/main/java/me/bionicbeanie/mods/gui/SaveCoordinatesGui.java @@ -0,0 +1,58 @@ +package me.bionicbeanie.mods.gui; + +import io.github.cottonmc.cotton.gui.client.LightweightGuiDescription; +import me.bionicbeanie.mods.api.IGui; +import me.bionicbeanie.mods.api.IGuiHandler; +import me.bionicbeanie.mods.api.IRootGridPanel; +import me.bionicbeanie.mods.api.IScreenController; + +public class SaveCoordinatesGui extends LightweightGuiDescription implements IGui { + + private IRootGridPanel rootGridPanel; + private IGuiHandler saveHandler; + private IGuiHandler listHandler; + private IScreenController screenController; + + @Override + public void init(IGuiHandler saveHandler, IGuiHandler listHandler, IScreenController screenController) { + this.rootGridPanel = createRootPanel(); + this.saveHandler = saveHandler; + this.listHandler = listHandler; + this.screenController = screenController; + + openScreen(); + } + + @Override + public void showDefaultView() { + showView(saveHandler); + } + + @Override + public void showListView() { + showView(listHandler); + } + + @Override + public void close() { + screenController.closeScreen(); + } + + private void openScreen() { + screenController.openScreen(new SaveCoordinatesScreen(this)); + } + + private IRootGridPanel createRootPanel() { + RootGridPanel panel = new RootGridPanel(18); + panel.setSize(7 * 18, 7 * 18); + + setRootPanel(panel); + return panel; + } + + private void showView(IGuiHandler handler) { + rootGridPanel.reset(); + handler.placeWidgets(rootGridPanel); + rootGridPanel.validate(this); + } +} diff --git a/src/main/java/me/bionicbeanie/mods/gui/CoordinatesScreen.java b/src/main/java/me/bionicbeanie/mods/gui/SaveCoordinatesScreen.java similarity index 52% rename from src/main/java/me/bionicbeanie/mods/gui/CoordinatesScreen.java rename to src/main/java/me/bionicbeanie/mods/gui/SaveCoordinatesScreen.java index 91269f3..d009cd3 100644 --- a/src/main/java/me/bionicbeanie/mods/gui/CoordinatesScreen.java +++ b/src/main/java/me/bionicbeanie/mods/gui/SaveCoordinatesScreen.java @@ -3,13 +3,10 @@ package me.bionicbeanie.mods.gui; import io.github.cottonmc.cotton.gui.GuiDescription; import io.github.cottonmc.cotton.gui.client.CottonClientScreen; -public class CoordinatesScreen extends CottonClientScreen{ +public class SaveCoordinatesScreen extends CottonClientScreen { - public CoordinatesScreen(GuiDescription description) { + public SaveCoordinatesScreen(GuiDescription description) { super(description); - // TODO Auto-generated constructor stub } - - } diff --git a/src/main/java/me/bionicbeanie/mods/gui/SaveGuiHandler.java b/src/main/java/me/bionicbeanie/mods/gui/SaveGuiHandler.java new file mode 100644 index 0000000..94a017b --- /dev/null +++ b/src/main/java/me/bionicbeanie/mods/gui/SaveGuiHandler.java @@ -0,0 +1,84 @@ +package me.bionicbeanie.mods.gui; + +import java.io.IOException; + +import io.github.cottonmc.cotton.gui.widget.WButton; +import io.github.cottonmc.cotton.gui.widget.WText; +import io.github.cottonmc.cotton.gui.widget.WTextField; +import io.github.cottonmc.cotton.gui.widget.WWidget; +import me.bionicbeanie.mods.api.IFileStore; +import me.bionicbeanie.mods.api.IGui; +import me.bionicbeanie.mods.api.IPlayerLocator; +import me.bionicbeanie.mods.api.IRootGridPanel; +import me.bionicbeanie.mods.model.PlayerPosition; +import me.bionicbeanie.mods.model.PlayerRawPosition; +import me.bionicbeanie.mods.util.DimensionSpriteUtil; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.LiteralText; + +public class SaveGuiHandler extends GuiHandlerBase { + + private IPlayerLocator locator; + + public SaveGuiHandler(IFileStore fileStore, IPlayerLocator locator, MinecraftClient client, IGui gui) { + super(fileStore, gui, client); + this.locator = locator; + } + + @Override + public void placeWidgets(IRootGridPanel root) { + + PlayerRawPosition rawPosition = locator.locate(client); + + WWidget xText = CreateWidgetForCoordinate(rawPosition.getX()); + WWidget yText = CreateWidgetForCoordinate(rawPosition.getY()); + WWidget zText = CreateWidgetForCoordinate(rawPosition.getZ()); + + root.add(xText, 0, 1, 2, 1); + root.add(yText, 0, 2, 2, 1); + root.add(zText, 0, 3, 2, 1); + + WWidget icon = DimensionSpriteUtil.CreateWorldIcon(rawPosition.getWorldDimension()); + root.add(icon, 4, 0, 1, 1); + + WTextField name = CreateNameField(); + root.add(name, 2, 2, 5, 1); + + WWidget save = CreateSaveButton(rawPosition, name); + root.add(save, 5, 5, 2, 1); + + WWidget list = CreateListButton(); + root.add(list, 0, 5, 2, 1); + } + + private WWidget CreateWidgetForCoordinate(long l) { + return new WText(new LiteralText(String.valueOf(l)), 0x3939ac); + } + + private WTextField CreateNameField() { + return new WTextField(new LiteralText("name")); + } + + private WWidget CreateSaveButton(PlayerRawPosition rawPosition, WTextField textField) { + WButton button = new WButton(new LiteralText("save")); + button.setOnClick(new Runnable() { + @Override + public void run() { + try { + fileStore.save(new PlayerPosition(rawPosition, textField.getText())); + } catch (IOException e) { + e.printStackTrace(); + } + + gui.close(); + } + }); + return button; + } + + private WWidget CreateListButton() { + WButton button = new WButton(new LiteralText("list")); + button.setOnClick(gui::showListView); + return button; + } +} diff --git a/src/main/java/me/bionicbeanie/mods/gui/ScreenController.java b/src/main/java/me/bionicbeanie/mods/gui/ScreenController.java new file mode 100644 index 0000000..3997293 --- /dev/null +++ b/src/main/java/me/bionicbeanie/mods/gui/ScreenController.java @@ -0,0 +1,24 @@ +package me.bionicbeanie.mods.gui; + +import me.bionicbeanie.mods.api.IScreenController; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; + +public class ScreenController implements IScreenController { + + private MinecraftClient client; + + public ScreenController(MinecraftClient client) { + this.client = client; + } + + @Override + public void openScreen(Screen screen) { + client.openScreen(screen); + } + + @Override + public void closeScreen() { + client.openScreen(null); + } +} diff --git a/src/main/java/me/bionicbeanie/mods/impl/CoordinateListHandler.java b/src/main/java/me/bionicbeanie/mods/impl/CoordinateListHandler.java deleted file mode 100644 index 280645e..0000000 --- a/src/main/java/me/bionicbeanie/mods/impl/CoordinateListHandler.java +++ /dev/null @@ -1,29 +0,0 @@ -package me.bionicbeanie.mods.impl; - -import java.io.IOException; -import java.util.Collections; -import java.util.List; - -import me.bionicbeanie.mods.api.ICoordinateListHandler; -import me.bionicbeanie.mods.api.IFileStore; -import me.bionicbeanie.mods.model.PlayerPosition; - -public class CoordinateListHandler implements ICoordinateListHandler{ - - private IFileStore fileStore; - - public CoordinateListHandler(IFileStore fileStore) { - this.fileStore = fileStore; - } - - @Override - public List list() { - - try { - return fileStore.list(); - } catch (IOException e) { - return Collections.emptyList(); - } - } - -} diff --git a/src/main/java/me/bionicbeanie/mods/impl/CoordinateSaveHandler.java b/src/main/java/me/bionicbeanie/mods/impl/CoordinateSaveHandler.java deleted file mode 100644 index 6ac16a6..0000000 --- a/src/main/java/me/bionicbeanie/mods/impl/CoordinateSaveHandler.java +++ /dev/null @@ -1,26 +0,0 @@ -package me.bionicbeanie.mods.impl; - -import java.io.IOException; - -import me.bionicbeanie.mods.api.ICoordinateSaveHandler; -import me.bionicbeanie.mods.api.IFileStore; -import me.bionicbeanie.mods.model.PlayerPosition; - -public class CoordinateSaveHandler implements ICoordinateSaveHandler{ - - private IFileStore fileStore; - - public CoordinateSaveHandler(IFileStore fileStore) { - this.fileStore = fileStore; - } - - @Override - public void save(PlayerPosition position) { - try { - this.fileStore.save(position); - } catch (IOException e) { - e.printStackTrace(); - } - } - -} diff --git a/src/main/java/me/bionicbeanie/mods/impl/FileStore.java b/src/main/java/me/bionicbeanie/mods/impl/FileStore.java index 9d537d3..f528bbc 100644 --- a/src/main/java/me/bionicbeanie/mods/impl/FileStore.java +++ b/src/main/java/me/bionicbeanie/mods/impl/FileStore.java @@ -30,8 +30,8 @@ public class FileStore implements IFileStore { try { Files.createDirectories(Paths.get(baseDir, DEFAULT_DIR)); Files.createFile(this.saveFilePath); - }catch(FileAlreadyExistsException e) { - //ignore + } catch (FileAlreadyExistsException e) { + // ignore } catch (IOException e) { throw new RuntimeException(e); } @@ -42,29 +42,29 @@ public class FileStore implements IFileStore { // TODO Auto-generated method stub } - + @Override public List list() throws IOException { List lines = Files.readAllLines(saveFilePath); PlayerPosition[] positions = gson.fromJson(String.join("", lines), PlayerPosition[].class); - + List playerPositionList = new LinkedList<>(); - - if(positions != null) { - for(int i = 0; i < positions.length; ++i) { + + if (positions != null) { + for (int i = 0; i < positions.length; ++i) { playerPositionList.add(positions[i]); } } - + return playerPositionList; } @Override public void save(PlayerPosition position) throws IOException { - + List playerPositions = list(); playerPositions.add(position); - + String serialized = gson.toJson(playerPositions.toArray()); Files.write(saveFilePath, serialized.getBytes(), StandardOpenOption.WRITE); } diff --git a/src/main/java/me/bionicbeanie/mods/impl/PositionCalculator.java b/src/main/java/me/bionicbeanie/mods/impl/PlayerLocator.java similarity index 82% rename from src/main/java/me/bionicbeanie/mods/impl/PositionCalculator.java rename to src/main/java/me/bionicbeanie/mods/impl/PlayerLocator.java index fe6f33f..c95d5fe 100644 --- a/src/main/java/me/bionicbeanie/mods/impl/PositionCalculator.java +++ b/src/main/java/me/bionicbeanie/mods/impl/PlayerLocator.java @@ -1,11 +1,11 @@ package me.bionicbeanie.mods.impl; -import me.bionicbeanie.mods.api.IPositionCalculator; +import me.bionicbeanie.mods.api.IPlayerLocator; import me.bionicbeanie.mods.model.PlayerRawPosition; import net.minecraft.client.MinecraftClient; import net.minecraft.util.math.Vec3d; -public class PositionCalculator implements IPositionCalculator { +public class PlayerLocator implements IPlayerLocator { public PlayerRawPosition locate(MinecraftClient client) { Vec3d pos = client.player.getPos(); diff --git a/src/main/java/me/bionicbeanie/mods/model/PlayerPosition.java b/src/main/java/me/bionicbeanie/mods/model/PlayerPosition.java index 6203be8..059c5a1 100644 --- a/src/main/java/me/bionicbeanie/mods/model/PlayerPosition.java +++ b/src/main/java/me/bionicbeanie/mods/model/PlayerPosition.java @@ -4,28 +4,28 @@ public class PlayerPosition { private PlayerRawPosition rawPosition; private String locationName; - + public PlayerPosition(PlayerRawPosition rawPosition, String locationName) { this.rawPosition = rawPosition; this.locationName = locationName; } - + public long getX() { return rawPosition.getX(); } - + public long getY() { return rawPosition.getY(); } - + public long getZ() { return rawPosition.getZ(); } - + public String getWorldDimension() { return rawPosition.getWorldDimension(); } - + public String getLocationName() { return locationName; } diff --git a/src/main/java/me/bionicbeanie/mods/util/DimensionSpriteUtil.java b/src/main/java/me/bionicbeanie/mods/util/DimensionSpriteUtil.java index a373a63..17557bf 100644 --- a/src/main/java/me/bionicbeanie/mods/util/DimensionSpriteUtil.java +++ b/src/main/java/me/bionicbeanie/mods/util/DimensionSpriteUtil.java @@ -5,7 +5,7 @@ import io.github.cottonmc.cotton.gui.widget.WWidget; import net.minecraft.util.Identifier; public class DimensionSpriteUtil { - + public static WWidget CreateWorldIcon(String dimension) { return new WSprite(CreateWorldIconIdentifier(dimension)); }