diff --git a/src/main/java/com/goodbird/cnpcgeckoaddon/client/gui/GuiStringSelection.java b/src/main/java/com/goodbird/cnpcgeckoaddon/client/gui/GuiStringSelection.java new file mode 100644 index 0000000..732589c --- /dev/null +++ b/src/main/java/com/goodbird/cnpcgeckoaddon/client/gui/GuiStringSelection.java @@ -0,0 +1,56 @@ +package com.goodbird.cnpcgeckoaddon.client.gui; + +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import noppes.npcs.client.gui.util.GuiNPCStringSlot; +import noppes.npcs.client.gui.util.GuiNpcButton; +import noppes.npcs.client.gui.util.GuiNpcLabel; +import noppes.npcs.client.gui.util.SubGuiInterface; + +import java.util.List; +import java.util.function.Consumer; + +public class GuiStringSelection extends SubGuiInterface { + public GuiNPCStringSlot slot; + public Consumer action; + public String title; + public List options; + + public GuiStringSelection(GuiScreen parent, String title, List options, Consumer action) { + drawDefaultBackground = false; + this.parent = parent; + this.action = action; + this.title = title; + this.options = options; + } + + @Override + public void initGui() { + super.initGui(); + addLabel(new GuiNpcLabel(0, title, width / 2 - (this.fontRendererObj.getStringWidth(title) / 2), 20, 0xffffff)); + options.sort(String.CASE_INSENSITIVE_ORDER); + slot = new GuiNPCStringSlot(options, this, false, 18); + slot.registerScrollButtons(4, 5); + this.addButton(new GuiNpcButton(2, width / 2 - 100, height - 44, 98, 20, "gui.back")); + } + + @Override + public void drawScreen(int i, int j, float f) { + slot.drawScreen(i, j, f); + super.drawScreen(i, j, f); + } + + @Override + public void doubleClicked() { + action.accept(slot.selected); + close(); + } + + @Override + protected void actionPerformed(GuiButton guibutton) { + int id = guibutton.id; + if (id == 2) { + close(); + } + } +} diff --git a/src/main/java/com/goodbird/cnpcgeckoaddon/client/gui/SubGuiModelAnimation.java b/src/main/java/com/goodbird/cnpcgeckoaddon/client/gui/SubGuiModelAnimation.java new file mode 100644 index 0000000..b9a7c46 --- /dev/null +++ b/src/main/java/com/goodbird/cnpcgeckoaddon/client/gui/SubGuiModelAnimation.java @@ -0,0 +1,113 @@ +package com.goodbird.cnpcgeckoaddon.client.gui; + +import com.goodbird.cnpcgeckoaddon.data.CustomModelData; +import com.goodbird.cnpcgeckoaddon.mixin.IDataDisplay; +import com.goodbird.cnpcgeckoaddon.utils.AnimationFileUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.util.ResourceLocation; +import noppes.npcs.client.gui.util.*; +import noppes.npcs.entity.EntityNPCInterface; +import software.bernie.geckolib3.resource.GeckoLibCache; + +public class SubGuiModelAnimation extends SubGuiInterface implements ITextfieldListener { + public SubGuiModelAnimation(EntityNPCInterface npc){ + this.npc = npc; + } + + @Override + public void initGui() { + super.initGui(); + int y = guiTop + 44; + addSelectionBlock(1,y,"Animation File:",getModelData(npc).getAnimFile()); + addSelectionBlock(2,y+=23,"Idle:",getModelData(npc).getIdleAnim()); + addSelectionBlock(3,y+=23,"Walk:",getModelData(npc).getWalkAnim()); + addSelectionBlock(4,y+=23,"Attack:",getModelData(npc).getAttackAnim()); + addSelectionBlock(5,y+23,"Hurt:",getModelData(npc).getHurtAnim()); + addButton(new GuiNpcButton(670, width - 22, 2, 20, 20, "X")); + } + + public void addSelectionBlock(int id, int y, String label, String value){ + addLabel(new GuiNpcLabel(id,label, guiLeft - 85, y + 5,0xffffff)); + addTextField(new GuiNpcTextField(id,this, fontRendererObj, guiLeft - 10, y, 200, 20, value)); + this.addButton(new GuiNpcButton(id, guiLeft + 193, y, 80, 20, "mco.template.button.select")); + } + + public CustomModelData getModelData(EntityNPCInterface npc){ + return ((IDataDisplay)npc.display).getCustomModelData(); + } + + @Override + protected void actionPerformed(GuiButton button) { + super.actionPerformed(button); + + if(button.id == 670){ + close(); + } + if(button.id==1){ + setSubGui(new GuiStringSelection(this,"Selecting geckolib animation file:", + AnimationFileUtil.getAnimationFileList(), (name)-> getModelData(npc).setAnimFile(name))); + } + if(button.id==2){ + setSubGui(new GuiStringSelection(this,"Selecting geckolib idle animation:", + AnimationFileUtil.getAnimationList(getModelData(npc).getAnimFile()), + (name)-> getModelData(npc).setIdleAnim(name))); + } + if(button.id==3){ + setSubGui(new GuiStringSelection(this,"Selecting geckolib walk animation:", + AnimationFileUtil.getAnimationList(getModelData(npc).getAnimFile()), + (name)-> getModelData(npc).setWalkAnim(name))); + } + if(button.id==4){ + setSubGui(new GuiStringSelection(this,"Selecting geckolib attack animation:", + AnimationFileUtil.getAnimationList(getModelData(npc).getAnimFile()), + (name)-> getModelData(npc).setAnimFile(name))); + } + if(button.id==5){ + setSubGui(new GuiStringSelection(this,"Selecting geckolib hurt animation:", + AnimationFileUtil.getAnimationList(getModelData(npc).getAnimFile()), + (name)-> getModelData(npc).setHurtAnim(name))); + } + } + + public boolean isValidAnimFile(String name){ + return GeckoLibCache.getInstance().getAnimations().containsKey(new ResourceLocation(name)); + } + + public boolean isValidAnimation(String name){ + return AnimationFileUtil.getAnimationList(getModelData(npc).getAnimFile()).contains(name); + } + + @Override + public void unFocused(GuiNpcTextField textfield) { + if(textfield.id == 1 && isValidAnimFile(textfield.getText())){ + if(!textfield.isEmpty()) + getModelData(npc).setAnimFile(textfield.getText()); + else + textfield.setText(getModelData(npc).getAnimFile()); + } + if(textfield.id == 2 && isValidAnimation(textfield.getText())){ + if(!textfield.isEmpty()) + getModelData(npc).setIdleAnim(textfield.getText()); + else + textfield.setText(getModelData(npc).getIdleAnim()); + } + if(textfield.id == 3 && isValidAnimation(textfield.getText())){ + if(!textfield.isEmpty()) + getModelData(npc).setWalkAnim(textfield.getText()); + else + textfield.setText(getModelData(npc).getWalkAnim()); + } + if(textfield.id == 4 && isValidAnimation(textfield.getText())){ + if(!textfield.isEmpty()) + getModelData(npc).setAttackAnim(textfield.getText()); + else + textfield.setText(getModelData(npc).getAttackAnim()); + } + if(textfield.id == 5 && isValidAnimation(textfield.getText())){ + if(!textfield.isEmpty()) + getModelData(npc).setHurtAnim(textfield.getText()); + else + textfield.setText(getModelData(npc).getHurtAnim()); + } + } +}