From 70c741979599ea597d7ef271b2fb61066df9ab7a Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Thu, 28 Jun 2018 01:06:32 +0200 Subject: [PATCH] Add recipe gui --- .../builder/impl/BuilderRecipe.java | 97 +++++++++++ .../worldhandler/gui/content/Contents.java | 2 + .../gui/content/impl/ContentRecipes.java | 158 ++++++++++++++++++ .../assets/worldhandler/lang/de_de.lang | 3 + .../assets/worldhandler/lang/en_us.lang | 3 + .../assets/worldhandler/lang/zh_cn.lang | 3 + 6 files changed, 266 insertions(+) create mode 100644 src/main/java/exopandora/worldhandler/builder/impl/BuilderRecipe.java create mode 100644 src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderRecipe.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderRecipe.java new file mode 100644 index 0000000..a97899e --- /dev/null +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderRecipe.java @@ -0,0 +1,97 @@ +package exopandora.worldhandler.builder.impl; + +import javax.annotation.Nullable; + +import exopandora.worldhandler.builder.CommandBuilder; +import exopandora.worldhandler.builder.Syntax; +import exopandora.worldhandler.builder.impl.BuilderAdvancement.EnumActionType; +import exopandora.worldhandler.builder.types.Type; +import exopandora.worldhandler.helper.EnumHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BuilderRecipe extends CommandBuilder +{ + public BuilderRecipe() + { + this(null, null, null); + } + + public BuilderRecipe(EnumMode mode, String player, ResourceLocation recipe) + { + this.setMode(mode); + this.setPlayer(player); + this.setRecipe(recipe); + } + + public void setMode(EnumMode mode) + { + this.setNode(0, mode != null ? mode.toString() : null); + } + + @Nullable + public EnumMode getMode() + { + return EnumHelper.valueOf(EnumMode.class, this.getNodeAsString(0)); + } + + public void setPlayer(String player) + { + this.setNode(1, player); + } + + @Nullable + public String getPlayer() + { + return this.getNodeAsString(1); + } + + public void setRecipe(ResourceLocation recipe) + { + this.setNode(2, recipe); + } + + @Nullable + public ResourceLocation getRecipe() + { + return this.getNodeAsResourceLocation(2); + } + + public BuilderRecipe getBuilderForMode(EnumMode mode) + { + return new BuilderRecipe(mode, this.getPlayer(), this.getRecipe()); + } + + @Override + public String getCommandName() + { + return "recipe"; + } + + @Override + public Syntax getSyntax() + { + Syntax syntax = new Syntax(); + + syntax.addRequired("give|take", Type.STRING); + syntax.addOptional("player", Type.STRING); + syntax.addOptional("recipe", Type.RESOURCE_LOCATION); + + return syntax; + } + + @SideOnly(Side.CLIENT) + public static enum EnumMode + { + GIVE, + TAKE; + + @Override + public String toString() + { + return this.name().toLowerCase(); + } + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/content/Contents.java b/src/main/java/exopandora/worldhandler/gui/content/Contents.java index dbbddfe..5e10223 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/Contents.java +++ b/src/main/java/exopandora/worldhandler/gui/content/Contents.java @@ -26,6 +26,7 @@ public class Contents public static final Content WORLD_INFO; public static final Content GAMERULES; + public static final Content RECIPES; public static final Content PLAYER; public static final Content EXPERIENCE; @@ -59,6 +60,7 @@ public class Contents WORLD_INFO = Contents.getRegisteredContainer("world"); GAMERULES = Contents.getRegisteredContainer("gamerules"); + RECIPES = Contents.getRegisteredContainer("recipes"); PLAYER = Contents.getRegisteredContainer("player"); EXPERIENCE = Contents.getRegisteredContainer("experience"); diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java new file mode 100644 index 0000000..7849ae4 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java @@ -0,0 +1,158 @@ +package exopandora.worldhandler.gui.content.impl; + +import java.util.ArrayList; +import java.util.List; + +import exopandora.worldhandler.WorldHandler; +import exopandora.worldhandler.builder.ICommandBuilder; +import exopandora.worldhandler.builder.impl.BuilderRecipe; +import exopandora.worldhandler.builder.impl.BuilderRecipe.EnumMode; +import exopandora.worldhandler.builder.types.Type; +import exopandora.worldhandler.gui.button.EnumTooltip; +import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.gui.category.Categories; +import exopandora.worldhandler.gui.category.Category; +import exopandora.worldhandler.gui.container.Container; +import exopandora.worldhandler.gui.content.Content; +import exopandora.worldhandler.gui.content.Contents; +import exopandora.worldhandler.gui.content.element.impl.ElementPageList; +import exopandora.worldhandler.gui.content.element.logic.ILogicPageList; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ContentRecipes extends Content +{ + private final BuilderRecipe builderRecipe = new BuilderRecipe(); + + @Override + public ICommandBuilder getCommandBuilder() + { + return this.builderRecipe; + } + + @Override + public void initGui(Container container, int x, int y) + { + List recipes = new ArrayList(); + + for(IRecipe recipe : CraftingManager.REGISTRY) + { + if(!recipe.isDynamic()) + { + recipes.add(recipe); + } + } + + ElementPageList list = new ElementPageList(x, y, recipes, null, 114, 20, 3, this, new int[] {6, 7, 8}, new ILogicPageList() + { + @Override + public String translate(IRecipe key) + { + if(!key.getRecipeOutput().equals(ItemStack.EMPTY)) + { + return key.getRecipeOutput().getDisplayName(); + } + + return key.getRegistryName().toString(); + } + + @Override + public void onClick(IRecipe clicked) + { + builderRecipe.setRecipe(clicked.getRegistryName()); + } + + @Override + public String getRegistryName(IRecipe key) + { + return key.getRegistryName().toString(); + } + + @Override + public void onRegister(int id, int x, int y, int width, int height, String display, String registry, boolean enabled, IRecipe value, Container container) + { + GuiButtonWorldHandler button; + container.add(button = new GuiButtonWorldHandler(id, x, y, width, height, display, value.getRegistryName().toString(), EnumTooltip.TOP_RIGHT)); + button.enabled = enabled; + } + + @Override + public IRecipe convert(String object) + { + return CraftingManager.REGISTRY.getObject(Type.parseResourceLocation(object)); + } + + @Override + public String getId() + { + return "recipe"; + } + }); + + container.add(list); + } + + @Override + public void initButtons(Container container, int x, int y) + { + container.add(new GuiButtonWorldHandler(0, x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"))); + container.add(new GuiButtonWorldHandler(1, x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"))); + + container.add(new GuiButtonWorldHandler(2, x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.recipes.give"))); + container.add(new GuiButtonWorldHandler(3, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.recipes.take"))); + } + + @Override + public void actionPerformed(Container container, GuiButton button) + { + switch(button.id) + { + case 2: + WorldHandler.sendCommand(this.builderRecipe.getBuilderForMode(EnumMode.GIVE)); + container.initButtons(); + break; + case 3: + WorldHandler.sendCommand(this.builderRecipe.getBuilderForMode(EnumMode.TAKE)); + container.initButtons(); + break; + default: + break; + } + } + + @Override + public Category getCategory() + { + return Categories.WORLD; + } + + @Override + public String getTitle() + { + return "Recipes"; + } + + @Override + public String getTabTitle() + { + return "Recipes"; + } + + @Override + public Content getActiveContent() + { + return Contents.RECIPES; + } + + @Override + public void onPlayerNameChanged(String username) + { + this.builderRecipe.setPlayer(username); + } +} diff --git a/src/main/resources/assets/worldhandler/lang/de_de.lang b/src/main/resources/assets/worldhandler/lang/de_de.lang index f543a98..cc1102c 100644 --- a/src/main/resources/assets/worldhandler/lang/de_de.lang +++ b/src/main/resources/assets/worldhandler/lang/de_de.lang @@ -283,6 +283,9 @@ gui.worldhandler.edit_blocks.clone.mode.filtered=Gefiltert gui.worldhandler.edit_blocks.pos.set_pos_1=Position 1 gui.worldhandler.edit_blocks.pos.set_pos_2=Position 2 +gui.worldhandler.recipes.give=Geben +gui.worldhandler.recipes.take=Nehmen + gui.worldhandler.scoreboard.slot.list=Liste gui.worldhandler.scoreboard.slot.belowName=Unter Name gui.worldhandler.scoreboard.slot.sidebar=Seitentafel diff --git a/src/main/resources/assets/worldhandler/lang/en_us.lang b/src/main/resources/assets/worldhandler/lang/en_us.lang index 35ea4e5..f09b1b0 100644 --- a/src/main/resources/assets/worldhandler/lang/en_us.lang +++ b/src/main/resources/assets/worldhandler/lang/en_us.lang @@ -283,6 +283,9 @@ gui.worldhandler.edit_blocks.clone.mode.filtered=Filtered gui.worldhandler.edit_blocks.pos.set_pos_1=Set Pos 1 gui.worldhandler.edit_blocks.pos.set_pos_2=Set Pos 2 +gui.worldhandler.recipes.give=Give +gui.worldhandler.recipes.take=Take + gui.worldhandler.scoreboard.slot.list=List gui.worldhandler.scoreboard.slot.belowName=Below Name gui.worldhandler.scoreboard.slot.sidebar=Sidebar diff --git a/src/main/resources/assets/worldhandler/lang/zh_cn.lang b/src/main/resources/assets/worldhandler/lang/zh_cn.lang index 7b203b8..278e42b 100644 --- a/src/main/resources/assets/worldhandler/lang/zh_cn.lang +++ b/src/main/resources/assets/worldhandler/lang/zh_cn.lang @@ -283,6 +283,9 @@ gui.worldhandler.edit_blocks.clone.mode.filtered=仅指定方块 gui.worldhandler.edit_blocks.pos.set_pos_1=设置位点 1 gui.worldhandler.edit_blocks.pos.set_pos_2=设置位点 2 +gui.worldhandler.recipes.give=Give +gui.worldhandler.recipes.take=Take + gui.worldhandler.scoreboard.slot.list=列表 gui.worldhandler.scoreboard.slot.belowName=名称下方 gui.worldhandler.scoreboard.slot.sidebar=侧边栏