From da35bda7b956544162aff92dd6e8332c5c923826 Mon Sep 17 00:00:00 2001 From: Neil Date: Tue, 18 Feb 2020 02:33:03 +0100 Subject: [PATCH] Added a GUI via an item you can get it via /seed gui --- build.gradle | 13 ++++-- gradle.properties | 1 + .../kaptainwutax/seedcracker/SeedCracker.java | 9 +++- .../seedcracker/command/GuiCommand.java | 42 ++++++++++++++++++ .../kaptainwutax/seedcracker/gui/Gui.java | 37 +++++++++++++++ .../kaptainwutax/seedcracker/gui/GuiItem.java | 22 +++++++++ .../seedcracker/gui/GuiScreen.java | 22 --------- .../kaptainwutax/seedcracker/gui/Screen.java | 11 +++++ .../seedcracker/init/ClientCommands.java | 3 ++ .../mixin/ClientPlayerEntityMixin.java | 7 --- .../seedcracker/models/item/gui_item.json | 6 +++ .../seedcracker/textures/item/gui_item.png | Bin 0 -> 295 bytes src/main/resources/fabric.mod.json | 8 +++- 13 files changed, 147 insertions(+), 34 deletions(-) create mode 100644 src/main/java/kaptainwutax/seedcracker/command/GuiCommand.java create mode 100644 src/main/java/kaptainwutax/seedcracker/gui/Gui.java create mode 100644 src/main/java/kaptainwutax/seedcracker/gui/GuiItem.java delete mode 100644 src/main/java/kaptainwutax/seedcracker/gui/GuiScreen.java create mode 100644 src/main/java/kaptainwutax/seedcracker/gui/Screen.java create mode 100644 src/main/resources/assets/seedcracker/models/item/gui_item.json create mode 100644 src/main/resources/assets/seedcracker/textures/item/gui_item.png diff --git a/build.gradle b/build.gradle index 2a59a01..92b8cd3 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '0.2.5-SNAPSHOT' + id 'fabric-loom' version '0.2.6-SNAPSHOT' id 'maven-publish' } @@ -12,13 +12,20 @@ group = project.maven_group minecraft { } - +repositories { + maven { + name = "CottonMC" + url = "http://server.bbkr.space:8081/artifactory/libs-release" + } +} +dependencies { + modImplementation "io.github.cottonmc:LibGui:1.6.0" +} dependencies { //to change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}" modCompile "net.fabricmc:fabric-loader:${project.loader_version}" - // Fabric API. This is technically optional, but you probably want it anyway. // modCompile "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" diff --git a/gradle.properties b/gradle.properties index 2414dae..5a2683a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,3 +15,4 @@ org.gradle.jvmargs=-Xmx1G # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api fabric_version=0.4.29+build.290-1.15 + modmenu_version=1.10.1+build.30 diff --git a/src/main/java/kaptainwutax/seedcracker/SeedCracker.java b/src/main/java/kaptainwutax/seedcracker/SeedCracker.java index 220f6c3..c1e4c71 100644 --- a/src/main/java/kaptainwutax/seedcracker/SeedCracker.java +++ b/src/main/java/kaptainwutax/seedcracker/SeedCracker.java @@ -2,18 +2,25 @@ package kaptainwutax.seedcracker; import kaptainwutax.seedcracker.cracker.storage.DataStorage; import kaptainwutax.seedcracker.finder.FinderQueue; +import kaptainwutax.seedcracker.gui.GuiItem; import kaptainwutax.seedcracker.render.RenderQueue; import net.fabricmc.api.ModInitializer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.util.Identifier; +import net.minecraft.util.Rarity; +import net.minecraft.util.registry.Registry; public class SeedCracker implements ModInitializer { private static final SeedCracker INSTANCE = new SeedCracker(); private DataStorage dataStorage = new DataStorage(); - + public static Item GUI_ITEM=new GuiItem(new Item.Settings().group(ItemGroup.MISC).rarity(Rarity.EPIC)); @Override public void onInitialize() { RenderQueue.get().add("hand", FinderQueue.get()::renderFinders); + Registry.register(Registry.ITEM,new Identifier("seedcracker","gui_item"),GUI_ITEM); /* long ss = 5718603440394L; LCG lcg = Rand.JAVA_LCG.combine(-5); diff --git a/src/main/java/kaptainwutax/seedcracker/command/GuiCommand.java b/src/main/java/kaptainwutax/seedcracker/command/GuiCommand.java new file mode 100644 index 0000000..ae87e9a --- /dev/null +++ b/src/main/java/kaptainwutax/seedcracker/command/GuiCommand.java @@ -0,0 +1,42 @@ +package kaptainwutax.seedcracker.command; + +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; +import kaptainwutax.seedcracker.finder.Finder; +import kaptainwutax.seedcracker.finder.FinderQueue; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.Formatting; + +import static kaptainwutax.seedcracker.SeedCracker.GUI_ITEM; +import static net.minecraft.server.command.CommandManager.literal; + +public class GuiCommand extends ClientCommand { + + @Override + public String getName() { + return "gui"; + } + + @Override + public void build(LiteralArgumentBuilder builder) { + builder.executes(ctx-> + { + ServerCommandSource source = ctx.getSource(); + + ClientPlayerEntity self =(ClientPlayerEntity) source.getEntity(); + assert self != null; + if(!self.inventory.insertStack(new ItemStack(GUI_ITEM))){ + throw new SimpleCommandExceptionType(new TranslatableText("inventory.isfull")).create(); + } + return 1; + }); + } + + + +} diff --git a/src/main/java/kaptainwutax/seedcracker/gui/Gui.java b/src/main/java/kaptainwutax/seedcracker/gui/Gui.java new file mode 100644 index 0000000..1ce9c35 --- /dev/null +++ b/src/main/java/kaptainwutax/seedcracker/gui/Gui.java @@ -0,0 +1,37 @@ +package kaptainwutax.seedcracker.gui; + +import io.github.cottonmc.cotton.gui.client.BackgroundPainter; +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.WLabel; +import io.github.cottonmc.cotton.gui.widget.WSprite; +import net.minecraft.text.LiteralText; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.Identifier; + +public class Gui extends LightweightGuiDescription { + public Gui() { + WGridPanel root = new WGridPanel(); + setRootPanel(root); + root.setSize(256, 240); + + WSprite icon = new WSprite(new Identifier("minecraft:textures/item/redstone.png")); + root.add(icon, 0, 2, 1, 1); + + WButton button = new WButton(new TranslatableText("gui.examplemod.examplebutton")); + root.add(button, 0, 3, 4, 1); + + WLabel label = new WLabel(new LiteralText("Test"), 0xFFFFFF); + root.add(label, 0, 4, 2, 1); + + root.validate(this); + } + + + + @Override + public void addPainters() { + getRootPanel().setBackgroundPainter(BackgroundPainter.VANILLA); //This is done automatically though + } +} diff --git a/src/main/java/kaptainwutax/seedcracker/gui/GuiItem.java b/src/main/java/kaptainwutax/seedcracker/gui/GuiItem.java new file mode 100644 index 0000000..adb3c6f --- /dev/null +++ b/src/main/java/kaptainwutax/seedcracker/gui/GuiItem.java @@ -0,0 +1,22 @@ +package kaptainwutax.seedcracker.gui; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; + +public class GuiItem extends Item { + + public GuiItem(Settings settings) { + super(settings); + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + MinecraftClient.getInstance().openScreen(new Screen(new Gui())); + return super.use(world, user, hand); + } +} diff --git a/src/main/java/kaptainwutax/seedcracker/gui/GuiScreen.java b/src/main/java/kaptainwutax/seedcracker/gui/GuiScreen.java deleted file mode 100644 index ce7cb46..0000000 --- a/src/main/java/kaptainwutax/seedcracker/gui/GuiScreen.java +++ /dev/null @@ -1,22 +0,0 @@ -package kaptainwutax.seedcracker.gui; - -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.text.LiteralText; - -public class GuiScreen extends Screen { - - public GuiScreen(String name) { - super(new LiteralText(name)); - } - - @Override - public void render(int mouseX, int mouseY, float partialTicks) { - this.renderBackground(); - } - - @Override - public boolean isPauseScreen() { - return false; - } - -} diff --git a/src/main/java/kaptainwutax/seedcracker/gui/Screen.java b/src/main/java/kaptainwutax/seedcracker/gui/Screen.java new file mode 100644 index 0000000..b9a388b --- /dev/null +++ b/src/main/java/kaptainwutax/seedcracker/gui/Screen.java @@ -0,0 +1,11 @@ +package kaptainwutax.seedcracker.gui; + +import io.github.cottonmc.cotton.gui.GuiDescription; +import io.github.cottonmc.cotton.gui.client.CottonClientScreen; + +public class Screen extends CottonClientScreen { + public Screen(GuiDescription description) { + super(description); + } + +} diff --git a/src/main/java/kaptainwutax/seedcracker/init/ClientCommands.java b/src/main/java/kaptainwutax/seedcracker/init/ClientCommands.java index 5432955..0bba1cc 100644 --- a/src/main/java/kaptainwutax/seedcracker/init/ClientCommands.java +++ b/src/main/java/kaptainwutax/seedcracker/init/ClientCommands.java @@ -5,6 +5,7 @@ import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; import kaptainwutax.seedcracker.command.ClientCommand; import kaptainwutax.seedcracker.command.FinderCommand; +import kaptainwutax.seedcracker.command.GuiCommand; import kaptainwutax.seedcracker.command.RenderCommand; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; @@ -23,10 +24,12 @@ public class ClientCommands { public static RenderCommand RENDER; public static FinderCommand FINDER; + public static GuiCommand GUI; static { COMMANDS.add(RENDER = new RenderCommand()); COMMANDS.add(FINDER = new FinderCommand()); + COMMANDS.add(GUI = new GuiCommand()); } public static void registerCommands(CommandDispatcher dispatcher) { diff --git a/src/main/java/kaptainwutax/seedcracker/mixin/ClientPlayerEntityMixin.java b/src/main/java/kaptainwutax/seedcracker/mixin/ClientPlayerEntityMixin.java index 9c214be..43bdb43 100644 --- a/src/main/java/kaptainwutax/seedcracker/mixin/ClientPlayerEntityMixin.java +++ b/src/main/java/kaptainwutax/seedcracker/mixin/ClientPlayerEntityMixin.java @@ -2,10 +2,7 @@ package kaptainwutax.seedcracker.mixin; import com.mojang.brigadier.StringReader; import kaptainwutax.seedcracker.SeedCracker; -import kaptainwutax.seedcracker.gui.GuiScreen; import kaptainwutax.seedcracker.init.ClientCommands; -import kaptainwutax.seedcracker.init.KeyBindings; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -20,10 +17,6 @@ public abstract class ClientPlayerEntityMixin { @Inject(method = "tick", at = @At("HEAD")) private void tick(CallbackInfo ci) { SeedCracker.get().getDataStorage().tick(); - - if(MinecraftClient.getInstance().currentScreen == null && KeyBindings.OPEN_MENU.isPressed()) { - MinecraftClient.getInstance().openScreen(new GuiScreen("Test")); - } } @Inject(method = "sendChatMessage", at = @At("HEAD"), cancellable = true) diff --git a/src/main/resources/assets/seedcracker/models/item/gui_item.json b/src/main/resources/assets/seedcracker/models/item/gui_item.json new file mode 100644 index 0000000..e834480 --- /dev/null +++ b/src/main/resources/assets/seedcracker/models/item/gui_item.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "seedcracker:item/gui_item" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/seedcracker/textures/item/gui_item.png b/src/main/resources/assets/seedcracker/textures/item/gui_item.png new file mode 100644 index 0000000000000000000000000000000000000000..47bc31f5a7924a39b6d458224cdbcba6e49e99e5 GIT binary patch literal 295 zcmV+?0oeYDP)43fiY5M1Nme_*^p(FjamR@4P!m^ci>48qV1(+IK+ zr13*>)c+Tzrf@^x^2mmO2(S}jHbB`RahPVX8YDT8IEW250NMF4No4=R!vV<>6c?Zb z9GZVo3`WunHz40gf?&uaYeLox(hD|Vx~CLQL(nxMYqpi;h8WQ6tnz<(umXl5$eLh$ zkUEfh6azpm*b%D^#xR3GG>i|@01|^)1j29wKmcaQ@kAA{CUkmzgfbYzG=mI+YlZ=k tAs`IX2*WTwvPKNe$N;7Q7p8jd1ppakP;eVeQau0w002ovPDHLkV1f=(avlHx literal 0 HcmV?d00001 diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index d992d04..1a72648 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -27,9 +27,15 @@ ], "depends": { - "fabricloader": ">=0.4.0" + "fabricloader": ">=0.4.0", + "fabric": "*", + "minecraft": ">=1.15" }, "suggests": { "flamingo": "*" + }, + "custom": { + "modmenu:api": true, + "modmenu:clientsideOnly": true } }