From e86d4f5c0c20acf39190936d80e2b4001532c7b1 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Tue, 2 Apr 2019 18:17:54 +0200 Subject: [PATCH] Update to 1.13.2 --- README.md | 1 + build.gradle | 190 ++- gradle/wrapper/gradle-wrapper.jar | Bin 52271 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 110 +- gradlew.bat | 14 +- .../java/exopandora/worldhandler/Main.java | 6 +- .../exopandora/worldhandler/WorldHandler.java | 196 +-- .../worldhandler/builder/CommandBuilder.java | 65 +- .../builder/CommandBuilderNBT.java | 34 +- .../worldhandler/builder/CommandString.java | 6 +- .../worldhandler/builder/ICommandBuilder.java | 6 +- .../builder/ICommandBuilderNBT.java | 6 +- .../builder/ICommandBuilderSyntax.java | 6 +- .../worldhandler/builder/Syntax.java | 8 +- .../builder/component/IBuilderComponent.java | 10 +- .../component/abstr/ComponentAttribute.java | 6 +- .../component/abstr/ComponentPotion.java | 121 +- .../component/abstr/PotionMetadata.java | 24 +- .../impl/ComponentAttributeItem.java | 20 +- .../component/impl/ComponentAttributeMob.java | 18 +- .../component/impl/ComponentDisplay.java | 20 +- .../component/impl/ComponentEnchantment.java | 36 +- .../component/impl/ComponentPotionItem.java | 6 +- .../component/impl/ComponentPotionMob.java | 6 +- .../component/impl/ComponentSummon.java | 118 +- .../builder/component/impl/ComponentTag.java | 32 +- .../builder/impl/BuilderAdvancement.java | 18 +- .../builder/impl/BuilderBlockdata.java | 37 - .../builder/impl/BuilderButcher.java | 47 +- .../builder/impl/BuilderClone.java | 71 +- .../builder/impl/BuilderCustomItem.java | 6 +- .../builder/impl/BuilderData.java | 323 ++++ .../builder/impl/BuilderDifficulty.java | 15 +- .../builder/impl/BuilderEnchantment.java | 12 +- .../builder/impl/BuilderExperience.java | 103 +- .../builder/impl/BuilderFill.java | 141 +- .../builder/impl/BuilderGamemode.java | 7 +- .../builder/impl/BuilderGamerule.java | 6 +- .../builder/impl/BuilderGeneric.java | 6 +- .../builder/impl/BuilderGive.java | 64 +- .../builder/impl/BuilderMultiCommand.java | 6 +- .../builder/impl/BuilderNoteEditor.java | 29 +- .../builder/impl/BuilderPlayer.java | 6 +- .../builder/impl/BuilderPlayerReason.java | 6 +- .../builder/impl/BuilderPotionEffect.java | 82 +- .../builder/impl/BuilderPotionItem.java | 30 +- .../builder/impl/BuilderRecipe.java | 17 +- .../impl/BuilderScoreboardObjectives.java | 159 +- .../impl/BuilderScoreboardPlayers.java | 175 +- .../builder/impl/BuilderSetblock.java | 55 +- .../builder/impl/BuilderSignEditor.java | 13 +- .../builder/impl/BuilderSpawnpoint.java | 27 +- .../builder/impl/BuilderSummon.java | 126 +- .../worldhandler/builder/impl/BuilderTag.java | 88 + ...ScoreboardTeams.java => BuilderTeams.java} | 92 +- .../builder/impl/BuilderTime.java | 7 +- .../builder/impl/BuilderTrigger.java | 93 ++ .../worldhandler/builder/impl/BuilderWH.java | 6 +- .../builder/impl/BuilderWeather.java | 7 +- .../builder/impl/BuilderWhitelist.java | 8 +- .../builder/impl/BuilderWorldHandler.java | 6 +- .../builder/impl/abstr/BuilderBlockPos.java | 60 +- .../impl/abstr/BuilderDoubleBlockPos.java | 82 +- .../builder/impl/abstr/BuilderScoreboard.java | 6 +- .../builder/impl/abstr/EnumAttributes.java | 14 +- .../builder/types/BlockResourceLocation.java | 133 ++ .../builder/types/Coordinate.java | 105 +- .../builder/types/CoordinateDouble.java | 39 + .../builder/types/CoordinateInt.java | 39 + .../builder/types/GreedyString.java | 54 + .../builder/types/ICoordinate.java | 10 + .../builder/types/ItemResourceLocation.java | 104 ++ .../worldhandler/builder/types/Level.java | 52 - .../builder/types/TargetSelector.java | 9 +- .../worldhandler/builder/types/Type.java | 21 +- .../worldhandler/command/CommandWH.java | 276 +--- .../command/CommandWorldHandler.java | 113 +- .../command/FakeCommandHandler.java | 45 - .../worldhandler/config/Config.java | 124 ++ .../worldhandler/config/ConfigButcher.java | 45 - .../config/ConfigCategoryButcher.java | 93 ++ .../config/ConfigCategorySettings.java | 320 ++++ .../config/ConfigCategorySkin.java | 343 ++++ .../config/ConfigCategorySliders.java | 203 +++ .../worldhandler/config/ConfigSettings.java | 136 -- .../worldhandler/config/ConfigSkin.java | 127 -- .../worldhandler/config/ConfigSliders.java | 84 - .../event/ClientEventHandler.java | 121 ++ .../worldhandler/event/EventListener.java | 172 -- .../worldhandler/event/KeyHandler.java | 34 + .../worldhandler/format/EnumColor.java | 11 +- .../worldhandler/format/TextFormatting.java | 8 +- .../format/text/ColoredString.java | 25 +- .../format/text/FormattedString.java | 6 +- .../format/text/JsonClickEvent.java | 6 +- .../format/text/JsonSignLine.java | 6 +- .../format/text/JsonSignLineSerializer.java | 6 +- .../worldhandler/format/text/SignText.java | 6 +- .../worldhandler/gui/button/EnumIcon.java | 10 +- .../worldhandler/gui/button/EnumTooltip.java | 15 - .../gui/button/GuiButtonBase.java | 91 ++ .../gui/button/GuiButtonIcon.java | 59 + .../gui/button/GuiButtonItem.java | 39 +- .../gui/button/GuiButtonKeyboard.java | 181 --- .../gui/button/GuiButtonList.java | 156 +- .../gui/button/GuiButtonPiano.java | 162 ++ .../worldhandler/gui/button/GuiButtonTab.java | 21 +- .../gui/button/GuiButtonTooltip.java | 44 + .../gui/button/GuiButtonWorldHandler.java | 219 --- .../worldhandler/gui/button/GuiSlider.java | 303 ++-- .../gui/button/GuiTextFieldTooltip.java | 243 +-- .../button/logic/ColorListButtonLogic.java | 46 - .../gui/button/logic/IListButtonLogic.java | 31 - .../gui/button/logic/ISliderResponder.java | 11 - .../gui/button/persistence/ButtonValue.java | 51 - .../gui/button/persistence/SliderValue.java | 70 - .../button/responder/AttributeResponder.java | 27 - .../gui/button/responder/SimpleResponder.java | 35 - .../worldhandler/gui/category/Categories.java | 8 +- .../worldhandler/gui/category/Category.java | 15 +- .../gui/config/GuiConfigWorldHandler.java | 56 - .../gui/config/GuiFactoryWorldHandler.java | 37 - .../worldhandler/gui/container/Container.java | 23 +- .../gui/container/IContainer.java | 12 +- ...lerContainer.java => GuiWorldHandler.java} | 1432 ++++++++--------- .../worldhandler/gui/content/Content.java | 87 +- .../worldhandler/gui/content/Contents.java | 62 +- .../worldhandler/gui/content/IContent.java | 24 +- .../gui/content/element/Element.java | 6 +- .../gui/content/element/IElement.java | 21 +- .../element/impl/ElementClickList.java | 172 -- .../element/impl/ElementColorMenu.java | 201 ++- .../element/impl/ElementMultiButtonList.java | 169 ++ .../content/element/impl/ElementPageList.java | 228 +-- .../gui/content/element/logic/ILogic.java | 10 - .../element/logic/ILogicClickList.java | 16 - .../element/logic/ILogicColorMenu.java | 32 - .../content/element/logic/ILogicPageList.java | 17 - .../gui/content/impl/ContentAdvancements.java | 126 +- .../gui/content/impl/ContentButcher.java | 127 +- .../content/impl/ContentButcherSettings.java | 108 ++ .../gui/content/impl/ContentChangeWorld.java | 101 +- .../gui/content/impl/ContentContainers.java | 148 +- .../gui/content/impl/ContentContinue.java | 59 +- .../gui/content/impl/ContentCustomItem.java | 274 ++-- .../gui/content/impl/ContentEditBlocks.java | 353 ++-- .../gui/content/impl/ContentEnchantment.java | 74 +- .../gui/content/impl/ContentExperience.java | 101 +- .../gui/content/impl/ContentGamerules.java | 134 +- .../gui/content/impl/ContentMain.java | 155 +- .../gui/content/impl/ContentMultiplayer.java | 315 ++-- .../gui/content/impl/ContentNoteEditor.java | 302 ++-- .../gui/content/impl/ContentPlayer.java | 176 +- .../gui/content/impl/ContentPotions.java | 235 ++- .../gui/content/impl/ContentRecipes.java | 98 +- .../impl/ContentScoreboardObjectives.java | 292 ++-- .../impl/ContentScoreboardPlayers.java | 302 ++-- .../content/impl/ContentScoreboardTeams.java | 214 ++- .../gui/content/impl/ContentSettings.java | 234 +++ .../gui/content/impl/ContentSignEditor.java | 169 +- .../gui/content/impl/ContentSummon.java | 766 +++++---- .../gui/content/impl/ContentWorldInfo.java | 143 +- .../gui/content/impl/abstr/ContentChild.java | 6 +- .../content/impl/abstr/ContentScoreboard.java | 23 +- .../worldhandler/gui/logic/ILogic.java | 10 + .../gui/logic/ILogicClickList.java | 24 + .../gui/logic/ILogicColorMenu.java | 24 + .../worldhandler/gui/logic/ILogicMapped.java | 25 + .../gui/logic/ILogicPageList.java | 17 + .../gui/logic/LogicSliderAttribute.java | 25 + .../gui/logic/LogicSliderSimple.java | 52 + .../worldhandler/helper/ActionHelper.java | 186 +++ .../helper/AdvancementHelper.java | 38 - .../worldhandler/helper/BlockHelper.java | 184 +-- .../worldhandler/helper/CommandHelper.java | 67 + .../worldhandler/helper/EntityHelper.java | 84 - .../worldhandler/helper/EnumHelper.java | 8 +- .../exopandora/worldhandler/helper/Node.java | 34 +- .../helper/RegistryTranslator.java | 72 + .../worldhandler/helper/ResourceHelper.java | 85 +- .../worldhandler/helper/ScoreboardHelper.java | 43 +- .../worldhandler/hud/BiomeIndicator.java | 102 -- .../installer/ChangeFolderListener.java | 3 - .../worldhandler/installer/ForumListener.java | 6 +- .../installer/InstallListener.java | 9 +- .../worldhandler/installer/Window.java | 5 +- .../worldhandler/proxy/ClientProxy.java | 17 +- .../worldhandler/proxy/CommonProxy.java | 5 +- .../worldhandler/util/ActionHandler.java | 11 + .../worldhandler/util/UtilKeyBinding.java | 16 +- .../worldhandler/util/UtilPlayer.java | 20 - .../worldhandler/util/UtilRender.java | 28 +- src/main/resources/META-INF/mods.toml | 24 + .../assets/worldhandler/lang/de_de.json | 450 ++++++ .../assets/worldhandler/lang/de_de.lang | 453 ------ .../assets/worldhandler/lang/en_us.json | 450 ++++++ .../assets/worldhandler/lang/en_us.lang | 453 ------ .../assets/worldhandler/lang/zh_cn.json | 450 ++++++ .../assets/worldhandler/lang/zh_cn.lang | 453 ------ .../worldhandler/textures => }/logo.png | Bin src/main/resources/mcmod.info | 40 - src/main/resources/pack.mcmeta | 4 +- version.json | 24 +- 204 files changed, 10130 insertions(+), 9348 deletions(-) delete mode 100644 src/main/java/exopandora/worldhandler/builder/impl/BuilderBlockdata.java create mode 100644 src/main/java/exopandora/worldhandler/builder/impl/BuilderData.java create mode 100644 src/main/java/exopandora/worldhandler/builder/impl/BuilderTag.java rename src/main/java/exopandora/worldhandler/builder/impl/{BuilderScoreboardTeams.java => BuilderTeams.java} (66%) create mode 100644 src/main/java/exopandora/worldhandler/builder/impl/BuilderTrigger.java create mode 100644 src/main/java/exopandora/worldhandler/builder/types/BlockResourceLocation.java create mode 100644 src/main/java/exopandora/worldhandler/builder/types/CoordinateDouble.java create mode 100644 src/main/java/exopandora/worldhandler/builder/types/CoordinateInt.java create mode 100644 src/main/java/exopandora/worldhandler/builder/types/GreedyString.java create mode 100644 src/main/java/exopandora/worldhandler/builder/types/ICoordinate.java create mode 100644 src/main/java/exopandora/worldhandler/builder/types/ItemResourceLocation.java delete mode 100644 src/main/java/exopandora/worldhandler/builder/types/Level.java delete mode 100644 src/main/java/exopandora/worldhandler/command/FakeCommandHandler.java create mode 100644 src/main/java/exopandora/worldhandler/config/Config.java delete mode 100644 src/main/java/exopandora/worldhandler/config/ConfigButcher.java create mode 100644 src/main/java/exopandora/worldhandler/config/ConfigCategoryButcher.java create mode 100644 src/main/java/exopandora/worldhandler/config/ConfigCategorySettings.java create mode 100644 src/main/java/exopandora/worldhandler/config/ConfigCategorySkin.java create mode 100644 src/main/java/exopandora/worldhandler/config/ConfigCategorySliders.java delete mode 100644 src/main/java/exopandora/worldhandler/config/ConfigSettings.java delete mode 100644 src/main/java/exopandora/worldhandler/config/ConfigSkin.java delete mode 100644 src/main/java/exopandora/worldhandler/config/ConfigSliders.java create mode 100644 src/main/java/exopandora/worldhandler/event/ClientEventHandler.java delete mode 100644 src/main/java/exopandora/worldhandler/event/EventListener.java create mode 100644 src/main/java/exopandora/worldhandler/event/KeyHandler.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/button/EnumTooltip.java create mode 100644 src/main/java/exopandora/worldhandler/gui/button/GuiButtonBase.java create mode 100644 src/main/java/exopandora/worldhandler/gui/button/GuiButtonIcon.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/button/GuiButtonKeyboard.java create mode 100644 src/main/java/exopandora/worldhandler/gui/button/GuiButtonPiano.java create mode 100644 src/main/java/exopandora/worldhandler/gui/button/GuiButtonTooltip.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/button/GuiButtonWorldHandler.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/button/logic/ColorListButtonLogic.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/button/logic/IListButtonLogic.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/button/logic/ISliderResponder.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValue.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/button/persistence/SliderValue.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/button/responder/AttributeResponder.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/button/responder/SimpleResponder.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/config/GuiConfigWorldHandler.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/config/GuiFactoryWorldHandler.java rename src/main/java/exopandora/worldhandler/gui/container/impl/{GuiWorldHandlerContainer.java => GuiWorldHandler.java} (50%) delete mode 100644 src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java create mode 100644 src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementMultiButtonList.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogic.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicClickList.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicColorMenu.java delete mode 100644 src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicPageList.java create mode 100644 src/main/java/exopandora/worldhandler/gui/content/impl/ContentButcherSettings.java create mode 100644 src/main/java/exopandora/worldhandler/gui/content/impl/ContentSettings.java create mode 100644 src/main/java/exopandora/worldhandler/gui/logic/ILogic.java create mode 100644 src/main/java/exopandora/worldhandler/gui/logic/ILogicClickList.java create mode 100644 src/main/java/exopandora/worldhandler/gui/logic/ILogicColorMenu.java create mode 100644 src/main/java/exopandora/worldhandler/gui/logic/ILogicMapped.java create mode 100644 src/main/java/exopandora/worldhandler/gui/logic/ILogicPageList.java create mode 100644 src/main/java/exopandora/worldhandler/gui/logic/LogicSliderAttribute.java create mode 100644 src/main/java/exopandora/worldhandler/gui/logic/LogicSliderSimple.java create mode 100644 src/main/java/exopandora/worldhandler/helper/ActionHelper.java delete mode 100644 src/main/java/exopandora/worldhandler/helper/AdvancementHelper.java create mode 100644 src/main/java/exopandora/worldhandler/helper/CommandHelper.java delete mode 100644 src/main/java/exopandora/worldhandler/helper/EntityHelper.java create mode 100644 src/main/java/exopandora/worldhandler/helper/RegistryTranslator.java delete mode 100644 src/main/java/exopandora/worldhandler/hud/BiomeIndicator.java create mode 100644 src/main/java/exopandora/worldhandler/util/ActionHandler.java delete mode 100644 src/main/java/exopandora/worldhandler/util/UtilPlayer.java create mode 100644 src/main/resources/META-INF/mods.toml create mode 100644 src/main/resources/assets/worldhandler/lang/de_de.json delete mode 100644 src/main/resources/assets/worldhandler/lang/de_de.lang create mode 100644 src/main/resources/assets/worldhandler/lang/en_us.json delete mode 100644 src/main/resources/assets/worldhandler/lang/en_us.lang create mode 100644 src/main/resources/assets/worldhandler/lang/zh_cn.json delete mode 100644 src/main/resources/assets/worldhandler/lang/zh_cn.lang rename src/main/resources/{assets/worldhandler/textures => }/logo.png (100%) delete mode 100644 src/main/resources/mcmod.info diff --git a/README.md b/README.md index 2c37671..2a3febf 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ Curseforge: https://minecraft.curseforge.com/projects/world-handler-command-gui
  • /spawnpoint
  • /summon
  • /time
  • +
  • /trigger
  • /weather
  • /xp
  • diff --git a/build.gradle b/build.gradle index 75afcde..707a569 100644 --- a/build.gradle +++ b/build.gradle @@ -1,110 +1,132 @@ buildscript { repositories { + maven { url = 'https://files.minecraftforge.net/maven' } jcenter() - maven { url = "http://files.minecraftforge.net/maven" } + mavenCentral() } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' + classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true } } -apply plugin: 'net.minecraftforge.gradle.forge' -//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. +apply plugin: 'net.minecraftforge.gradle' +// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. +apply plugin: 'eclipse' +apply plugin: 'maven-publish' -def mcversion = "1.12.2" -def modversion = "2.2.1" -def mccompatible = "1.12" -def url = "https://minecraft.curseforge.com/projects/world-handler-command-gui" -def update_url = "https://raw.githubusercontent.com/Exopandora/worldhandler/master/version.json" -def certificate = "d6261bb645f41db84c74f98e512c2bb43f188af2" +version = '1.13.2-2.3' +group = 'exopandora.worldhandler' // http://maven.apache.org/guides/mini/guide-naming-conventions.html +archivesBaseName = 'WorldHandler' -version = mcversion + "-" + modversion -group = "exopandora.worldhandler.WorldHandler" // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = "WorldHandler" - -sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. -compileJava { - sourceCompatibility = targetCompatibility = '1.8' -} - -jar { - manifest { - attributes 'Main-Class': 'exopandora.worldhandler.Main' - } -} - -task processMetadata(dependsOn: minecraft) { - minecraft.replace '$version', modversion - minecraft.replace '$mcversion', mcversion - minecraft.replace '$compatible', mccompatible - minecraft.replace '$url', url - minecraft.replace '$update_url', update_url - minecraft.replace '$certificate', certificate -} - -if(project.hasProperty('keyStore')) { - task signJar(type: SignJar, dependsOn: reobfJar) { - keyStore = project.keyStore - alias = project.keyStoreAlias - storePass = project.keyStorePass - keyPass = project.keyStoreKeyPass - inputFile = jar.archivePath - outputFile = jar.archivePath - } - build.dependsOn signJar -} +sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. minecraft { - version = "1.12.2-14.23.4.2705" - runDir = "run" - - // the mappings can be changed at any time, and must be in the following format. - // snapshot_YYYYMMDD snapshot are built nightly. - // stable_# stables are built at the discretion of the MCP team. + // The mappings can be changed at any time, and must be in the following format. + // snapshot_YYYYMMDD Snapshot are built nightly. + // stable_# Stables are built at the discretion of the MCP team. // Use non-default mappings at your own risk. they may not always work. - // simply re-run your setup task after changing the mappings to update your workspace. - mappings = "snapshot_20171003" + // Simply re-run your setup task after changing the mappings to update your workspace. + mappings channel: 'snapshot', version: '20180921-1.13' // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. + + // accessTransformer = file('build/resources/main/META-INF/accesstransformer.cfg') + + // Default run configurations. + // These can be tweaked, removed, or duplicated as needed. + runs { + client { + workingDirectory project.file('run') + + // Recommended logging data for a userdev environment + // property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + + // Recommended logging level for the console + // property 'forge.logging.console.level', 'debug' + + mods { + worldhandler { + source sourceSets.main + } + } + } + + server { + workingDirectory project.file('run') + + // Recommended logging data for a userdev environment + // property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + + // Recommended logging level for the console + // property 'forge.logging.console.level', 'debug' + + mods { + worldhandler { + source sourceSets.main + } + } + } + } } dependencies { - // you may put jars on which you depend on in ./libs - // or you may define them like so.. - //compile "some.group:artifact:version:classifier" - //compile "some.group:artifact:version" - - // real examples - //compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env - //compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env + // Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed + // that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied. + // The userdev artifact is a special name and will get all sorts of transformations applied to it. + minecraft 'net.minecraftforge:forge:1.13.2-25.0.100' - // the 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime. - //provided 'com.mod-buildcraft:buildcraft:6.0.8:dev' + // You may put jars on which you depend on in ./libs or you may define them like so.. + // compile "some.group:artifact:version:classifier" + // compile "some.group:artifact:version" - // the deobf configurations: 'deobfCompile' and 'deobfProvided' are the same as the normal compile and provided, - // except that these dependencies get remapped to your current MCP mappings - //deobfCompile 'com.mod-buildcraft:buildcraft:6.0.8:dev' - //deobfProvided 'com.mod-buildcraft:buildcraft:6.0.8:dev' + // Real examples + // compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env + // compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env - // for more info... + // The 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime. + // provided 'com.mod-buildcraft:buildcraft:6.0.8:dev' + + // These dependencies get remapped to your current MCP mappings + // deobf 'com.mod-buildcraft:buildcraft:6.0.8:dev' + + // For more info... // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html // http://www.gradle.org/docs/current/userguide/dependency_management.html } -processResources { - // this will ensure that this task is redone when the versions change. - inputs.property "version", project.version - inputs.property "mcversion", project.minecraft.version - - // replace stuff in mcmod.info, nothing else - from(sourceSets.main.resources.srcDirs) { - include 'mcmod.info' - - // replace version and mcversion - expand 'version':project.version, 'mcversion':project.minecraft.version - } - - // copy everything else except the mcmod.info - from(sourceSets.main.resources.srcDirs) { - exclude 'mcmod.info' +// Example for how to get properties into the manifest for reading by the runtime.. +jar { + manifest { + attributes([ + "Specification-Title": "World Handler", + "Specification-Vendor": "Exopandora", + "Specification-Version": "1", // We are version 1 of ourselves + "Implementation-Title": project.name, + "Implementation-Version": "${version}", + "Implementation-Vendor" :"Exopandora", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), + "Main-Class": "exopandora.worldhandler.Main" + ]) } } + +// Example configuration to allow publishing using the maven-publish task +// we define a custom artifact that is sourced from the reobfJar output task +// and then declare that to be published +// Note you'll need to add a repository here +def reobfFile = file("$buildDir/reobfJar/output.jar") +def reobfArtifact = artifacts.add('default', reobfFile) { + type 'jar' + builtBy 'reobfJar' +} +publishing { + publications { + mavenJava(MavenPublication) { + artifact reobfArtifact + } + } + repositories { + maven { + url "file:///${project.projectDir}/mcmodsrepo" + } + } +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 30d399d8d2bf522ff5de94bf434a7cc43a9a74b5..7a3265ee94c0ab25cf079ac8ccdf87f41d455d42 100644 GIT binary patch delta 29215 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e18cba7..949819d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Mon Sep 14 12:28:28 PDT 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip diff --git a/gradlew b/gradlew index 91a7e26..cccdd3d 100644 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,47 +6,6 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" @@ -61,9 +20,49 @@ while [ -h "$PRG" ] ; do fi done SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- +cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" -cd "$SAVED" >&- +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -90,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -114,6 +113,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` @@ -154,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 8a0b282..f955316 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/src/main/java/exopandora/worldhandler/Main.java b/src/main/java/exopandora/worldhandler/Main.java index ddb79d8..cc05653 100644 --- a/src/main/java/exopandora/worldhandler/Main.java +++ b/src/main/java/exopandora/worldhandler/Main.java @@ -7,14 +7,14 @@ import java.util.Locale; import javax.swing.UIManager; import exopandora.worldhandler.installer.Window; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -@SideOnly(Side.CLIENT) public class Main { public static final String NAME = "World Handler"; public static final String MODID = "worldhandler"; + public static final String MC_VERSION = "1.13.2"; + public static final String MOD_VERSION = "2.3"; + public static final String URL = "https://minecraft.curseforge.com/projects/world-handler-command-gui"; public static void main(String[] args) { diff --git a/src/main/java/exopandora/worldhandler/WorldHandler.java b/src/main/java/exopandora/worldhandler/WorldHandler.java index 09ced55..5df920a 100644 --- a/src/main/java/exopandora/worldhandler/WorldHandler.java +++ b/src/main/java/exopandora/worldhandler/WorldHandler.java @@ -1,195 +1,75 @@ package exopandora.worldhandler; -import org.apache.commons.lang3.ArrayUtils; +import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.lwjgl.input.Keyboard; +import org.lwjgl.glfw.GLFW; -import exopandora.worldhandler.builder.ICommandBuilder; -import exopandora.worldhandler.builder.ICommandBuilderSyntax; -import exopandora.worldhandler.command.CommandWH; -import exopandora.worldhandler.command.CommandWorldHandler; -import exopandora.worldhandler.config.ConfigButcher; -import exopandora.worldhandler.config.ConfigSettings; -import exopandora.worldhandler.config.ConfigSkin; -import exopandora.worldhandler.config.ConfigSliders; -import exopandora.worldhandler.event.EventListener; +import exopandora.worldhandler.config.Config; import exopandora.worldhandler.gui.category.Category; import exopandora.worldhandler.gui.content.Content; -import exopandora.worldhandler.helper.BlockHelper; +import exopandora.worldhandler.helper.CommandHelper; +import exopandora.worldhandler.proxy.ClientProxy; import exopandora.worldhandler.proxy.CommonProxy; import exopandora.worldhandler.util.UtilKeyBinding; import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; -import net.minecraft.command.ICommand; -import net.minecraft.util.text.ChatType; -import net.minecraft.util.text.Style; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.util.text.event.ClickEvent; -import net.minecraft.util.text.event.ClickEvent.Action; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.Mod.EventHandler; -import net.minecraftforge.fml.common.Mod.Instance; -import net.minecraftforge.fml.common.ProgressManager; -import net.minecraftforge.fml.common.ProgressManager.ProgressBar; -import net.minecraftforge.fml.common.SidedProxy; -import net.minecraftforge.fml.common.event.FMLInitializationEvent; -import net.minecraftforge.fml.common.event.FMLLoadCompleteEvent; -import net.minecraftforge.fml.common.event.FMLModDisabledEvent; -import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; -import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import net.minecraftforge.fml.common.event.FMLServerStartingEvent; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.fml.config.ModConfig.Type; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; +import net.minecraftforge.fml.event.server.FMLServerStartingEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -@SideOnly(Side.CLIENT) -@Mod(modid = Main.MODID, name = Main.NAME, acceptedMinecraftVersions = "[$compatible,)", version = "$version", canBeDeactivated = true, guiFactory = "exopandora.worldhandler.gui.config.GuiFactoryWorldHandler", updateJSON = "$update_url", clientSideOnly = true, certificateFingerprint = "$certificate") +@Mod(Main.MODID) public class WorldHandler { - @Instance(Main.MODID) - private static WorldHandler INSTANCE; + public static final Logger LOGGER = LogManager.getLogger(); - public static KeyBinding KEY_WORLD_HANDLER = new KeyBinding(Main.NAME, Keyboard.KEY_V, "key.categories.misc"); - public static KeyBinding KEY_WORLD_HANDLER_POS1 = new KeyBinding(Main.NAME + " Pos1", Keyboard.KEY_O, "key.categories.misc"); - public static KeyBinding KEY_WORLD_HANDLER_POS2 = new KeyBinding(Main.NAME + " Pos2", Keyboard.KEY_P, "key.categories.misc"); + public static final KeyBinding KEY_WORLD_HANDLER = new KeyBinding(Main.NAME, GLFW.GLFW_KEY_V, "key.categories.misc"); + public static final KeyBinding KEY_WORLD_HANDLER_POS1 = new KeyBinding(Main.NAME + " Pos1", GLFW.GLFW_KEY_O, "key.categories.misc"); + public static final KeyBinding KEY_WORLD_HANDLER_POS2 = new KeyBinding(Main.NAME + " Pos2", GLFW.GLFW_KEY_P, "key.categories.misc"); - public static final ICommand COMMAND_WORLD_HANDLER = new CommandWorldHandler(); - public static final ICommand COMMAND_WH = new CommandWH(); - - public static Configuration CONFIG; - public static Logger LOGGER; public static String USERNAME = null; - @SidedProxy(clientSide = "exopandora.worldhandler.proxy.ClientProxy", serverSide = "exopandora.worldhandler.proxy.CommonProxy") - private static CommonProxy PROXY; - private EventListener eventListener = new EventListener(); + private static CommonProxy SIDEPROXY; - @EventHandler - public void preInit(FMLPreInitializationEvent event) + public WorldHandler() { - LOGGER = event.getModLog(); - LOGGER.info("Pre-Initialization"); - LOGGER.info("First Release on March 28 2013 - 02:29 PM CET by Exopandora"); - LOGGER.info("Latest Version: $url"); - CONFIG = new Configuration(event.getSuggestedConfigurationFile()); + SIDEPROXY = DistExecutor.runForDist(() -> ClientProxy::new, () -> CommonProxy::new); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonSetup); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientSetup); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::loadComplete); + FMLJavaModLoadingContext.get().getModEventBus().addListener(Config::configLoad); + FMLJavaModLoadingContext.get().getModEventBus().addListener(Config::configReload); + ModLoadingContext.get().registerConfig(Type.CLIENT, Config.CLIENT_SPEC, Main.MODID + ".toml"); + MinecraftForge.EVENT_BUS.addListener(this::serverStarting); } - @EventHandler - public void init(FMLInitializationEvent event) + private void commonSetup(FMLCommonSetupEvent event) { - LOGGER.info("Initialization"); - USERNAME = Minecraft.getMinecraft().getSession().getUsername(); - - MinecraftForge.EVENT_BUS.register(this.eventListener); + SIDEPROXY.setup(); + } + + private void clientSetup(FMLClientSetupEvent event) + { + USERNAME = Minecraft.getInstance().getSession().getUsername(); ClientRegistry.registerKeyBinding(KEY_WORLD_HANDLER); UtilKeyBinding.updatePosKeys(); } - @EventHandler - public void postInit(FMLPostInitializationEvent event) + private void loadComplete(FMLLoadCompleteEvent event) { - LOGGER.info("Post-Initialization"); - } - - @EventHandler - public void loadComplete(FMLLoadCompleteEvent event) - { - LOGGER.info("Load-Complete"); - ProgressBar bar = ProgressManager.push(Main.NAME, 2); - bar.step("Loading Configuration Files"); - - ConfigSettings.load(CONFIG); - ConfigSkin.load(CONFIG); - ConfigSliders.load(CONFIG); - ConfigButcher.load(CONFIG); - - bar.step("Initializing User Interface"); - Content.registerContents(); Category.registerCategories(); - - ProgressManager.pop(bar); } - @EventHandler - public void serverLoad(FMLServerStartingEvent event) + private void serverStarting(FMLServerStartingEvent event) { - event.registerServerCommand(COMMAND_WORLD_HANDLER); - event.registerServerCommand(COMMAND_WH); - } - - @EventHandler - public void disable(FMLModDisabledEvent event) - { - MinecraftForge.EVENT_BUS.register(this.eventListener); - Minecraft.getMinecraft().gameSettings.keyBindings = ArrayUtils.removeElement(Minecraft.getMinecraft().gameSettings.keyBindings, KEY_WORLD_HANDLER); - - if(UtilKeyBinding.arePosKeysRegistered() && ConfigSettings.arePosShortcutsEnabled()) - { - UtilKeyBinding.removePosKeys(); - } - } - - public static void updateConfig() - { - ConfigSettings.load(CONFIG); - ConfigSkin.load(CONFIG); - ConfigButcher.load(CONFIG); - ConfigSliders.load(CONFIG); - UtilKeyBinding.updatePosKeys(); - } - - public static void sendCommand(ICommandBuilder builder) - { - sendCommand(builder, false); - } - - public static void sendCommand(ICommandBuilder builder, boolean special) - { - if(builder != null) - { - String command; - - if(builder instanceof ICommandBuilderSyntax) - { - command = ((ICommandBuilderSyntax) builder).toActualCommand(); - } - else - { - command = builder.toCommand(); - } - - LOGGER.info("Command: " + command); - - if(builder.needsCommandBlock() || special) - { - BlockHelper.setCommandBlockNearPlayer(command); - } - else - { - Minecraft.getMinecraft().player.sendChatMessage(command); - } - } - } - - public static void throwError(Exception exception) - { - if(!Minecraft.getMinecraft().inGameHasFocus) - { - Minecraft.getMinecraft().displayGuiScreen(null); - Minecraft.getMinecraft().setIngameFocus(); - } - - TextComponentString name = new TextComponentString(Main.NAME); - name.setStyle(new Style().setUnderlined(true).setClickEvent(new ClickEvent(Action.OPEN_URL, "$url"))); - - TextComponentTranslation message = new TextComponentTranslation("worldhandler.error.gui", name); - message.setStyle(new Style().setColor(net.minecraft.util.text.TextFormatting.RED)); - - Minecraft.getMinecraft().ingameGUI.addChatMessage(ChatType.SYSTEM, message); - exception.printStackTrace(); + CommandHelper.registerCommands(event.getCommandDispatcher()); } } \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/builder/CommandBuilder.java b/src/main/java/exopandora/worldhandler/builder/CommandBuilder.java index ed27226..cb72cfd 100644 --- a/src/main/java/exopandora/worldhandler/builder/CommandBuilder.java +++ b/src/main/java/exopandora/worldhandler/builder/CommandBuilder.java @@ -9,16 +9,19 @@ import javax.annotation.Nullable; import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.Syntax.SyntaxEntry; -import exopandora.worldhandler.builder.types.Coordinate; -import exopandora.worldhandler.builder.types.Level; +import exopandora.worldhandler.builder.types.BlockResourceLocation; +import exopandora.worldhandler.builder.types.CoordinateDouble; +import exopandora.worldhandler.builder.types.CoordinateInt; +import exopandora.worldhandler.builder.types.GreedyString; +import exopandora.worldhandler.builder.types.ItemResourceLocation; import exopandora.worldhandler.builder.types.TargetSelector; import exopandora.worldhandler.builder.types.Type; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public abstract class CommandBuilder implements ICommandBuilderSyntax { private List> command; @@ -33,6 +36,11 @@ public abstract class CommandBuilder implements ICommandBuilderSyntax this.set(index, node != null ? (node.isEmpty() ? null : node) : null, Type.STRING); } + protected void setNode(int index, GreedyString node) + { + this.set(index, node != null ? (node.isEmpty() ? null : node) : null, Type.GREEDY_STRING); + } + protected void setNode(int index, boolean node) { this.set(index, node, Type.BOOLEAN); @@ -73,14 +81,14 @@ public abstract class CommandBuilder implements ICommandBuilderSyntax this.set(index, node, Type.RESOURCE_LOCATION); } - protected void setNode(int index, NBTTagCompound nbt) + protected void setNode(int index, CoordinateInt coordinate) { - this.set(index, nbt, Type.NBT); + this.set(index, coordinate, Type.COORDINATE_INT); } - protected void setNode(int index, Coordinate coordinate) + protected void setNode(int index, CoordinateDouble coordinate) { - this.set(index, coordinate, Type.COORDINATE); + this.set(index, coordinate, Type.COORDINATE_DOUBLE); } protected void setNode(int index, TargetSelector target) @@ -88,9 +96,19 @@ public abstract class CommandBuilder implements ICommandBuilderSyntax this.set(index, target, Type.TARGET_SELECTOR); } - protected void setNode(int index, Level level) + protected void setNode(int index, ItemResourceLocation resource) { - this.set(index, level, Type.LEVEL); + this.set(index, resource != null ? resource.get() : null, Type.ITEM_RESOURCE_LOCATION); + } + + protected void setNode(int index, BlockResourceLocation resource) + { + this.set(index, resource != null ? resource.get() : null, Type.BLOCK_RESOURCE_LOCATION); + } + + protected void setNode(int index, NBTTagCompound nbt) + { + this.set(index, nbt, Type.NBT); } private void set(int index, Object value, Type type) @@ -127,6 +145,12 @@ public abstract class CommandBuilder implements ICommandBuilderSyntax return this.get(index, Type.STRING); } + @Nullable + protected String getNodeAsGreedyString(int index) + { + return this.get(index, Type.GREEDY_STRING); + } + protected boolean getNodeAsBoolean(int index) { return this.get(index, Type.BOOLEAN); @@ -162,9 +186,14 @@ public abstract class CommandBuilder implements ICommandBuilderSyntax return this.get(index, Type.LONG); } - protected Coordinate getNodeAsCoordinate(int index) + protected CoordinateInt getNodeAsCoordinateInt(int index) { - return this.get(index, Type.COORDINATE); + return this.get(index, Type.COORDINATE_INT); + } + + protected CoordinateDouble getNodeAsCoordinateDouble(int index) + { + return this.get(index, Type.COORDINATE_DOUBLE); } @Nullable @@ -179,9 +208,15 @@ public abstract class CommandBuilder implements ICommandBuilderSyntax } @Nullable - protected Level getNodeAsLevel(int index) + protected ItemResourceLocation getNodeAsItemResourceLocation(int index) { - return this.get(index, Type.LEVEL); + return this.get(index, Type.ITEM_RESOURCE_LOCATION); + } + + @Nullable + protected BlockResourceLocation getNodeAsBlockResourceLocation(int index) + { + return this.get(index, Type.BLOCK_RESOURCE_LOCATION); } @Nullable diff --git a/src/main/java/exopandora/worldhandler/builder/CommandBuilderNBT.java b/src/main/java/exopandora/worldhandler/builder/CommandBuilderNBT.java index 053d69f..c38e4a4 100644 --- a/src/main/java/exopandora/worldhandler/builder/CommandBuilderNBT.java +++ b/src/main/java/exopandora/worldhandler/builder/CommandBuilderNBT.java @@ -4,12 +4,12 @@ import java.util.ArrayList; import java.util.List; import exopandora.worldhandler.builder.component.IBuilderComponent; -import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.INBTBase; import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public abstract class CommandBuilderNBT extends CommandBuilder implements ICommandBuilderNBT { private final List TAG_TO_COMPONENT = new ArrayList(); @@ -17,14 +17,32 @@ public abstract class CommandBuilderNBT extends CommandBuilder implements IComma @Override public String toCommand() { - this.setNBT(this.buildNBT()); + return this.toCommand(true); + } + + public String toCommand(boolean rebuildNBT) + { + if(rebuildNBT) + { + this.setNBT(this.buildNBT()); + } + return super.toCommand(); } @Override public String toActualCommand() { - this.setNBT(this.buildNBT()); + return this.toActualCommand(true); + } + + public String toActualCommand(boolean rebuildNBT) + { + if(rebuildNBT) + { + this.setNBT(this.buildNBT()); + } + return super.toActualCommand(); } @@ -34,7 +52,7 @@ public abstract class CommandBuilderNBT extends CommandBuilder implements IComma for(IBuilderComponent component : this.TAG_TO_COMPONENT) { - NBTBase serialized = component.serialize(); + INBTBase serialized = component.serialize(); if(serialized != null) { @@ -45,7 +63,7 @@ public abstract class CommandBuilderNBT extends CommandBuilder implements IComma } } - if(nbt.hasNoTags()) + if(nbt.isEmpty()) { return null; } diff --git a/src/main/java/exopandora/worldhandler/builder/CommandString.java b/src/main/java/exopandora/worldhandler/builder/CommandString.java index c69a1ff..e8f63a4 100644 --- a/src/main/java/exopandora/worldhandler/builder/CommandString.java +++ b/src/main/java/exopandora/worldhandler/builder/CommandString.java @@ -2,10 +2,10 @@ package exopandora.worldhandler.builder; import com.mojang.realmsclient.gui.ChatFormatting; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class CommandString { private final StringBuilder command = new StringBuilder("/"); diff --git a/src/main/java/exopandora/worldhandler/builder/ICommandBuilder.java b/src/main/java/exopandora/worldhandler/builder/ICommandBuilder.java index 41d3038..cd10585 100644 --- a/src/main/java/exopandora/worldhandler/builder/ICommandBuilder.java +++ b/src/main/java/exopandora/worldhandler/builder/ICommandBuilder.java @@ -1,9 +1,9 @@ package exopandora.worldhandler.builder; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public interface ICommandBuilder { static final int MAX_COMMAND_LENGTH = 256; diff --git a/src/main/java/exopandora/worldhandler/builder/ICommandBuilderNBT.java b/src/main/java/exopandora/worldhandler/builder/ICommandBuilderNBT.java index 63476cc..150377d 100644 --- a/src/main/java/exopandora/worldhandler/builder/ICommandBuilderNBT.java +++ b/src/main/java/exopandora/worldhandler/builder/ICommandBuilderNBT.java @@ -1,10 +1,10 @@ package exopandora.worldhandler.builder; import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public interface ICommandBuilderNBT extends ICommandBuilder { void setNBT(NBTTagCompound nbt); diff --git a/src/main/java/exopandora/worldhandler/builder/ICommandBuilderSyntax.java b/src/main/java/exopandora/worldhandler/builder/ICommandBuilderSyntax.java index 8539b65..bc57bf6 100644 --- a/src/main/java/exopandora/worldhandler/builder/ICommandBuilderSyntax.java +++ b/src/main/java/exopandora/worldhandler/builder/ICommandBuilderSyntax.java @@ -1,9 +1,9 @@ package exopandora.worldhandler.builder; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public interface ICommandBuilderSyntax extends ICommandBuilder { String getCommandName(); diff --git a/src/main/java/exopandora/worldhandler/builder/Syntax.java b/src/main/java/exopandora/worldhandler/builder/Syntax.java index c08403f..a60d104 100644 --- a/src/main/java/exopandora/worldhandler/builder/Syntax.java +++ b/src/main/java/exopandora/worldhandler/builder/Syntax.java @@ -4,10 +4,10 @@ import java.util.ArrayList; import java.util.List; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class Syntax { private List syntax = new ArrayList(); @@ -41,7 +41,7 @@ public class Syntax return this.syntax; } - @SideOnly(Side.CLIENT) + @OnlyIn(Dist.CLIENT) public static class SyntaxEntry { private final String key; diff --git a/src/main/java/exopandora/worldhandler/builder/component/IBuilderComponent.java b/src/main/java/exopandora/worldhandler/builder/component/IBuilderComponent.java index f5dd611..368dfeb 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/IBuilderComponent.java +++ b/src/main/java/exopandora/worldhandler/builder/component/IBuilderComponent.java @@ -2,14 +2,14 @@ package exopandora.worldhandler.builder.component; import javax.annotation.Nullable; -import net.minecraft.nbt.NBTBase; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraft.nbt.INBTBase; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public interface IBuilderComponent { @Nullable - NBTBase serialize(); + INBTBase serialize(); String getTag(); } diff --git a/src/main/java/exopandora/worldhandler/builder/component/abstr/ComponentAttribute.java b/src/main/java/exopandora/worldhandler/builder/component/abstr/ComponentAttribute.java index a0b9881..6704da6 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/abstr/ComponentAttribute.java +++ b/src/main/java/exopandora/worldhandler/builder/component/abstr/ComponentAttribute.java @@ -7,10 +7,10 @@ import java.util.function.Function; import exopandora.worldhandler.builder.component.IBuilderComponent; import exopandora.worldhandler.builder.impl.abstr.EnumAttributes; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public abstract class ComponentAttribute implements IBuilderComponent { protected Map attributes = new HashMap(); diff --git a/src/main/java/exopandora/worldhandler/builder/component/abstr/ComponentPotion.java b/src/main/java/exopandora/worldhandler/builder/component/abstr/ComponentPotion.java index c560040..0ac753e 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/abstr/ComponentPotion.java +++ b/src/main/java/exopandora/worldhandler/builder/component/abstr/ComponentPotion.java @@ -1,28 +1,28 @@ package exopandora.worldhandler.builder.component.abstr; +import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import java.util.stream.Collectors; import javax.annotation.Nullable; import exopandora.worldhandler.builder.component.IBuilderComponent; -import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.INBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.potion.Potion; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public abstract class ComponentPotion implements IBuilderComponent { - protected final Map potions = Potion.REGISTRY.getKeys().stream().collect(Collectors.toMap(Potion.REGISTRY::getObject, key -> new PotionMetadata())); + protected final Map potions = new HashMap(); @Override @Nullable - public NBTBase serialize() + public INBTBase serialize() { NBTTagList list = new NBTTagList(); @@ -36,138 +36,95 @@ public abstract class ComponentPotion implements IBuilderComponent compound.setByte("Id", (byte) Potion.getIdFromPotion(entry.getKey())); compound.setByte("Amplifier", (byte) (potion.getAmplifier() - 1)); - compound.setInteger("Duration", potion.getDurationTicks() > 0 ? Math.min(potion.getDurationTicks(), 1000000) : 1000000); + compound.setInt("Duration", Math.min(potion.toTicks(), 1000000)); compound.setBoolean("Ambient", potion.getAmbient()); compound.setBoolean("ShowParticles", potion.getShowParticles()); - list.appendTag(compound); + list.add(compound); } } - if(!list.hasNoTags()) + if(list.isEmpty()) { - return list; + return null; } - return null; - } - - public void set(Potion potion, PotionMetadata metadata) - { - this.potions.put(potion, metadata); - } - - public void set(Potion potion, byte amplifier, int seconds, int minutes, int hours, boolean showParticles, boolean ambient) - { - this.set(potion, new PotionMetadata(amplifier, seconds, minutes, hours, showParticles, ambient)); + return list; } public void setAmplifier(Potion potion, byte amplifier) { - if(this.potions.containsKey(potion)) - { - this.potions.get(potion).setAmplifier(amplifier); - } + this.getMetadata(potion).setAmplifier(amplifier); } public byte getAmplifier(Potion potion) { - if(this.potions.containsKey(potion)) - { - return this.potions.get(potion).getAmplifier(); - } - - return 0; + return this.getMetadata(potion).getAmplifier(); } public void setSeconds(Potion potion, int seconds) { - if(this.potions.containsKey(potion)) - { - this.potions.get(potion).setSeconds(seconds);; - } + this.getMetadata(potion).setSeconds(seconds); } public int getSeconds(Potion potion) { - if(this.potions.containsKey(potion)) - { - return this.potions.get(potion).getSeconds(); - } - - return 0; + return this.getMetadata(potion).getSeconds(); } public void setMinutes(Potion potion, int minutes) { - if(this.potions.containsKey(potion)) - { - this.potions.get(potion).setSeconds(minutes);; - } + this.getMetadata(potion).setMinutes(minutes); } public int getMinutes(Potion potion) { - if(this.potions.containsKey(potion)) - { - return this.potions.get(potion).getMinutes(); - } - - return 0; + return this.getMetadata(potion).getMinutes(); } public void setHours(Potion potion, int hours) { - if(this.potions.containsKey(potion)) - { - this.potions.get(potion).setSeconds(hours);; - } + this.getMetadata(potion).setHours(hours); } public int getHours(Potion potion) { - if(this.potions.containsKey(potion)) - { - return this.potions.get(potion).getHours(); - } - - return 0; + return this.getMetadata(potion).getHours(); } public void setShowParticles(Potion potion, boolean showParticles) { - if(this.potions.containsKey(potion)) - { - this.potions.get(potion).setShowParticles(showParticles); - } + this.getMetadata(potion).setShowParticles(showParticles); } public boolean getShowParticles(Potion potion) { - if(this.potions.containsKey(potion)) - { - return this.potions.get(potion).getShowParticles(); - } - - return true; + return this.getMetadata(potion).getShowParticles(); } public void setAmbient(Potion potion, boolean ambient) { - if(this.potions.containsKey(potion)) - { - this.potions.get(potion).setAmbient(ambient); - } + this.getMetadata(potion).setAmbient(ambient); } public boolean getAmbient(Potion potion) { - if(this.potions.containsKey(potion)) + return this.getMetadata(potion).getAmbient(); + } + + private PotionMetadata getMetadata(Potion potion) + { + return this.potions.get(this.validate(potion)); + } + + private Potion validate(Potion potion) + { + if(!this.potions.containsKey(potion)) { - return this.potions.get(potion).getAmbient(); + this.potions.put(potion, new PotionMetadata()); } - return false; + return potion; } public Set getPotions() @@ -175,12 +132,6 @@ public abstract class ComponentPotion implements IBuilderComponent return this.potions.keySet(); } - @Nullable - public PotionMetadata get(Potion potion) - { - return this.potions.get(potion); - } - public void remove(Potion potion) { this.potions.remove(potion); diff --git a/src/main/java/exopandora/worldhandler/builder/component/abstr/PotionMetadata.java b/src/main/java/exopandora/worldhandler/builder/component/abstr/PotionMetadata.java index ab1f7e6..7320646 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/abstr/PotionMetadata.java +++ b/src/main/java/exopandora/worldhandler/builder/component/abstr/PotionMetadata.java @@ -1,9 +1,9 @@ package exopandora.worldhandler.builder.component.abstr; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class PotionMetadata { private byte amplifier; @@ -88,22 +88,22 @@ public class PotionMetadata this.ambient = ambient; } - public int getDurationTicks() + public int toTicks() { - return PotionMetadata.getDurationTicks(this.seconds, this.minutes, this.hours); + return PotionMetadata.toTicks(this.seconds, this.minutes, this.hours); } - public int getDurationSeconds() + public int toSeconds() { - return PotionMetadata.getDurationSeconds(this.seconds, this.minutes, this.hours); + return PotionMetadata.toSeconds(this.seconds, this.minutes, this.hours); } - public static int getDurationTicks(int seconds, int minutes, int hours) + public static int toTicks(int seconds, int minutes, int hours) { return seconds * 20 + minutes * 1200 + hours * 72000; } - public static int getDurationSeconds(int seconds, int minutes, int hours) + public static int toSeconds(int seconds, int minutes, int hours) { return seconds + minutes * 60 + hours * 3600; } @@ -143,5 +143,11 @@ public class PotionMetadata this.ambient = ambient; return this; } + + @Override + public String toString() + { + return "PotionMetadata [amplifier=" + amplifier + ", seconds=" + seconds + ", minutes=" + minutes + ", hours=" + hours + ", showParticles=" + showParticles + ", ambient=" + ambient + "]"; + } } diff --git a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentAttributeItem.java b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentAttributeItem.java index c16b991..a347c6a 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentAttributeItem.java +++ b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentAttributeItem.java @@ -8,13 +8,13 @@ import javax.annotation.Nullable; import exopandora.worldhandler.builder.component.abstr.ComponentAttribute; import exopandora.worldhandler.builder.impl.abstr.EnumAttributes; -import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.INBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ComponentAttributeItem extends ComponentAttribute { public ComponentAttributeItem(Function applyable) @@ -24,7 +24,7 @@ public class ComponentAttributeItem extends ComponentAttribute @Override @Nullable - public NBTBase serialize() + public INBTBase serialize() { NBTTagList attributes = new NBTTagList(); @@ -37,20 +37,20 @@ public class ComponentAttributeItem extends ComponentAttribute attribute.setString("AttributeName", entry.getKey().getAttribute()); attribute.setString("Name", entry.getKey().getAttribute()); attribute.setDouble("Amount", entry.getKey().calculate(entry.getValue())); - attribute.setInteger("Operation", entry.getKey().getOperation().ordinal()); + attribute.setInt("Operation", entry.getKey().getOperation().ordinal()); attribute.setLong("UUIDLeast", UUID.nameUUIDFromBytes(entry.getKey().getAttribute().getBytes()).getLeastSignificantBits()); attribute.setLong("UUIDMost", UUID.nameUUIDFromBytes(entry.getKey().getAttribute().getBytes()).getMostSignificantBits()); - attributes.appendTag(attribute); + attributes.add(attribute); } } - if(!attributes.hasNoTags()) + if(attributes.isEmpty()) { - return attributes; + return null; } - return null; + return attributes; } @Override diff --git a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentAttributeMob.java b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentAttributeMob.java index 1981e55..b951c25 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentAttributeMob.java +++ b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentAttributeMob.java @@ -7,13 +7,13 @@ import javax.annotation.Nullable; import exopandora.worldhandler.builder.component.abstr.ComponentAttribute; import exopandora.worldhandler.builder.impl.abstr.EnumAttributes; -import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.INBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ComponentAttributeMob extends ComponentAttribute { public ComponentAttributeMob(Function applyable) @@ -23,7 +23,7 @@ public class ComponentAttributeMob extends ComponentAttribute @Override @Nullable - public NBTBase serialize() + public INBTBase serialize() { NBTTagList attributes = new NBTTagList(); @@ -36,16 +36,16 @@ public class ComponentAttributeMob extends ComponentAttribute attribute.setString("Name", entry.getKey().getAttribute()); attribute.setDouble("Base", entry.getKey().calculate(entry.getValue())); - attributes.appendTag(attribute); + attributes.add(attribute); } } - if(!attributes.hasNoTags()) + if(attributes.isEmpty()) { - return attributes; + return null; } - return null; + return attributes; } @Override diff --git a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentDisplay.java b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentDisplay.java index 1dfcc1c..6dea14b 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentDisplay.java +++ b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentDisplay.java @@ -2,21 +2,23 @@ package exopandora.worldhandler.builder.component.impl; import exopandora.worldhandler.builder.component.IBuilderComponent; import exopandora.worldhandler.format.text.ColoredString; -import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.INBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ComponentDisplay implements IBuilderComponent { private ColoredString name = new ColoredString(); private String[] lore = new String[2]; @Override - public NBTBase serialize() + public INBTBase serialize() { NBTTagCompound display = new NBTTagCompound(); @@ -24,7 +26,7 @@ public class ComponentDisplay implements IBuilderComponent if(name != null && !name.isEmpty()) { - display.setString("Name", this.name.toString()); + display.setString("Name", ITextComponent.Serializer.toJson(new TextComponentString(this.name.toString()))); } NBTTagList lore = new NBTTagList(); @@ -33,16 +35,16 @@ public class ComponentDisplay implements IBuilderComponent { if(this.lore[x] != null && !this.lore[x].isEmpty()) { - lore.appendTag(new NBTTagString(this.lore[x])); + lore.add(new NBTTagString(this.lore[x])); } } - if(!lore.hasNoTags()) + if(!lore.isEmpty()) { display.setTag("Lore", lore); } - if(!display.hasNoTags()) + if(!display.isEmpty()) { return display; } diff --git a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentEnchantment.java b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentEnchantment.java index bede153..84b8c0b 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentEnchantment.java +++ b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentEnchantment.java @@ -1,28 +1,29 @@ package exopandora.worldhandler.builder.component.impl; +import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import java.util.stream.Collectors; import javax.annotation.Nullable; import exopandora.worldhandler.builder.component.IBuilderComponent; import net.minecraft.enchantment.Enchantment; -import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.INBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ComponentEnchantment implements IBuilderComponent { - private Map enchantments = Enchantment.REGISTRY.getKeys().stream().collect(Collectors.toMap(Enchantment.REGISTRY::getObject, key -> (short) 0)); + private Map enchantments = new HashMap(); @Override @Nullable - public NBTBase serialize() + public INBTBase serialize() { NBTTagList enchantments = new NBTTagList(); @@ -32,24 +33,31 @@ public class ComponentEnchantment implements IBuilderComponent { NBTTagCompound enchantment = new NBTTagCompound(); - enchantment.setShort("id", (short) Enchantment.getEnchantmentID(entry.getKey())); + enchantment.setString("id", ForgeRegistries.ENCHANTMENTS.getKey(entry.getKey()).toString()); enchantment.setShort("lvl", entry.getValue()); - enchantments.appendTag(enchantment); + enchantments.add(enchantment); } } - if(!enchantments.hasNoTags()) + if(enchantments.isEmpty()) { - return enchantments; + return null; } - return null; + return enchantments; } public void setLevel(Enchantment enchantment, short level) { - this.enchantments.put(enchantment, level); + if(level == 0) + { + this.enchantments.remove(enchantment); + } + else + { + this.enchantments.put(enchantment, level); + } } public short getLevel(Enchantment enchantment) @@ -65,6 +73,6 @@ public class ComponentEnchantment implements IBuilderComponent @Override public String getTag() { - return "ench"; + return "Enchantments"; } } diff --git a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentPotionItem.java b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentPotionItem.java index 2a0c609..a95bd6e 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentPotionItem.java +++ b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentPotionItem.java @@ -1,10 +1,10 @@ package exopandora.worldhandler.builder.component.impl; import exopandora.worldhandler.builder.component.abstr.ComponentPotion; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ComponentPotionItem extends ComponentPotion { @Override diff --git a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentPotionMob.java b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentPotionMob.java index c5b0e06..bfa6992 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentPotionMob.java +++ b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentPotionMob.java @@ -1,10 +1,10 @@ package exopandora.worldhandler.builder.component.impl; import exopandora.worldhandler.builder.component.abstr.ComponentPotion; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ComponentPotionMob extends ComponentPotion { @Override diff --git a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentSummon.java b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentSummon.java index cfaf5b5..1cadaee 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentSummon.java +++ b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentSummon.java @@ -7,45 +7,20 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.StringUtils; import exopandora.worldhandler.builder.component.IBuilderComponent; -import exopandora.worldhandler.helper.EntityHelper; +import exopandora.worldhandler.helper.ResourceHelper; import net.minecraft.client.resources.I18n; -import net.minecraft.entity.EntityList; -import net.minecraft.entity.boss.EntityDragon; -import net.minecraft.entity.boss.EntityWither; -import net.minecraft.entity.item.EntityMinecart; -import net.minecraft.entity.item.EntityMinecartChest; -import net.minecraft.entity.item.EntityMinecartCommandBlock; -import net.minecraft.entity.item.EntityMinecartFurnace; -import net.minecraft.entity.item.EntityMinecartHopper; -import net.minecraft.entity.item.EntityMinecartMobSpawner; -import net.minecraft.entity.item.EntityMinecartTNT; -import net.minecraft.entity.monster.EntityEvoker; -import net.minecraft.entity.monster.EntityGhast; -import net.minecraft.entity.monster.EntityIronGolem; -import net.minecraft.entity.monster.EntityMagmaCube; -import net.minecraft.entity.monster.EntityPigZombie; -import net.minecraft.entity.monster.EntitySkeleton; -import net.minecraft.entity.monster.EntitySnowman; -import net.minecraft.entity.monster.EntitySpider; -import net.minecraft.entity.monster.EntityVindicator; -import net.minecraft.entity.monster.EntityZombie; -import net.minecraft.entity.passive.EntityChicken; -import net.minecraft.entity.passive.EntityHorse; -import net.minecraft.entity.passive.EntityMooshroom; -import net.minecraft.entity.passive.EntityOcelot; -import net.minecraft.entity.passive.EntitySquid; -import net.minecraft.entity.passive.EntityVillager; -import net.minecraft.entity.passive.EntityWolf; -import net.minecraft.nbt.NBTBase; +import net.minecraft.entity.EntityType; +import net.minecraft.nbt.INBTBase; import net.minecraft.nbt.NBTTagByte; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagInt; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ComponentSummon implements IBuilderComponent { private final Random random = new Random(); @@ -86,7 +61,7 @@ public class ComponentSummon implements IBuilderComponent } @Override - public NBTBase serialize() + public INBTBase serialize() { if(this.name != null) { @@ -128,7 +103,7 @@ public class ComponentSummon implements IBuilderComponent if(this.entity != null) { - if(this.entity.equals(EntityHelper.getResourceLocation(EntityZombie.class))) + if(this.entity.equals(EntityType.ZOMBIE.getRegistryName())) { if(StringUtils.containsIgnoreCase(this.name, "Baby")) { @@ -136,30 +111,30 @@ public class ComponentSummon implements IBuilderComponent return new NBTTagByte((byte) 1); } } - else if(this.entity.equals(EntityHelper.getResourceLocation(EntityChicken.class))) + else if(this.entity.equals(EntityType.CHICKEN.getRegistryName())) { if(StringUtils.containsIgnoreCase(this.name, "Jockey") && !this.hasPassenger) { NBTTagCompound passenger = new NBTTagCompound(); NBTTagList list = new NBTTagList(); - passenger.setString("id", EntityHelper.getResourceLocation(EntityZombie.class).toString()); + passenger.setString("id", EntityType.ZOMBIE.getRegistryName().toString()); passenger.setBoolean("IsBaby", true); - list.appendTag(passenger); + list.add(passenger); this.tag = "Passengers"; return list; } } - else if(this.entity.equals(EntityHelper.getResourceLocation(EntitySpider.class))) + else if(this.entity.equals(EntityType.SPIDER.getRegistryName())) { if(StringUtils.containsIgnoreCase(this.name, "Jockey") && !this.hasPassenger) { NBTTagCompound passenger = new NBTTagCompound(); NBTTagList list = new NBTTagList(); - passenger.setString("id", EntityHelper.getResourceLocation(EntitySkeleton.class).toString()); - list.appendTag(passenger); + passenger.setString("id", EntityType.SKELETON.getRegistryName().toString()); + list.add(passenger); this.tag = "Passengers"; return list; @@ -180,116 +155,117 @@ public class ComponentSummon implements IBuilderComponent @Nullable public static ResourceLocation resolve(String entityName) { - String entity = entityName.replaceAll("_| ", ""); + String name = ResourceHelper.stripToResourceLocation(entityName); - for(ResourceLocation location : EntityList.ENTITY_EGGS.keySet()) + for(EntityType type : ForgeRegistries.ENTITIES.getValues()) { - if(entityName.equalsIgnoreCase(I18n.format("entity." + EntityHelper.getEntityName(location) + ".name"))) + if(type.isSummonable() && entityName.equalsIgnoreCase(I18n.format(type.getTranslationKey()))) { - entity = location.getResourcePath(); - break; + return type.getRegistryName(); } } + String entity = name.replaceAll("_", ""); + if(entity.equalsIgnoreCase("RedCow")) { - return EntityHelper.getResourceLocation(EntityMooshroom.class); + return EntityType.MOOSHROOM.getRegistryName(); } else if(entity.equalsIgnoreCase("ChickenJockey")) { - return EntityHelper.getResourceLocation(EntityChicken.class); + return EntityType.CHICKEN.getRegistryName(); } else if(entity.equalsIgnoreCase("Pigman") || entity.equalsIgnoreCase("ZombiePig") || entity.equalsIgnoreCase("ZombiePigman")) { - return EntityHelper.getResourceLocation(EntityPigZombie.class); + return EntityType.ZOMBIE_PIGMAN.getRegistryName(); } else if(entity.equalsIgnoreCase("Wither")) { - return EntityHelper.getResourceLocation(EntityWither.class); + return EntityType.WITHER.getRegistryName(); } else if(entity.equalsIgnoreCase("Dog")) { - return EntityHelper.getResourceLocation(EntityWolf.class); + return EntityType.WOLF.getRegistryName(); } else if(entity.equalsIgnoreCase("Dragon")) { - return EntityHelper.getResourceLocation(EntityDragon.class); + return EntityType.ENDER_DRAGON.getRegistryName(); } else if(entity.equalsIgnoreCase("minecraft:SnowGolem")) { - return EntityHelper.getResourceLocation(EntitySnowman.class); + return EntityType.SNOW_GOLEM.getRegistryName(); } else if(entity.equalsIgnoreCase("Horse") || entity.equalsIgnoreCase("ZombieHorse") || entity.equalsIgnoreCase("SkeletonHorse")) { - return EntityHelper.getResourceLocation(EntityHorse.class); + return EntityType.HORSE.getRegistryName(); } else if(entity.equalsIgnoreCase("LavaCube")|| entity.equalsIgnoreCase("MagmaSlime") || entity.equalsIgnoreCase("MagmaCube")) { - return EntityHelper.getResourceLocation(EntityMagmaCube.class); + return EntityType.MAGMA_CUBE.getRegistryName(); } else if(entity.equalsIgnoreCase("SpiderJockey")) { - return EntityHelper.getResourceLocation(EntitySpider.class); + return EntityType.SPIDER.getRegistryName(); } else if(entity.equalsIgnoreCase("IronGolem")) { - return EntityHelper.getResourceLocation(EntityIronGolem.class); + return EntityType.IRON_GOLEM.getRegistryName(); } else if(entity.equalsIgnoreCase("Ozelot") || entity.equals("Ocelot") || entity.equalsIgnoreCase("Cat") || entity.equalsIgnoreCase("Kitty") || entity.equalsIgnoreCase("Kitten")) { - return EntityHelper.getResourceLocation(EntityOcelot.class); + return EntityType.OCELOT.getRegistryName(); } else if(entity.equalsIgnoreCase("TESTIFICATE") || entity.equalsIgnoreCase("Blacksmith") || entity.equalsIgnoreCase("Farmer") || entity.equalsIgnoreCase("Fisherman") || entity.equalsIgnoreCase("Shepherd") || entity.equalsIgnoreCase("Fletcher") || entity.equalsIgnoreCase("Librarian") || entity.equalsIgnoreCase("Cleric") || entity.equalsIgnoreCase("Priest") || entity.equalsIgnoreCase("Armorer") || entity.equalsIgnoreCase("WeaponSmith") || entity.equalsIgnoreCase("ToolSmith") || entity.equalsIgnoreCase("Butcher") || entity.equalsIgnoreCase("Leatherworker") || entity.equalsIgnoreCase("Carthographer") || entity.equalsIgnoreCase("Nitwit")) { - return EntityHelper.getResourceLocation(EntityVillager.class); + return EntityType.VILLAGER.getRegistryName(); } else if(entity.equalsIgnoreCase("Octopus") || entity.equalsIgnoreCase("Kraken")) { - return EntityHelper.getResourceLocation(EntitySquid.class); + return EntityType.SQUID.getRegistryName(); } else if(entity.equalsIgnoreCase("Exwife")) { - return EntityHelper.getResourceLocation(EntityGhast.class); + return EntityType.GHAST.getRegistryName(); } else if(entity.equalsIgnoreCase("TNTMinecart")) { - return EntityHelper.getResourceLocation(EntityMinecartTNT.class); + return EntityType.TNT_MINECART.getRegistryName(); } else if(entity.equalsIgnoreCase("Minecart")) { - return EntityHelper.getResourceLocation(EntityMinecart.class); + return EntityType.MINECART.getRegistryName(); } else if(entity.equalsIgnoreCase("HopperMinecart")) { - return EntityHelper.getResourceLocation(EntityMinecartHopper.class); + return EntityType.HOPPER_MINECART.getRegistryName(); } else if(entity.equalsIgnoreCase("ChestMinecart")) { - return EntityHelper.getResourceLocation(EntityMinecartChest.class); + return EntityType.CHEST_MINECART.getRegistryName(); } else if(entity.equalsIgnoreCase("SpawnerMinecart")) { - return EntityHelper.getResourceLocation(EntityMinecartMobSpawner.class); + return EntityType.SPAWNER_MINECART.getRegistryName(); } else if(entity.equalsIgnoreCase("FurnaceMinecart")) { - return EntityHelper.getResourceLocation(EntityMinecartFurnace.class); + return EntityType.FURNACE_MINECART.getRegistryName(); } else if(entity.equalsIgnoreCase("CommandBlockMinecart") || entity.equalsIgnoreCase("MinecartCommand") || entity.equalsIgnoreCase("CommandMinecart")) { - return EntityHelper.getResourceLocation(EntityMinecartCommandBlock.class); + return EntityType.COMMAND_BLOCK_MINECART.getRegistryName(); } else if(entity.equalsIgnoreCase("Wizard")) { - return EntityHelper.getResourceLocation(EntityEvoker.class); + return EntityType.EVOKER.getRegistryName(); } else if(entity.equalsIgnoreCase("Johnny")) { - return EntityHelper.getResourceLocation(EntityVindicator.class); + return EntityType.VINDICATOR.getRegistryName(); } else if(entity.equalsIgnoreCase("BabyZombie")) { - return EntityHelper.getResourceLocation(EntityZombie.class); + return EntityType.ZOMBIE.getRegistryName(); } if(entity == null || entity.isEmpty()) @@ -297,6 +273,6 @@ public class ComponentSummon implements IBuilderComponent return null; } - return new ResourceLocation(entity); + return ResourceHelper.stringToResourceLocation(name); } } diff --git a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentTag.java b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentTag.java index 14180d5..43c6c70 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentTag.java +++ b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentTag.java @@ -1,12 +1,13 @@ package exopandora.worldhandler.builder.component.impl; +import java.util.Collection; import java.util.function.Function; import javax.annotation.Nullable; import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.component.IBuilderComponent; -import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.INBTBase; import net.minecraft.nbt.NBTTagByte; import net.minecraft.nbt.NBTTagByteArray; import net.minecraft.nbt.NBTTagDouble; @@ -16,24 +17,24 @@ import net.minecraft.nbt.NBTTagIntArray; import net.minecraft.nbt.NBTTagLong; import net.minecraft.nbt.NBTTagLongArray; import net.minecraft.nbt.NBTTagString; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ComponentTag implements IBuilderComponent { - private final Function serializer; + private final Function serializer; private final String tag; private T value; - public ComponentTag(String tag, T value, Function serializer) + public ComponentTag(String tag, T value, Function serializer) { this.tag = tag; this.value = value; this.serializer = serializer; } - public ComponentTag(String tag, Function serializer) + public ComponentTag(String tag, Function serializer) { this(tag, null, serializer); } @@ -61,7 +62,7 @@ public class ComponentTag implements IBuilderComponent @Override @Nullable - public NBTBase serialize() + public INBTBase serialize() { if(this.value != null) { @@ -80,16 +81,19 @@ public class ComponentTag implements IBuilderComponent return new NBTTagString(string); } - else if(this.value instanceof NBTBase) + else if(this.value instanceof INBTBase) { - NBTBase base = (NBTBase) this.value; - - if(base.hasNoTags()) + if(this.value instanceof Collection) { - return null; + Collection collection = (Collection) this.value; + + if(collection.isEmpty()) + { + return null; + } } - return (NBTBase) this.value; + return (INBTBase) this.value; } else if(this.value instanceof Integer) { diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderAdvancement.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderAdvancement.java index c6d9a20..036566c 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderAdvancement.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderAdvancement.java @@ -7,10 +7,10 @@ import exopandora.worldhandler.builder.Syntax; 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; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderAdvancement extends CommandBuilder { public BuilderAdvancement(EnumMode mode) @@ -34,7 +34,7 @@ public class BuilderAdvancement extends CommandBuilder @Nullable public EnumActionType getActionType() { - return EnumHelper.valueOf(EnumActionType.class, this.getNodeAsString(1)); + return EnumHelper.valueOf(this.getNodeAsString(1), EnumActionType.class); } public void setPlayer(String player) @@ -56,14 +56,14 @@ public class BuilderAdvancement extends CommandBuilder @Nullable public EnumMode getMode() { - return EnumHelper.valueOf(EnumMode.class, this.getNodeAsString(2)); + return EnumHelper.valueOf(this.getNodeAsString(2), EnumMode.class); } public void setAdvancement(ResourceLocation advancement) { this.setNode(3, advancement); } - + @Nullable public ResourceLocation getAdvancement() { @@ -98,8 +98,8 @@ public class BuilderAdvancement extends CommandBuilder return syntax; } - - @SideOnly(Side.CLIENT) + + @OnlyIn(Dist.CLIENT) public static enum EnumActionType { GRANT, @@ -112,7 +112,7 @@ public class BuilderAdvancement extends CommandBuilder } } - @SideOnly(Side.CLIENT) + @OnlyIn(Dist.CLIENT) public static enum EnumMode { ONLY, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderBlockdata.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderBlockdata.java deleted file mode 100644 index c7dc1b7..0000000 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderBlockdata.java +++ /dev/null @@ -1,37 +0,0 @@ -package exopandora.worldhandler.builder.impl; - -import exopandora.worldhandler.builder.Syntax; -import exopandora.worldhandler.builder.impl.abstr.BuilderBlockPos; -import exopandora.worldhandler.builder.types.Type; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class BuilderBlockdata extends BuilderBlockPos -{ - @Override - public void setNBT(NBTTagCompound nbt) - { - this.setNode(3, nbt); - } - - @Override - public String getCommandName() - { - return "blockdata"; - } - - @Override - public final Syntax getSyntax() - { - Syntax syntax = new Syntax(); - - syntax.addRequired("x", Type.COORDINATE); - syntax.addRequired("y", Type.COORDINATE); - syntax.addRequired("z", Type.COORDINATE); - syntax.addRequired("nbt", Type.NBT); - - return syntax; - } -} diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderButcher.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderButcher.java index 75a59d4..e6eb211 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderButcher.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderButcher.java @@ -1,49 +1,60 @@ package exopandora.worldhandler.builder.impl; import javax.annotation.Nonnull; -import javax.annotation.Nullable; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.types.TargetSelector; import exopandora.worldhandler.builder.types.Type; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderButcher extends CommandBuilder { - private final TargetSelector targetSelector; + private final TargetSelector targetSelector = new TargetSelector(); public BuilderButcher() { - this(new ResourceLocation(""), 0); + this("", 0); } - public BuilderButcher(ResourceLocation entity, int radius) + public BuilderButcher(ResourceLocation entity, int distance) + { + this(entity.toString(), distance); + } + + private BuilderButcher(String entity, int distance) { - this.targetSelector = new TargetSelector(); this.setEntity(entity); - this.setRadius(radius); + this.setDistance(distance); } - public void setRadius(int radius) + public void setDistance(int distance) { - this.targetSelector.set("r", radius); + this.targetSelector.set("distance", "0.." + distance); this.setNode(0, this.targetSelector); } - - @Nonnull - public int getRadius() + + public int getDistance() { - return this.targetSelector.get("r"); + return Integer.parseInt(this.targetSelector.get("distance").substring(3)); } - + + private void setEntity(String entity) + { + if(entity != null) + { + this.targetSelector.set("type", entity); + } + + this.setNode(0, this.targetSelector); + } + public void setEntity(ResourceLocation entity) { - this.targetSelector.set("type", entity.toString()); - this.setNode(0, this.targetSelector); + this.setEntity(entity.toString()); } @Nonnull diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderClone.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderClone.java index e828fe2..053745f 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderClone.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderClone.java @@ -2,21 +2,22 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.impl.abstr.BuilderDoubleBlockPos; -import exopandora.worldhandler.builder.types.Coordinate; +import exopandora.worldhandler.builder.types.Coordinate.CoordinateType; +import exopandora.worldhandler.builder.types.CoordinateInt; import exopandora.worldhandler.builder.types.Type; import exopandora.worldhandler.helper.EnumHelper; import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderClone extends BuilderDoubleBlockPos { public BuilderClone() { - this.setX(new Coordinate()); - this.setY(new Coordinate()); - this.setZ(new Coordinate()); + this.setX(new CoordinateInt(CoordinateType.GLOBAL)); + this.setY(new CoordinateInt(CoordinateType.GLOBAL)); + this.setZ(new CoordinateInt(CoordinateType.GLOBAL)); this.setMask(EnumMask.values()[0]); this.setNode(10, "force"); } @@ -28,49 +29,49 @@ public class BuilderClone extends BuilderDoubleBlockPos this.setZ(pos.getZ()); } - public void setX(float x) + public void setX(int x) { - this.setX(new Coordinate(x)); + this.setX(new CoordinateInt(x)); } - public void setY(float y) + public void setY(int y) { - this.setY(new Coordinate(y)); + this.setY(new CoordinateInt(y)); } - public void setZ(float z) + public void setZ(int z) { - this.setZ(new Coordinate(z)); + this.setZ(new CoordinateInt(z)); } - public void setX(Coordinate x) + public void setX(CoordinateInt x) { this.setNode(6, x); } - public void setY(Coordinate y) + public void setY(CoordinateInt y) { this.setNode(7, y); } - public void setZ(Coordinate z) + public void setZ(CoordinateInt z) { this.setNode(8, z); } - public Coordinate getXCoordiante() + public CoordinateInt getXCoordiante() { - return this.getNodeAsCoordinate(6); + return this.getNodeAsCoordinateInt(6); } - public Coordinate getYCoordiante() + public CoordinateInt getYCoordiante() { - return this.getNodeAsCoordinate(7); + return this.getNodeAsCoordinateInt(7); } - public Coordinate getZCoordiante() + public CoordinateInt getZCoordiante() { - return this.getNodeAsCoordinate(8); + return this.getNodeAsCoordinateInt(8); } public double getX() @@ -100,7 +101,7 @@ public class BuilderClone extends BuilderDoubleBlockPos public EnumMask getMask() { - return EnumHelper.valueOf(EnumMask.class, this.getNodeAsString(9)); + return EnumHelper.valueOf(this.getNodeAsString(9), EnumMask.class); } @Override @@ -114,22 +115,22 @@ public class BuilderClone extends BuilderDoubleBlockPos { Syntax syntax = new Syntax(); - syntax.addRequired("x1", Type.COORDINATE); - syntax.addRequired("y1", Type.COORDINATE); - syntax.addRequired("z1", Type.COORDINATE); - syntax.addRequired("x2", Type.COORDINATE); - syntax.addRequired("y2", Type.COORDINATE); - syntax.addRequired("z2", Type.COORDINATE); - syntax.addRequired("x", Type.COORDINATE); - syntax.addRequired("y", Type.COORDINATE); - syntax.addRequired("z", Type.COORDINATE); - syntax.addOptional("mask_mode", Type.STRING); - syntax.addOptional("clone_mode", Type.STRING); + syntax.addRequired("x1", Type.COORDINATE_INT); + syntax.addRequired("y1", Type.COORDINATE_INT); + syntax.addRequired("z1", Type.COORDINATE_INT); + syntax.addRequired("x2", Type.COORDINATE_INT); + syntax.addRequired("y2", Type.COORDINATE_INT); + syntax.addRequired("z2", Type.COORDINATE_INT); + syntax.addRequired("x", Type.COORDINATE_INT); + syntax.addRequired("y", Type.COORDINATE_INT); + syntax.addRequired("z", Type.COORDINATE_INT); + syntax.addOptional("mask", Type.STRING); + syntax.addOptional("filter", Type.STRING); return syntax; } - @SideOnly(Side.CLIENT) + @OnlyIn(Dist.CLIENT) public static enum EnumMask { REPLACE, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderCustomItem.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderCustomItem.java index 1a610d5..3d70cdc 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderCustomItem.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderCustomItem.java @@ -10,10 +10,10 @@ import exopandora.worldhandler.builder.impl.abstr.EnumAttributes.Applyable; import exopandora.worldhandler.format.text.ColoredString; import net.minecraft.enchantment.Enchantment; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderCustomItem extends BuilderGive { private final ComponentAttributeItem attribute; diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderData.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderData.java new file mode 100644 index 0000000..9e5e783 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderData.java @@ -0,0 +1,323 @@ +package exopandora.worldhandler.builder.impl; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import exopandora.worldhandler.builder.Syntax; +import exopandora.worldhandler.builder.impl.abstr.BuilderBlockPos; +import exopandora.worldhandler.builder.types.CoordinateInt; +import exopandora.worldhandler.builder.types.TargetSelector; +import exopandora.worldhandler.builder.types.Type; +import exopandora.worldhandler.helper.EnumHelper; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class BuilderData extends BuilderBlockPos +{ + private final TargetSelector targetSelector = new TargetSelector(); + + public BuilderData() + { + super(2); + } + + public BuilderData(EnumMode mode, ResourceLocation entity, NBTTagCompound nbt) + { + this(); + this.setMode(mode); + this.setEntity(entity); + this.setNBT(nbt); + } + + public BuilderData(EnumMode mode, BlockPos pos, NBTTagCompound nbt) + { + this(); + this.setMode(mode); + this.setPosition(pos); + this.setNBT(nbt); + } + + public void setMode(EnumMode mode) + { + EnumTarget target = this.getTarget(); + + this.updateSyntax(this.getSyntax(mode, target)); + this.setMode0(mode); + this.setTarget0(target); + } + + private void setMode0(EnumMode mode) + { + if(mode != null) + { + this.setNode(0, mode.toString()); + } + } + + public EnumMode getMode() + { + return EnumHelper.valueOf(this.getNodeAsString(0), EnumMode.class); + } + + public void setTarget(EnumTarget target) + { + EnumMode mode = this.getMode(); + + this.updateSyntax(this.getSyntax(mode, target)); + this.setMode0(mode); + this.setTarget0(target); + } + + private void setTarget0(EnumTarget target) + { + if(target != null) + { + this.setNode(1, target.toString()); + } + } + + public EnumTarget getTarget() + { + return EnumHelper.valueOf(this.getNodeAsString(1), EnumTarget.class); + } + + private void setEntity(String entity) + { + this.ensureTarget(EnumTarget.ENTITY); + + if(entity != null) + { + this.targetSelector.set("type", entity); + } + + this.setNode(2, this.targetSelector); + } + + public void setEntity(ResourceLocation entity) + { + this.setEntity(entity.toString()); + } + + @Nonnull + public ResourceLocation getEntity() + { + return this.targetSelector.get("type"); + } + + public void setPath(String path) + { + if(this.getMode() == null || !this.getMode().equals(EnumMode.REMOVE)) + { + this.setMode(EnumMode.REMOVE); + } + + switch(this.getTarget()) + { + case BLOCK: + this.setNode(5, path); + break; + case ENTITY: + this.setNode(3, path); + break; + default: + break; + } + } + + @Override + public void setNBT(NBTTagCompound nbt) + { + if(this.getMode() == null || !this.getMode().equals(EnumMode.MERGE)) + { + this.setMode(EnumMode.MERGE); + } + + EnumTarget target = this.getTarget(); + + if(target != null) + { + switch(target) + { + case BLOCK: + this.setNode(5, nbt); + break; + case ENTITY: + this.setNode(3, nbt); + break; + default: + break; + } + } + } + + @Nullable + public NBTTagCompound getNBT() + { + if(this.getMode() != null && this.getMode().equals(EnumMode.MERGE)) + { + switch(this.getTarget()) + { + case BLOCK: + return this.getNodeAsNBT(5); + case ENTITY: + return this.getNodeAsNBT(3); + default: + break; + } + } + + return null; + } + + @Override + public String getCommandName() + { + return "data"; + } + + @Nullable + private final Syntax getSyntax(EnumMode mode, EnumTarget target) + { + Syntax syntax = new Syntax(); + + syntax.addRequired(mode != null ? mode.toString() : "mode", Type.STRING); + syntax.addRequired(target != null ? target.toString() : "target", Type.STRING); + + if(target != null) + { + switch(target) + { + case BLOCK: + syntax.addRequired("x", Type.COORDINATE_INT); + syntax.addRequired("y", Type.COORDINATE_INT); + syntax.addRequired("z", Type.COORDINATE_INT); + break; + case ENTITY: + syntax.addRequired("entity", Type.TARGET_SELECTOR); + break; + default: + break; + } + + switch(mode) + { + case GET: + break; + case MERGE: + syntax.addRequired("nbt", Type.NBT); + break; + case REMOVE: + syntax.addRequired("path", Type.STRING); + break; + default: + break; + } + } + else + { + syntax.addOptional("...", Type.STRING); + } + + return syntax; + } + + private void ensureTarget(EnumTarget target) + { + if(this.getTarget() == null || !target.equals(this.getTarget())) + { + this.setTarget(target); + } + } + + @Override + public void setX(CoordinateInt x) + { + this.ensureTarget(EnumTarget.BLOCK); + super.setX(x); + } + + @Override + public void setY(CoordinateInt y) + { + this.ensureTarget(EnumTarget.BLOCK); + super.setY(y); + } + + @Override + public void setZ(CoordinateInt z) + { + this.ensureTarget(EnumTarget.BLOCK); + super.setZ(z); + } + + @Override + public CoordinateInt getXCoordinate() + { + this.ensureTarget(EnumTarget.BLOCK); + return super.getXCoordinate(); + } + + @Override + public CoordinateInt getYCoordinate() + { + this.ensureTarget(EnumTarget.BLOCK); + return super.getYCoordinate(); + } + + @Override + public CoordinateInt getZCoordinate() + { + this.ensureTarget(EnumTarget.BLOCK); + return super.getZCoordinate(); + } + + @Override + public BlockPos getBlockPos() + { + this.ensureTarget(EnumTarget.BLOCK); + return super.getBlockPos(); + } + + @Override + public final Syntax getSyntax() + { + Syntax syntax = new Syntax(); + + syntax.addRequired("get|merge|remove", Type.STRING); + syntax.addRequired("block|entity", Type.STRING); + syntax.addOptional("...", Type.STRING); + + return syntax; + } + + @OnlyIn(Dist.CLIENT) + public static enum EnumMode + { + GET, + MERGE, + REMOVE; + + @Override + public String toString() + { + return this.name().toLowerCase(); + } + } + + @OnlyIn(Dist.CLIENT) + public static enum EnumTarget + { + BLOCK, + ENTITY; + + @Override + public String toString() + { + return this.name().toLowerCase(); + } + } +} diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderDifficulty.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderDifficulty.java index aed8464..51fdd16 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderDifficulty.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderDifficulty.java @@ -3,10 +3,10 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderDifficulty extends CommandBuilder { public BuilderDifficulty() @@ -21,7 +21,10 @@ public class BuilderDifficulty extends CommandBuilder public void setDifficulty(EnumDifficulty difficulty) { - this.setNode(0, difficulty.toString()); + if(difficulty != null) + { + this.setNode(0, difficulty.toString()); + } } @Override @@ -29,7 +32,7 @@ public class BuilderDifficulty extends CommandBuilder { return "difficulty"; } - + @Override public final Syntax getSyntax() { @@ -41,7 +44,7 @@ public class BuilderDifficulty extends CommandBuilder } @Deprecated - @SideOnly(Side.CLIENT) + @OnlyIn(Dist.CLIENT) public static enum EnumDifficulty { PEACEFUL, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderEnchantment.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderEnchantment.java index d12e3d1..4a83c0c 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderEnchantment.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderEnchantment.java @@ -3,11 +3,12 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.types.Type; +import net.minecraft.enchantment.Enchantment; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderEnchantment extends CommandBuilder { public void getPlayer(String player) @@ -25,6 +26,11 @@ public class BuilderEnchantment extends CommandBuilder return this.getNodeAsResourceLocation(1); } + public void setEnchantment(Enchantment enchantment) + { + this.setEnchantment(enchantment.getRegistryName()); + } + public void setEnchantment(ResourceLocation enchantment) { this.setNode(1, enchantment); diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderExperience.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderExperience.java index e4122db..c503a08 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderExperience.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderExperience.java @@ -1,41 +1,39 @@ package exopandora.worldhandler.builder.impl; +import javax.annotation.Nullable; + import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; -import exopandora.worldhandler.builder.types.Level; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import exopandora.worldhandler.helper.EnumHelper; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderExperience extends CommandBuilder { public BuilderExperience() { - + this.setLevel(0); } - public BuilderExperience(int level, String player) + public BuilderExperience(EnumMode mode, int level, String player, EnumUnit unit) { + this.setMode(mode); this.setLevel(level); this.setPlayer(player); + this.setUnit(unit); } - public void setLevel(int level) + public void setMode(EnumMode mode) { - this.setNode(0, new Level(level)); + this.setNode(0, mode.toString()); } - public int getLevel() + @Nullable + public EnumMode getMode() { - Level level = this.getNodeAsLevel(0); - - if(level != null) - { - return level.getLevel(); - } - - return 0; + return EnumHelper.valueOf(this.getNodeAsString(0), EnumMode.class); } public void setPlayer(String player) @@ -48,10 +46,31 @@ public class BuilderExperience extends CommandBuilder return this.getNodeAsString(1); } + public void setLevel(int level) + { + this.setNode(2, level); + } + + public int getLevel() + { + return this.getNodeAsInt(2); + } + + public void setUnit(EnumUnit unit) + { + this.setNode(3, unit.toString()); + } + + @Nullable + public EnumUnit getUnit() + { + return EnumHelper.valueOf(this.getNodeAsString(3), EnumUnit.class); + } + @Override public String getCommandName() { - return "xp"; + return "experience"; } @Override @@ -59,9 +78,53 @@ public class BuilderExperience extends CommandBuilder { Syntax syntax = new Syntax(); - syntax.addRequired("amount", Type.LEVEL, new Level(0)); - syntax.addOptional("player", Type.STRING); + syntax.addRequired("add|set|query", Type.STRING); + syntax.addRequired("player", Type.STRING); + syntax.addRequired("amount", Type.INT); + syntax.addOptional("levels|points", Type.STRING); return syntax; } + + public BuilderExperience getBuilderForAddLevels() + { + return new BuilderExperience(EnumMode.ADD, this.getLevel(), this.getPlayer(), EnumUnit.LEVELS); + } + + public BuilderExperience getBuilderForRemoveLevels() + { + return new BuilderExperience(EnumMode.ADD, -this.getLevel(), this.getPlayer(), EnumUnit.LEVELS); + } + + public BuilderExperience getBuilderForResetLevels() + { + return new BuilderExperience(EnumMode.SET, 0, this.getPlayer(), EnumUnit.LEVELS); + } + + @OnlyIn(Dist.CLIENT) + public static enum EnumMode + { + ADD, + SET, + QUERY; + + @Override + public String toString() + { + return this.name().toLowerCase(); + } + } + + @OnlyIn(Dist.CLIENT) + public static enum EnumUnit + { + LEVELS, + POINTS; + + @Override + public String toString() + { + return this.name().toLowerCase(); + } + } } diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderFill.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderFill.java index a420e09..153f93d 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderFill.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderFill.java @@ -4,112 +4,89 @@ import javax.annotation.Nullable; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.impl.abstr.BuilderDoubleBlockPos; +import exopandora.worldhandler.builder.types.BlockResourceLocation; +import exopandora.worldhandler.builder.types.CoordinateInt; import exopandora.worldhandler.builder.types.Type; import exopandora.worldhandler.helper.BlockHelper; import exopandora.worldhandler.helper.EnumHelper; -import exopandora.worldhandler.helper.ResourceHelper; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderFill extends BuilderDoubleBlockPos { - public BuilderFill(ResourceLocation block1, EnumBlockHandling handling, ResourceLocation block2) + public BuilderFill() { - this.setPosition1(BlockHelper.getPos1()); - this.setPosition2(BlockHelper.getPos2()); + + } + + public BuilderFill(BlockResourceLocation block1, EnumBlockFilter filter, BlockResourceLocation block2) + { + this(BlockHelper.getPos1(), BlockHelper.getPos2(), block1, filter, block2); + } + + public BuilderFill(BlockPos pos1, BlockPos pos2, BlockResourceLocation block1, EnumBlockFilter handling, BlockResourceLocation block2) + { + this.setPosition1(pos1); + this.setPosition2(pos2); this.setBlock1(block1); - this.setMeta1(0); this.setBlockHandling(handling); this.setBlock2(block2); } - public BuilderFill() + public BuilderFill(CoordinateInt x1, CoordinateInt y1, CoordinateInt z1, CoordinateInt x2, CoordinateInt y2, CoordinateInt z2, BlockResourceLocation block1) { - this.init(); - } - - private void init() - { - this.setMeta1(0); - } - - @Deprecated - public void setMeta1(int meta) - { - this.setNode(7, meta); - } - - @Deprecated - public void setMeta2(int meta) - { - this.setNode(10, meta); + this.setX1(x1); + this.setY1(y1); + this.setZ1(z1); + this.setX2(x2); + this.setY2(y2); + this.setZ2(z2); + this.setBlock1(block1); } public void setBlock1(String block) { - this.setBlock1(ResourceHelper.stringToResourceLocationNullable(block, ResourceHelper::isRegisteredBlock)); + this.setBlock1(BlockResourceLocation.valueOf(block)); } - public void setBlock1(ResourceLocation location) + public void setBlock1(BlockResourceLocation resource) { - this.setNode(6, location); + this.setNode(6, resource); } - public ResourceLocation getBlock1() + @Nullable + public BlockResourceLocation getBlock1() { - return this.getNodeAsResourceLocation(6); + return this.getNodeAsBlockResourceLocation(6); } - public String getBlock1String() + public void setBlockHandling(EnumBlockFilter filter) { - ResourceLocation location = this.getBlock1(); - - if(location != null) - { - return location.toString(); - } - - return null; - } - - public void setBlockHandling(EnumBlockHandling blockHandling) - { - this.setNode(8, blockHandling != null ? blockHandling.toString() : null); + this.setNode(7, filter != null ? filter.toString() : null); } public void setBlock2(String block) { - this.setBlock2(ResourceHelper.stringToResourceLocationNullable(block, ResourceHelper::isRegisteredBlock)); + this.setBlock2(BlockResourceLocation.valueOf(block)); } - public void setBlock2(ResourceLocation location) + public void setBlock2(BlockResourceLocation resource) { - this.setNode(9, location); - } - - public String getBlock2String() - { - ResourceLocation location = this.getBlock2(); - - if(location != null) - { - return location.toString(); - } - - return null; - } - - public ResourceLocation getBlock2() - { - return this.getNodeAsResourceLocation(9); + this.setNode(8, resource); } @Nullable - public EnumBlockHandling getBlockHandling() + public BlockResourceLocation getBlock2() { - return EnumHelper.valueOf(EnumBlockHandling.class, this.getNodeAsString(8)); + return this.getNodeAsBlockResourceLocation(8); + } + + @Nullable + public EnumBlockFilter getBlockFilter() + { + return EnumHelper.valueOf(this.getNodeAsString(7), EnumBlockFilter.class); } public BuilderFill getBuilderForFill() @@ -119,7 +96,7 @@ public class BuilderFill extends BuilderDoubleBlockPos public BuilderFill getBuilderForReplace() { - return new BuilderFill(this.getBlock2(), EnumBlockHandling.REPLACE, this.getBlock1()); + return new BuilderFill(this.getBlock2(), EnumBlockFilter.REPLACE, this.getBlock1()); } @Override @@ -133,23 +110,21 @@ public class BuilderFill extends BuilderDoubleBlockPos { Syntax syntax = new Syntax(); - syntax.addRequired("x1", Type.COORDINATE); - syntax.addRequired("y1", Type.COORDINATE); - syntax.addRequired("z1", Type.COORDINATE); - syntax.addRequired("x2", Type.COORDINATE); - syntax.addRequired("y2", Type.COORDINATE); - syntax.addRequired("z2", Type.COORDINATE); - syntax.addRequired("block", Type.RESOURCE_LOCATION); - syntax.addOptional("data_value", Type.INT); - syntax.addOptional("old_block_handling", Type.STRING); - syntax.addOptional("block_2|nbt", Type.RESOURCE_LOCATION, "block_2|nbt"); - syntax.addOptional("data_value", Type.INT, "data_value"); + syntax.addRequired("x1", Type.COORDINATE_INT); + syntax.addRequired("y1", Type.COORDINATE_INT); + syntax.addRequired("z1", Type.COORDINATE_INT); + syntax.addRequired("x2", Type.COORDINATE_INT); + syntax.addRequired("y2", Type.COORDINATE_INT); + syntax.addRequired("z2", Type.COORDINATE_INT); + syntax.addRequired("block", Type.BLOCK_RESOURCE_LOCATION); + syntax.addOptional("filter", Type.STRING); + syntax.addOptional("block", Type.BLOCK_RESOURCE_LOCATION, "block"); return syntax; } - @SideOnly(Side.CLIENT) - public static enum EnumBlockHandling + @OnlyIn(Dist.CLIENT) + public static enum EnumBlockFilter { REPLACE, DESTROY, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGamemode.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGamemode.java index 6382650..dae7ebe 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGamemode.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGamemode.java @@ -3,9 +3,10 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +@OnlyIn(Dist.CLIENT) public class BuilderGamemode extends CommandBuilder { public BuilderGamemode() @@ -51,7 +52,7 @@ public class BuilderGamemode extends CommandBuilder return syntax; } - @SideOnly(Side.CLIENT) + @OnlyIn(Dist.CLIENT) public static enum EnumGamemode { SURVIVAL, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGamerule.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGamerule.java index 2e138a8..eb7caea 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGamerule.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGamerule.java @@ -3,10 +3,10 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderGamerule extends CommandBuilder { public BuilderGamerule() diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGeneric.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGeneric.java index b27e693..fc1d8a2 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGeneric.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGeneric.java @@ -2,10 +2,10 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.CommandString; import exopandora.worldhandler.builder.ICommandBuilder; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderGeneric implements ICommandBuilder { private final String command; diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGive.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGive.java index ab2a6c2..b295668 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGive.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGive.java @@ -1,30 +1,35 @@ package exopandora.worldhandler.builder.impl; +import javax.annotation.Nullable; + import exopandora.worldhandler.builder.CommandBuilderNBT; import exopandora.worldhandler.builder.Syntax; +import exopandora.worldhandler.builder.types.ItemResourceLocation; import exopandora.worldhandler.builder.types.Type; import exopandora.worldhandler.helper.ResourceHelper; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderGive extends CommandBuilderNBT { - public BuilderGive(String player, ResourceLocation item) - { - this.setPlayer(player); - this.setItem(item); - this.setAmount(1); - this.setMetadata(0); - } + private final ItemResourceLocation itemResourceLocation = new ItemResourceLocation(); public BuilderGive() { this(null, null); } + public BuilderGive(String player, ResourceLocation item) + { + this.setPlayer(player); + this.setItem(item); + this.setCount(1); + } + public void setPlayer(String username) { this.setNode(0, username); @@ -37,50 +42,41 @@ public class BuilderGive extends CommandBuilderNBT public void setItem(String item) { - this.setItem(ResourceHelper.stringToResourceLocationNullable(item, ResourceHelper::isRegisteredItem)); + this.setItem(ResourceHelper.assertRegistered(ResourceHelper.stringToResourceLocation(item), ForgeRegistries.ITEMS)); } public void setItem(ResourceLocation item) { - this.setNode(1, item); + this.itemResourceLocation.setResourceLocation(item); + this.setNode(1, this.itemResourceLocation); } - public ResourceLocation getItem() + @Nullable + public ItemResourceLocation getItem() { - return this.getNodeAsResourceLocation(1); + return this.getNodeAsItemResourceLocation(1); } - public void setAmount(int ammount) + public void setCount(int count) { - this.setNode(2, ammount); + this.setNode(2, count); } - public int getAmount() + public int getCount() { return this.getNodeAsInt(2); } - @Deprecated - public void setMetadata(int metadata) - { - this.setNode(3, metadata); - } - - @Deprecated - public int getMetadata() - { - return this.getNodeAsInt(3); - } - @Override public void setNBT(NBTTagCompound nbt) { - this.setNode(4, nbt); + this.itemResourceLocation.setNBT(nbt); + this.setNode(1, this.itemResourceLocation); } public NBTTagCompound getNBT() { - return this.getNodeAsNBT(4); + return this.getNodeAsItemResourceLocation(1).getNBT(); } @Override @@ -95,10 +91,8 @@ public class BuilderGive extends CommandBuilderNBT Syntax syntax = new Syntax(); syntax.addRequired("player", Type.STRING); - syntax.addRequired("item", Type.RESOURCE_LOCATION); - syntax.addRequired("amount", Type.INT); - syntax.addRequired("data_value", Type.INT); - syntax.addOptional("nbt", Type.NBT); + syntax.addRequired("item", Type.ITEM_RESOURCE_LOCATION); + syntax.addRequired("count", Type.INT); return syntax; } diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderMultiCommand.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderMultiCommand.java index d7a2947..1b9222a 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderMultiCommand.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderMultiCommand.java @@ -3,10 +3,10 @@ package exopandora.worldhandler.builder.impl; import java.util.Arrays; import exopandora.worldhandler.builder.ICommandBuilder; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderMultiCommand implements ICommandBuilder { private final ICommandBuilder[] builders; diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderNoteEditor.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderNoteEditor.java index 5aabd4c..c6ed041 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderNoteEditor.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderNoteEditor.java @@ -1,38 +1,41 @@ package exopandora.worldhandler.builder.impl; -import exopandora.worldhandler.builder.component.impl.ComponentTag; +import net.minecraft.client.Minecraft; +import net.minecraft.init.Blocks; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.state.properties.NoteBlockInstrument; import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) -public class BuilderNoteEditor extends BuilderBlockdata +@OnlyIn(Dist.CLIENT) +public class BuilderNoteEditor extends BuilderSetBlock { - private final ComponentTag note; - public BuilderNoteEditor() { - this.note = this.registerNBTComponent(new ComponentTag("note")); + this.setBlock(Blocks.NOTE_BLOCK.getRegistryName()); + this.setMode("replace"); } - public BuilderNoteEditor(byte note) + public BuilderNoteEditor(int note) { this(); this.setNote(note); } - public BuilderNoteEditor(byte note, BlockPos pos) + public BuilderNoteEditor(int note, BlockPos pos) { this(note); this.setPosition(pos); + this.withState(BlockStateProperties.NOTE_BLOCK_INSTRUMENT, NoteBlockInstrument.byState(Minecraft.getInstance().world.getBlockState(pos))); } - public void setNote(byte note) + public void setNote(int note) { - this.note.setValue(note); + this.withState(BlockStateProperties.NOTE_0_24, note); } - public BuilderNoteEditor getBuilderForNote(byte note) + public BuilderNoteEditor getBuilderForNote(int note) { return new BuilderNoteEditor(note, this.getBlockPos()); } diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderPlayer.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderPlayer.java index 8edfa5e..45fad76 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderPlayer.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderPlayer.java @@ -3,10 +3,10 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderPlayer extends CommandBuilder { private final String command; diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderPlayerReason.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderPlayerReason.java index 2920bcb..f6bf215 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderPlayerReason.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderPlayerReason.java @@ -3,10 +3,10 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderPlayerReason extends CommandBuilder { private final String command; diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderPotionEffect.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderPotionEffect.java index 6071ad2..b8e017d 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderPotionEffect.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderPotionEffect.java @@ -8,10 +8,11 @@ import exopandora.worldhandler.builder.component.abstr.PotionMetadata; import exopandora.worldhandler.builder.types.Type; import net.minecraft.potion.Potion; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderPotionEffect extends CommandBuilder { private int seconds; @@ -20,16 +21,17 @@ public class BuilderPotionEffect extends CommandBuilder public BuilderPotionEffect() { - this(null, null); + this(null, null, null); } - public BuilderPotionEffect(String player, ResourceLocation effect) + public BuilderPotionEffect(EnumMode mode, String player, ResourceLocation effect) { - this(player, effect, 0, (byte) 0, false); + this(mode, player, effect, 0, (byte) 0, false); } - public BuilderPotionEffect(String player, ResourceLocation effect, int duration, byte amplifier, boolean hideParticles) + public BuilderPotionEffect(EnumMode mode, String player, ResourceLocation effect, int duration, byte amplifier, boolean hideParticles) { + this.setMode(mode); this.setPlayer(player); this.setEffect(effect); this.setDuration(duration); @@ -37,29 +39,42 @@ public class BuilderPotionEffect extends CommandBuilder this.setHideParticles(hideParticles); } + public void setMode(EnumMode mode) + { + if(mode != null) + { + this.setNode(0, mode.toString()); + } + } + public void setPlayer(String player) { - this.setNode(0, player); + this.setNode(1, player); } public String getPlayer() { - return this.getNodeAsString(0); + return this.getNodeAsString(1); + } + + public void setEffect(Potion effect) + { + this.setEffect(effect.getRegistryName()); } public void setEffect(ResourceLocation effect) { - this.setNode(1, effect); + this.setNode(2, effect); } @Nullable public Potion getEffectAsPotion() { - ResourceLocation location = this.getNodeAsResourceLocation(1); + ResourceLocation location = this.getNodeAsResourceLocation(2); if(location != null) { - return Potion.getPotionFromResourceLocation(location.toString()); + return ForgeRegistries.POTIONS.getValue(location); } return null; @@ -67,37 +82,37 @@ public class BuilderPotionEffect extends CommandBuilder public ResourceLocation getEffect() { - return this.getNodeAsResourceLocation(1); + return this.getNodeAsResourceLocation(2); } public void setDuration(int duration) { - this.setNode(2, Math.min(duration, 1000000)); + this.setNode(3, Math.min(duration, 1000000)); } public int getDuration() { - return this.getNodeAsInt(2); + return this.getNodeAsInt(3); } public void setAmplifier(byte amplifier) { - this.setNode(3, (byte) (amplifier - 1)); + this.setNode(4, (byte) (amplifier - 1)); } public int getAmplifier() { - return this.getNodeAsByte(3); + return this.getNodeAsByte(4); } public void setHideParticles(boolean hideParticles) { - this.setNode(4, hideParticles); + this.setNode(5, hideParticles); } public boolean getHideParticles() { - return this.getNodeAsBoolean(4); + return this.getNodeAsBoolean(5); } public int getSeconds() @@ -108,7 +123,7 @@ public class BuilderPotionEffect extends CommandBuilder public void setSeconds(int seconds) { this.seconds = seconds; - this.setDuration(PotionMetadata.getDurationSeconds(this.seconds, this.minutes, this.hours)); + this.setDuration(PotionMetadata.toSeconds(this.seconds, this.minutes, this.hours)); } public int getMinutes() @@ -119,7 +134,7 @@ public class BuilderPotionEffect extends CommandBuilder public void setMinutes(int minutes) { this.minutes = minutes; - this.setDuration(PotionMetadata.getDurationSeconds(this.seconds, this.minutes, this.hours)); + this.setDuration(PotionMetadata.toSeconds(this.seconds, this.minutes, this.hours)); } public int getHours() @@ -130,17 +145,22 @@ public class BuilderPotionEffect extends CommandBuilder public void setHours(int hours) { this.hours = hours; - this.setDuration(PotionMetadata.getDurationSeconds(this.seconds, this.minutes, this.hours)); + this.setDuration(PotionMetadata.toSeconds(this.seconds, this.minutes, this.hours)); + } + + public BuilderGeneric getGiveCommand() + { + return new BuilderGeneric(this.getCommandName(), EnumMode.GIVE.toString(), this.getPlayer(), this.getEffect().toString(), String.valueOf(this.getDuration()), String.valueOf(this.getAmplifier()), String.valueOf(this.getHideParticles())); } public BuilderGeneric getRemoveCommand() { - return new BuilderGeneric(this.getCommandName(), this.getPlayer(), this.getEffect().toString(), "0"); + return new BuilderGeneric(this.getCommandName(), EnumMode.CLEAR.toString(), this.getPlayer(), this.getEffect().toString()); } public BuilderGeneric getClearCommand() { - return new BuilderGeneric(this.getCommandName(), this.getPlayer(), "clear"); + return new BuilderGeneric(this.getCommandName(), EnumMode.CLEAR.toString(), this.getPlayer()); } @Override @@ -154,6 +174,7 @@ public class BuilderPotionEffect extends CommandBuilder { Syntax syntax = new Syntax(); + syntax.addRequired("give|clear", Type.STRING); syntax.addRequired("player", Type.STRING); syntax.addRequired("effect", Type.RESOURCE_LOCATION); syntax.addOptional("seconds", Type.INT, 0); @@ -162,4 +183,17 @@ public class BuilderPotionEffect extends CommandBuilder return syntax; } + + @OnlyIn(Dist.CLIENT) + public static enum EnumMode + { + GIVE, + CLEAR; + + @Override + public String toString() + { + return this.name().toLowerCase(); + } + } } diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderPotionItem.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderPotionItem.java index 7587abc..7e992d3 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderPotionItem.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderPotionItem.java @@ -6,10 +6,10 @@ import exopandora.worldhandler.builder.component.impl.ComponentPotionItem; import net.minecraft.item.Item; import net.minecraft.potion.Potion; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderPotionItem extends BuilderGive { private final ComponentPotionItem potion; @@ -27,62 +27,62 @@ public class BuilderPotionItem extends BuilderGive public void setAmplifier(Potion potion, byte amplifier) { - this.potion.get(potion).setAmplifier(amplifier); + this.potion.setAmplifier(potion, amplifier); } public void setSeconds(Potion potion, int seconds) { - this.potion.get(potion).setSeconds(seconds); + this.potion.setSeconds(potion, seconds); } public void setMinutes(Potion potion, int minutes) { - this.potion.get(potion).setMinutes(minutes); + this.potion.setMinutes(potion, minutes); } public void setHours(Potion potion, int hours) { - this.potion.get(potion).setHours(hours); + this.potion.setHours(potion, hours); } public void setShowParticles(Potion potion, boolean showParticles) { - this.potion.get(potion).setShowParticles(showParticles); + this.potion.setShowParticles(potion, showParticles); } public void setAmbient(Potion potion, boolean ambient) { - this.potion.get(potion).setAmbient(ambient); + this.potion.setAmbient(potion, ambient); } public byte getAmplifier(Potion potion) { - return this.potion.get(potion).getAmplifier(); + return this.potion.getAmplifier(potion); } public int getSeconds(Potion potion) { - return this.potion.get(potion).getSeconds(); + return this.potion.getSeconds(potion); } public int getMinutes(Potion potion) { - return this.potion.get(potion).getMinutes(); + return this.potion.getMinutes(potion); } public int getHours(Potion potion) { - return this.potion.get(potion).getHours(); + return this.potion.getHours(potion); } public boolean getShowParticles(Potion potion) { - return this.potion.get(potion).getShowParticles(); + return this.potion.getShowParticles(potion); } public boolean getAmbient(Potion potion) { - return this.potion.get(potion).getAmbient(); + return this.potion.getAmbient(potion); } public Set getPotions() diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderRecipe.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderRecipe.java index a97899e..755d6ea 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderRecipe.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderRecipe.java @@ -4,14 +4,14 @@ 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.item.crafting.IRecipe; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderRecipe extends CommandBuilder { public BuilderRecipe() @@ -34,7 +34,7 @@ public class BuilderRecipe extends CommandBuilder @Nullable public EnumMode getMode() { - return EnumHelper.valueOf(EnumMode.class, this.getNodeAsString(0)); + return EnumHelper.valueOf(this.getNodeAsString(0), EnumMode.class); } public void setPlayer(String player) @@ -48,6 +48,11 @@ public class BuilderRecipe extends CommandBuilder return this.getNodeAsString(1); } + public void setRecipe(IRecipe recipe) + { + this.setRecipe(recipe.getId()); + } + public void setRecipe(ResourceLocation recipe) { this.setNode(2, recipe); @@ -82,7 +87,7 @@ public class BuilderRecipe extends CommandBuilder return syntax; } - @SideOnly(Side.CLIENT) + @OnlyIn(Dist.CLIENT) public static enum EnumMode { GIVE, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardObjectives.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardObjectives.java index 7d8a3d1..ffa07c0 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardObjectives.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardObjectives.java @@ -4,11 +4,13 @@ import javax.annotation.Nullable; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.impl.abstr.BuilderScoreboard; +import exopandora.worldhandler.builder.types.GreedyString; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import exopandora.worldhandler.helper.EnumHelper; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderScoreboardObjectives extends BuilderScoreboard { public BuilderScoreboardObjectives() @@ -21,74 +23,74 @@ public class BuilderScoreboardObjectives extends BuilderScoreboard this.setNode(0, "objectives"); } - public void setMode(String mode) + public void setMode(EnumMode mode) { String objective = this.getObjective(); - if(mode.equals("add") || mode.equals("remove") || mode.equals("setdisplay")) + this.updateSyntax(this.getSyntax(mode)); + this.setNode(1, mode.toString()); + + if(objective != null) { - this.updateSyntax(this.getSyntax(mode)); - this.setNode(1, mode); - - if(objective != null) - { - this.setObjective(objective); - } - - this.init(); + this.setObjective(objective); } + + this.init(); } - public String getMode() + public EnumMode getMode() { - return this.getNodeAsString(1); + return EnumHelper.valueOf(this.getNodeAsString(1), EnumMode.class); } public void setObjective(String name) { - String mode = this.getMode(); String objective = name != null ? name.replaceAll(" ", "_") : null; + EnumMode mode = this.getMode(); + if(mode != null) { - if(mode.equals("add") || mode.equals("remove")) + switch(mode) { - this.setNode(2, objective); - - if(mode.equals("add")) - { - this.setNode(4, name); - } - } - else if(mode.equals("setdisplay")) - { - this.setNode(3, objective); + case ADD: + this.setNode(4, new GreedyString(name)); + case REMOVE: + this.setNode(2, objective); + break; + case SETDISPLAY: + this.setNode(3, objective); + break; + default: + break; } } } public void setCriteria(String criteria) { - if(this.getMode() == null || !this.getMode().equals("add")) + if(this.getMode() == null || !this.getMode().equals(EnumMode.ADD)) { - this.setMode("add"); + this.setMode(EnumMode.ADD); } - this.setNode(3, criteria.replaceAll("[:]", ".")); + + this.setNode(3, criteria); } public void setSlot(String slot) { - if(this.getMode() == null || !this.getMode().equals("setdisplay")) + if(this.getMode() == null || !this.getMode().equals(EnumMode.SETDISPLAY)) { - this.setMode("setdisplay"); + this.setMode(EnumMode.SETDISPLAY); } + this.setNode(2, slot); } @Nullable public String getSlot() { - if(this.getMode() != null && this.getMode().equals("setdisplay")) + if(this.getMode() != null && this.getMode().equals(EnumMode.SETDISPLAY)) { return this.getNodeAsString(2); } @@ -99,17 +101,18 @@ public class BuilderScoreboardObjectives extends BuilderScoreboard @Nullable public String getObjective() { - String mode = this.getMode(); + EnumMode mode = this.getMode(); if(mode != null) { - if(mode.equals("add") || mode.equals("remove")) + switch(mode) { - return this.getNodeAsString(2); - } - else if(mode.equals("setdisplay")) - { - return this.getNodeAsString(3); + case ADD: case REMOVE: + return this.getNodeAsString(2); + case SETDISPLAY: + return this.getNodeAsString(3); + default: + break; } } @@ -117,43 +120,33 @@ public class BuilderScoreboardObjectives extends BuilderScoreboard } @Nullable - private Syntax getSyntax(String mode) + private Syntax getSyntax(EnumMode mode) { - if(mode.equals("add")) - { - Syntax syntax = new Syntax(); - - syntax.addRequired("objectives", Type.STRING); - syntax.addRequired("add", Type.STRING); - syntax.addRequired("name", Type.STRING); - syntax.addRequired("criteria_type", Type.STRING); - syntax.addOptional("display_name...", Type.STRING); - - return syntax; - } - else if(mode.equals("remove")) - { - Syntax syntax = new Syntax(); - - syntax.addRequired("objectives", Type.STRING); - syntax.addRequired("remove", Type.STRING); - syntax.addRequired("name", Type.STRING); - - return syntax; - } - else if(mode.equals("setdisplay")) - { - Syntax syntax = new Syntax(); - - syntax.addRequired("objectives", Type.STRING); - syntax.addRequired("setdisplay", Type.STRING); - syntax.addRequired("slot", Type.STRING); - syntax.addOptional("objective", Type.STRING); - - return syntax; - } + Syntax syntax = new Syntax(); - return null; + switch(mode) + { + case ADD: + syntax.addRequired("objectives", Type.STRING); + syntax.addRequired("add", Type.STRING); + syntax.addRequired("name", Type.STRING); + syntax.addRequired("criteria_type", Type.STRING); + syntax.addOptional("display_name...", Type.GREEDY_STRING); + return syntax; + case REMOVE: + syntax.addRequired("objectives", Type.STRING); + syntax.addRequired("remove", Type.STRING); + syntax.addRequired("name", Type.STRING); + return syntax; + case SETDISPLAY: + syntax.addRequired("objectives", Type.STRING); + syntax.addRequired("setdisplay", Type.STRING); + syntax.addRequired("slot", Type.STRING); + syntax.addOptional("objective", Type.STRING); + return syntax; + default: + return null; + } } @Override @@ -167,4 +160,18 @@ public class BuilderScoreboardObjectives extends BuilderScoreboard return syntax; } + + @OnlyIn(Dist.CLIENT) + public static enum EnumMode + { + ADD, + REMOVE, + SETDISPLAY; + + @Override + public String toString() + { + return this.name().toLowerCase(); + } + } } diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardPlayers.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardPlayers.java index d4182f5..768aec9 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardPlayers.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardPlayers.java @@ -3,10 +3,10 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.impl.abstr.BuilderScoreboard; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderScoreboardPlayers extends BuilderScoreboard { public BuilderScoreboardPlayers() @@ -14,6 +14,11 @@ public class BuilderScoreboardPlayers extends BuilderScoreboard this.init(); } + private void init() + { + this.setNode(0, "players"); + } + public String getMode() { return this.getNodeAsString(1); @@ -23,36 +28,19 @@ public class BuilderScoreboardPlayers extends BuilderScoreboard { String objective = this.getObjective(); String player = this.getPlayer(); - String tag = this.getTag(); int points = this.getPoints(); - if(mode.equals("add|set|remove") || mode.equals("tag") || mode.equals("enable")) + this.updateSyntax(this.getSyntax(mode)); + this.setNode(1, mode); + this.setNode(2, player); + this.setObjective(objective); + + if(!mode.equals("enable")) { - this.updateSyntax(this.getSyntax(mode)); - this.setNode(1, mode); - this.setNode(2, player); - - if(mode.equals("add|set|remove") || mode.equals("enable")) - { - this.setObjective(objective); - } - - if(mode.equals("add|set|remove")) - { - this.setPoints(points); - } - else if(mode.equals("tag")) - { - this.setTag(tag); - } - - this.init(); + this.setPoints(points); } - } - - private void init() - { - this.setNode(0, "players"); + + this.init(); } public void setPlayer(String player) @@ -72,10 +60,7 @@ public class BuilderScoreboardPlayers extends BuilderScoreboard if(mode != null) { - if(mode.equals("add|set|remove") || mode.equals("enable")) - { - this.setNode(3, objective); - } + this.setNode(3, objective); } } @@ -85,10 +70,7 @@ public class BuilderScoreboardPlayers extends BuilderScoreboard if(mode != null) { - if(mode.equals("add|set|remove") || mode.equals("enable")) - { - return this.getNodeAsString(3); - } + return this.getNodeAsString(3); } return null; @@ -96,16 +78,12 @@ public class BuilderScoreboardPlayers extends BuilderScoreboard public void setPoints(int points) { - if(this.getMode() == null || !this.getMode().equals("add|set|remove")) - { - this.setMode("add|set|remove"); - } this.setNode(4, points); } public int getPoints() { - if(this.getMode() != null && this.getMode().equals("add|set|remove")) + if(this.getMode() != null && !this.getMode().equals("enable")) { return this.getNodeAsInt(4); } @@ -113,83 +91,56 @@ public class BuilderScoreboardPlayers extends BuilderScoreboard return 0; } - public void setTag(String name) - { - String tag = name != null ? name.replaceAll(" ", "_") : null; - - if(this.getMode() == null || !this.getMode().equals("tag")) - { - this.setMode("tag"); - } - this.setNode(4, tag); - } - - public String getTag() - { - if(this.getMode() != null && this.getMode().equals("tag")) - { - return this.getNodeAsString(4); - } - - return null; - } - private Syntax getSyntax(String mode) { - if(mode.equals("add|set|remove")) + Syntax syntax = new Syntax(); + + if(mode.equals("enable")) { - Syntax syntax = new Syntax(); - - syntax.addRequired("players", Type.STRING); - syntax.addRequired("add|set|remove", Type.STRING, "add|set|remove"); - syntax.addRequired("player", Type.STRING); - syntax.addRequired("objective", Type.STRING); - syntax.addRequired("count", Type.INT, 0); - syntax.addOptional("nbt", Type.NBT); - - return syntax; - } - else if(mode.equals("tag")) - { - Syntax syntax = new Syntax(); - - syntax.addRequired("players", Type.STRING); - syntax.addRequired("tag", Type.STRING); - syntax.addRequired("player", Type.STRING); - syntax.addRequired("add|remove|list", Type.STRING); - syntax.addRequired("tag_name", Type.STRING); - syntax.addOptional("nbt", Type.NBT); - - return syntax; - } - else if(mode.equals("enable")) - { - Syntax syntax = new Syntax(); - syntax.addRequired("players", Type.STRING); syntax.addRequired("enable", Type.STRING); syntax.addRequired("player", Type.STRING); - syntax.addRequired("trigger", Type.STRING); + syntax.addRequired("objective", Type.STRING); return syntax; } - return null; + syntax.addRequired("players", Type.STRING); + syntax.addRequired("add|set|remove", Type.STRING, "add|set|remove"); + syntax.addRequired("player", Type.STRING); + syntax.addRequired("objective", Type.STRING); + syntax.addRequired("score", Type.INT, 0); + + return syntax; + } - public BuilderGeneric getBuilderForTag(EnumTag tag) - { - return new BuilderGeneric(this.getCommandName(), "players", this.getMode(), this.getPlayer(), tag.toString(), this.getTag()); - } - - public BuilderGeneric getBuilderForPoints(EnumPoints mode) + public BuilderScoreboardPlayers getBuilderForPoints(EnumMode mode) { return this.getBuilderForPoints(mode, this.getPoints()); } - public BuilderGeneric getBuilderForPoints(EnumPoints mode, int points) + public BuilderScoreboardPlayers getBuilderForPoints(EnumMode mode, int points) { - return new BuilderGeneric(this.getCommandName(), "players", mode.toString(), this.getPlayer(), this.getObjective(), String.valueOf(points)); + BuilderScoreboardPlayers builder = new BuilderScoreboardPlayers(); + + builder.setMode(mode.toString()); + builder.setPlayer(this.getPlayer()); + builder.setObjective(this.getObjective()); + builder.setPoints(points); + + return builder; + } + + public BuilderScoreboardPlayers getBuilderForEnable() + { + BuilderScoreboardPlayers builder = new BuilderScoreboardPlayers(); + + builder.setMode(EnumMode.ENABLE.toString()); + builder.setPlayer(this.getPlayer()); + builder.setObjective(this.getObjective()); + + return builder; } @Override @@ -198,30 +149,18 @@ public class BuilderScoreboardPlayers extends BuilderScoreboard Syntax syntax = new Syntax(); syntax.addRequired("players", Type.STRING); - syntax.addRequired("add|enable|list|operation|remove|reset|set|tag|test", Type.STRING); + syntax.addRequired("add|enable|get|list|operation|remove|reset|set", Type.STRING); syntax.addOptional("...", Type.STRING); return syntax; } - @SideOnly(Side.CLIENT) - public static enum EnumTag - { - ADD, - REMOVE; - - @Override - public String toString() - { - return this.name().toLowerCase(); - } - } - - @SideOnly(Side.CLIENT) - public static enum EnumPoints + @OnlyIn(Dist.CLIENT) + public static enum EnumMode { ADD, REMOVE, + ENABLE, SET; @Override diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderSetblock.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderSetblock.java index 4ce6f43..0a7f162 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderSetblock.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderSetblock.java @@ -2,59 +2,66 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.impl.abstr.BuilderBlockPos; -import exopandora.worldhandler.builder.types.Coordinate; +import exopandora.worldhandler.builder.types.BlockResourceLocation; +import exopandora.worldhandler.builder.types.CoordinateInt; import exopandora.worldhandler.builder.types.Type; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.state.IProperty; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -public class BuilderSetblock extends BuilderBlockPos +@OnlyIn(Dist.CLIENT) +public class BuilderSetBlock extends BuilderBlockPos { - @Deprecated - public BuilderSetblock(BlockPos pos, ResourceLocation block, int meta, String mode) + private final BlockResourceLocation blockResourceLocation = new BlockResourceLocation(); + + public BuilderSetBlock() { + super(0); + } + + public BuilderSetBlock(BlockPos pos, ResourceLocation block, String mode) + { + this(); this.setPosition(pos); this.setBlock(block); - this.setMetadata(meta); this.setMode(mode); } - @Deprecated - public BuilderSetblock(Coordinate x, Coordinate y, Coordinate z, ResourceLocation block, int meta, String mode) + public BuilderSetBlock(CoordinateInt x, CoordinateInt y, CoordinateInt z, ResourceLocation block, String mode) { + this(); this.setX(x); this.setY(y); this.setZ(z); this.setBlock(block); - this.setMetadata(meta); this.setMode(mode); } - public BuilderSetblock(Coordinate x, Coordinate y, Coordinate z, ResourceLocation block, String mode) + public > BuilderSetBlock withState(IProperty property, T value) { - this(x, y, z, block, 0, mode); + this.blockResourceLocation.withState(property, value); + return this; } public void setBlock(ResourceLocation block) { - this.setNode(3, block); - } - - @Deprecated - public void setMetadata(int meta) - { - this.setNode(4, meta); + this.blockResourceLocation.setResourceLocation(block); + this.setNode(3, this.blockResourceLocation); } public void setMode(String mode) { - this.setNode(5, mode); + this.setNode(4, mode); } @Override public void setNBT(NBTTagCompound nbt) { - this.setNode(6, nbt); + this.blockResourceLocation.setNBT(nbt); + this.setNode(3, this.blockResourceLocation); } @Override @@ -68,13 +75,11 @@ public class BuilderSetblock extends BuilderBlockPos { Syntax syntax = new Syntax(); - syntax.addRequired("x", Type.COORDINATE); - syntax.addRequired("y", Type.COORDINATE); - syntax.addRequired("z", Type.COORDINATE); - syntax.addRequired("block", Type.RESOURCE_LOCATION); - syntax.addOptional("data_value", Type.INT); + syntax.addRequired("x", Type.COORDINATE_INT); + syntax.addRequired("y", Type.COORDINATE_INT); + syntax.addRequired("z", Type.COORDINATE_INT); + syntax.addRequired("block", Type.BLOCK_RESOURCE_LOCATION); syntax.addOptional("mode", Type.STRING); - syntax.addOptional("nbt", Type.NBT); return syntax; } diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderSignEditor.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderSignEditor.java index 736d1a7..7a87b6d 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderSignEditor.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderSignEditor.java @@ -6,16 +6,21 @@ import exopandora.worldhandler.builder.component.impl.ComponentTag; import exopandora.worldhandler.format.text.ColoredString; import exopandora.worldhandler.format.text.SignText; import net.minecraft.nbt.NBTTagString; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) -public class BuilderSignEditor extends BuilderBlockdata +@OnlyIn(Dist.CLIENT) +public class BuilderSignEditor extends BuilderData { + @SuppressWarnings("unchecked") private final ComponentTag[] sign = new ComponentTag[4]; public BuilderSignEditor() { + super(); + this.setMode(EnumMode.MERGE); + this.setTarget(EnumTarget.BLOCK); + for(int x = 0; x < 4; x++) { this.sign[x] = this.registerNBTComponent(new ComponentTag("Text" + (x + 1), new SignText(x), text -> new NBTTagString(text.toString()))); diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderSpawnpoint.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderSpawnpoint.java index 795066e..37e0509 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderSpawnpoint.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderSpawnpoint.java @@ -2,19 +2,20 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; -import exopandora.worldhandler.builder.types.Coordinate; +import exopandora.worldhandler.builder.types.Coordinate.CoordinateType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import exopandora.worldhandler.builder.types.CoordinateInt; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderSpawnpoint extends CommandBuilder { public BuilderSpawnpoint(String player) { - this.setX(new Coordinate(0, true)); - this.setY(new Coordinate(0, true)); - this.setZ(new Coordinate(0, true)); + this.setX(new CoordinateInt(CoordinateType.LOCAL)); + this.setY(new CoordinateInt(CoordinateType.LOCAL)); + this.setZ(new CoordinateInt(CoordinateType.LOCAL)); } @Override @@ -28,17 +29,17 @@ public class BuilderSpawnpoint extends CommandBuilder this.setNode(0, player); } - public void setX(Coordinate x) + public void setX(CoordinateInt x) { this.setNode(1, x); } - public void setY(Coordinate y) + public void setY(CoordinateInt y) { this.setNode(2, y); } - public void setZ(Coordinate z) + public void setZ(CoordinateInt z) { this.setNode(3, z); } @@ -49,9 +50,9 @@ public class BuilderSpawnpoint extends CommandBuilder Syntax syntax = new Syntax(); syntax.addRequired("player", Type.STRING); - syntax.addRequired("x", Type.COORDINATE); - syntax.addRequired("y", Type.COORDINATE); - syntax.addRequired("z", Type.COORDINATE); + syntax.addRequired("x", Type.COORDINATE_INT); + syntax.addRequired("y", Type.COORDINATE_INT); + syntax.addRequired("z", Type.COORDINATE_INT); return syntax; } diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderSummon.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderSummon.java index e5f7a1b..847c911 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderSummon.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderSummon.java @@ -14,22 +14,25 @@ import exopandora.worldhandler.builder.component.impl.ComponentSummon; import exopandora.worldhandler.builder.component.impl.ComponentTag; import exopandora.worldhandler.builder.impl.abstr.EnumAttributes; import exopandora.worldhandler.builder.impl.abstr.EnumAttributes.Applyable; -import exopandora.worldhandler.builder.types.Coordinate; +import exopandora.worldhandler.builder.types.Coordinate.CoordinateType; +import exopandora.worldhandler.builder.types.CoordinateDouble; import exopandora.worldhandler.builder.types.Type; import exopandora.worldhandler.format.text.ColoredString; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.item.Item; -import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.INBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; import net.minecraft.potion.Potion; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderSummon extends CommandBuilderNBT { private final ComponentAttributeMob attribute; @@ -51,45 +54,14 @@ public class BuilderSummon extends CommandBuilderNBT this.handItems = this.registerNBTComponent(new ComponentTag("HandItems", this::itemListSerializer)); this.summon = this.registerNBTComponent(new ComponentSummon(), "summon"); this.potion = this.registerNBTComponent(new ComponentPotionMob()); - } - - public BuilderSummon(int direction) - { - this(); - this.setDirection(direction); - } - - public void setDirection(int direction) - { - if(direction == 0) - { - this.setX(new Coordinate(0, true)); - this.setY(new Coordinate(0, true)); - this.setZ(new Coordinate(2, true)); - } - else if(direction == 1) - { - this.setX(new Coordinate(-2, true)); - this.setY(new Coordinate(0, true)); - this.setZ(new Coordinate(0, true)); - } - else if(direction == 2) - { - this.setX(new Coordinate(0, true)); - this.setY(new Coordinate(0, true)); - this.setZ(new Coordinate(-2, true)); - } - else if(direction == 3) - { - this.setX(new Coordinate(2, true)); - this.setY(new Coordinate(0, true)); - this.setZ(new Coordinate(0, true)); - } + this.setX(new CoordinateDouble(0.0, CoordinateType.LOCAL)); + this.setY(new CoordinateDouble(0.0, CoordinateType.LOCAL)); + this.setZ(new CoordinateDouble(2.0, CoordinateType.LOCAL)); } public void setEntity(String entityName) { - ResourceLocation location = this.summon.resolve(entityName); + ResourceLocation location = ComponentSummon.resolve(entityName); this.summon.setName(entityName); this.summon.setEntity(location); @@ -102,34 +74,34 @@ public class BuilderSummon extends CommandBuilderNBT return this.getNodeAsResourceLocation(0); } - public void setX(Coordinate x) + public void setX(CoordinateDouble x) { this.setNode(1, x); } - public Coordinate getX() + public CoordinateDouble getX() { - return this.getNodeAsCoordinate(1); + return this.getNodeAsCoordinateDouble(1); } - public void setY(Coordinate y) + public void setY(CoordinateDouble y) { this.setNode(2, y); } - public Coordinate getY() + public CoordinateDouble getY() { - return this.getNodeAsCoordinate(2); + return this.getNodeAsCoordinateDouble(2); } - public void setZ(Coordinate z) + public void setZ(CoordinateDouble z) { this.setNode(3, z); } - public Coordinate getZ() + public CoordinateDouble getZ() { - return this.getNodeAsCoordinate(3); + return this.getNodeAsCoordinateDouble(3); } public void setAttribute(EnumAttributes attribute, double ammount) @@ -175,7 +147,7 @@ public class BuilderSummon extends CommandBuilderNBT public void setPassenger(String entityName) { - this.setPassenger(this.summon.resolve(entityName)); + this.setPassenger(ComponentSummon.resolve(entityName)); } public void setPassenger(ResourceLocation entityName) @@ -186,7 +158,7 @@ public class BuilderSummon extends CommandBuilderNBT passenger.setString("id", entityName.toString()); NBTTagList list = new NBTTagList(); - list.appendTag(passenger); + list.add(passenger); this.passengers.setValue(list); } @@ -201,9 +173,9 @@ public class BuilderSummon extends CommandBuilderNBT { NBTTagList list = this.passengers.getValue(); - if(list != null && !list.hasNoTags()) + if(list != null && !list.isEmpty()) { - return new ResourceLocation(list.getCompoundTagAt(0).getString("id")); + return new ResourceLocation(list.getCompound(0).getString("id")); } return null; @@ -232,8 +204,8 @@ public class BuilderSummon extends CommandBuilderNBT { NBTTagCompound compound = new NBTTagCompound(); compound.setString("id", item.toString()); - compound.setInteger("Count", 1); - list.appendTag(compound); + compound.setInt("Count", 1); + list.add(compound); } this.armorItems.setValue(list); @@ -281,8 +253,8 @@ public class BuilderSummon extends CommandBuilderNBT { NBTTagCompound compound = new NBTTagCompound(); compound.setString("id", item.toString()); - compound.setInteger("Count", 1); - list.appendTag(compound); + compound.setInt("Count", 1); + list.add(compound); } this.handItems.setValue(list); @@ -300,62 +272,62 @@ public class BuilderSummon extends CommandBuilderNBT public void setAmplifier(Potion potion, byte amplifier) { - this.potion.get(potion).setAmplifier(amplifier); + this.potion.setAmplifier(potion, amplifier); } public void setSeconds(Potion potion, int seconds) { - this.potion.get(potion).setSeconds(seconds); + this.potion.setSeconds(potion, seconds); } public void setMinutes(Potion potion, int minutes) { - this.potion.get(potion).setMinutes(minutes); + this.potion.setMinutes(potion, minutes); } public void setHours(Potion potion, int hours) { - this.potion.get(potion).setHours(hours); + this.potion.setHours(potion, hours); } public void setShowParticles(Potion potion, boolean showParticles) { - this.potion.get(potion).setShowParticles(showParticles); + this.potion.setShowParticles(potion, showParticles); } public void setAmbient(Potion potion, boolean ambient) { - this.potion.get(potion).setAmbient(ambient); + this.potion.setAmbient(potion, ambient); } public byte getAmplifier(Potion potion) { - return this.potion.get(potion).getAmplifier(); + return this.potion.getAmplifier(potion); } public int getSeconds(Potion potion) { - return this.potion.get(potion).getSeconds(); + return this.potion.getSeconds(potion); } public int getMinutes(Potion potion) { - return this.potion.get(potion).getMinutes(); + return this.potion.getMinutes(potion); } public int getHours(Potion potion) { - return this.potion.get(potion).getHours(); + return this.potion.getHours(potion); } public boolean getShowParticles(Potion potion) { - return this.potion.get(potion).getShowParticles(); + return this.potion.getShowParticles(potion); } public boolean getAmbient(Potion potion) { - return this.potion.get(potion).getAmbient(); + return this.potion.getAmbient(potion); } public Set getPotions() @@ -363,11 +335,11 @@ public class BuilderSummon extends CommandBuilderNBT return this.potion.getPotions(); } - private NBTBase itemListSerializer(NBTTagList list) + private INBTBase itemListSerializer(NBTTagList list) { - for(int x = 0; x < list.tagCount(); x++) + for(int x = 0; x < list.size(); x++) { - if(!list.getCompoundTagAt(x).getString("id").equals(Blocks.AIR.getRegistryName().toString())) + if(!list.getCompound(x).getString("id").equals(Blocks.AIR.getRegistryName().toString())) { return list; } @@ -376,11 +348,11 @@ public class BuilderSummon extends CommandBuilderNBT return null; } - private NBTBase colorStringSerializer(ColoredString string) + private INBTBase colorStringSerializer(ColoredString string) { if(string.getText() != null && !string.getText().isEmpty()) { - return new NBTTagString(string.toString()); + return new NBTTagString(ITextComponent.Serializer.toJson(new TextComponentString(string.toString()))); } return null; @@ -404,9 +376,9 @@ public class BuilderSummon extends CommandBuilderNBT Syntax syntax = new Syntax(); syntax.addRequired("entity_name", Type.RESOURCE_LOCATION); - syntax.addOptional("x", Type.COORDINATE); - syntax.addOptional("y", Type.COORDINATE); - syntax.addOptional("z", Type.COORDINATE); + syntax.addOptional("x", Type.COORDINATE_DOUBLE); + syntax.addOptional("y", Type.COORDINATE_DOUBLE); + syntax.addOptional("z", Type.COORDINATE_DOUBLE); syntax.addOptional("nbt", Type.NBT); return syntax; diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderTag.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderTag.java new file mode 100644 index 0000000..759e1f5 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderTag.java @@ -0,0 +1,88 @@ +package exopandora.worldhandler.builder.impl; + +import exopandora.worldhandler.builder.CommandBuilder; +import exopandora.worldhandler.builder.Syntax; +import exopandora.worldhandler.builder.types.Type; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class BuilderTag extends CommandBuilder +{ + public BuilderTag() + { + + } + + public BuilderTag(String player, EnumMode mode, String name) + { + this.setPlayer(player); + this.setMode(mode); + this.setName(name); + } + + public void setPlayer(String player) + { + this.setNode(0, player); + } + + public String getPlayer() + { + return this.getNodeAsString(0); + } + + public void setMode(EnumMode mode) + { + if(mode != null) + { + this.setNode(1, mode.toString()); + } + } + + public void setName(String name) + { + this.setNode(2, name); + } + + public String getName() + { + return this.getNodeAsString(2); + } + + @Override + public String getCommandName() + { + return "tag"; + } + + @Override + public Syntax getSyntax() + { + Syntax syntax = new Syntax(); + + syntax.addRequired("player", Type.STRING); + syntax.addRequired("add|list|remove", Type.STRING); + syntax.addRequired("name", Type.STRING); + + return syntax; + } + + public BuilderTag getBuilderForMode(EnumMode mode) + { + return new BuilderTag(this.getPlayer(), mode, this.getName()); + } + + @OnlyIn(Dist.CLIENT) + public static enum EnumMode + { + ADD, + LIST, + REMOVE; + + @Override + public String toString() + { + return this.name().toLowerCase(); + } + } +} diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardTeams.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderTeams.java similarity index 66% rename from src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardTeams.java rename to src/main/java/exopandora/worldhandler/builder/impl/BuilderTeams.java index 5de448a..75a0815 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardTeams.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderTeams.java @@ -2,25 +2,16 @@ package exopandora.worldhandler.builder.impl; import javax.annotation.Nullable; +import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; -import exopandora.worldhandler.builder.impl.abstr.BuilderScoreboard; +import exopandora.worldhandler.builder.types.GreedyString; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) -public class BuilderScoreboardTeams extends BuilderScoreboard +@OnlyIn(Dist.CLIENT) +public class BuilderTeams extends CommandBuilder { - public BuilderScoreboardTeams() - { - this.init(); - } - - private void init() - { - this.setNode(0, "teams"); - } - public void setTeam(String name) { String mode = this.getMode(); @@ -30,22 +21,22 @@ public class BuilderScoreboardTeams extends BuilderScoreboard { if(mode.equals("add")) { - this.setNode(3, name); + this.setNode(2, new GreedyString(name)); } } - this.setNode(2, team); + this.setNode(1, team); } public String getMode() { - return this.getNodeAsString(1); + return this.getNodeAsString(0); } @Nullable public String getTeam() { - return this.getNodeAsString(2); + return this.getNodeAsString(1); } public void setMode(String mode) @@ -53,10 +44,10 @@ public class BuilderScoreboardTeams extends BuilderScoreboard String team = this.getTeam(); String player = this.getPlayer(); - if(mode.equals("add") || mode.equals("remove|empty") || mode.equals("join|leave") || mode.equals("option")) + if(mode.equals("add") || mode.equals("remove|empty") || mode.equals("join|leave") || mode.equals("modify")) { this.updateSyntax(this.getSyntax(mode)); - this.setNode(1, mode); + this.setNode(0, mode); if(team != null) { @@ -67,8 +58,6 @@ public class BuilderScoreboardTeams extends BuilderScoreboard { this.setPlayer(player); } - - this.init(); } } @@ -80,7 +69,7 @@ public class BuilderScoreboardTeams extends BuilderScoreboard { if(mode.equals("join|leave")) { - this.setNode(3, player); + this.setNode(2, player); } } } @@ -94,7 +83,7 @@ public class BuilderScoreboardTeams extends BuilderScoreboard { if(mode.equals("join|leave")) { - return this.getNodeAsString(3); + return this.getNodeAsString(2); } } @@ -103,19 +92,19 @@ public class BuilderScoreboardTeams extends BuilderScoreboard public void setRule(String rule) { - if(this.getMode() == null || !this.getMode().equals("option")) + if(this.getMode() == null || !this.getMode().equals("modify")) { - this.setMode("option"); + this.setMode("modify"); } - this.setNode(3, rule); + this.setNode(2, rule); } public String getRule() { - if(this.getMode() == null || this.getMode().equals("option")) + if(this.getMode() == null || this.getMode().equals("modify")) { - return this.getNodeAsString(3); + return this.getNodeAsString(2); } return null; @@ -123,19 +112,19 @@ public class BuilderScoreboardTeams extends BuilderScoreboard public void setValue(String value) { - if(this.getMode() == null || !this.getMode().equals("option")) + if(this.getMode() == null || !this.getMode().equals("modify")) { - this.setMode("option"); + this.setMode("modify"); } - this.setNode(4, value); + this.setNode(3, value); } public String getValue() { - if(this.getMode() == null || this.getMode().equals("option")) + if(this.getMode() == null || this.getMode().equals("modify")) { - return this.getNodeAsString(4); + return this.getNodeAsString(3); } return null; @@ -148,10 +137,9 @@ public class BuilderScoreboardTeams extends BuilderScoreboard { Syntax syntax = new Syntax(); - syntax.addRequired("teams", Type.STRING); syntax.addRequired("add", Type.STRING); syntax.addRequired("name", Type.STRING); - syntax.addOptional("display_name...", Type.STRING); + syntax.addOptional("display_name...", Type.GREEDY_STRING); return syntax; } @@ -159,7 +147,6 @@ public class BuilderScoreboardTeams extends BuilderScoreboard { Syntax syntax = new Syntax(); - syntax.addRequired("teams", Type.STRING); syntax.addRequired("remove|empty", Type.STRING, "remove|empty"); syntax.addRequired("name", Type.STRING); @@ -169,19 +156,17 @@ public class BuilderScoreboardTeams extends BuilderScoreboard { Syntax syntax = new Syntax(); - syntax.addRequired("teams", Type.STRING); syntax.addRequired("join|leave", Type.STRING, "join|leave"); syntax.addRequired("name", Type.STRING); syntax.addOptional("player", Type.STRING); return syntax; } - else if(mode.equals("option")) + else if(mode.equals("modify")) { Syntax syntax = new Syntax(); - syntax.addRequired("teams", Type.STRING); - syntax.addRequired("option", Type.STRING); + syntax.addRequired("modify", Type.STRING); syntax.addRequired("team", Type.STRING); syntax.addRequired("friendlyfire|color|seeFriendlyInvisibles|nametagVisibility|deathMessageVisibility|collisionRule", Type.STRING); syntax.addRequired("value", Type.STRING); @@ -192,28 +177,28 @@ public class BuilderScoreboardTeams extends BuilderScoreboard return null; } - public BuilderScoreboardTeams getBuilderForMode(EnumMode mode) + public BuilderTeams getBuilderForMode(EnumMode mode) { - BuilderScoreboardTeams builder = new BuilderScoreboardTeams(); + BuilderTeams builder = new BuilderTeams(); switch(mode) { case JOIN: case LEAVE: - builder.setNode(1, mode.toString()); + builder.setNode(0, mode.toString()); builder.setTeam(this.getTeam()); builder.setPlayer(this.getPlayer()); break; case REMOVE: case EMPTY: - builder.setNode(1, mode.toString()); + builder.setNode(0, mode.toString()); builder.setTeam(this.getTeam()); break; case ADD: builder.setMode(mode.toString()); builder.setTeam(this.getTeam()); break; - case OPTION: + case MODIFY: builder.setMode(mode.toString()); builder.setTeam(this.getTeam()); builder.setRule(this.getRule()); @@ -231,14 +216,19 @@ public class BuilderScoreboardTeams extends BuilderScoreboard { Syntax syntax = new Syntax(); - syntax.addRequired("teams", Type.STRING); - syntax.addRequired("list|add|remove|empty|join|leave|option", Type.STRING); + syntax.addRequired("list|add|remove|empty|join|leave|modify", Type.STRING); syntax.addOptional("...", Type.STRING); return syntax; } - @SideOnly(Side.CLIENT) + @Override + public String getCommandName() + { + return "team"; + } + + @OnlyIn(Dist.CLIENT) public static enum EnumMode { JOIN, @@ -246,7 +236,7 @@ public class BuilderScoreboardTeams extends BuilderScoreboard REMOVE, EMPTY, ADD, - OPTION; + MODIFY; @Override public String toString() diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderTime.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderTime.java index 2bfd052..75d8465 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderTime.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderTime.java @@ -3,9 +3,10 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +@OnlyIn(Dist.CLIENT) public class BuilderTime extends CommandBuilder { public BuilderTime() @@ -51,7 +52,7 @@ public class BuilderTime extends CommandBuilder return syntax; } - @SideOnly(Side.CLIENT) + @OnlyIn(Dist.CLIENT) public static enum EnumMode { ADD, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderTrigger.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderTrigger.java new file mode 100644 index 0000000..4e1ea6f --- /dev/null +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderTrigger.java @@ -0,0 +1,93 @@ +package exopandora.worldhandler.builder.impl; + +import exopandora.worldhandler.builder.CommandBuilder; +import exopandora.worldhandler.builder.Syntax; +import exopandora.worldhandler.builder.types.Type; +import exopandora.worldhandler.helper.EnumHelper; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class BuilderTrigger extends CommandBuilder +{ + public BuilderTrigger() + { + this.setValue(0); + } + + public BuilderTrigger(String objective, EnumMode mode, int value) + { + this.setObjective(objective); + this.setMode(mode); + this.setValue(value); + } + + public void setObjective(String name) + { + this.setNode(0, name != null ? name.replaceAll(" ", "_") : null); + } + + public String getObjective() + { + return this.getNodeAsString(0); + } + + public void setMode(EnumMode mode) + { + if(mode != null) + { + this.setNode(1, mode.toString()); + } + } + + public EnumMode getMode() + { + return EnumHelper.valueOf(this.getNodeAsString(1), EnumMode.class); + } + + public void setValue(int value) + { + this.setNode(2, value); + } + + public int getValue() + { + return this.getNodeAsInt(2); + } + + @Override + public String getCommandName() + { + return "trigger"; + } + + @Override + public Syntax getSyntax() + { + Syntax syntax = new Syntax(); + + syntax.addRequired("objective", Type.STRING); + syntax.addRequired("add|set", Type.STRING); + syntax.addRequired("value", Type.INT); + + return syntax; + } + + public BuilderTrigger getBuilderForMode(EnumMode mode) + { + return new BuilderTrigger(this.getObjective(), mode, this.getValue()); + } + + @OnlyIn(Dist.CLIENT) + public static enum EnumMode + { + ADD, + SET; + + @Override + public String toString() + { + return this.name().toLowerCase(); + } + } +} diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderWH.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderWH.java index 0183a7c..1d80cba 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderWH.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderWH.java @@ -3,10 +3,10 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderWH extends CommandBuilder { @Override diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderWeather.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderWeather.java index 5818299..8a946b1 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderWeather.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderWeather.java @@ -3,9 +3,10 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +@OnlyIn(Dist.CLIENT) public class BuilderWeather extends CommandBuilder { public BuilderWeather() @@ -51,7 +52,7 @@ public class BuilderWeather extends CommandBuilder return syntax; } - @SideOnly(Side.CLIENT) + @OnlyIn(Dist.CLIENT) public static enum EnumWeather { CLEAR, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderWhitelist.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderWhitelist.java index d0d9ed6..ee5ee36 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderWhitelist.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderWhitelist.java @@ -5,10 +5,10 @@ import javax.annotation.Nullable; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderWhitelist extends CommandBuilder { public BuilderWhitelist() @@ -76,7 +76,7 @@ public class BuilderWhitelist extends CommandBuilder return syntax; } - @SideOnly(Side.CLIENT) + @OnlyIn(Dist.CLIENT) public static enum EnumMode { ADD, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderWorldHandler.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderWorldHandler.java index 141ea41..4a96fc2 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderWorldHandler.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderWorldHandler.java @@ -3,10 +3,10 @@ package exopandora.worldhandler.builder.impl; import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.types.Type; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BuilderWorldHandler extends CommandBuilder { @Override diff --git a/src/main/java/exopandora/worldhandler/builder/impl/abstr/BuilderBlockPos.java b/src/main/java/exopandora/worldhandler/builder/impl/abstr/BuilderBlockPos.java index c0b52c1..0e85e05 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/abstr/BuilderBlockPos.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/abstr/BuilderBlockPos.java @@ -1,11 +1,21 @@ package exopandora.worldhandler.builder.impl.abstr; import exopandora.worldhandler.builder.CommandBuilderNBT; -import exopandora.worldhandler.builder.types.Coordinate; +import exopandora.worldhandler.builder.types.CoordinateInt; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +@OnlyIn(Dist.CLIENT) public abstract class BuilderBlockPos extends CommandBuilderNBT { + private final int offset; + + public BuilderBlockPos(int offset) + { + this.offset = offset; + } + public void setPosition(BlockPos pos) { this.setX(pos.getX()); @@ -13,64 +23,64 @@ public abstract class BuilderBlockPos extends CommandBuilderNBT this.setZ(pos.getZ()); } - public void setX(float x) + public void setX(int x) { - this.setX(new Coordinate(x)); + this.setX(new CoordinateInt(x)); } - public void setY(float y) + public void setY(int y) { - this.setY(new Coordinate(y)); + this.setY(new CoordinateInt(y)); } - public void setZ(float z) + public void setZ(int z) { - this.setZ(new Coordinate(z)); + this.setZ(new CoordinateInt(z)); } - public void setX(Coordinate x) + public void setX(CoordinateInt x) { - this.setNode(0, x); + this.setNode(this.offset, x); } - public void setY(Coordinate y) + public void setY(CoordinateInt y) { - this.setNode(1, y); + this.setNode(this.offset + 1, y); } - public void setZ(Coordinate z) + public void setZ(CoordinateInt z) { - this.setNode(2, z); + this.setNode(this.offset + 2, z); } - public Coordinate getXCoordiante() + public CoordinateInt getXCoordinate() { - return this.getNodeAsCoordinate(0); + return this.getNodeAsCoordinateInt(this.offset); } - public Coordinate getYCoordiante() + public CoordinateInt getYCoordinate() { - return this.getNodeAsCoordinate(1); + return this.getNodeAsCoordinateInt(this.offset + 1); } - public Coordinate getZCoordiante() + public CoordinateInt getZCoordinate() { - return this.getNodeAsCoordinate(2); + return this.getNodeAsCoordinateInt(this.offset + 2); } - public double getX() + public int getX() { - return this.getXCoordiante().getValue(); + return this.getXCoordinate().getValue(); } - public double getY() + public int getY() { - return this.getYCoordiante().getValue(); + return this.getYCoordinate().getValue(); } - public double getZ() + public int getZ() { - return this.getZCoordiante().getValue(); + return this.getZCoordinate().getValue(); } public BlockPos getBlockPos() diff --git a/src/main/java/exopandora/worldhandler/builder/impl/abstr/BuilderDoubleBlockPos.java b/src/main/java/exopandora/worldhandler/builder/impl/abstr/BuilderDoubleBlockPos.java index 94d3c50..1f73b0f 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/abstr/BuilderDoubleBlockPos.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/abstr/BuilderDoubleBlockPos.java @@ -1,13 +1,13 @@ package exopandora.worldhandler.builder.impl.abstr; import exopandora.worldhandler.builder.CommandBuilder; -import exopandora.worldhandler.builder.types.Coordinate; +import exopandora.worldhandler.builder.types.CoordinateInt; import exopandora.worldhandler.helper.BlockHelper; import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public abstract class BuilderDoubleBlockPos extends CommandBuilder { public BuilderDoubleBlockPos() @@ -23,52 +23,49 @@ public abstract class BuilderDoubleBlockPos extends CommandBuilder this.setZ1(pos.getZ()); } - public void setX1(float x) + public void setX1(int x) { - this.setX1(new Coordinate(x)); + this.setX1(new CoordinateInt(x)); } - public void setY1(float y) + public void setY1(int y) { - this.setY1(new Coordinate(y)); + this.setY1(new CoordinateInt(y)); } - public void setZ1(float z) + public void setZ1(int z) { - this.setZ1(new Coordinate(z)); + this.setZ1(new CoordinateInt(z)); } - public void setX1(Coordinate x) + public void setX1(CoordinateInt x) { this.setNode(0, x); - BlockHelper.setPos1(BlockHelper.setX(BlockHelper.getPos1(), x.getValue())); } - public void setY1(Coordinate y) + public void setY1(CoordinateInt y) { this.setNode(1, y); - BlockHelper.setPos1(BlockHelper.setY(BlockHelper.getPos1(), y.getValue())); } - public void setZ1(Coordinate z) + public void setZ1(CoordinateInt z) { this.setNode(2, z); - BlockHelper.setPos1(BlockHelper.setZ(BlockHelper.getPos1(), z.getValue())); } - public Coordinate getX1Coordiante() + public CoordinateInt getX1Coordiante() { - return this.getNodeAsCoordinate(0); + return this.getNodeAsCoordinateInt(0); } - public Coordinate getY1Coordiante() + public CoordinateInt getY1Coordiante() { - return this.getNodeAsCoordinate(1); + return this.getNodeAsCoordinateInt(1); } - public Coordinate getZ1Coordiante() + public CoordinateInt getZ1Coordiante() { - return this.getNodeAsCoordinate(2); + return this.getNodeAsCoordinateInt(2); } public double getX1() @@ -98,52 +95,49 @@ public abstract class BuilderDoubleBlockPos extends CommandBuilder this.setZ2(pos.getZ()); } - public void setX2(float x) + public void setX2(int x) { - this.setX2(new Coordinate(x)); + this.setX2(new CoordinateInt(x)); } - public void setY2(float y) + public void setY2(int y) { - this.setY2(new Coordinate(y)); + this.setY2(new CoordinateInt(y)); } - public void setZ2(float z) + public void setZ2(int z) { - this.setZ2(new Coordinate(z)); + this.setZ2(new CoordinateInt(z)); } - public void setX2(Coordinate x) + public void setX2(CoordinateInt x) { this.setNode(3, x); - BlockHelper.setPos2(BlockHelper.setX(BlockHelper.getPos2(), x.getValue())); } - public void setY2(Coordinate y) + public void setY2(CoordinateInt y) { this.setNode(4, y); - BlockHelper.setPos2(BlockHelper.setY(BlockHelper.getPos2(), y.getValue())); } - public void setZ2(Coordinate z) + public void setZ2(CoordinateInt z) { this.setNode(5, z); - BlockHelper.setPos2(BlockHelper.setZ(BlockHelper.getPos2(), z.getValue())); } - public Coordinate getX2Coordiante() + public CoordinateInt getX2Coordiante() { - return this.getNodeAsCoordinate(3); + return this.getNodeAsCoordinateInt(3); } - public Coordinate getY2Coordiante() + public CoordinateInt getY2Coordiante() { - return this.getNodeAsCoordinate(4); + return this.getNodeAsCoordinateInt(4); } - public Coordinate getZ2Coordiante() + public CoordinateInt getZ2Coordiante() { - return this.getNodeAsCoordinate(5); + return this.getNodeAsCoordinateInt(5); } public double getX2() @@ -165,12 +159,4 @@ public abstract class BuilderDoubleBlockPos extends CommandBuilder { return new BlockPos(this.getX2(), this.getY2(), this.getZ2()); } - - public T addPositionObservers() - { - BlockHelper.addPos1Observer(this::setPosition1); - BlockHelper.addPos2Observer(this::setPosition2); - - return (T) this; - } } diff --git a/src/main/java/exopandora/worldhandler/builder/impl/abstr/BuilderScoreboard.java b/src/main/java/exopandora/worldhandler/builder/impl/abstr/BuilderScoreboard.java index 218b916..6ab306a 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/abstr/BuilderScoreboard.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/abstr/BuilderScoreboard.java @@ -1,10 +1,10 @@ package exopandora.worldhandler.builder.impl.abstr; import exopandora.worldhandler.builder.CommandBuilder; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public abstract class BuilderScoreboard extends CommandBuilder { @Override diff --git a/src/main/java/exopandora/worldhandler/builder/impl/abstr/EnumAttributes.java b/src/main/java/exopandora/worldhandler/builder/impl/abstr/EnumAttributes.java index c07078f..d442cf7 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/abstr/EnumAttributes.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/abstr/EnumAttributes.java @@ -6,10 +6,10 @@ import java.util.function.Function; import java.util.stream.Collectors; import net.minecraft.client.resources.I18n; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public enum EnumAttributes { MAX_HEALTH("generic.maxHealth", EnumOperation.ADDITIVE, Applyable.BOTH), @@ -27,8 +27,9 @@ public enum EnumAttributes private String attribute; private EnumOperation operation; private Applyable applyable; - - public enum Applyable + + @OnlyIn(Dist.CLIENT) + public static enum Applyable { BOTH, PLAYER, @@ -72,7 +73,8 @@ public enum EnumAttributes return this.operation.getOperation().apply(value); } - public enum EnumOperation + @OnlyIn(Dist.CLIENT) + public static enum EnumOperation { ADDITIVE(value -> value, "(+)"), PERCENTAGE(value -> value / 100, "%"); diff --git a/src/main/java/exopandora/worldhandler/builder/types/BlockResourceLocation.java b/src/main/java/exopandora/worldhandler/builder/types/BlockResourceLocation.java new file mode 100644 index 0000000..44e8195 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/builder/types/BlockResourceLocation.java @@ -0,0 +1,133 @@ +package exopandora.worldhandler.builder.types; + +import javax.annotation.Nullable; + +import com.mojang.brigadier.StringReader; +import com.mojang.brigadier.exceptions.CommandSyntaxException; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.command.arguments.BlockStateParser; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.state.IProperty; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; + +@OnlyIn(Dist.CLIENT) +public class BlockResourceLocation extends ItemResourceLocation +{ + private IBlockState state; + + public BlockResourceLocation() + { + this(null); + } + + public BlockResourceLocation(ResourceLocation resource) + { + this(resource, null, null); + } + + public BlockResourceLocation(ResourceLocation resource, IBlockState state, NBTTagCompound nbt) + { + super(resource, nbt); + this.state = this.findState(state, resource); + } + + private IBlockState findState(IBlockState state, ResourceLocation resource) + { + boolean matchOld = this.state != null && this.state.getBlock().getRegistryName().equals(resource); + boolean matchNew = state != null && state.getBlock().getRegistryName().equals(resource); + + if(matchNew) + { + return state; + } + + if(matchOld) + { + return this.state; + } + + if(resource != null && ForgeRegistries.BLOCKS.containsKey(resource)) + { + return ForgeRegistries.BLOCKS.getValue(resource).getDefaultState(); + } + + return null; + } + + @Override + public void setResourceLocation(ResourceLocation resource) + { + super.setResourceLocation(resource); + this.state = this.findState(null, resource); + } + + public IBlockState getState() + { + return this.state; + } + + public > void withState(IProperty property, T value) + { + if(this.state != null && this.state.has(property)) + { + this.state = this.state.with(property, value); + } + } + + @Nullable + public static BlockResourceLocation valueOf(String input) + { + if(input != null) + { + BlockStateParser parser = new BlockStateParser(new StringReader(input), false); + + try + { + parser.parse(true); + } + catch(CommandSyntaxException e) + { + return null; + } + + IBlockState state = parser.getState(); + + if(state != null) + { + return new BlockResourceLocation(state.getBlock().getRegistryName(), state, parser.getNbt()); + } + } + + return null; + } + + @Override + public BlockResourceLocation get() + { + return (BlockResourceLocation) super.get(); + } + + @Override + public String toString() + { + if(this.resource != null && this.state != null) + { + StringBuilder builder = new StringBuilder(this.state.toString()); + String block = this.state.getBlock().toString(); + builder.replace(0, block.length(), this.resource.toString()); + + if(this.nbt != null) + { + builder.append(this.nbt.toString()); + } + + return builder.toString(); + } + + return null; + } +} diff --git a/src/main/java/exopandora/worldhandler/builder/types/Coordinate.java b/src/main/java/exopandora/worldhandler/builder/types/Coordinate.java index 64f0be2..557bed2 100644 --- a/src/main/java/exopandora/worldhandler/builder/types/Coordinate.java +++ b/src/main/java/exopandora/worldhandler/builder/types/Coordinate.java @@ -1,63 +1,104 @@ package exopandora.worldhandler.builder.types; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import java.util.function.Function; -@SideOnly(Side.CLIENT) -public class Coordinate +import javax.annotation.Nullable; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public abstract class Coordinate implements ICoordinate { - private double value; - private boolean relative; + protected T value; + protected CoordinateType type; - public Coordinate() + public Coordinate(T value) { - this(0, true); + this(value, CoordinateType.ABSOLUTE); } - public Coordinate(double value) + public Coordinate(T value, CoordinateType type) { - this(value, false); - } - - public Coordinate(double value, boolean relative) - { - this.relative = relative; this.value = value; + this.type = type; } - public void setValue(double value) + public void setValue(T value) { this.value = value; } - public double getValue() + public T getValue() { return this.value; } - public void setRelative(boolean relative) + public void setType(CoordinateType type) { - this.relative = relative; + this.type = type; } - public boolean isRelative() + public CoordinateType getType() { - return this.relative; - } - - public static Coordinate valueOf(String value) - { - if(value.startsWith("~")) - { - return new Coordinate(Double.parseDouble(value.substring(1)), true); - } - - return new Coordinate(Double.parseDouble(value), false); + return this.type; } @Override public String toString() { - return String.valueOf(this.relative ? (this.value != 0 ? "~" + this.value : "~") : this.value); + return this.type.format(this.value, this.zero()); + } + + @Nullable + public static > U parse(U coordiante, String input, Function parser) + { + for(CoordinateType type : CoordinateType.values()) + { + if(!type.prefix.isEmpty() && input.startsWith(type.prefix)) + { + String numbers = input.substring(type.prefix.length()); + + coordiante.setType(type); + coordiante.setValue(numbers.isEmpty() ? coordiante.zero() : parser.apply(numbers)); + + return coordiante; + } + } + + coordiante.setType(CoordinateType.ABSOLUTE); + coordiante.setValue(parser.apply(input)); + + return coordiante; + } + + @OnlyIn(Dist.CLIENT) + public static enum CoordinateType + { + ABSOLUTE(""), + GLOBAL("~"), + LOCAL("^"); + + private final String prefix; + + private CoordinateType(String prefix) + { + this.prefix = prefix; + } + + public String format(T value, T zero) + { + if(value == null || value.equals(zero)) + { + if(this.prefix.isEmpty()) + { + return zero.toString(); + } + + return this.prefix; + } + + return this.prefix + value; + } } } diff --git a/src/main/java/exopandora/worldhandler/builder/types/CoordinateDouble.java b/src/main/java/exopandora/worldhandler/builder/types/CoordinateDouble.java new file mode 100644 index 0000000..e274243 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/builder/types/CoordinateDouble.java @@ -0,0 +1,39 @@ +package exopandora.worldhandler.builder.types; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class CoordinateDouble extends Coordinate +{ + public CoordinateDouble() + { + super(0.0); + } + + public CoordinateDouble(Double value) + { + super(value); + } + + public CoordinateDouble(CoordinateType type) + { + super(0.0, type); + } + + public CoordinateDouble(Double value, CoordinateType type) + { + super(value, type); + } + + public static CoordinateDouble valueOf(String value) + { + return Coordinate.parse(new CoordinateDouble(), value, Double::parseDouble); + } + + @Override + public Double zero() + { + return 0.0; + } +} diff --git a/src/main/java/exopandora/worldhandler/builder/types/CoordinateInt.java b/src/main/java/exopandora/worldhandler/builder/types/CoordinateInt.java new file mode 100644 index 0000000..c16c9bb --- /dev/null +++ b/src/main/java/exopandora/worldhandler/builder/types/CoordinateInt.java @@ -0,0 +1,39 @@ +package exopandora.worldhandler.builder.types; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class CoordinateInt extends Coordinate +{ + public CoordinateInt() + { + super(0); + } + + public CoordinateInt(Integer value) + { + super(value); + } + + public CoordinateInt(CoordinateType type) + { + super(0, type); + } + + public CoordinateInt(Integer value, CoordinateType type) + { + super(value, type); + } + + public static CoordinateInt valueOf(String value) + { + return Coordinate.parse(new CoordinateInt(), value, Integer::parseInt); + } + + @Override + public Integer zero() + { + return 0; + } +} diff --git a/src/main/java/exopandora/worldhandler/builder/types/GreedyString.java b/src/main/java/exopandora/worldhandler/builder/types/GreedyString.java new file mode 100644 index 0000000..812fe21 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/builder/types/GreedyString.java @@ -0,0 +1,54 @@ +package exopandora.worldhandler.builder.types; + +import javax.annotation.Nullable; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class GreedyString +{ + private String string; + + public GreedyString(String string) + { + this.string = string; + } + + public String getString() + { + return this.string; + } + + public void setString(String string) + { + this.string = string; + } + + public boolean isEmpty() + { + if(this.string == null) + { + return true; + } + + return this.string.isEmpty(); + } + + @Nullable + public static GreedyString valueOf(String string) + { + if(string != null && string.matches("\"(.*)\"")) + { + return new GreedyString(string.substring(1, string.length() - 1)); + } + + return null; + } + + @Override + public String toString() + { + return "\"" + this.string + "\""; + } +} diff --git a/src/main/java/exopandora/worldhandler/builder/types/ICoordinate.java b/src/main/java/exopandora/worldhandler/builder/types/ICoordinate.java new file mode 100644 index 0000000..22ac96b --- /dev/null +++ b/src/main/java/exopandora/worldhandler/builder/types/ICoordinate.java @@ -0,0 +1,10 @@ +package exopandora.worldhandler.builder.types; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public interface ICoordinate +{ + T zero(); +} diff --git a/src/main/java/exopandora/worldhandler/builder/types/ItemResourceLocation.java b/src/main/java/exopandora/worldhandler/builder/types/ItemResourceLocation.java new file mode 100644 index 0000000..c4ab21e --- /dev/null +++ b/src/main/java/exopandora/worldhandler/builder/types/ItemResourceLocation.java @@ -0,0 +1,104 @@ +package exopandora.worldhandler.builder.types; + +import javax.annotation.Nullable; + +import com.mojang.brigadier.exceptions.CommandSyntaxException; + +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class ItemResourceLocation +{ + protected ResourceLocation resource; + protected NBTTagCompound nbt; + + public ItemResourceLocation() + { + this(null, null); + } + + public ItemResourceLocation(ResourceLocation resource) + { + this(resource, null); + } + + public ItemResourceLocation(ResourceLocation resource, NBTTagCompound nbt) + { + this.resource = resource; + this.nbt = nbt; + } + + public ResourceLocation getResourceLocation() + { + return this.resource; + } + + public void setResourceLocation(ResourceLocation resource) + { + this.resource = resource; + } + + public NBTTagCompound getNBT() + { + return this.nbt; + } + + public void setNBT(NBTTagCompound nbt) + { + this.nbt = nbt; + } + + public ItemResourceLocation get() + { + if(this.resource != null) + { + return this; + } + + return null; + } + + @Nullable + public static ItemResourceLocation valueOf(String input) + { + int start = input.indexOf("{"); + ResourceLocation resource = new ResourceLocation(input.substring(0, start)); + NBTTagCompound nbt = null; + + if(start > 0) + { + try + { + nbt = JsonToNBT.getTagFromJson(input.substring(start, input.lastIndexOf("}") + 1)); + } + catch(CommandSyntaxException e) + { + return null; + } + } + + return new ItemResourceLocation(resource, nbt); + } + + @Override + public String toString() + { + if(this.resource != null) + { + StringBuilder builder = new StringBuilder(this.resource.toString()); + + if(this.nbt != null) + { + builder.append(this.nbt.toString()); + } + + return builder.toString(); + } + + return null; + } +} diff --git a/src/main/java/exopandora/worldhandler/builder/types/Level.java b/src/main/java/exopandora/worldhandler/builder/types/Level.java deleted file mode 100644 index 17e1805..0000000 --- a/src/main/java/exopandora/worldhandler/builder/types/Level.java +++ /dev/null @@ -1,52 +0,0 @@ -package exopandora.worldhandler.builder.types; - -import javax.annotation.Nullable; - -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class Level -{ - private int level; - - public Level() - { - this(0); - } - - public Level(int level) - { - this.level = level; - } - - public int getLevel() - { - return this.level; - } - - public void setLevel(int level) - { - this.level = level; - } - - @Nullable - public static Level valueOf(String value) - { - if(value != null) - { - if(value.matches("[-]?[0-9]+[Ll]?")) - { - return new Level(Integer.valueOf(value.replaceAll("[lL]$", ""))); - } - } - - return null; - } - - @Override - public String toString() - { - return this.level + "L"; - } -} \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/builder/types/TargetSelector.java b/src/main/java/exopandora/worldhandler/builder/types/TargetSelector.java index c27e711..c1b47f5 100644 --- a/src/main/java/exopandora/worldhandler/builder/types/TargetSelector.java +++ b/src/main/java/exopandora/worldhandler/builder/types/TargetSelector.java @@ -7,10 +7,10 @@ import java.util.stream.Collectors; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class TargetSelector { private final Map values = new HashMap(); @@ -20,8 +20,9 @@ public class TargetSelector { this.values.put(id.toLowerCase(), value); } - + @Nullable + @SuppressWarnings("unchecked") public T get(String id) { return (T) this.values.get(id); diff --git a/src/main/java/exopandora/worldhandler/builder/types/Type.java b/src/main/java/exopandora/worldhandler/builder/types/Type.java index 5dba84e..786d956 100644 --- a/src/main/java/exopandora/worldhandler/builder/types/Type.java +++ b/src/main/java/exopandora/worldhandler/builder/types/Type.java @@ -4,14 +4,15 @@ import java.util.function.Function; import javax.annotation.Nullable; +import com.mojang.brigadier.exceptions.CommandSyntaxException; + import net.minecraft.nbt.JsonToNBT; -import net.minecraft.nbt.NBTException; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public enum Type { SHORT(Short::valueOf), @@ -22,11 +23,14 @@ public enum Type LONG(Long::valueOf), BOOLEAN(Boolean::valueOf), STRING(String::valueOf), + GREEDY_STRING(GreedyString::valueOf), RESOURCE_LOCATION(Type::parseResourceLocation), + ITEM_RESOURCE_LOCATION(ItemResourceLocation::valueOf), + BLOCK_RESOURCE_LOCATION(BlockResourceLocation::valueOf), NBT(Type::parseNBTTagCompound), - COORDINATE(Coordinate::valueOf), - TARGET_SELECTOR(TargetSelector::valueOf), - LEVEL(Level::valueOf); + COORDINATE_INT(CoordinateInt::valueOf), + COORDINATE_DOUBLE(CoordinateDouble::valueOf), + TARGET_SELECTOR(TargetSelector::valueOf); private final Function parser; @@ -36,6 +40,7 @@ public enum Type } @Nullable + @SuppressWarnings("unchecked") public T parse(String object) { return (T) this.parser.apply(object); @@ -56,7 +61,7 @@ public enum Type { return JsonToNBT.getTagFromJson(value); } - catch(NBTException nbtexception) + catch(CommandSyntaxException e) { return null; } diff --git a/src/main/java/exopandora/worldhandler/command/CommandWH.java b/src/main/java/exopandora/worldhandler/command/CommandWH.java index aa4ec6e..9b46b31 100644 --- a/src/main/java/exopandora/worldhandler/command/CommandWH.java +++ b/src/main/java/exopandora/worldhandler/command/CommandWH.java @@ -1,231 +1,89 @@ package exopandora.worldhandler.command; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.exceptions.CommandSyntaxException; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.impl.BuilderClone; import exopandora.worldhandler.builder.impl.BuilderClone.EnumMask; import exopandora.worldhandler.builder.impl.BuilderFill; -import exopandora.worldhandler.builder.impl.BuilderWH; import exopandora.worldhandler.helper.BlockHelper; -import exopandora.worldhandler.helper.EnumHelper; -import exopandora.worldhandler.helper.ResourceHelper; -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.command.CommandBase; -import net.minecraft.command.CommandException; -import net.minecraft.command.ICommandSender; -import net.minecraft.command.NumberInvalidException; -import net.minecraft.command.WrongUsageException; -import net.minecraft.server.MinecraftServer; +import exopandora.worldhandler.helper.CommandHelper; +import net.minecraft.command.CommandSource; +import net.minecraft.command.Commands; +import net.minecraft.command.arguments.BlockStateArgument; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentString; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.registries.ForgeRegistries; -@SideOnly(Side.CLIENT) -public class CommandWH extends CommandBase +public class CommandWH { - @Override - public String getName() + public static void register(CommandDispatcher dispatcher) { - return "wh"; + dispatcher.register(Commands.literal("wh") + .then(Commands.literal("pos1") + .executes(context -> pos1(context.getSource()))) + .then(Commands.literal("pos2") + .executes(context -> pos2(context.getSource()))) + .then(Commands.literal("fill") + .then(Commands.argument("block", BlockStateArgument.blockState()) + .executes(context -> fill(context.getSource(), StringArgumentType.getString(context, "block"))))) + .then(Commands.literal("replace") + .then(Commands.argument("block", BlockStateArgument.blockState()) + .then(Commands.argument("replace", BlockStateArgument.blockState()) + .executes(context -> replace(context.getSource(), StringArgumentType.getString(context, "block"), StringArgumentType.getString(context, "replace")))))) + .then(Commands.literal("clone") + .then(Commands.literal("replace") + .executes(context -> clone(context.getSource(), EnumMask.REPLACE))) + .then(Commands.literal("masked") + .executes(context -> clone(context.getSource(), EnumMask.MASKED))) + .then(Commands.literal("filtered") + .executes(context -> clone(context.getSource(), EnumMask.FILTERED))))); } - @Override - public int getRequiredPermissionLevel() + private static int pos1(CommandSource source) throws CommandSyntaxException { - return 0; + BlockHelper.setPos1(BlockHelper.getFocusedBlockPos()); + BlockPos pos = BlockHelper.getPos1(); + ResourceLocation block = ForgeRegistries.BLOCKS.getKey(BlockHelper.getBlock(pos)); + CommandHelper.sendFeedback(source, "Set first position to " + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + " (" + block + ")"); + return 1; } - @Override - public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + private static int pos2(CommandSource source) throws CommandSyntaxException { - if(args.length > 0) - { - if(args[0].equals("pos1")) - { - BlockHelper.setPos1(BlockHelper.getFocusedBlockPos()); - sender.sendMessage(new TextComponentString("Set first position to " + BlockHelper.getPos1().getX() + ", " + BlockHelper.getPos1().getY() + ", " + BlockHelper.getPos1().getZ() + " (" + Block.REGISTRY.getNameForObject(BlockHelper.getFocusedBlock()) + ")")); - } - else if(args[0].equals("pos2")) - { - BlockHelper.setPos2(BlockHelper.getFocusedBlockPos()); - sender.sendMessage(new TextComponentString("Set second position to " + BlockHelper.getPos2().getX() + ", " + BlockHelper.getPos2().getY() + ", " + BlockHelper.getPos2().getZ() + " (" + Block.REGISTRY.getNameForObject(BlockHelper.getFocusedBlock()) + ")")); - } - else if(args[0].equals("fill")) - { - final String usage = "/wh fill [meta]"; - - if(args.length > 1) - { - ResourceLocation id = new ResourceLocation(args[1]); - int meta = 0; - - if(args.length > 2) - { - try - { - meta = Integer.parseInt(args[2]); - } - catch(Exception e) - { - throw new WrongUsageException(usage); - } - } - - if(!ResourceHelper.isRegisteredBlock(id.toString())) - { - throw new NumberInvalidException(usage); - } - - BuilderFill builder = new BuilderFill(); - builder.setBlock1(id); - builder.setMeta1(meta); - - WorldHandler.sendCommand(builder); - } - else - { - throw new WrongUsageException(usage); - } - } - else if(args[0].equals("replace")) - { - final String usage = "/wh replace [meta2]"; - - if(args.length > 1) - { - ResourceLocation id1 = new ResourceLocation(args[1]); - - if(args.length > 2) - { - ResourceLocation id2 = new ResourceLocation(args[3]); - int meta1 = 0; - int meta2 = 0; - - try - { - meta1 = Integer.parseInt(args[2]); - } - catch(Exception e) - { - throw new WrongUsageException(usage); - } - - if(args.length > 4) - { - try - { - meta2 = Integer.parseInt(args[4]); - } - catch(Exception e) - { - throw new WrongUsageException(usage); - } - } - - if(!ResourceHelper.isRegisteredBlock(id1.toString()) || !ResourceHelper.isRegisteredBlock(id2.toString())) - { - throw new WrongUsageException(usage); - } - - BuilderFill builder = new BuilderFill(); - builder.setPosition1(BlockHelper.getPos1()); - builder.setPosition2(BlockHelper.getPos2()); - builder.setBlock1(id1); - builder.setMeta1(meta1); - builder.setBlock2(id2); - builder.setMeta2(meta2); - - Minecraft.getMinecraft().player.sendChatMessage(builder.getBuilderForReplace().toActualCommand()); - } - else - { - throw new WrongUsageException(usage); - } - } - else - { - throw new WrongUsageException(usage); - } - } - else if(args[0].equals("clone")) - { - final String usage = "/wh clone [" + String.join("|", Arrays.stream(EnumMask.MASKED.values()).map(EnumMask::toString).collect(Collectors.toList())) + "]"; - EnumMask mask = EnumMask.MASKED; - - if(args.length > 1) - { - mask = EnumHelper.valueOf(EnumMask.class, args[1]); - } - - if(mask == null) - { - throw new WrongUsageException(usage); - } - - BuilderClone builder = new BuilderClone(); - builder.setPosition1(BlockHelper.getPos1()); - builder.setPosition2(BlockHelper.getPos2()); - builder.setMask(mask); - - Minecraft.getMinecraft().player.sendChatMessage(builder.toActualCommand()); - } - else - { - throw new WrongUsageException(new BuilderWH().toCommand()); - } - } - else - { - throw new WrongUsageException(new BuilderWH().toCommand()); - } - } - - @Override - public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) - { - if(args.length == 1) - { - return this.getListOfStringsMatchingLastWord(args, new String[]{"pos1", "pos2", "fill", "replace", "clone"}); - } - else if(args.length == 2) - { - if(args[0].equals("fill") || args[0].equals("replace")) - { - return this.getListOfStringsMatchingLastWord(args, Block.REGISTRY.getKeys()); - } - else if(args[0].equals("clone")) - { - return this.getListOfStringsMatchingLastWord(args, new String[]{"replace", "masked", "filtered"}); - } - } - else if(args.length == 3) - { - if(args[0].equals("fill") || args[0].equals("replace")) - { - return this.getListOfStringsMatchingLastWord(args, new String[] {"0"}); - } - } - else if(args.length == 4) - { - if(args[0].equals("replace")) - { - return this.getListOfStringsMatchingLastWord(args, Block.REGISTRY.getKeys()); - } - } - - return Collections.emptyList(); + BlockHelper.setPos2(BlockHelper.getFocusedBlockPos()); + BlockPos pos = BlockHelper.getPos2(); + ResourceLocation block = ForgeRegistries.BLOCKS.getKey(BlockHelper.getBlock(pos)); + CommandHelper.sendFeedback(source, "Set second position to " + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + " (" + block + ")"); + return 1; } - @Override - public String getUsage(ICommandSender sender) + private static int fill(CommandSource source, String block) { - return new BuilderWH().toCommand(); + BuilderFill builder = new BuilderFill(); + builder.setBlock1(block); + CommandHelper.sendCommand(builder); + return 1; } -} \ No newline at end of file + + private static int replace(CommandSource source, String block, String replace) + { + BuilderFill builder = new BuilderFill(); + builder.setPosition1(BlockHelper.getPos1()); + builder.setPosition2(BlockHelper.getPos2()); + builder.setBlock1(block); + builder.setBlock2(replace); + CommandHelper.sendCommand(builder); + return 1; + } + + private static int clone(CommandSource source, EnumMask mask) + { + BuilderClone builder = new BuilderClone(); + builder.setPosition1(BlockHelper.getPos1()); + builder.setPosition2(BlockHelper.getPos2()); + builder.setMask(mask); + return 1; + } +} diff --git a/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java b/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java index 404efc4..9ec95b1 100644 --- a/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java +++ b/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java @@ -1,100 +1,51 @@ package exopandora.worldhandler.command; -import java.util.Collections; -import java.util.List; +import org.apache.maven.artifact.versioning.ComparableVersion; -import com.mojang.realmsclient.gui.ChatFormatting; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.exceptions.CommandSyntaxException; import exopandora.worldhandler.Main; -import exopandora.worldhandler.WorldHandler; -import exopandora.worldhandler.builder.impl.BuilderWorldHandler; -import exopandora.worldhandler.event.EventListener; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; import net.minecraft.client.Minecraft; -import net.minecraft.command.CommandBase; -import net.minecraft.command.CommandException; -import net.minecraft.command.ICommandSender; -import net.minecraft.command.WrongUsageException; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentString; -import net.minecraftforge.common.ForgeVersion; -import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.versioning.ComparableVersion; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraft.command.CommandSource; +import net.minecraft.command.Commands; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.VersionChecker; -@SideOnly(Side.CLIENT) -public class CommandWorldHandler extends CommandBase +public class CommandWorldHandler { - @Override - public String getName() + public static void register(CommandDispatcher dispatcher) { - return "worldhandler"; + dispatcher.register(Commands.literal("worldhandler") + .then(Commands.literal("help") + .executes(context -> help(context.getSource()))) + .then(Commands.literal("display") + .executes(context -> display())) + .then(Commands.literal("version") + .executes(context -> version(context.getSource())))); } - @Override - public int getRequiredPermissionLevel() + private static int help(CommandSource source) throws CommandSyntaxException { - return 0; + CommandHelper.sendFeedback(source, "/worldhandler help"); + CommandHelper.sendFeedback(source, "/worldhandler display"); + CommandHelper.sendFeedback(source, "/worldhandler version"); + return 1; } - @Override - public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + private static int display() throws CommandSyntaxException { - if(args.length > 0) - { - if(args[0].equalsIgnoreCase("help")) - { - this.printHelp(sender); - } - else if(args[0].equalsIgnoreCase("display")) - { - Minecraft.getMinecraft().addScheduledTask(EventListener::displayGui); - } - else if(args[0].equalsIgnoreCase("version")) - { - sender.sendMessage(new TextComponentString("Installed: $mcversion-$version")); - ComparableVersion target = ForgeVersion.getResult(Loader.instance().getIndexedModList().get(Main.MODID)).target; - sender.sendMessage(new TextComponentString("Latest: $mcversion-" + (target != null ? target : "$version"))); - } - else - { - throw new WrongUsageException(this.getUsage(sender)); - } - } - else if(args.length == 0) - { - this.printHelp(sender); - } - else - { - throw new WrongUsageException(this.getUsage(sender)); - } + Minecraft.getInstance().addScheduledTask(ActionHelper::displayGui); + return 1; } - private void printHelp(ICommandSender player) + private static int version(CommandSource source) throws CommandSyntaxException { - player.sendMessage(new TextComponentString(ChatFormatting.DARK_GREEN + "--- Showing help page 1 of 1 (/worldhandler help) ---")); - player.sendMessage(new TextComponentString("/worldhandler help")); - player.sendMessage(new TextComponentString("/worldhandler display")); - player.sendMessage(new TextComponentString("/worldhandler version")); - player.sendMessage(new TextComponentString(ChatFormatting.GREEN + "Tip: Press '" + WorldHandler.KEY_WORLD_HANDLER.getDisplayName() + "' to open the World Handler")); + CommandHelper.sendFeedback(source, "Installed: $mcversion-$version"); + ComparableVersion target = VersionChecker.getResult(ModList.get().getModContainerById(Main.MODID).get().getModInfo()).target; + CommandHelper.sendFeedback(source, "Latest: " + Main.MC_VERSION + "-" + (target != null ? target : Main.MOD_VERSION)); + return 1; } - - @Override - public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) - { - if(args.length == 1) - { - return this.getListOfStringsMatchingLastWord(args, new String[]{"help", "display", "version"}); - } - - return Collections.emptyList(); - } - - @Override - public String getUsage(ICommandSender sender) - { - return new BuilderWorldHandler().toCommand(); - } -} \ No newline at end of file +} diff --git a/src/main/java/exopandora/worldhandler/command/FakeCommandHandler.java b/src/main/java/exopandora/worldhandler/command/FakeCommandHandler.java deleted file mode 100644 index 68580eb..0000000 --- a/src/main/java/exopandora/worldhandler/command/FakeCommandHandler.java +++ /dev/null @@ -1,45 +0,0 @@ -package exopandora.worldhandler.command; - -import net.minecraft.client.Minecraft; -import net.minecraft.command.CommandHandler; -import net.minecraft.command.ICommand; -import net.minecraft.server.MinecraftServer; -import net.minecraftforge.client.event.ClientChatEvent; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class FakeCommandHandler extends CommandHandler -{ - @Override - protected MinecraftServer getServer() - { - return null; - } - - private void fakeCommand(ICommand command, ClientChatEvent event) - { - Minecraft.getMinecraft().ingameGUI.getChatGUI().addToSentMessages(event.getMessage()); - this.tryExecute(Minecraft.getMinecraft().player, dropFirstString(event.getMessage().split(" ")), command, event.getMessage()); - - if(event != null && event.isCancelable()) - { - event.setCanceled(true); - } - } - - private static String[] dropFirstString(String[] input) - { - String[] string = new String[input.length - 1]; - System.arraycopy(input, 1, string, 0, input.length - 1); - return string; - } - - public void tryCommand(ICommand command, ClientChatEvent event) - { - if(event.getMessage().equals("/" + command.getName()) || event.getMessage().startsWith("/" + command.getName() + " ")) - { - this.fakeCommand(command, event); - } - } -} diff --git a/src/main/java/exopandora/worldhandler/config/Config.java b/src/main/java/exopandora/worldhandler/config/Config.java new file mode 100644 index 0000000..9de0ae8 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/config/Config.java @@ -0,0 +1,124 @@ +package exopandora.worldhandler.config; + +import java.util.List; + +import org.apache.commons.lang3.tuple.Pair; + +import com.electronwill.nightconfig.core.file.CommentedFileConfig; + +import exopandora.worldhandler.util.UtilKeyBinding; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.config.ModConfig.Type; + +public class Config +{ + public static final ForgeConfigSpec CLIENT_SPEC; + public static final ClientConfig CLIENT; + + private static ModConfig MOD_CONFIG; + private static CommentedFileConfig CONFIG_DATA; + + static + { + Pair pair = new ForgeConfigSpec.Builder().configure(ClientConfig::new); + CLIENT_SPEC = pair.getRight(); + CLIENT = pair.getLeft(); + } + + @OnlyIn(Dist.CLIENT) + public static class ClientConfig + { + private final ConfigCategorySettings settings; + private final ConfigCategoryButcher butcher; + private final ConfigCategorySkin skin; + private final ConfigCategorySliders sliders; + + public ClientConfig(ForgeConfigSpec.Builder builder) + { + this.settings = new ConfigCategorySettings(builder); + this.butcher = new ConfigCategoryButcher(builder); + this.skin = new ConfigCategorySkin(builder); + this.sliders = new ConfigCategorySliders(builder); + } + + public void read() + { + this.getSettings().read(); + this.getButcher().read(); + this.getSkin().read(); + this.getSliders().read(); + } + + public ConfigCategorySettings getSettings() + { + return this.settings; + } + + public ConfigCategoryButcher getButcher() + { + return this.butcher; + } + + public ConfigCategorySkin getSkin() + { + return this.skin; + } + + public ConfigCategorySliders getSliders() + { + return this.sliders; + } + } + + public static ConfigCategorySettings getSettings() + { + return Config.CLIENT.getSettings(); + } + + public static ConfigCategoryButcher getButcher() + { + return Config.CLIENT.getButcher(); + } + + public static ConfigCategorySkin getSkin() + { + return Config.CLIENT.getSkin(); + } + + public static ConfigCategorySliders getSliders() + { + return Config.CLIENT.getSliders(); + } + + protected static void set(ForgeConfigSpec.ConfigValue configValue, T value) + { + if(configValue != null && value != null && (!value.equals(configValue.get()) || configValue.get() instanceof List)) + { + Config.CONFIG_DATA.set(configValue.getPath(), value); + } + } + + public static void configLoad(ModConfig.Loading event) + { + if(event.getConfig().getType().equals(Type.CLIENT)) + { + Config.MOD_CONFIG = event.getConfig(); + Config.CONFIG_DATA = (CommentedFileConfig) Config.MOD_CONFIG.getConfigData(); + Config.CLIENT.read(); + } + } + + public static void configReload(ModConfig.ConfigReloading event) + { + if(event.getConfig().getType().equals(Type.CLIENT) && Config.CONFIG_DATA != null) + { + Config.CONFIG_DATA.load(); + Config.CLIENT.read(); + + UtilKeyBinding.updatePosKeys(); + } + } +} diff --git a/src/main/java/exopandora/worldhandler/config/ConfigButcher.java b/src/main/java/exopandora/worldhandler/config/ConfigButcher.java deleted file mode 100644 index e58dbae..0000000 --- a/src/main/java/exopandora/worldhandler/config/ConfigButcher.java +++ /dev/null @@ -1,45 +0,0 @@ -package exopandora.worldhandler.config; - -import java.util.HashMap; -import java.util.Map; - -import exopandora.worldhandler.helper.EntityHelper; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.EntityList; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ConfigButcher -{ - private static Map ENTITIES = new HashMap(); - - public static final String CATEGORY = "butcher"; - - public static void load(Configuration config) - { - for(ResourceLocation location : EntityList.ENTITY_EGGS.keySet()) - { - String entity = EntityHelper.getEntityName(location); - String translationKey = "entity." + entity + ".name"; - String translation = I18n.format(translationKey); - - if(!translation.equals(translationKey)) - { - ENTITIES.put(entity, config.getBoolean(entity, CATEGORY, false, I18n.format("gui.worldhandler.config.comment.butcher", translation), translationKey)); - } - } - - if(config.hasChanged()) - { - config.save(); - } - } - - public static Map getEntitiyMap() - { - return ENTITIES; - } -} diff --git a/src/main/java/exopandora/worldhandler/config/ConfigCategoryButcher.java b/src/main/java/exopandora/worldhandler/config/ConfigCategoryButcher.java new file mode 100644 index 0000000..5a1ddbc --- /dev/null +++ b/src/main/java/exopandora/worldhandler/config/ConfigCategoryButcher.java @@ -0,0 +1,93 @@ +package exopandora.worldhandler.config; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; +import net.minecraftforge.registries.ForgeRegistries; + +@OnlyIn(Dist.CLIENT) +public class ConfigCategoryButcher +{ + private final List entities = new ArrayList(); + + private final ConfigValue> valueEntities; + + public ConfigCategoryButcher(ForgeConfigSpec.Builder builder) + { + builder.push("butcher"); + + this.valueEntities = builder.defineList("entities", Collections.emptyList(), this::isValid); + + builder.pop(); + } + + public void read() + { + this.entities.clear(); + this.entities.addAll(this.valueEntities.get()); + } + + private void write() + { + Config.set(this.valueEntities, this.entities); + } + + public List getEntities() + { + List list = new ArrayList(); + + for(String entity : this.entities) + { + ResourceLocation resource = ResourceLocation.makeResourceLocation(entity); + + if(resource != null) + { + list.add(resource); + } + } + + return list; + } + + public boolean containsEntity(ResourceLocation entity) + { + return this.entities.contains(entity.toString()); + } + + public void addEntity(ResourceLocation entity) + { + if(this.isValid(entity)) + { + this.entities.add(entity.toString()); + this.write(); + } + } + + public boolean removeEntity(ResourceLocation entity) + { + boolean removed = this.entities.remove(entity.toString()); + + if(removed) + { + this.write(); + } + + return removed; + } + + private boolean isValid(Object string) + { + if(string != null) + { + return ForgeRegistries.ENTITIES.containsKey(ResourceLocation.makeResourceLocation(string.toString())); + } + + return false; + } +} diff --git a/src/main/java/exopandora/worldhandler/config/ConfigCategorySettings.java b/src/main/java/exopandora/worldhandler/config/ConfigCategorySettings.java new file mode 100644 index 0000000..1772764 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/config/ConfigCategorySettings.java @@ -0,0 +1,320 @@ +package exopandora.worldhandler.config; + +import java.util.Arrays; + +import net.minecraft.client.resources.I18n; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.common.ForgeConfigSpec.BooleanValue; +import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; +import net.minecraftforge.common.ForgeConfigSpec.IntValue; + +@OnlyIn(Dist.CLIENT) +public class ConfigCategorySettings +{ + private boolean commandSyntax; + private boolean shortcuts; + private boolean shortcutKeys; + private boolean tooltips; + private boolean watch; + private boolean smoothWatch; + private boolean pause; + private boolean customTimes; + private boolean permissionQuery; + private boolean highlightBlocks; + private int dawn; + private int noon; + private int sunset; + private int midnight; + private String blockPlacingMode; + + private final BooleanValue valueCommandSyntax; + private final BooleanValue valueShortcuts; + private final BooleanValue valueShortcutKeys; + private final BooleanValue valueTooltips; + private final BooleanValue valueWatch; + private final BooleanValue valueSmoothWatch; + private final BooleanValue valuePause; + private final BooleanValue valueCustomTimes; + private final BooleanValue valuePermissionQuery; + private final BooleanValue valueHighlightBlocks; + private final IntValue valueDawn; + private final IntValue valueNoon; + private final IntValue valueSunset; + private final IntValue valueMidnight; + private final ConfigValue valueBlockPlacingMode; + + public ConfigCategorySettings(ForgeConfigSpec.Builder builder) + { + builder.push("settings"); + + this.valueCommandSyntax = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.command_syntax")) + .translation("gui.worldhandler.config.key.settings.command_syntax") + .define("command_syntax", false); + this.valueShortcuts = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.shortcuts")) + .translation("gui.worldhandler.config.key.settings.shortcuts") + .define("shortcuts", false); + this.valueShortcutKeys = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.key_shortcuts")) + .translation("gui.worldhandler.config.key.settings.key_shortcuts") + .define("key_shortcuts", false); + this.valueTooltips = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.tooltips")) + .translation("gui.worldhandler.config.key.settings.tooltips") + .define("tooltips", true); + this.valueWatch = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.watch")) + .translation("gui.worldhandler.config.key.settings.watch") + .define("watch", true); + this.valueSmoothWatch = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.smooth_watch")) + .translation("gui.worldhandler.config.key.settings.smooth_watch") + .define("smooth_watch", true); + this.valuePause = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.pause_game")) + .translation("gui.worldhandler.config.key.settings.pause_game") + .define("pause_game", false); + this.valueCustomTimes = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.custom_times")) + .translation("gui.worldhandler.config.key.settings.custom_times") + .define("custom_times", false); + this.valuePermissionQuery = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.permission_query")) + .translation("gui.worldhandler.config.key.settings.permission_query") + .define("permission_query", true); + this.valueHighlightBlocks = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.highlight_blocks")) + .translation("gui.worldhandler.config.key.settings.highlight_blocks") + .define("highlight_blocks", true); + + this.valueDawn = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.custom_time_dawn")) + .translation("gui.worldhandler.config.key.settings.custom_time_dawn") + .defineInRange("custom_time_dawn", 1000, 0, 24000); + this.valueNoon = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.custom_time_noon")) + .translation("gui.worldhandler.config.key.settings.custom_time_noon") + .defineInRange("custom_time_noon", 6000, 0, 24000); + this.valueSunset = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.custom_time_sunset")) + .translation("gui.worldhandler.config.key.settings.custom_time_sunset") + .defineInRange("custom_time_sunset", 12500, 0, 24000); + this.valueMidnight = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.custom_time_midnight")) + .translation("gui.worldhandler.config.key.settings.custom_time_midnight") + .defineInRange("custom_time_midnight", 18000, 0, 24000); + + this.valueBlockPlacingMode = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.block_placing_mode")) + .translation("gui.worldhandler.config.key.settings.block_placing_mode") + .defineInList("block_placing_mode", "keep", Arrays.asList("keep", "replace", "destroy")); + + builder.pop(); + } + + public void read() + { + this.commandSyntax = this.valueCommandSyntax.get(); + this.shortcuts = this.valueShortcuts.get(); + this.shortcutKeys = this.valueShortcutKeys.get(); + this.tooltips = this.valueTooltips.get(); + this.watch = this.valueWatch.get(); + this.smoothWatch = this.valueSmoothWatch.get(); + this.pause = this.valuePause.get(); + this.customTimes = this.valueCustomTimes.get(); + this.permissionQuery = this.valuePermissionQuery.get(); + this.highlightBlocks = this.valueHighlightBlocks.get(); + this.dawn = this.valueDawn.get(); + this.noon = this.valueNoon.get(); + this.sunset = this.valueSunset.get(); + this.midnight = this.valueMidnight.get(); + this.blockPlacingMode = this.valueBlockPlacingMode.get(); + } + + private void write() + { + Config.set(this.valueCommandSyntax, this.commandSyntax); + Config.set(this.valueShortcuts, this.shortcuts); + Config.set(this.valueShortcutKeys, this.shortcutKeys); + Config.set(this.valueTooltips, this.tooltips); + Config.set(this.valueWatch, this.watch); + Config.set(this.valueSmoothWatch, this.smoothWatch); + Config.set(this.valuePause, this.pause); + Config.set(this.valueCustomTimes, this.customTimes); + Config.set(this.valuePermissionQuery, this.permissionQuery); + Config.set(this.valueHighlightBlocks, this.highlightBlocks); + Config.set(this.valueDawn, this.dawn); + Config.set(this.valueNoon, this.noon); + Config.set(this.valueSunset, this.sunset); + Config.set(this.valueMidnight, this.midnight); + Config.set(this.valueBlockPlacingMode, this.blockPlacingMode); + } + + public boolean commandSyntax() + { + return this.commandSyntax; + } + + public void setCommandSyntax(boolean enabled) + { + this.commandSyntax = enabled; + this.write(); + } + + public boolean shortcuts() + { + return this.shortcuts; + } + + public void setShortcuts(boolean enabled) + { + this.shortcuts = enabled; + this.write(); + } + + public boolean shortcutKeys() + { + return this.shortcutKeys; + } + + public void setShortcutKeys(boolean enabled) + { + this.shortcutKeys = enabled; + this.write(); + } + + public boolean tooltips() + { + return this.tooltips; + } + + public void setTooltips(boolean enabled) + { + this.tooltips = enabled; + this.write(); + } + + public boolean watch() + { + return this.watch; + } + + public void setWatch(boolean enabled) + { + this.watch = enabled; + this.write(); + } + + public boolean smoothWatch() + { + return this.smoothWatch; + } + + public void setSmoothWatch(boolean enabled) + { + this.smoothWatch = enabled; + this.write(); + } + + public boolean pause() + { + return this.pause; + } + + public void setPause(boolean enabled) + { + this.pause = enabled; + this.write(); + } + + public boolean customTimes() + { + return this.customTimes; + } + + public void setCustomTimes(boolean enabled) + { + this.customTimes = enabled; + this.write(); + } + + public boolean permissionQuery() + { + return this.permissionQuery; + } + + public void setPermissionQuery(boolean enabled) + { + this.permissionQuery = enabled; + this.write(); + } + + public boolean highlightBlocks() + { + return this.highlightBlocks; + } + + public void setHighlightBlocks(boolean enabled) + { + this.highlightBlocks = enabled; + this.write(); + } + + public int getDawn() + { + return this.dawn; + } + + public void setDawn(int ticks) + { + this.dawn = ticks; + this.write(); + } + + public int getNoon() + { + return this.noon; + } + + public void setNoon(int ticks) + { + this.noon = ticks; + this.write(); + } + + public int getSunset() + { + return this.sunset; + } + + public void setSunset(int ticks) + { + this.sunset = ticks; + this.write(); + } + + public int getMidnight() + { + return this.midnight; + } + + public void setMidnight(int ticks) + { + this.midnight = ticks; + this.write(); + } + + public String getBlockPlacingMode() + { + return this.blockPlacingMode; + } + + public void setBlockPlacingMode(String mode) + { + this.blockPlacingMode = mode; + this.write(); + } +} \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/config/ConfigCategorySkin.java b/src/main/java/exopandora/worldhandler/config/ConfigCategorySkin.java new file mode 100644 index 0000000..8aa5ca8 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/config/ConfigCategorySkin.java @@ -0,0 +1,343 @@ +package exopandora.worldhandler.config; + +import java.util.Arrays; + +import net.minecraft.client.resources.I18n; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.common.ForgeConfigSpec.BooleanValue; +import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; +import net.minecraftforge.common.ForgeConfigSpec.IntValue; + +@OnlyIn(Dist.CLIENT) +public class ConfigCategorySkin +{ + private int iconSize; + private int labelColor; + private int headlineColor; + private int backgroundRed; + private int backgroundGreen; + private int backgroundBlue; + private int backgroundAlpha; + private int buttonRed; + private int buttonGreen; + private int buttonBlue; + private int buttonAlpha; + private String type; + private boolean sharpEdges; + private boolean drawBackground; + + private final ConfigValue valueIconSize; + private final IntValue valueLabelColor; + private final IntValue valueHeadlineColor; + private final IntValue valueBackgroundRed; + private final IntValue valueBackgroundGreen; + private final IntValue valueBackgroundBlue; + private final IntValue valueBackgroundAlpha; + private final IntValue valueButtonRed; + private final IntValue valueButtonGreen; + private final IntValue valueButtonBlue; + private final IntValue valueButtonAlpha; + private final ConfigValue valueType; + private final BooleanValue valueSharpEdges; + private final BooleanValue valueDrawBackground; + + public ConfigCategorySkin(ForgeConfigSpec.Builder builder) + { + builder.push("skin"); + + this.valueIconSize = builder + .comment(I18n.format("gui.worldhandler.config.comment.skin.icon_size")) + .translation("gui.worldhandler.config.key.skin.icon_size") + .defineInList("icon_size", 16, Arrays.asList(16, 32, 64)); + this.valueLabelColor = builder + .comment(I18n.format("gui.worldhandler.config.comment.skin.label_color")) + .translation("gui.worldhandler.config.key.skin.label_color") + .defineInRange("label_color", 0x1F1F1F, 0x80000000, 0x7FFFFFFF); + this.valueHeadlineColor = builder + .comment(I18n.format("gui.worldhandler.config.comment.skin.headline_color")) + .translation("gui.worldhandler.config.key.skin.headline_color") + .defineInRange("headline_color", 0x4F4F4F, 0x80000000, 0x7FFFFFFF); + + this.valueBackgroundRed = builder + .comment(I18n.format("gui.worldhandler.config.comment.skin.background_red")) + .translation("gui.worldhandler.config.key.skin.background_red") + .defineInRange("background_red", 255, 0, 255); + this.valueBackgroundGreen = builder + .comment(I18n.format("gui.worldhandler.config.comment.skin.background_green")) + .translation("gui.worldhandler.config.key.skin.background_green") + .defineInRange("background_green", 255, 0, 255); + this.valueBackgroundBlue = builder + .comment(I18n.format("gui.worldhandler.config.comment.skin.background_blue")) + .translation("gui.worldhandler.config.key.skin.background_blue") + .defineInRange("background_blue", 255, 0, 255); + this.valueBackgroundAlpha = builder + .comment(I18n.format("gui.worldhandler.config.comment.skin.background_alpha")) + .translation("gui.worldhandler.config.key.skin.background_alpha") + .defineInRange("background_alpha", 255, 0, 255); + + this.valueButtonRed = builder + .comment(I18n.format("gui.worldhandler.config.comment.skin.button_red")) + .translation("gui.worldhandler.config.key.skin.button_red") + .defineInRange("button_red", 255, 0, 255); + this.valueButtonGreen = builder + .comment(I18n.format("gui.worldhandler.config.comment.skin.button_green")) + .translation("gui.worldhandler.config.key.skin.button_green") + .defineInRange("button_green", 255, 0, 255); + this.valueButtonBlue = builder + .comment(I18n.format("gui.worldhandler.config.comment.skin.button_blue")) + .translation("gui.worldhandler.config.key.skin.button_blue") + .defineInRange("button_blue", 255, 0, 255); + this.valueButtonAlpha = builder + .comment(I18n.format("gui.worldhandler.config.comment.skin.button_alpha")) + .translation("gui.worldhandler.config.key.skin.button_alpha") + .defineInRange("button_alpha", 255, 0, 255); + + this.valueType = builder + .comment(I18n.format("gui.worldhandler.config.comment.skin.textures")) + .translation("gui.worldhandler.config.key.skin.textures") + .defineInList("textures", "resourcepack", Arrays.asList("resourcepack", "vanilla")); + + this.valueSharpEdges = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.sharp_tab_edges")) + .translation("gui.worldhandler.config.key.settings.sharp_tab_edges") + .define("sharp_tab_edges", false); + this.valueDrawBackground = builder + .comment(I18n.format("gui.worldhandler.config.comment.settings.draw_background")) + .translation("gui.worldhandler.config.key.settings.draw_background") + .define("draw_background", true); + + builder.pop(); + } + + public void read() + { + this.iconSize = this.valueIconSize.get(); + this.labelColor = this.valueLabelColor.get(); + this.headlineColor = this.valueHeadlineColor.get(); + this.backgroundRed = this.valueBackgroundRed.get(); + this.backgroundGreen = this.valueBackgroundGreen.get(); + this.backgroundBlue = this.valueBackgroundBlue.get(); + this.backgroundAlpha = this.valueBackgroundAlpha.get(); + this.buttonRed = this.valueButtonRed.get(); + this.buttonGreen = this.valueButtonGreen.get(); + this.buttonBlue = this.valueButtonBlue.get(); + this.buttonAlpha = this.valueButtonAlpha.get(); + this.type = this.valueType.get(); + this.sharpEdges = this.valueSharpEdges.get(); + this.drawBackground = this.valueDrawBackground.get(); + } + + private void write() + { + Config.set(this.valueIconSize, this.iconSize); + Config.set(this.valueLabelColor, this.labelColor); + Config.set(this.valueHeadlineColor, this.headlineColor); + Config.set(this.valueBackgroundRed, this.backgroundRed); + Config.set(this.valueBackgroundGreen, this.backgroundGreen); + Config.set(this.valueBackgroundBlue, this.backgroundBlue); + Config.set(this.valueBackgroundAlpha, this.backgroundAlpha); + Config.set(this.valueButtonRed, this.buttonRed); + Config.set(this.valueButtonGreen, this.buttonGreen); + Config.set(this.valueButtonBlue, this.buttonBlue); + Config.set(this.valueButtonAlpha, this.buttonAlpha); + Config.set(this.valueType, this.type); + Config.set(this.valueSharpEdges, this.sharpEdges); + Config.set(this.valueDrawBackground, this.drawBackground); + } + + public int getIconSize() + { + return this.iconSize; + } + + public void setIconSize(int size) + { + this.iconSize = size; + this.write(); + } + + public int getLabelColor() + { + return this.labelColor; + } + + public void setLabelColor(int color) + { + this.labelColor = color; + this.write(); + } + + public int getHeadlineColor() + { + return this.headlineColor; + } + + public void setHeadlineColor(int color) + { + this.headlineColor = color; + this.write(); + } + + private int getBackgroundRed() + { + return this.backgroundRed; + } + + public float getBackgroundRedF() + { + return this.getBackgroundRed() / 255F; + } + + public void setBackgroundRed(int red) + { + this.backgroundRed = red; + this.write(); + } + + private int getBackgroundGreen() + { + return this.backgroundGreen; + } + + public float getBackgroundGreenF() + { + return this.getBackgroundGreen() / 255F; + } + + public void setBackgroundGreen(int green) + { + this.backgroundGreen = green; + this.write(); + } + + private int getBackgroundBlue() + { + return this.backgroundBlue; + } + + public float getBackgroundBlueF() + { + return this.getBackgroundBlue() / 255F; + } + + public void setBackgroundBlue(int blue) + { + this.backgroundBlue = blue; + this.write(); + } + + private int getButtonRed() + { + return this.buttonRed; + } + + public float getButtonRedF() + { + return this.getButtonRed() / 255F; + } + + public void setButtonRed(int red) + { + this.backgroundRed = red; + this.write(); + } + + private int getButtonGreen() + { + return this.buttonGreen; + } + + public float getButtonGreenF() + { + return this.getButtonGreen() / 255F; + } + + public void setButtonGreen(int green) + { + this.buttonGreen = green; + this.write(); + } + + private int getButtonBlue() + { + return this.buttonBlue; + } + + public float getButtonBlueF() + { + return this.getButtonBlue() / 255F; + } + + public void setButtonBlue(int blue) + { + this.buttonBlue = blue; + this.write(); + } + + public String getTextureType() + { + return this.type; + } + + public void setTextureType(String type) + { + this.type = type; + this.write(); + } + + public boolean sharpEdges() + { + return this.sharpEdges; + } + + public void setSharpEdges(boolean enabled) + { + this.sharpEdges = enabled; + this.write(); + } + + public boolean drawBackground() + { + return this.drawBackground; + } + + public void setDrawBackground(boolean enabled) + { + this.drawBackground = enabled; + this.write(); + } + + private int getBackgroundAlpha() + { + return this.backgroundAlpha; + } + + public float getBackgroundAlphaF() + { + return this.getBackgroundAlpha() / 255F; + } + + public void setBackgroundAlpha(int alpha) + { + this.backgroundAlpha = alpha; + this.write(); + } + + private int getButtonAlpha() + { + return this.buttonAlpha; + } + + public float getButtonAlphaF() + { + return this.getButtonAlpha() / 255F; + } + + public void setButtonAlpha(int alpha) + { + this.buttonAlpha = alpha; + this.write(); + } +} diff --git a/src/main/java/exopandora/worldhandler/config/ConfigCategorySliders.java b/src/main/java/exopandora/worldhandler/config/ConfigCategorySliders.java new file mode 100644 index 0000000..06da5d1 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/config/ConfigCategorySliders.java @@ -0,0 +1,203 @@ +package exopandora.worldhandler.config; + +import net.minecraft.client.resources.I18n; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.common.ForgeConfigSpec.DoubleValue; + +@OnlyIn(Dist.CLIENT) +public class ConfigCategorySliders +{ + private double maxPotionAmplifier; + private double maxItemEnchantment; + private double maxItemAttributes; + private double maxSummonPotionAmplifier; + private double maxSummonPotionMinutes; + private double maxSummonAttributes; + private double maxExperience; + private double maxPlayerPoints; + private double maxTriggerValue; + + private final DoubleValue valueMaxPotionAmplifier; + private final DoubleValue valueMaxItemEnchantment; + private final DoubleValue valueMaxItemAttributes; + private final DoubleValue valueMaxSummonPotionAmplifier; + private final DoubleValue valueMaxSummonPotionMinutes; + private final DoubleValue valueMaxSummonAttributes; + private final DoubleValue valueMaxExperience; + private final DoubleValue valueMaxPlayerPoints; + private final DoubleValue valueMaxTriggerValue; + + public ConfigCategorySliders(ForgeConfigSpec.Builder builder) + { + builder.push("sliders"); + + this.valueMaxPotionAmplifier = builder + .comment(I18n.format("gui.worldhandler.config.comment.sliders.max_potion_amplifier")) + .translation("gui.worldhandler.config.key.sliders.max_potion_amplifier") + .defineInRange("max_potion_amplifier", 100D, 0D, Byte.MAX_VALUE); + + this.valueMaxItemEnchantment = builder + .comment(I18n.format("gui.worldhandler.config.comment.sliders.max_item_enchantment")) + .translation("gui.worldhandler.config.key.sliders.max_item_enchantment") + .defineInRange("max_item_enchantment", 100D, 0D, Integer.MAX_VALUE); + this.valueMaxItemAttributes = builder + .comment(I18n.format("gui.worldhandler.config.comment.sliders.max_item_attributes")) + .translation("gui.worldhandler.config.key.sliders.max_item_attributes") + .defineInRange("max_item_attributes", 100D, 0D, Double.MAX_VALUE); + + this.valueMaxSummonPotionAmplifier = builder + .comment(I18n.format("gui.worldhandler.config.comment.sliders.max_summon_potion_amplifier")) + .translation("gui.worldhandler.config.key.sliders.max_summon_potion_amplifier") + .defineInRange("max_summon_potion_amplifier", 100D, 0D, Byte.MAX_VALUE); + this.valueMaxSummonPotionMinutes = builder + .comment(I18n.format("gui.worldhandler.config.comment.sliders.max_summon_potion_minutes")) + .translation("gui.worldhandler.config.key.sliders.max_summon_potion_minutes") + .defineInRange("max_summon_potion_minutes", 100D, 0D, 16000); + this.valueMaxSummonAttributes = builder + .comment(I18n.format("gui.worldhandler.config.comment.sliders.max_summon_attributes")) + .translation("gui.worldhandler.config.key.sliders.max_summon_attributes") + .defineInRange("max_summon_attributes", 100D, 0D, Double.MAX_VALUE); + + this.valueMaxExperience = builder + .comment(I18n.format("gui.worldhandler.config.comment.sliders.max_experience")) + .translation("gui.worldhandler.config.key.sliders.max_experience") + .defineInRange("max_experience", 100D, 0D, 100000D); + this.valueMaxPlayerPoints = builder + .comment(I18n.format("gui.worldhandler.config.comment.sliders.max_player_points")) + .translation("gui.worldhandler.config.key.sliders.max_player_points") + .defineInRange("max_player_points", 100D, 0D, 100000D); + this.valueMaxTriggerValue = builder + .comment(I18n.format("gui.worldhandler.config.comment.sliders.max_trigger_value")) + .translation("gui.worldhandler.config.key.sliders.max_trigger_value") + .defineInRange("max_trigger_value", 100D, 0D, 100000D); + + builder.pop(); + } + + public void read() + { + this.maxPotionAmplifier = this.valueMaxPotionAmplifier.get(); + this.maxItemEnchantment = this.valueMaxItemEnchantment.get(); + this.maxItemAttributes = this.valueMaxItemAttributes.get(); + this.maxSummonPotionAmplifier = this.valueMaxSummonPotionAmplifier.get(); + this.maxSummonPotionMinutes = this.valueMaxSummonPotionMinutes.get(); + this.maxSummonAttributes = this.valueMaxSummonAttributes.get(); + this.maxExperience = this.valueMaxExperience.get(); + this.maxPlayerPoints = this.valueMaxPlayerPoints.get(); + this.maxTriggerValue = this.valueMaxTriggerValue.get(); + } + + private void write() + { + Config.set(this.valueMaxPotionAmplifier, this.maxPotionAmplifier); + Config.set(this.valueMaxItemEnchantment, this.maxItemEnchantment); + Config.set(this.valueMaxItemAttributes, this.maxItemAttributes); + Config.set(this.valueMaxSummonPotionAmplifier, this.maxSummonPotionAmplifier); + Config.set(this.valueMaxSummonPotionMinutes, this.maxSummonPotionMinutes); + Config.set(this.valueMaxSummonAttributes, this.maxSummonAttributes); + Config.set(this.valueMaxExperience, this.maxExperience); + Config.set(this.valueMaxPlayerPoints, this.maxPlayerPoints); + Config.set(this.valueMaxTriggerValue, this.maxTriggerValue); + } + + public double getMaxPotionAmplifier() + { + return this.maxPotionAmplifier; + } + + public void setMaxPotionAmplifier(double max) + { + this.maxPotionAmplifier = max; + this.write(); + } + + public double getMaxItemEnchantment() + { + return this.maxItemEnchantment; + } + + public void setMaxItemEnchantment(double max) + { + this.maxItemEnchantment = max; + this.write(); + } + + public double getMaxItemAttributes() + { + return this.maxItemAttributes; + } + + public void setMaxItemAttributes(double max) + { + this.maxItemAttributes = max; + this.write(); + } + + public double getMaxSummonPotionAmplifier() + { + return this.maxSummonPotionAmplifier; + } + + public void setMaxSummonPotionAmplifier(double max) + { + this.maxSummonPotionAmplifier = max; + this.write(); + } + + public double getMaxSummonPotionMinutes() + { + return this.maxSummonPotionMinutes; + } + + public void setMaxSummonPotionMinutes(double max) + { + this.maxSummonPotionMinutes = max; + this.write(); + } + + public double getMaxSummonAttributes() + { + return this.maxSummonAttributes; + } + + public void setMaxSummonAttributes(double max) + { + this.maxSummonAttributes = max; + this.write(); + } + + public double getMaxExperience() + { + return this.maxExperience; + } + + public void setMaxExperience(double max) + { + this.maxExperience = max; + this.write(); + } + + public double getMaxPlayerPoints() + { + return this.maxPlayerPoints; + } + + public void setMaxPlayerPoints(double max) + { + this.maxPlayerPoints = max; + this.write(); + } + + public double getMaxTriggerValue() + { + return this.maxTriggerValue; + } + + public void setMaxTriggerValue(double max) + { + this.maxTriggerValue = max; + this.write(); + } +} diff --git a/src/main/java/exopandora/worldhandler/config/ConfigSettings.java b/src/main/java/exopandora/worldhandler/config/ConfigSettings.java deleted file mode 100644 index 9f113fe..0000000 --- a/src/main/java/exopandora/worldhandler/config/ConfigSettings.java +++ /dev/null @@ -1,136 +0,0 @@ -package exopandora.worldhandler.config; - -import net.minecraft.client.resources.I18n; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ConfigSettings -{ - private static boolean BIOME_INDICATOR; - private static boolean COMMAND_SYNTAX; - private static boolean SHORTCUTS; - private static boolean SHORTCUT_KEYS; - private static boolean TOOLTIPS; - private static boolean WATCH; - private static boolean SMOOTH_WATCH; - private static boolean PAUSE; - private static boolean CUSTOM_TIMES; - private static boolean PERMISSION_QUERY; - private static boolean HIGHLIGHT_BLOCKS; - - private static int DAWN; - private static int NOON; - private static int SUNSET; - private static int MIDNIGHT; - - private static String BLOCK_PLACING_MODE; - - public static final String CATEGORY = "settings"; - - public static void load(Configuration config) - { - BIOME_INDICATOR = config.getBoolean("biome_indicator", CATEGORY, false, I18n.format("gui.worldhandler.config.comment.settings.biome_indicator"), "gui.worldhandler.config.key.settings.biome_indicator"); - COMMAND_SYNTAX = config.getBoolean("command_syntax", CATEGORY, false, I18n.format("gui.worldhandler.config.comment.settings.command_syntax"), "gui.worldhandler.config.key.settings.command_syntax"); - SHORTCUTS = config.getBoolean("shortcuts", CATEGORY, false, I18n.format("gui.worldhandler.config.comment.settings.shortcuts"), "gui.worldhandler.config.key.settings.shortcuts"); - SHORTCUT_KEYS = config.getBoolean("key_shortcuts", CATEGORY, false, I18n.format("gui.worldhandler.config.comment.settings.key_shortcuts"), "gui.worldhandler.config.key.settings.key_shortcuts"); - TOOLTIPS = config.getBoolean("tooltips", CATEGORY, true, I18n.format("gui.worldhandler.config.comment.settings.tooltips"), "gui.worldhandler.config.key.settings.tooltips"); - WATCH = config.getBoolean("watch", CATEGORY, true, I18n.format("gui.worldhandler.config.comment.settings.watch"), "gui.worldhandler.config.key.settings.watch"); - SMOOTH_WATCH = config.getBoolean("smooth_watch", CATEGORY, true, I18n.format("gui.worldhandler.config.comment.settings.smooth_watch"), "gui.worldhandler.config.key.settings.smooth_watch"); - PAUSE = config.getBoolean("pause_game", CATEGORY, false, I18n.format("gui.worldhandler.config.comment.settings.pause_game"), "gui.worldhandler.config.key.settings.pause_game"); - CUSTOM_TIMES = config.getBoolean("custom_times", CATEGORY, false, I18n.format("gui.worldhandler.config.comment.settings.custom_times"), "gui.worldhandler.config.key.settings.custom_times"); - PERMISSION_QUERY = config.getBoolean("permission_query", CATEGORY, true, I18n.format("gui.worldhandler.config.comment.settings.permission_query"), "gui.worldhandler.config.key.settings.permission_query"); - HIGHLIGHT_BLOCKS = config.getBoolean("highlight_blocks", CATEGORY, true, I18n.format("gui.worldhandler.config.comment.settings.highlight_blocks"), "gui.worldhandler.config.key.settings.highlight_blocks"); - DAWN = config.getInt("custom_time_dawn", CATEGORY, 1000, 0, 24000, I18n.format("gui.worldhandler.config.comment.settings.custom_time_dawn"), "gui.worldhandler.config.key.settings.custom_time_dawn"); - NOON = config.getInt("custom_time_noon", CATEGORY, 6000, 0, 24000, I18n.format("gui.worldhandler.config.comment.settings.custom_time_noon"), "gui.worldhandler.config.key.settings.custom_time_noon"); - SUNSET = config.getInt("custom_time_sunset", CATEGORY, 12500, 0, 24000, I18n.format("gui.worldhandler.config.comment.settings.custom_time_sunset"), "gui.worldhandler.config.key.settings.custom_time_sunset"); - MIDNIGHT = config.getInt("custom_time_midnight", CATEGORY, 18000, 0, 24000, I18n.format("gui.worldhandler.config.comment.settings.custom_time_midnight"), "gui.worldhandler.config.key.settings.custom_time_midnight"); - BLOCK_PLACING_MODE = config.getString("block_placing_mode", CATEGORY, "keep", I18n.format("gui.worldhandler.config.comment.settings.block_placing_mode"), new String[]{"keep", "replace", "destroy"}, "gui.worldhandler.config.key.settings.block_placing_mode"); - - if(config.hasChanged()) - { - config.save(); - } - } - - public static boolean isBiomeIndicatorEnabled() - { - return BIOME_INDICATOR; - } - - public static boolean isCommandSyntaxEnabled() - { - return COMMAND_SYNTAX; - } - - public static boolean areShortcutsEnabled() - { - return SHORTCUTS; - } - - public static boolean arePosShortcutsEnabled() - { - return SHORTCUT_KEYS; - } - - public static boolean areTooltipsEnabled() - { - return TOOLTIPS; - } - - public static boolean isWatchEnabled() - { - return WATCH; - } - - public static boolean isSmoothWatchEnabled() - { - return SMOOTH_WATCH; - } - - public static boolean isPauseEnabled() - { - return PAUSE; - } - - public static boolean isCustomTimeEnabled() - { - return CUSTOM_TIMES; - } - - public static boolean isPermissionQueryEnabled() - { - return PERMISSION_QUERY; - } - - public static boolean isHighlightBlocksEnabled() - { - return HIGHLIGHT_BLOCKS; - } - - public static int getDawn() - { - return DAWN; - } - - public static int getNoon() - { - return NOON; - } - - public static int getSunset() - { - return SUNSET; - } - - public static int getMidnight() - { - return MIDNIGHT; - } - - public static String getMode() - { - return BLOCK_PLACING_MODE; - } -} \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/config/ConfigSkin.java b/src/main/java/exopandora/worldhandler/config/ConfigSkin.java deleted file mode 100644 index 6ec1755..0000000 --- a/src/main/java/exopandora/worldhandler/config/ConfigSkin.java +++ /dev/null @@ -1,127 +0,0 @@ -package exopandora.worldhandler.config; - -import net.minecraft.client.resources.I18n; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ConfigSkin -{ - private static int ICON_SIZE; - private static int LABEL_COLOR; - private static int HEADLINE_COLOR; - - private static int BACKGROUND_RED; - private static int BACKGROUND_GREEN; - private static int BACKGROUND_BLUE; - private static int BACKGROUND_ALPHA; - - private static int BUTTON_RED; - private static int BUTTON_GREEN; - private static int BUTTON_BLUE; - private static int BUTTON_ALPHA; - - private static String TYPE; - - private static boolean SHARP_EDGES; - private static boolean DRAW_BACKGROUND; - - public static final String CATEGORY = "skin"; - - public static void load(Configuration config) - { - ICON_SIZE = Integer.valueOf(config.getString("icon_size", CATEGORY, "16", I18n.format("gui.worldhandler.config.comment.skin.icons"), new String[]{"16", "32", "64"}, "gui.worldhandler.config.key.skin.icons")); - LABEL_COLOR = config.getInt("label_color", CATEGORY, 0x1F1F1F, 0x80000000, 0x7FFFFFFF, I18n.format("gui.worldhandler.config.comment.skin.label_color"), "gui.worldhandler.config.key.skin.label_color"); - HEADLINE_COLOR = config.getInt("headline_color", CATEGORY, 0x4F4F4F, 0x80000000, 0x7FFFFFFF, I18n.format("gui.worldhandler.config.comment.skin.headline_color"), "gui.worldhandler.config.key.skin.headline_color"); - - BACKGROUND_RED = config.getInt("background_red", CATEGORY, 255, 0, 255, I18n.format("gui.worldhandler.config.comment.skin.background_red"), "gui.worldhandler.config.key.skin.background_red"); - BACKGROUND_GREEN = config.getInt("background_green", CATEGORY, 255, 0, 255, I18n.format("gui.worldhandler.config.comment.skin.background_green"), "gui.worldhandler.config.key.skin.background_green"); - BACKGROUND_BLUE = config.getInt("background_blue", CATEGORY, 255, 0, 255, I18n.format("gui.worldhandler.config.comment.skin.background_blue"), "gui.worldhandler.config.key.skin.background_blue"); - BACKGROUND_ALPHA = config.getInt("background_alpha", CATEGORY, 255, 0, 255, I18n.format("gui.worldhandler.config.comment.skin.background_alpha"), "gui.worldhandler.config.key.skin.background_alpha"); - - BUTTON_RED = config.getInt("button_red", CATEGORY, 255, 0, 255, I18n.format("gui.worldhandler.config.comment.skin.button_red"), "gui.worldhandler.config.key.skin.button_red"); - BUTTON_GREEN = config.getInt("button_green", CATEGORY, 255, 0, 255, I18n.format("gui.worldhandler.config.comment.skin.button_green"), "gui.worldhandler.config.key.skin.button_green"); - BUTTON_BLUE = config.getInt("button_blue", CATEGORY, 255, 0, 255, I18n.format("gui.worldhandler.config.comment.skin.button_blue"), "gui.worldhandler.config.key.skin.button_blue"); - BUTTON_ALPHA = config.getInt("button_alpha", CATEGORY, 255, 0, 255, I18n.format("gui.worldhandler.config.comment.skin.button_alpha"), "gui.worldhandler.config.key.skin.button_alpha"); - - TYPE = config.getString("textures", CATEGORY, "resourcepack", I18n.format("gui.worldhandler.config.comment.skin.textures"), new String[]{"resourcepack", "vanilla"}, "gui.worldhandler.config.key.skin.textures"); - SHARP_EDGES = config.getBoolean("sharp_tab_edges", CATEGORY, false, I18n.format("gui.worldhandler.config.comment.skin.sharp_tab_edges"), "gui.worldhandler.config.key.skin.sharp_tab_edges"); - DRAW_BACKGROUND = config.getBoolean("draw_background", CATEGORY, true, I18n.format("gui.worldhandler.config.comment.skin.draw_background"), "gui.worldhandler.config.key.skin.draw_background"); - - if(config.hasChanged()) - { - config.save(); - } - } - - public static int getIconSize() - { - return ICON_SIZE; - } - - public static int getLabelColor() - { - return LABEL_COLOR; - } - - public static int getHeadlineColor() - { - return HEADLINE_COLOR; - } - - public static int getBackgroundRed() - { - return BACKGROUND_RED; - } - - public static int getBackgroundGreen() - { - return BACKGROUND_GREEN; - } - - public static int getBackgroundBlue() - { - return BACKGROUND_BLUE; - } - - public static int getButtonRed() - { - return BUTTON_RED; - } - - public static int getButtonGreen() - { - return BUTTON_GREEN; - } - - public static int getButtonBlue() - { - return BUTTON_BLUE; - } - - public static String getTextureType() - { - return TYPE; - } - - public static boolean areSharpEdgesEnabled() - { - return SHARP_EDGES; - } - - public static boolean isBackgroundDrawingEnabled() - { - return DRAW_BACKGROUND; - } - - public static int getBackgroundAlpha() - { - return BACKGROUND_ALPHA; - } - - public static int getButtonAlpha() - { - return BUTTON_ALPHA; - } -} diff --git a/src/main/java/exopandora/worldhandler/config/ConfigSliders.java b/src/main/java/exopandora/worldhandler/config/ConfigSliders.java deleted file mode 100644 index 4aacbe4..0000000 --- a/src/main/java/exopandora/worldhandler/config/ConfigSliders.java +++ /dev/null @@ -1,84 +0,0 @@ -package exopandora.worldhandler.config; - -import net.minecraft.client.resources.I18n; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ConfigSliders -{ - private static double MAX_POTION_AMPLIFIER; - - private static double MAX_ITEM_ENCHANTENT; - private static double MAX_ITEM_ATTRIBUTES; - - private static double MAX_SUMMON_POTION_AMPLIFIER; - private static double MAX_SUMMON_POTION_MINUTES; - private static double MAX_SUMMON_ATTRIBUTES; - - private static double MAX_EXPERIENCE; - private static double MAX_PLAYER_POINTS; - - public static final String CATEGORY = "sliders"; - - public static void load(Configuration config) - { - MAX_POTION_AMPLIFIER = config.get(CATEGORY, "max_potion_amplifier", 100D, I18n.format("gui.worldhandler.config.comment.sliders.max_potion_amplifier"), 0D, Byte.MAX_VALUE).setLanguageKey("gui.worldhandler.config.key.sliders.max_potion_amplifier").getDouble(); - - MAX_ITEM_ENCHANTENT = config.get(CATEGORY, "max_item_enchantment", 100D, I18n.format("gui.worldhandler.config.comment.sliders.max_item_enchantment"), 0D, Integer.MAX_VALUE).setLanguageKey("gui.worldhandler.config.key.sliders.max_item_enchantment").getDouble(); - MAX_ITEM_ATTRIBUTES = config.get(CATEGORY, "max_item_attributes", 100D, I18n.format("gui.worldhandler.config.comment.sliders.max_item_attributes"), 0D, Double.MAX_VALUE).setLanguageKey("gui.worldhandler.config.key.sliders.max_item_attributes").getDouble(); - - MAX_SUMMON_POTION_AMPLIFIER = config.get(CATEGORY, "max_summon_potion_amplifier", 100D, I18n.format("gui.worldhandler.config.comment.sliders.max_summon_potion_amplifier"), 0D, Byte.MAX_VALUE).setLanguageKey("gui.worldhandler.config.key.sliders.max_summon_potion_amplifier").getDouble(); - MAX_SUMMON_POTION_MINUTES = config.get(CATEGORY, "max_summon_potion_minutes", 100D, I18n.format("gui.worldhandler.config.comment.sliders.max_summon_potion_minutes"), 0D, 16000).setLanguageKey("gui.worldhandler.config.key.sliders.max_summon_potion_minutes").getDouble(); - MAX_SUMMON_ATTRIBUTES = config.get(CATEGORY, "max_summon_attributes", 100D, I18n.format("gui.worldhandler.config.comment.sliders.max_summon_attributes"), 0D, Double.MAX_VALUE).setLanguageKey("gui.worldhandler.config.key.sliders.max_summon_attributes").getDouble(); - - MAX_EXPERIENCE = config.get(CATEGORY, "max_experience", 100D, I18n.format("gui.worldhandler.config.comment.sliders.max_experience"), 0D, 100000D).setLanguageKey("gui.worldhandler.config.key.sliders.max_experience").getDouble(); - MAX_PLAYER_POINTS = config.get(CATEGORY, "max_player_points", 100D, I18n.format("gui.worldhandler.config.comment.sliders.max_player_points"), 0D, 100000D).setLanguageKey("gui.worldhandler.config.key.sliders.max_player_points").getDouble(); - - if(config.hasChanged()) - { - config.save(); - } - } - - public static double getMaxPotionAmplifier() - { - return MAX_POTION_AMPLIFIER; - } - - public static double getMaxItemEnchantment() - { - return MAX_ITEM_ENCHANTENT; - } - - public static double getMaxItemAttributes() - { - return MAX_ITEM_ATTRIBUTES; - } - - public static double getMaxSummonPotionAmplifier() - { - return MAX_SUMMON_POTION_AMPLIFIER; - } - - public static double getMaxSummonPotionMinutes() - { - return MAX_SUMMON_POTION_MINUTES; - } - - public static double getMaxSummonAttributes() - { - return MAX_SUMMON_ATTRIBUTES; - } - - public static double getMaxExperience() - { - return MAX_EXPERIENCE; - } - - public static double getMaxPlayerPoints() - { - return MAX_PLAYER_POINTS; - } -} diff --git a/src/main/java/exopandora/worldhandler/event/ClientEventHandler.java b/src/main/java/exopandora/worldhandler/event/ClientEventHandler.java new file mode 100644 index 0000000..13f16af --- /dev/null +++ b/src/main/java/exopandora/worldhandler/event/ClientEventHandler.java @@ -0,0 +1,121 @@ +package exopandora.worldhandler.event; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.ParseResults; +import com.mojang.brigadier.StringReader; +import com.mojang.brigadier.exceptions.CommandSyntaxException; + +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.helper.BlockHelper; +import exopandora.worldhandler.helper.CommandHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.command.CommandSource; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.event.ClientChatEvent; +import net.minecraftforge.client.event.RenderWorldLastEvent; + +@OnlyIn(Dist.CLIENT) +public class ClientEventHandler +{ + public static void renderWorldLastEvent(RenderWorldLastEvent event) + { + if(Config.getSettings().highlightBlocks() && Minecraft.getInstance().world != null) + { + GlStateManager.pushMatrix(); + GlStateManager.disableAlphaTest(); + GlStateManager.enableBlend(); + GlStateManager.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.lineWidth(2.0F); + GlStateManager.disableTexture2D(); + GlStateManager.depthMask(false); + + final double constant = 0.0020000000949949026D; + EntityPlayer player = Minecraft.getInstance().player; + + double playerX = player.lastTickPosX + (player.posX - player.lastTickPosX) * Minecraft.getInstance().getRenderPartialTicks(); + double playerY = player.lastTickPosY + (player.posY - player.lastTickPosY) * Minecraft.getInstance().getRenderPartialTicks(); + double playerZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * Minecraft.getInstance().getRenderPartialTicks(); + + double minX = Math.min(BlockHelper.getPos1().getX(), BlockHelper.getPos2().getX()) - constant - playerX; + double minY = Math.min(BlockHelper.getPos1().getY(), BlockHelper.getPos2().getY()) - constant - playerY; + double minZ = Math.min(BlockHelper.getPos1().getZ(), BlockHelper.getPos2().getZ()) - constant - playerZ; + + double maxX = Math.max(BlockHelper.getPos1().getX(), BlockHelper.getPos2().getX()) + constant - playerX + 1; + double maxY = Math.max(BlockHelper.getPos1().getY(), BlockHelper.getPos2().getY()) + constant - playerY + 1; + double maxZ = Math.max(BlockHelper.getPos1().getZ(), BlockHelper.getPos2().getZ()) + constant - playerZ + 1; + + Tessellator tesselator = Tessellator.getInstance(); + BufferBuilder buffer = tesselator.getBuffer(); + + final int alpha = 255; + final int color1 = 223; + final int color2 = 127; + + GlStateManager.lineWidth(2.0F); + buffer.begin(3, DefaultVertexFormats.POSITION_COLOR); + buffer.pos(minX, minY, minZ).color((float) color1, (float) color1, (float) color1, 0.0F).endVertex(); + buffer.pos(minX, minY, minZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(maxX, minY, minZ).color(color1, color2, color2, alpha).endVertex(); + buffer.pos(maxX, minY, maxZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(minX, minY, maxZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(minX, minY, minZ).color(color2, color2, color1, alpha).endVertex(); + buffer.pos(minX, maxY, minZ).color(color2, color1, color2, alpha).endVertex(); + buffer.pos(maxX, maxY, minZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(maxX, maxY, maxZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(minX, maxY, maxZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(minX, maxY, minZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(minX, maxY, maxZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(minX, minY, maxZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(maxX, minY, maxZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(maxX, maxY, maxZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(maxX, maxY, minZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(maxX, minY, minZ).color(color1, color1, color1, alpha).endVertex(); + buffer.pos(maxX, minY, minZ).color((float) color1, (float) color1, (float) color1, 0.0F).endVertex(); + tesselator.draw(); + GlStateManager.lineWidth(1.0F); + + GlStateManager.depthMask(true); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + GlStateManager.enableAlphaTest(); + GlStateManager.popMatrix(); + } + } + + public static void clientChatEvent(ClientChatEvent event) + { + if(!Minecraft.getInstance().isSingleplayer()) + { + CommandDispatcher dispatcher = new CommandDispatcher(); + CommandHelper.registerCommands(dispatcher); + + StringReader command = new StringReader(event.getMessage()); + command.skip(); + + ParseResults result = dispatcher.parse(command, Minecraft.getInstance().player.getCommandSource()); + + if(result.getContext().getCommand() != null) + { + try + { + dispatcher.execute(result); + } + catch(CommandSyntaxException e) + { + e.printStackTrace(); + } + + if(event.isCancelable()) + { + event.setCanceled(true); + } + } + } + } +} diff --git a/src/main/java/exopandora/worldhandler/event/EventListener.java b/src/main/java/exopandora/worldhandler/event/EventListener.java deleted file mode 100644 index f6f6ca3..0000000 --- a/src/main/java/exopandora/worldhandler/event/EventListener.java +++ /dev/null @@ -1,172 +0,0 @@ -package exopandora.worldhandler.event; - -import com.mojang.realmsclient.gui.ChatFormatting; - -import exopandora.worldhandler.Main; -import exopandora.worldhandler.WorldHandler; -import exopandora.worldhandler.command.FakeCommandHandler; -import exopandora.worldhandler.config.ConfigSettings; -import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer; -import exopandora.worldhandler.gui.content.Contents; -import exopandora.worldhandler.helper.BlockHelper; -import exopandora.worldhandler.hud.BiomeIndicator; -import exopandora.worldhandler.util.UtilPlayer; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderGlobal; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.util.text.ChatType; -import net.minecraft.util.text.TextComponentString; -import net.minecraftforge.client.event.ClientChatEvent; -import net.minecraftforge.client.event.RenderWorldLastEvent; -import net.minecraftforge.fml.client.event.ConfigChangedEvent.OnConfigChangedEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.InputEvent.KeyInputEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class EventListener -{ - private final FakeCommandHandler commandHandler = new FakeCommandHandler(); - private final BiomeIndicator biomeIndicator = new BiomeIndicator(); - - @SubscribeEvent - public void renderWorldLastEvent(RenderWorldLastEvent event) - { - if(ConfigSettings.isHighlightBlocksEnabled() && Minecraft.getMinecraft().world != null) - { - GlStateManager.pushMatrix(); - GlStateManager.disableAlpha(); - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); - GlStateManager.glLineWidth(2.0F); - GlStateManager.disableTexture2D(); - GlStateManager.depthMask(false); - - final double constant = 0.0020000000949949026D; - EntityPlayer player = Minecraft.getMinecraft().player; - - double playerX = player.lastTickPosX + (player.posX - player.lastTickPosX) * Minecraft.getMinecraft().getRenderPartialTicks(); - double playerY = player.lastTickPosY + (player.posY - player.lastTickPosY) * Minecraft.getMinecraft().getRenderPartialTicks(); - double playerZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * Minecraft.getMinecraft().getRenderPartialTicks(); - - double minX = Math.min(BlockHelper.getPos1().getX(), BlockHelper.getPos2().getX()) - constant - playerX; - double minY = Math.min(BlockHelper.getPos1().getY(), BlockHelper.getPos2().getY()) - constant - playerY; - double minZ = Math.min(BlockHelper.getPos1().getZ(), BlockHelper.getPos2().getZ()) - constant - playerZ; - - double maxX = Math.max(BlockHelper.getPos1().getX(), BlockHelper.getPos2().getX()) + constant - playerX + 1; - double maxY = Math.max(BlockHelper.getPos1().getY(), BlockHelper.getPos2().getY()) + constant - playerY + 1; - double maxZ = Math.max(BlockHelper.getPos1().getZ(), BlockHelper.getPos2().getZ()) + constant - playerZ + 1; - - final float opacity = 0.2F; - - for(int x = 1; x < maxX - minX; x++) - { - RenderGlobal.drawBoundingBox(minX, minY, minZ, minX + x + 2 * constant, maxY, maxZ, 0.0F, 0.0F, 0.0F, opacity); - } - - for(int y = 1; y < maxY - minY; y++) - { - RenderGlobal.drawBoundingBox(minX, minY, minZ, maxX, minY + y + 2 * constant, maxZ, 0.0F, 0.0F, 0.0F, opacity); - } - - for(int z = 1; z < maxZ - minZ; z++) - { - RenderGlobal.drawBoundingBox(minX, minY, minZ, maxX, maxY, minZ + z + 2 * constant, 0.0F, 0.0F, 0.0F, opacity); - } - - RenderGlobal.renderFilledBox(minX, minY, minZ, maxX, maxY, maxZ, 0.0F, 0.0F, 0.0F, opacity / 2); - RenderGlobal.renderFilledBox(maxX, maxY, maxZ, minX, minY, minZ, 0.0F, 0.0F, 0.0F, opacity / 2); - - GlStateManager.depthMask(true); - GlStateManager.enableTexture2D(); - GlStateManager.disableBlend(); - GlStateManager.enableAlpha(); - GlStateManager.popMatrix(); - } - } - - @SubscribeEvent - public void clientTickEvent(ClientTickEvent event) - { - if(Minecraft.getMinecraft().inGameHasFocus && event.phase.equals(Phase.START)) - { - if(ConfigSettings.isBiomeIndicatorEnabled()) - { - this.biomeIndicator.tick(); - } - } - } - - @SubscribeEvent - public void keyInputEvent(KeyInputEvent event) - { - if(WorldHandler.KEY_WORLD_HANDLER.isPressed()) - { - displayGui(); - } - else if(WorldHandler.KEY_WORLD_HANDLER_POS1.isPressed() && ConfigSettings.arePosShortcutsEnabled()) - { - BlockHelper.setPos1(BlockHelper.getFocusedBlockPos()); - } - else if(WorldHandler.KEY_WORLD_HANDLER_POS2.isPressed() && ConfigSettings.arePosShortcutsEnabled()) - { - BlockHelper.setPos2(BlockHelper.getFocusedBlockPos()); - } - } - - @SubscribeEvent - public void onConfigChanged(OnConfigChangedEvent event) - { - if(event.getModID().equals(Main.MODID)) - { - WorldHandler.updateConfig(); - } - } - - @SubscribeEvent - public void clientChatEvent(ClientChatEvent event) - { - if(!Minecraft.getMinecraft().isSingleplayer()) - { - this.commandHandler.tryCommand(WorldHandler.COMMAND_WORLD_HANDLER, event); - this.commandHandler.tryCommand(WorldHandler.COMMAND_WH, event); - } - } - - public static void displayGui() - { - if(!UtilPlayer.canIssueCommand() && ConfigSettings.isPermissionQueryEnabled()) - { - Minecraft.getMinecraft().ingameGUI.addChatMessage(ChatType.GAME_INFO, new TextComponentString(ChatFormatting.RED + I18n.format("worldhandler.permission.refused"))); - Minecraft.getMinecraft().ingameGUI.addChatMessage(ChatType.GAME_INFO, new TextComponentString(ChatFormatting.RED + I18n.format("worldhandler.permission.refused.change", I18n.format("gui.worldhandler.config.key.settings.permission_query")))); - } - else - { - try - { - if(BlockHelper.isFocusedBlockEqualTo(Blocks.STANDING_SIGN) || BlockHelper.isFocusedBlockEqualTo(Blocks.WALL_SIGN)) - { - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.SIGN_EDITOR)); - } - else if(BlockHelper.isFocusedBlockEqualTo(Blocks.NOTEBLOCK)) - { - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.NOTE_EDITOR)); - } - else - { - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.MAIN)); - } - } - catch(Exception e) - { - WorldHandler.throwError(e); - } - } - } -} diff --git a/src/main/java/exopandora/worldhandler/event/KeyHandler.java b/src/main/java/exopandora/worldhandler/event/KeyHandler.java new file mode 100644 index 0000000..81cf6c8 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/event/KeyHandler.java @@ -0,0 +1,34 @@ +package exopandora.worldhandler.event; + +import exopandora.worldhandler.WorldHandler; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.BlockHelper; +import net.minecraft.client.Minecraft; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; + +@OnlyIn(Dist.CLIENT) +public class KeyHandler +{ + //TODO FORGE switch to KeyInputEvent + public static void keyInputEvent(ClientTickEvent event) + { + if(Minecraft.getInstance().isGameFocused()) + { + if(WorldHandler.KEY_WORLD_HANDLER.isPressed()) + { + ActionHelper.displayGui(); + } + else if(WorldHandler.KEY_WORLD_HANDLER_POS1.isPressed() && Config.getSettings().shortcutKeys()) + { + BlockHelper.setPos1(BlockHelper.getFocusedBlockPos()); + } + else if(WorldHandler.KEY_WORLD_HANDLER_POS2.isPressed() && Config.getSettings().shortcutKeys()) + { + BlockHelper.setPos2(BlockHelper.getFocusedBlockPos()); + } + } + } +} diff --git a/src/main/java/exopandora/worldhandler/format/EnumColor.java b/src/main/java/exopandora/worldhandler/format/EnumColor.java index e26ed73..f0398f2 100644 --- a/src/main/java/exopandora/worldhandler/format/EnumColor.java +++ b/src/main/java/exopandora/worldhandler/format/EnumColor.java @@ -2,11 +2,14 @@ package exopandora.worldhandler.format; import javax.annotation.Nullable; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +/** + * XXX To be replaced with TextFormatting + */ @Deprecated -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public enum EnumColor { DEFAULT("reset", "r"), @@ -30,7 +33,7 @@ public enum EnumColor OBFUSCATED("obfuscated", "k"), BOLD("bold", "l"), STRIKETHROUGH("strikethrough", "m"), - UNDERLINED("underlined", "n"), + UNDERLINE("underline", "n"), ITALIC("italic", "o"); private String format; diff --git a/src/main/java/exopandora/worldhandler/format/TextFormatting.java b/src/main/java/exopandora/worldhandler/format/TextFormatting.java index 6e81ba4..f5e2de8 100644 --- a/src/main/java/exopandora/worldhandler/format/TextFormatting.java +++ b/src/main/java/exopandora/worldhandler/format/TextFormatting.java @@ -2,10 +2,10 @@ package exopandora.worldhandler.format; import net.minecraft.client.gui.FontRenderer; import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class TextFormatting { public static String shortenString(String str, int maxWidth, FontRenderer fontRenderer) @@ -88,7 +88,7 @@ public class TextFormatting return minute; } - public static String getWorldTime(long tick) + public static String formatWorldTime(long tick) { int hour = TextFormatting.getHour(tick); int minute = TextFormatting.getMinute(tick); diff --git a/src/main/java/exopandora/worldhandler/format/text/ColoredString.java b/src/main/java/exopandora/worldhandler/format/text/ColoredString.java index b4e74a9..dd2656d 100644 --- a/src/main/java/exopandora/worldhandler/format/text/ColoredString.java +++ b/src/main/java/exopandora/worldhandler/format/text/ColoredString.java @@ -3,10 +3,14 @@ package exopandora.worldhandler.format.text; import com.mojang.realmsclient.gui.ChatFormatting; import exopandora.worldhandler.format.EnumColor; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +/** + * XXX To be replaced with ITextComponent + */ +@Deprecated +@OnlyIn(Dist.CLIENT) public class ColoredString extends FormattedString { private EnumColor color = EnumColor.DEFAULT; @@ -92,16 +96,6 @@ public class ColoredString extends FormattedString return result; } - public String getTextFieldString() - { - if(this.text != null) - { - return this.getFormattedString(super.getPreformattedString(this.text)); - } - - return null; - } - @Override public String toString() { @@ -124,4 +118,9 @@ public class ColoredString extends FormattedString return null; } + + public String textFormatter(String string, Integer integer) + { + return this.getFormattedString(string); + } } diff --git a/src/main/java/exopandora/worldhandler/format/text/FormattedString.java b/src/main/java/exopandora/worldhandler/format/text/FormattedString.java index 411f654..c599275 100644 --- a/src/main/java/exopandora/worldhandler/format/text/FormattedString.java +++ b/src/main/java/exopandora/worldhandler/format/text/FormattedString.java @@ -1,9 +1,9 @@ package exopandora.worldhandler.format.text; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public abstract class FormattedString { protected String text; diff --git a/src/main/java/exopandora/worldhandler/format/text/JsonClickEvent.java b/src/main/java/exopandora/worldhandler/format/text/JsonClickEvent.java index bc140b6..5f487ea 100644 --- a/src/main/java/exopandora/worldhandler/format/text/JsonClickEvent.java +++ b/src/main/java/exopandora/worldhandler/format/text/JsonClickEvent.java @@ -1,9 +1,9 @@ package exopandora.worldhandler.format.text; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class JsonClickEvent { private String action; diff --git a/src/main/java/exopandora/worldhandler/format/text/JsonSignLine.java b/src/main/java/exopandora/worldhandler/format/text/JsonSignLine.java index 929fce9..31cf434 100644 --- a/src/main/java/exopandora/worldhandler/format/text/JsonSignLine.java +++ b/src/main/java/exopandora/worldhandler/format/text/JsonSignLine.java @@ -1,9 +1,9 @@ package exopandora.worldhandler.format.text; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class JsonSignLine extends FormattedString { private String color; diff --git a/src/main/java/exopandora/worldhandler/format/text/JsonSignLineSerializer.java b/src/main/java/exopandora/worldhandler/format/text/JsonSignLineSerializer.java index d318c1e..5d90cb3 100644 --- a/src/main/java/exopandora/worldhandler/format/text/JsonSignLineSerializer.java +++ b/src/main/java/exopandora/worldhandler/format/text/JsonSignLineSerializer.java @@ -9,10 +9,10 @@ import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import exopandora.worldhandler.format.EnumColor; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class JsonSignLineSerializer implements JsonSerializer { @Override diff --git a/src/main/java/exopandora/worldhandler/format/text/SignText.java b/src/main/java/exopandora/worldhandler/format/text/SignText.java index 65c32e5..8527fc2 100644 --- a/src/main/java/exopandora/worldhandler/format/text/SignText.java +++ b/src/main/java/exopandora/worldhandler/format/text/SignText.java @@ -3,10 +3,10 @@ package exopandora.worldhandler.format.text; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class SignText { private static final Gson GSON = new GsonBuilder().registerTypeAdapter(JsonSignLine.class, new JsonSignLineSerializer()).create(); diff --git a/src/main/java/exopandora/worldhandler/gui/button/EnumIcon.java b/src/main/java/exopandora/worldhandler/gui/button/EnumIcon.java index 331e063..6a1e63f 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/EnumIcon.java +++ b/src/main/java/exopandora/worldhandler/gui/button/EnumIcon.java @@ -1,9 +1,13 @@ package exopandora.worldhandler.gui.button; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +/** + * XXX To be replaced by a proper registry object + */ +@Deprecated +@OnlyIn(Dist.CLIENT) public enum EnumIcon { WEATHER_SUN(0, 0), diff --git a/src/main/java/exopandora/worldhandler/gui/button/EnumTooltip.java b/src/main/java/exopandora/worldhandler/gui/button/EnumTooltip.java deleted file mode 100644 index 39ea49d..0000000 --- a/src/main/java/exopandora/worldhandler/gui/button/EnumTooltip.java +++ /dev/null @@ -1,15 +0,0 @@ -package exopandora.worldhandler.gui.button; - -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public enum EnumTooltip -{ - TOP_RIGHT, - TOP_LEFT, - BOTTOM_RIGHT, - BOTTOM_LEFT, - RIGHT, - LEFT -} diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonBase.java b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonBase.java new file mode 100644 index 0000000..606c856 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonBase.java @@ -0,0 +1,91 @@ +package exopandora.worldhandler.gui.button; + +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.ResourceHelper; +import exopandora.worldhandler.util.ActionHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class GuiButtonBase extends GuiButton +{ + protected ActionHandler actionHandler; + + public GuiButtonBase(int x, int y, int widthIn, int heightIn, String buttonText, ActionHandler actionHandler) + { + this(0, x, y, widthIn, heightIn, buttonText, actionHandler); + } + + public GuiButtonBase(int id, int x, int y, int widthIn, int heightIn, String buttonText, ActionHandler actionHandler) + { + super(id, x, y, widthIn, heightIn, buttonText); + this.actionHandler = actionHandler; + } + + protected void drawBackground(int mouseX, int mouseY) + { + GlStateManager.enableBlend(); + GlStateManager.color4f(Config.getSkin().getButtonRedF(), Config.getSkin().getButtonGreenF(), Config.getSkin().getButtonBlueF(), Config.getSkin().getButtonAlphaF()); + + this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + int hovered = this.getHoverState(this.hovered); + + Minecraft.getInstance().getTextureManager().bindTexture(ResourceHelper.getButtonTexture()); + + if(Config.getSkin().getTextureType().equals("resourcepack")) + { + this.drawTexturedModalRect(this.x, this.y, 0, 46 + hovered * 20, this.width / 2, this.height); + this.drawTexturedModalRect(this.x + this.width / 2, this.y, 200 - this.width / 2, 46 + hovered * 20, this.width / 2, this.height); + } + else + { + this.drawTexturedModalRect(this.x, this.y, 0, hovered * 20, this.width / 2, this.height); + this.drawTexturedModalRect(this.x + this.width / 2, this.y, 200 - this.width / 2, hovered * 20, this.width / 2, this.height); + } + + GlStateManager.disableBlend(); + GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + @Override + public void render(int mouseX, int mouseY, float partialTicks) + { + if(this.visible) + { + this.drawBackground(mouseX, mouseY); + this.renderBg(Minecraft.getInstance(), mouseX, mouseY); + this.drawCenteredString(Minecraft.getInstance().fontRenderer, this.displayString, this.x + this.width / 2, this.y + (this.height - 8) / 2, this.getTextColor()); + } + } + + @Override + public void onClick(double mouseX, double mouseY) + { + super.onClick(mouseX, mouseY); + + if(this.actionHandler != null) + { + ActionHelper.tryRun(this.actionHandler); + } + } + + protected int getTextColor() + { + int textColor = 0xE0E0E0; + + if(!this.enabled) + { + textColor = 0xA0A0A0; + } + else if(this.hovered) + { + textColor = 0xFFFFA0; + } + + return textColor; + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonIcon.java b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonIcon.java new file mode 100644 index 0000000..1592664 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonIcon.java @@ -0,0 +1,59 @@ +package exopandora.worldhandler.gui.button; + +import exopandora.worldhandler.helper.ResourceHelper; +import exopandora.worldhandler.util.ActionHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class GuiButtonIcon extends GuiButtonTooltip +{ + private EnumIcon icon; + + public GuiButtonIcon(int x, int y, int widthIn, int heightIn, EnumIcon icon, String tooltip, ActionHandler actionHandler) + { + this(0, x, y, widthIn, heightIn, icon, tooltip, actionHandler); + } + + public GuiButtonIcon(int id, int x, int y, int widthIn, int heightIn, EnumIcon icon, String tooltip, ActionHandler actionHandler) + { + super(id, x, y, widthIn, heightIn, null, tooltip, actionHandler); + this.icon = icon; + } + + @Override + public void render(int mouseX, int mouseY, float partialTicks) + { + super.render(mouseX, mouseY, partialTicks); + + if(this.icon != null) + { + this.renderIcon(); + } + } + + private void renderIcon() + { + Minecraft.getInstance().getTextureManager().bindTexture(ResourceHelper.getIconTexture()); + + if(this.enabled) + { + if(this.hovered) + { + GlStateManager.color4f(1.0F, 1.0F, 0.6F, 1.0F); + } + else + { + GlStateManager.color4f(0.95F, 0.95F, 0.95F, 1.0F); + } + } + else + { + GlStateManager.color4f(0.8F, 0.8F, 0.8F, 1.0F); + } + + this.drawTexturedModalRect(this.x + this.width / 2 - 4, this.y + 6, this.icon.getX() * 8, this.icon.getY() * 8, 8, 8); + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonItem.java b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonItem.java index d027b7d..32e81e6 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonItem.java +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonItem.java @@ -1,46 +1,55 @@ package exopandora.worldhandler.gui.button; +import exopandora.worldhandler.util.ActionHandler; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) -public class GuiButtonItem extends GuiButtonWorldHandler +@OnlyIn(Dist.CLIENT) +public class GuiButtonItem extends GuiButtonBase { - private final ItemStack item; + private final ItemStack stack; - public GuiButtonItem(int id, int x, int y, int width, int height, Item item) + public GuiButtonItem(int x, int y, int width, int height, Item item, ActionHandler actionHandler) { - this(id, x, y, width, height, new ItemStack(item)); + this(0, x, y, width, height, item, actionHandler); } - public GuiButtonItem(int id, int x, int y, int width, int height, ItemStack item) + public GuiButtonItem(int id, int x, int y, int width, int height, Item item, ActionHandler actionHandler) { - super(id, x, y, width, height, null); - this.item = item; + this(id, x, y, width, height, new ItemStack(item), actionHandler); + } + + public GuiButtonItem(int x, int y, int width, int height, ItemStack stack, ActionHandler actionHandler) + { + this(0, x, y, width, height, stack, actionHandler); + } + + public GuiButtonItem(int id, int x, int y, int width, int height, ItemStack stack, ActionHandler actionHandler) + { + super(id, x, y, width, height, null, actionHandler); + this.stack = stack; } @Override - public void drawButton(Minecraft minecraft, int mouseX, int mouseY, float partialTicks) + public void render(int mouseX, int mouseY, float partialTicks) { if(this.visible) { - super.drawBackground(minecraft, mouseX, mouseY); + super.drawBackground(mouseX, mouseY); GlStateManager.enableRescaleNormal(); RenderHelper.enableGUIStandardItemLighting(); - Minecraft.getMinecraft().getRenderItem().renderItemIntoGUI(this.item, this.x + this.width / 2 - 8, this.y + 2); + Minecraft.getInstance().getItemRenderer().renderItemIntoGUI(this.stack, this.x + this.width / 2 - 8, this.y + 2); RenderHelper.disableStandardItemLighting(); GlStateManager.disableRescaleNormal(); GlStateManager.disableBlend(); - - this.isActive = true; } } } diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonKeyboard.java b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonKeyboard.java deleted file mode 100644 index b61b14e..0000000 --- a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonKeyboard.java +++ /dev/null @@ -1,181 +0,0 @@ -package exopandora.worldhandler.gui.button; - -import org.lwjgl.input.Mouse; - -import exopandora.worldhandler.Main; -import exopandora.worldhandler.WorldHandler; -import exopandora.worldhandler.config.ConfigSkin; -import exopandora.worldhandler.gui.container.Container; -import exopandora.worldhandler.gui.content.Content; -import net.minecraft.client.Minecraft; -import net.minecraft.client.audio.PositionedSoundRecord; -import net.minecraft.client.audio.SoundHandler; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class GuiButtonKeyboard extends GuiButtonWorldHandler -{ - private static final ResourceLocation NOTE = new ResourceLocation(Main.MODID, "textures/misc/note.png"); - private final Orientation orientation; - private final float pitch; - - private boolean lastMousePressed; - - private final BlockPos pos; - private final SoundEvent sound; - private final Content content; - private final Container container; - - public GuiButtonKeyboard(int id, int x, int y, int width, int height, String displayString, Orientation orientation, float pitch, Container container, Content content, BlockPos pos, SoundEvent sound) - { - super(id, x, y, width, height, displayString); - this.orientation = orientation; - this.pitch = pitch; - this.pos = pos; - this.sound = sound; - this.content = content; - this.container = container; - } - - @Override - public void drawButton(Minecraft minecraft, int mouseX, int mouseY, float partialTicks) - { - if(this.visible) - { - FontRenderer fontRenderer = minecraft.fontRenderer; - GlStateManager.color(1.0F, 1.0F, 1.0F, (float) ConfigSkin.getButtonAlpha() / 255); - minecraft.renderEngine.bindTexture(NOTE); - - switch(this.orientation) - { - case LEFT: - this.hovered = this.isHoveringLeft(mouseX, mouseY); - break; - case NORMAL: - this.hovered = this.isHoveringNormal(mouseX, mouseY); - break; - case RIGHT: - this.hovered = this.isHoveringRight(mouseX, mouseY); - break; - case BLACK: - this.hovered = this.isHoveringBlack(mouseX, mouseY); - break; - default: - break; - } - - int hoverstate = this.getHoverState(this.hovered); - - switch(this.orientation) - { - case BLACK: - this.drawTexturedModalRect(this.x, this.y, 55 + hoverstate * -9 + 18, 0, 9, 58); - break; - case LEFT: - case NORMAL: - case RIGHT: - default: - int textColor = 0x000000; - - if(!this.enabled) - { - textColor = 0xA0A0A0; - } - else if(this.hovered) - { - textColor = 0x8B8B8B; - } - - this.drawTexturedModalRect(this.x, this.y, 25 + hoverstate * 15 - 15, 0, 15, 92); - fontRenderer.drawString(this.displayString, this.x + this.width / 2 - fontRenderer.getStringWidth(this.displayString) / 2, this.y + (this.height - 8) / 2 + 36, textColor); - break; - } - } - - this.mouseDragged(minecraft, mouseX, mouseY); - } - - private boolean isHoveringBlack(int mouseX, int mouseY) - { - return mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; - } - - private boolean isHoveringLeft(int mouseX, int mouseY) - { - return (mouseX >= this.x && mouseY >= this.y && mouseX < this.x + 10 && mouseY < this.y + 60) || (mouseX >= this.x && mouseY >= this.y + 58 && mouseX < this.x + 14 && mouseY < this.y + 93); - } - - private boolean isHoveringNormal(int mouseX, int mouseY) - { - return (mouseX >= this.x + 4 && mouseY >= this.y && mouseX < this.x + 10 && mouseY < this.y + 60) || (mouseX >= this.x && mouseY >= this.y + 58 && mouseX < this.x + 14 && mouseY < this.y + 93); - } - - private boolean isHoveringRight(int mouseX, int mouseY) - { - return (mouseX >= this.x + 4 && mouseY >= this.y && mouseX < this.x + 14 && mouseY < this.y + 60) || (mouseX >= this.x && mouseY >= this.y + 58 && mouseX < this.x + 14 && mouseY < this.y + 93); - } - - @Override - public boolean mousePressed(Minecraft minecraft, int mouseX, int mouseY) - { - switch(this.orientation) - { - case LEFT: - return this.enabled && this.visible && this.isHoveringLeft(mouseX, mouseY); - case NORMAL: - return this.enabled && this.visible && this.isHoveringNormal(mouseX, mouseY); - case RIGHT: - return this.enabled && this.visible && this.isHoveringRight(mouseX, mouseY); - case BLACK: - return this.enabled && this.visible && this.isHoveringBlack(mouseX, mouseY); - default: - return false; - } - } - - @Override - protected void mouseDragged(Minecraft minecraft, int mouseX, int mouseY) - { - if(this.visible) - { - if(this.lastMousePressed != mousePressed(minecraft, mouseX, mouseY)) - { - if(mousePressed(minecraft, mouseX, mouseY) && Mouse.isButtonDown(0)) - { - this.playPressSound(minecraft.getSoundHandler()); - - try - { - this.content.actionPerformed(this.container, this); - } - catch(Exception e) - { - WorldHandler.throwError(e); - } - } - - this.lastMousePressed = mousePressed(minecraft, mouseX, mouseY); - } - } - } - - @Override - public void playPressSound(SoundHandler soundHandlerIn) - { - soundHandlerIn.playSound(PositionedSoundRecord.getMasterRecord(this.sound, this.pitch)); - } - - public static enum Orientation - { - LEFT, - NORMAL, - RIGHT, - BLACK; - } -} diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonList.java b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonList.java index 0b5f84d..507441a 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonList.java +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonList.java @@ -1,110 +1,80 @@ package exopandora.worldhandler.gui.button; +import java.util.List; + import com.mojang.realmsclient.gui.ChatFormatting; import exopandora.worldhandler.format.TextFormatting; -import exopandora.worldhandler.gui.button.logic.IListButtonLogic; -import exopandora.worldhandler.gui.button.persistence.ButtonValue; import exopandora.worldhandler.gui.container.Container; -import exopandora.worldhandler.gui.content.Content; +import exopandora.worldhandler.gui.logic.ILogicMapped; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) -public class GuiButtonList extends GuiButtonWorldHandler +@OnlyIn(Dist.CLIENT) +public class GuiButtonList extends GuiButtonTooltip { - private final IListButtonLogic logic; - private final ButtonValue persistence; - private int mouseX; - private int mouseY; + private final ILogicMapped logic; + private final Persistence persistence; + private final List items; - public GuiButtonList(int id, int x, int y, int width, int height, Content content, IListButtonLogic logic) + public GuiButtonList(int x, int y, List items, int widthIn, int heightIn, Container container, ILogicMapped logic) { - this(id, x, y, width, height, null, content, logic); + this(0, x, y, items, widthIn, heightIn, container, logic); } - public GuiButtonList(int id, int x, int y, int width, int height, EnumTooltip tooltipType, Content content, IListButtonLogic logic) + public GuiButtonList(int id, int x, int y, List items, int widthIn, int heightIn, Container container, ILogicMapped logic) { - super(id, x, y, width, height, null, null, tooltipType); + super(id, x, y, widthIn, heightIn, null, null, null); + this.items = items; this.logic = logic; - this.persistence = content.getPersistence(this.logic.getId()); - this.updatePersistenceObject(); + this.persistence = container.getContent().getPersistence(this.logic.getId(), Persistence::new); } @Override - public void drawButton(Minecraft minecraft, int mouseX, int mouseY, float partialTicks) + public void render(int mouseX, int mouseY, float partialTicks) { - super.drawBackground(minecraft, mouseX, mouseY); - if(this.visible) { - FontRenderer fontRenderer = minecraft.fontRenderer; + this.drawBackground(mouseX, mouseY); - this.mouseX = mouseX; - this.mouseY = mouseY; + String displayString = this.logic.translate(this.items.get(this.persistence.getIndex())); + FontRenderer fontRenderer = Minecraft.getInstance().fontRenderer; - this.displayString = this.logic.getDisplayString(this.persistence); - - if(this.displayString != null && !this.displayString.isEmpty()) + if(displayString != null && !displayString.isEmpty()) { String leftArrow = this.isHoveringLeft(mouseX, mouseY) ? ChatFormatting.BOLD + "<" + ChatFormatting.RESET : "<"; String rightArrow = this.isHoveringRight(mouseX, mouseY) ? ChatFormatting.BOLD + ">" + ChatFormatting.RESET : ">"; - int leftArrowWidth = fontRenderer.getStringWidth(leftArrow); - int rightArrowWidth = fontRenderer.getStringWidth(rightArrow); - - int maxWidth = Math.max(0, this.width - (fontRenderer.getStringWidth("< >"))); - int spaceWidth = fontRenderer.getCharWidth(' '); + int maxWidth = Math.max(0, this.width - fontRenderer.getStringWidth("< >")); + int spaceWidth = fontRenderer.getStringWidth(" "); - String display = TextFormatting.shortenString(this.displayString, maxWidth, fontRenderer); - int displayWidth = fontRenderer.getStringWidth(display); + String display = TextFormatting.shortenString(displayString, maxWidth, fontRenderer); int yPos = this.y + (this.height - 8) / 2; this.drawCenteredString(fontRenderer, display, this.x + this.width / 2, yPos, this.getTextColor()); this.drawCenteredString(fontRenderer, leftArrow, this.x + this.width / 2 - maxWidth / 2 - spaceWidth, yPos, this.getTextColor()); this.drawCenteredString(fontRenderer, rightArrow, this.x + this.width / 2 + maxWidth / 2 + spaceWidth, yPos, this.getTextColor()); } - - this.isActive = true; } } @Override - public void drawTooltip(int mouseX, int mouseY, int width, int height) + public void renderTooltip(int mouseX, int mouseY) { - if(this.tooltipType != null) - { - this.displayTooltip = this.logic.getTooltipString(this.persistence); - } - - super.drawTooltip(mouseX, mouseY, width, height); + this.tooltip = this.logic.formatTooltip(this.items.get(this.persistence.getIndex()), this.persistence.getIndex() + 1, this.items.size()); + super.renderTooltip(mouseX, mouseY); } - private boolean isHoveringLeft(int mouseX, int mouseY) + @Override + public void onClick(double mouseX, double mouseY) { - return this.isHoveringVertical(mouseY) && mouseX >= this.x && mouseX < this.x + Math.ceil(this.width / 2); - } - - private boolean isHoveringRight(int mouseX, int mouseY) - { - return this.isHoveringVertical(mouseY) && mouseX >= this.x + Math.ceil(this.width / 2) && mouseX < this.x + this.width; - } - - private boolean isHoveringVertical(int mouseY) - { - return mouseY >= this.y && mouseY < this.y + this.height; - } - - public void actionPerformed(Container container, GuiButton button) - { - int max = this.logic.getMax() - 1; + int max = this.items.size() - 1; int index = this.persistence.getIndex(); - if(this.isHoveringLeft(this.mouseX, this.mouseY)) + if(this.isHoveringLeft(mouseX, mouseY)) { if(GuiScreen.isShiftKeyDown()) { @@ -129,7 +99,7 @@ public class GuiButtonList extends GuiButtonWorldHandler } } } - else if(this.isHoveringRight(this.mouseX, this.mouseY)) + else if(this.isHoveringRight(mouseX, mouseY)) { if(GuiScreen.isShiftKeyDown()) { @@ -155,17 +125,67 @@ public class GuiButtonList extends GuiButtonWorldHandler } } - this.updatePersistenceObject(); - this.logic.actionPerformed(container, button, this.persistence); + this.logic.onClick(this.items.get(this.persistence.getIndex())); } - private void updatePersistenceObject() + private boolean isHoveringLeft(double mouseX, double mouseY) { - this.persistence.setObject(this.logic.getObject(this.persistence.getIndex())); + return this.isHoveringVertical(mouseY) && mouseX >= this.x && mouseX < this.x + Math.ceil(this.width / 2); } - public IListButtonLogic getLogic() + private boolean isHoveringRight(double mouseX, double mouseY) { - return this.logic; + return this.isHoveringVertical(mouseY) && mouseX >= this.x + Math.ceil(this.width / 2) && mouseX < this.x + this.width; + } + + private boolean isHoveringVertical(double mouseY) + { + return mouseY >= this.y && mouseY < this.y + this.height; + } + + @OnlyIn(Dist.CLIENT) + public static class Persistence + { + private int index; + + public Persistence() + { + this(0); + } + + public Persistence(int index) + { + this.index = index; + } + + public void setIndex(int index) + { + this.index = index; + } + + public int getIndex() + { + return this.index; + } + + public void incrementIndex() + { + this.index++; + } + + public void incrementIndex(int amount) + { + this.index += amount; + } + + public void decrementIndex() + { + this.index--; + } + + public void decrementIndex(int amount) + { + this.index -= amount; + } } } diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonPiano.java b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonPiano.java new file mode 100644 index 0000000..757436b --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonPiano.java @@ -0,0 +1,162 @@ +package exopandora.worldhandler.gui.button; + +import exopandora.worldhandler.Main; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.util.ActionHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.SimpleSound; +import net.minecraft.client.audio.SoundHandler; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class GuiButtonPiano extends GuiButtonBase +{ + private static final ResourceLocation NOTE = new ResourceLocation(Main.MODID, "textures/misc/note.png"); + private final Type type; + private final SoundEvent sound; + private final float pitch; + + public GuiButtonPiano(int x, int y, int widthIn, int heightIn, String buttonText, SoundEvent sound, float pitch, Type type, ActionHandler actionHandler) + { + this(0, x, y, widthIn, heightIn, buttonText, sound, pitch, type, actionHandler); + } + + public GuiButtonPiano(int buttonId, int x, int y, int widthIn, int heightIn, String buttonText, SoundEvent sound, float pitch, Type type, ActionHandler actionHandler) + { + super(buttonId, x, y, widthIn, heightIn, buttonText, actionHandler); + this.sound = sound; + this.pitch = pitch; + this.type = type; + } + + @Override + public void render(int mouseX, int mouseY, float partialTicks) + { + if(this.visible) + { + switch(this.type) + { + case LEFT: + this.hovered = this.isHoveringLeft(mouseX, mouseY); + break; + case NORMAL: + this.hovered = this.isHoveringNormal(mouseX, mouseY); + break; + case RIGHT: + this.hovered = this.isHoveringRight(mouseX, mouseY); + break; + case BLACK: + this.hovered = this.isHoveringBlack(mouseX, mouseY); + break; + default: + break; + } + + int hoverstate = this.getHoverState(this.hovered); + GlStateManager.color4f(1.0F, 1.0F, 1.0F, Config.getSkin().getButtonAlphaF()); + Minecraft.getInstance().getTextureManager().bindTexture(NOTE); + + switch(this.type) + { + case LEFT: + case NORMAL: + case RIGHT: + this.drawWhiteKey(hoverstate); + break; + case BLACK: + this.drawBlackKey(hoverstate); + break; + default: + break; + } + } + } + + protected void drawWhiteKey(int hoverstate) + { + int textColor = this.getTextColor(); + FontRenderer fontRenderer = Minecraft.getInstance().fontRenderer; + + this.drawTexturedModalRect(this.x, this.y, 25 + hoverstate * 15 - 15, 0, 15, 92); + fontRenderer.drawString(this.displayString, this.x + this.width / 2 - fontRenderer.getStringWidth(this.displayString) / 2, this.y + (this.height - 8) / 2 + 36, textColor); + } + + protected void drawBlackKey(int hoverstate) + { + this.drawTexturedModalRect(this.x, this.y, 55 + hoverstate * -9 + 18, 0, 9, 58); + } + + protected int getTextColor() + { + int textColor = 0x000000; + + if(!this.enabled) + { + textColor = 0xA0A0A0; + } + else if(this.hovered) + { + textColor = 0x8B8B8B; + } + + return textColor; + } + + @Override + public void playPressSound(SoundHandler soundHandler) + { + soundHandler.play(SimpleSound.getMasterRecord(this.sound, this.pitch)); + } + + private boolean isHoveringBlack(double mouseX, double mouseY) + { + return mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + } + + private boolean isHoveringLeft(double mouseX, double mouseY) + { + return (mouseX >= this.x && mouseY >= this.y && mouseX < this.x + 10 && mouseY < this.y + 60) || (mouseX >= this.x && mouseY >= this.y + 58 && mouseX < this.x + 14 && mouseY < this.y + 93); + } + + private boolean isHoveringNormal(double mouseX, double mouseY) + { + return (mouseX >= this.x + 4 && mouseY >= this.y && mouseX < this.x + 10 && mouseY < this.y + 60) || (mouseX >= this.x && mouseY >= this.y + 58 && mouseX < this.x + 14 && mouseY < this.y + 93); + } + + private boolean isHoveringRight(double mouseX, double mouseY) + { + return (mouseX >= this.x + 4 && mouseY >= this.y && mouseX < this.x + 14 && mouseY < this.y + 60) || (mouseX >= this.x && mouseY >= this.y + 58 && mouseX < this.x + 14 && mouseY < this.y + 93); + } + + @Override + protected boolean isPressable(double mouseX, double mouseY) + { + switch(this.type) + { + case LEFT: + return this.enabled && this.visible && this.isHoveringLeft(mouseX, mouseY); + case NORMAL: + return this.enabled && this.visible && this.isHoveringNormal(mouseX, mouseY); + case RIGHT: + return this.enabled && this.visible && this.isHoveringRight(mouseX, mouseY); + case BLACK: + return this.enabled && this.visible && this.isHoveringBlack(mouseX, mouseY); + default: + return false; + } + } + + @OnlyIn(Dist.CLIENT) + public static enum Type + { + LEFT, + NORMAL, + RIGHT, + BLACK; + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonTab.java b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonTab.java index 2dbf089..05cb644 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonTab.java +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonTab.java @@ -1,24 +1,20 @@ package exopandora.worldhandler.gui.button; -import net.minecraft.client.Minecraft; import net.minecraft.client.audio.SoundHandler; import net.minecraft.client.gui.GuiButton; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class GuiButtonTab extends GuiButton { - private final int index; - - public GuiButtonTab(int buttonId, int x, int y, int widthIn, int heightIn, int index) + public GuiButtonTab(int x, int y, int widthIn, int heightIn) { - super(buttonId, x, y, widthIn, heightIn, null); - this.index = index; + super(0, x, y, widthIn, heightIn, null); } @Override - public void drawButton(Minecraft minecraft, int mouseX, int mouseY, float partialTicks) + public void render(int mouseX, int mouseY, float partialTicks) { } @@ -28,9 +24,4 @@ public class GuiButtonTab extends GuiButton { } - - public int getIndex() - { - return this.index; - } } diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonTooltip.java b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonTooltip.java new file mode 100644 index 0000000..bbde097 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonTooltip.java @@ -0,0 +1,44 @@ +package exopandora.worldhandler.gui.button; + +import java.util.Arrays; +import java.util.List; + +import exopandora.worldhandler.util.ActionHandler; +import net.minecraft.client.Minecraft; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.client.config.GuiUtils; + +@OnlyIn(Dist.CLIENT) +public class GuiButtonTooltip extends GuiButtonBase +{ + protected String tooltip; + + public GuiButtonTooltip(int x, int y, int widthIn, int heightIn, String buttonText, String tooltip, ActionHandler actionHandler) + { + this(0, x, y, widthIn, heightIn, buttonText, tooltip, actionHandler); + } + + public GuiButtonTooltip(int id, int x, int y, int widthIn, int heightIn, String buttonText, String tooltip, ActionHandler actionHandler) + { + super(id, x, y, widthIn, heightIn, buttonText, actionHandler); + this.tooltip = tooltip; + } + + public void renderTooltip(int mouseX, int mouseY) + { + if(this.hovered && this.tooltip != null) + { + List list = Arrays.asList(this.tooltip.split("\n")); + + if(!list.isEmpty()) + { + int tooltipWidth = Minecraft.getInstance().fontRenderer.getStringWidth(this.tooltip) + 9; + int width = Minecraft.getInstance().currentScreen.width; + int height = Minecraft.getInstance().currentScreen.height; + + GuiUtils.drawHoveringText(list, mouseX, mouseY, width, height, tooltipWidth, Minecraft.getInstance().fontRenderer); + } + } + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonWorldHandler.java b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonWorldHandler.java deleted file mode 100644 index 07bc4c3..0000000 --- a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonWorldHandler.java +++ /dev/null @@ -1,219 +0,0 @@ -package exopandora.worldhandler.gui.button; - -import exopandora.worldhandler.config.ConfigSkin; -import exopandora.worldhandler.helper.ResourceHelper; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraftforge.fml.client.config.GuiUtils; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class GuiButtonWorldHandler extends GuiButton -{ - protected String displayTooltip; - protected EnumTooltip tooltipType; - protected EnumIcon icon; - protected boolean isActive; - - public GuiButtonWorldHandler(int id, int x, int y, int width, int height, String displayString) - { - this(id, x, y, width, height, displayString, null, null); - } - - public GuiButtonWorldHandler(int id, int x, int y, int width, int height, String displayString, String tooltip, EnumTooltip tooltipType) - { - this(id, x, y, width, height, displayString, tooltip, tooltipType, null); - } - - public GuiButtonWorldHandler(int id, int x, int y, int width, int height, String displayString, EnumIcon icon) - { - this(id, x, y, width, height, displayString, null, null, icon); - } - - public GuiButtonWorldHandler(int id, int x, int y, int width, int height, String displayString, String tooltip, EnumTooltip tooltipType, EnumIcon icon) - { - super(id, x, y, width, height, displayString); - this.displayTooltip = tooltip; - this.tooltipType = tooltipType; - this.icon = icon; - } - - @Override - public void drawButton(Minecraft minecraft, int mouseX, int mouseY, float partialTicks) - { - if(this.visible) - { - this.drawBackground(minecraft, mouseX, mouseY); - this.drawCenteredString(minecraft.fontRenderer, this.displayString, this.x + this.width / 2, this.y + (this.height - 8) / 2, this.getTextColor()); - - if(this.icon != null) - { - this.drawIcons(); - } - - this.isActive = true; - } - } - - protected int getTextColor() - { - int textColor = 0xE0E0E0; - - if(!this.enabled) - { - textColor = 0xA0A0A0; - } - else if(this.hovered) - { - textColor = 0xFFFFA0; - } - - return textColor; - } - - protected void drawBackground(Minecraft minecraft, int mouseX, int mouseY) - { - GlStateManager.enableBlend(); - GlStateManager.color((float) ConfigSkin.getButtonRed() / 255, (float) ConfigSkin.getButtonGreen() / 255, (float) ConfigSkin.getButtonBlue() / 255, (float) ConfigSkin.getButtonAlpha() / 255); - - this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; - int hovered = this.getHoverState(this.hovered); - - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceHelper.getButtonTexture()); - - if(ConfigSkin.getTextureType().equals("resourcepack")) - { - this.drawTexturedModalRect(this.x, this.y, 0, 46 + hovered * 20, this.width / 2, this.height); - this.drawTexturedModalRect(this.x + this.width / 2, this.y, 200 - this.width / 2, 46 + hovered * 20, this.width / 2, this.height); - } - else - { - this.drawTexturedModalRect(this.x, this.y, 0, hovered * 20, this.width / 2, this.height); - this.drawTexturedModalRect(this.x + this.width / 2, this.y, 200 - this.width / 2, hovered * 20, this.width / 2, this.height); - } - - GlStateManager.disableBlend(); - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - } - - public void drawTooltip(int mouseX, int mouseY, int width, int height) - { - if(this.hovered && this.displayTooltip != null) - { - int tooltipWidth = Minecraft.getMinecraft().fontRenderer.getStringWidth(this.displayTooltip) + 9; - int xOffset = 12; - int yOffset = 12; - boolean right = mouseX + xOffset + tooltipWidth > width; - boolean left = mouseX > tooltipWidth + xOffset; - - switch(this.tooltipType) - { - case TOP_RIGHT: - this.renderTooltip(mouseX, mouseY, xOffset, -yOffset, right); - break; - case TOP_LEFT: - this.renderTooltip(mouseX, mouseY, xOffset, -yOffset, left); - break; - case BOTTOM_RIGHT: - this.renderTooltip(mouseX, mouseY, xOffset, yOffset, right); - break; - case BOTTOM_LEFT: - this.renderTooltip(mouseX, mouseY, xOffset, yOffset, left); - break; - case RIGHT: - this.renderTooltip(mouseX, mouseY, xOffset, 0, right); - break; - case LEFT: - this.renderTooltip(mouseX, mouseY, xOffset, 0, left); - break; - default: - break; - } - } - } - - protected void renderTooltip(int mouseX, int mouseY, int xOffset, int yOffset, boolean left) - { - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; - - GlStateManager.disableDepth(); - - String[] text = this.displayTooltip.split("\n"); - - int tooltipTextWidth = 0; - int tooltipX = mouseX + xOffset; - int tooltipY = mouseY + yOffset; - - for(String line : text) - { - int length = fontRenderer.getStringWidth(line) + 1; - - if(length > tooltipTextWidth) - { - tooltipTextWidth = length; - } - } - - if(left) - { - tooltipX = mouseX - xOffset - tooltipTextWidth; - } - - int tooltipHeight = fontRenderer.FONT_HEIGHT * text.length; - int backgroundColor = 0xF0100010; - int borderColorStart = 0x505000FF; - int borderColorEnd = (borderColorStart & 0xFEFEFE) >> 1 | borderColorStart & 0xFF000000; - - int zLevel = 300; - - GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY - 4, tooltipX + tooltipTextWidth + 3, tooltipY - 3, backgroundColor, backgroundColor); - GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY + tooltipHeight + 3, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 4, backgroundColor, backgroundColor); - GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor); - GuiUtils.drawGradientRect(zLevel, tooltipX - 4, tooltipY - 3, tooltipX - 3, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor); - GuiUtils.drawGradientRect(zLevel, tooltipX + tooltipTextWidth + 3, tooltipY - 3, tooltipX + tooltipTextWidth + 4, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor); - - GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY - 3 + 1, tooltipX - 3 + 1, tooltipY + tooltipHeight + 3 - 1, borderColorStart, borderColorEnd); - GuiUtils.drawGradientRect(zLevel, tooltipX + tooltipTextWidth + 2, tooltipY - 3 + 1, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3 - 1, borderColorStart, borderColorEnd); - GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3, tooltipY - 3 + 1, borderColorStart, borderColorStart); - GuiUtils.drawGradientRect(zLevel, tooltipX - 3, tooltipY + tooltipHeight + 2, tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3, borderColorEnd, borderColorEnd); - - for(int x = 0; x < text.length; x++) - { - fontRenderer.drawStringWithShadow(text[x], tooltipX + 1, tooltipY + 1 + fontRenderer.FONT_HEIGHT * x, -1); - } - - GlStateManager.enableDepth(); - } - - protected void drawIcons() - { - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceHelper.getIconTexture()); - - if(this.enabled == true) - { - if(this.hovered) - { - GlStateManager.color(1.0F, 1.0F, 0.6F, 1.0F); - } - else - { - GlStateManager.color(0.95F, 0.95F, 0.95F, 1.0F); - } - } - else - { - GlStateManager.color(0.8F, 0.8F, 0.8F, 1.0F); - } - - this.drawTexturedModalRect(this.x + this.width / 2 - 4, this.y + 6, this.icon.getX() * 8, this.icon.getY() * 8, 8, 8); - } - - @Override - public boolean mousePressed(Minecraft mc, int mouseX, int mouseY) - { - return super.mousePressed(mc, mouseX, mouseY) && this.isActive; - } -} diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiSlider.java b/src/main/java/exopandora/worldhandler/gui/button/GuiSlider.java index 62fa5d8..9f6ff07 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/GuiSlider.java +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiSlider.java @@ -1,86 +1,80 @@ package exopandora.worldhandler.gui.button; -import exopandora.worldhandler.config.ConfigSkin; -import exopandora.worldhandler.gui.button.logic.ISliderResponder; -import exopandora.worldhandler.gui.button.persistence.ButtonValue; -import exopandora.worldhandler.gui.button.persistence.SliderValue; -import exopandora.worldhandler.gui.container.Container; -import exopandora.worldhandler.gui.content.Content; -import exopandora.worldhandler.helper.ResourceHelper; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.resources.I18n; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import java.util.Objects; -@SideOnly(Side.CLIENT) -public class GuiSlider extends GuiButton +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.format.TextFormatting; +import exopandora.worldhandler.gui.container.Container; +import exopandora.worldhandler.gui.logic.ILogic; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class GuiSlider extends GuiButtonBase { - private boolean isMouseDown; - private boolean isActive; + private final Persistence persistence; + private final ILogicSlider logic; + private final Container container; - private final Object key; - private final String name; - private final ISliderResponder responder; - private final Container frame; - private final ButtonValue persistence; + private boolean dragging; - public GuiSlider(Content content, Container frame, Object key, int x, int y, int width, int height, String name, double min, double max, double start, ISliderResponder responder) + public GuiSlider(int x, int y, int widthIn, int heightIn, double min, double max, double start, Container container, ILogicSlider logic) { - super(Integer.MAX_VALUE, x, y, width, height, null); - this.frame = frame; - this.key = key; - this.name = name; - this.responder = responder; - this.persistence = content.getPersistence(key); - this.initValues(Math.round(min), Math.round(max), Math.round(start)); - this.displayString = this.getDisplayString(); + this(0, x, y, widthIn, heightIn, min, max, start, container, logic); } - private void initValues(double min, double max, double start) + public GuiSlider(int id, int x, int y, int widthIn, int heightIn, double min, double max, double start, Container container, ILogicSlider logic) { - if(this.persistence.getObject() == null) + super(id, x, y, widthIn, heightIn, null, null); + this.logic = Objects.requireNonNull(logic); + this.container = Objects.requireNonNull(container); + this.persistence = this.container.getContent().getPersistence(this.logic.getId(), () -> new Persistence(min, max, min == max ? 0.0 : ((start - min) / (max - min)))); + this.persistence.validate(min, max); + this.logic.onChangeSliderValue(this.persistence.getValueInt()); + this.updateDisplayString(); + } + + @Override + protected void renderBg(Minecraft minecraft, int mouseX, int mouseY) + { + if(this.visible) { - if(min == max) + if(this.dragging) { - this.persistence.setObject(new SliderValue(min, max, 0.0D)); + this.persistence.setValue((mouseX - (this.x + 4)) / (float) (this.width - 8)); + this.updateSlider(); } - else - { - this.persistence.setObject(new SliderValue(min, max, (start - min) / (max - min))); - } - } - else if(this.persistence.getObject().getMin() != min || this.persistence.getObject().getMax() != max) - { - this.persistence.setObject(new SliderValue(min, max, (int) MathHelper.clamp(this.getValue(), min, max))); + + int xOffset = Config.getSkin().getTextureType().equals("resourcepack") ? 0 : -46; + + GlStateManager.pushMatrix(); + GlStateManager.enableBlend(); + GlStateManager.color4f(Config.getSkin().getButtonRedF(), Config.getSkin().getButtonGreenF(), Config.getSkin().getButtonBlueF(), Config.getSkin().getButtonAlphaF()); + + this.drawTexturedModalRect(this.x + (int) (this.persistence.getValue() * (float) (this.width - 8)), this.y, 0, 66 + xOffset, 4, 20); + this.drawTexturedModalRect(this.x + (int) (this.persistence.getValue() * (float) (this.width - 8)) + 4, this.y, 196, 66 + xOffset, 4, 20); + + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); } } - private void setPosition(double position) + @Override + public void onClick(double mouseX, double mouseY) { - this.persistence.getObject().setPosition(position); + this.persistence.setValue((mouseX - (this.x + 4)) / (this.width - 8)); + this.updateSlider(); + this.dragging = true; } - private double getPosition() + @Override + public void onRelease(double mouseX, double mouseY) { - return this.persistence.getObject().getPosition(); - } - - private void setValue(int value) - { - this.persistence.getObject().setValue(value); - } - - private int getValue() - { - return this.persistence.getObject().getValue(); - } - - private String getDisplayString() - { - return this.responder.getText(this.key, I18n.format(this.name), this.getValue()); + super.onRelease(mouseX, mouseY); + this.dragging = false; } @Override @@ -89,114 +83,107 @@ public class GuiSlider extends GuiButton return 0; } - @Override - public void drawButton(Minecraft minecraft, int mouseX, int mouseY, float partialTicks) - { - this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; - - GlStateManager.pushMatrix(); - GlStateManager.enableBlend(); - GlStateManager.color((float) ConfigSkin.getButtonRed() / 255, (float) ConfigSkin.getButtonGreen() / 255, (float) ConfigSkin.getButtonBlue() / 255, (float) ConfigSkin.getButtonAlpha() / 255); - - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceHelper.getButtonTexture()); - - if(ConfigSkin.getTextureType().equals("resourcepack")) - { - this.drawTexturedModalRect(this.x, this.y, 0, 46, this.width / 2, this.height); - this.drawTexturedModalRect(this.x + this.width / 2, this.y, 200 - this.width / 2, 46, this.width / 2, this.height); - } - else - { - this.drawTexturedModalRect(this.x, this.y, 0, 0, this.width / 2, this.height); - this.drawTexturedModalRect(this.x + this.width / 2, this.y, 200 - this.width / 2, 0, this.width / 2, this.height); - } - - GlStateManager.disableBlend(); - GlStateManager.popMatrix(); - - this.mouseDragged(minecraft, mouseX, mouseY); - } - - private void update(int mouseX, int mouseY) + private void updateSlider() { - float sliderValue = (float) (mouseX - (this.x + 4)) / (float) (this.width - 8); - - if(sliderValue < 0.0F) + if(this.persistence.getValue() < 0.0F) { - sliderValue = 0.0F; + this.persistence.setValue(0.0F); } - if(sliderValue > 1.0F) + if(this.persistence.getValue() > 1.0F) { - sliderValue = 1.0F; + this.persistence.setValue(1.0F); } - this.setPosition(sliderValue); - this.displayString = this.getDisplayString(); - this.responder.setValue(this.key, this.getValue()); + this.updateDisplayString(); + this.logic.onChangeSliderValue(this.persistence.getValueInt()); } - @Override - public void mouseDragged(Minecraft mc, int mouseX, int mouseY) + private void updateDisplayString() { - if(this.visible) + int value = this.persistence.getValueInt(); + String suffix = this.logic.formatValue(value) + this.logic.formatSuffix(value); + FontRenderer fontRenderer = Minecraft.getInstance().fontRenderer; + + this.displayString = TextFormatting.shortenString(this.logic.formatPrefix(value), this.width - fontRenderer.getStringWidth(suffix), fontRenderer) + suffix; + } + + @OnlyIn(Dist.CLIENT) + public static interface ILogicSlider extends ILogic + { + String formatPrefix(int value); + String formatSuffix(int value); + String formatValue(int value); + + void onChangeSliderValue(int value); + } + + @OnlyIn(Dist.CLIENT) + public class Persistence + { + private double min; + private double max; + private double value; + + private Persistence(double min, double max) { - if(this.isMouseDown) + this.min = min; + this.max = max; + } + + public Persistence(double min, double max, double value) + { + this(min, max); + this.value = value; + } + + public double getMin() + { + return this.min; + } + + public double getMax() + { + return this.max; + } + + public double getValue() + { + return this.value; + } + + public void setValue(double value) + { + this.value = value; + } + + public int getValueInt() + { + return (int) Math.round(this.min + (this.max - this.min) * this.value); + } + + public void setValueInt(int value) + { + this.value = this.intToValue(value); + } + + public void validate(double min, double max) + { + if(this.getMin() != min || this.getMax() != max) { - this.update(mouseX, mouseY); + this.min = min; + this.max = max; + } + } + + private double intToValue(int value) + { + if(this.min == this.max) + { + return 0; } - int textureXOffset = ConfigSkin.getTextureType().equals("resourcepack") ? 0 : -46; - - GlStateManager.pushMatrix(); - GlStateManager.enableBlend(); - GlStateManager.color((float) ConfigSkin.getButtonRed() / 255, (float) ConfigSkin.getButtonGreen() / 255, (float) ConfigSkin.getButtonBlue() / 255, (float) ConfigSkin.getButtonAlpha() / 255); - - this.drawTexturedModalRect(this.x + (int) (this.getPosition() * (float) (this.width - 8)), this.y, 0, 66 + textureXOffset, 4, 20); - this.drawTexturedModalRect(this.x + (int) (this.getPosition() * (float) (this.width - 8)) + 4, this.y, 196, 66 + textureXOffset, 4, 20); - - GlStateManager.disableBlend(); - GlStateManager.popMatrix(); - - int color = 0xE0E0E0; - - if(!this.enabled) - { - color = 0xA0A0A0; - } - else if(this.hovered) - { - color = 0xFFFFA0; - } - - this.drawCenteredString(mc.fontRenderer, this.displayString, this.x + this.width / 2, this.y + (this.height - 8) / 2, color); + return (value - this.min) / (this.max - this.min); } - - this.isActive = true; } - - @Override - public boolean mousePressed(Minecraft mc, int mouseX, int mouseY) - { - if(super.mousePressed(mc, mouseX, mouseY) && this.isActive) - { - this.update(mouseX, mouseY); - this.isMouseDown = true; - - return true; - } - - return false; - } - - @Override - public void mouseReleased(int mouseX, int mouseY) - { - this.isMouseDown = false; - - if(this.frame != null) - { - this.frame.initGui(); - } - } -} \ No newline at end of file +} diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiTextFieldTooltip.java b/src/main/java/exopandora/worldhandler/gui/button/GuiTextFieldTooltip.java index 358437c..ebb346b 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/GuiTextFieldTooltip.java +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiTextFieldTooltip.java @@ -1,261 +1,76 @@ package exopandora.worldhandler.gui.button; -import com.google.common.base.Predicate; import com.mojang.realmsclient.gui.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiPageButtonList; import net.minecraft.client.gui.GuiTextField; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) -public class GuiTextFieldTooltip +@OnlyIn(Dist.CLIENT) +public class GuiTextFieldTooltip extends GuiTextField { - private GuiTextField textfield; - private String display; - - public GuiTextFieldTooltip(int x, int y, int width, int height, String display) - { - this.textfield = new GuiTextField(0, Minecraft.getMinecraft().fontRenderer, x, y, width, height); - this.textfield.setMaxStringLength(Integer.MAX_VALUE); - this.display = display; - } + private String tooltip; public GuiTextFieldTooltip(int x, int y, int width, int height) { - this(x, y, width, height, null); + this(0, x, y, width, height, null); } - public void setGuiResponder(GuiPageButtonList.GuiResponder responder) + public GuiTextFieldTooltip(int id, int x, int y, int width, int height) { - this.textfield.setGuiResponder(responder); + this(id, x, y, width, height, null); } - public void updateCursorCounter() + public GuiTextFieldTooltip(int x, int y, int width, int height, String tooltip) { - this.textfield.updateCursorCounter(); + this(0, x, y, width, height, tooltip); } - public void setText(String text) + public GuiTextFieldTooltip(int id, int x, int y, int width, int height, String tooltip) { - this.textfield.setText(text); + super(id, Minecraft.getInstance().fontRenderer, x, y, width, height); + this.setMaxStringLength(Integer.MAX_VALUE); + this.tooltip = tooltip; } - public String getText() + @Override + public void drawTextField(int x, int y, float partialTicks) { - return this.textfield.getText(); - } - - public boolean isEmpty() - { - if(this.textfield.getText() != null) - { - return this.textfield.getText().matches("(\u00A7[a-f0-9k-or])+"); - } + super.drawTextField(x, y, partialTicks); - return true; - } - - public boolean canType(char charTyped) - { - return (!this.isEmpty() || charTyped != '\b') && this.textfield.isFocused(); - } - - public String getSelectedText() - { - return this.textfield.getSelectedText(); - } - - public void setValidator(Predicate validator) - { - this.textfield.setValidator(validator);; - } - - public void writeText(String text) - { - this.textfield.writeText(text); - } - - public void deleteWords(int num) - { - this.textfield.deleteWords(num); - } - - public void deleteFromCursor(int num) - { - this.textfield.deleteFromCursor(num); - } - - public int getId() - { - return this.textfield.getId(); - } - - public int getNthWordFromCursor(int numWords) - { - return this.textfield.getNthWordFromCursor(numWords); - } - - public int getNthWordFromPos(int n, int pos) - { - return this.textfield.getNthWordFromPos(n, pos); - } - - public int getNthWordFromPosWS(int n, int pos, boolean skipWs) - { - return this.textfield.getNthWordFromPosWS(n, pos, skipWs); - } - - public void moveCursorBy(int num) - { - this.textfield.moveCursorBy(num); - } - - public void setCursorPosition(int pos) - { - this.textfield.setCursorPosition(pos); - } - - public void setCursorPositionZero() - { - this.textfield.setCursorPositionZero(); - } - - public void setCursorPositionEnd() - { - this.textfield.setCursorPositionEnd(); - } - - public boolean textboxKeyTyped(char typedChar, int keyCode) - { - return this.textfield.textboxKeyTyped(typedChar, keyCode); - } - - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - this.textfield.mouseClicked(mouseX, mouseY, mouseButton); - } - - public void drawTextBox() - { - this.textfield.drawTextBox(); - - if(this.textfield.getVisible()) + if(this.getVisible() && !this.isFocused() && this.tooltip != null && ChatFormatting.stripFormatting(this.getText()).isEmpty()) { - int x = this.textfield.getEnableBackgroundDrawing() ? this.textfield.x + 4 : this.textfield.x; - int y = this.textfield.getEnableBackgroundDrawing() ? this.textfield.y + (this.textfield.height - 8) / 2 : this.textfield.y; + int tx = this.getEnableBackgroundDrawing() ? this.x + 4 : this.x; + int ty = this.getEnableBackgroundDrawing() ? this.y + (this.height - 8) / 2 : this.y; - if(ChatFormatting.stripFormatting(this.textfield.getText()).isEmpty() && !this.textfield.isFocused() && this.display != null) - { - Minecraft.getMinecraft().fontRenderer.drawStringWithShadow(this.display, (float) x, (float) y, 0x7F7F7F); - } + Minecraft.getInstance().fontRenderer.drawStringWithShadow(this.tooltip, (float) tx, (float) ty, 0x7F7F7F); } } - public void setMaxStringLength(int length) + public void setTooltip(String tooltip) { - this.textfield.setMaxStringLength(length); + this.tooltip = tooltip; } - public int getMaxStringLength() + public String getTooltip() { - return this.textfield.getMaxStringLength(); - } - - public int getCursorPosition() - { - return this.textfield.getCursorPosition(); - } - - public boolean getEnableBackgroundDrawing() - { - return this.textfield.getEnableBackgroundDrawing(); - } - - public void setEnableBackgroundDrawing(boolean enableBackgroundDrawing) - { - this.textfield.setEnableBackgroundDrawing(enableBackgroundDrawing); - } - - public void setTextColor(int color) - { - this.textfield.setTextColor(color); - } - - public void setDisabledTextColour(int color) - { - this.textfield.setDisabledTextColour(color); - } - - public void setFocused(boolean focused) - { - this.textfield.setFocused(focused); - } - - public boolean isFocused() - { - return this.textfield.isFocused(); - } - - public void setEnabled(boolean enabled) - { - this.textfield.setEnabled(enabled); - } - - public int getSelectionEnd() - { - return this.textfield.getSelectionEnd(); - } - - public int getWidth() - { - return this.textfield.getWidth(); - } - - public void setSelectionPos(int position) - { - this.textfield.setSelectionPos(position); - } - - public void setCanLoseFocus(boolean canLoseFocus) - { - this.textfield.setCanLoseFocus(canLoseFocus); - } - - public boolean getVisible() - { - return this.textfield.getVisible(); - } - - public void setVisible(boolean visible) - { - this.textfield.setVisible(visible); - } - - public void setDisplay(String display) - { - this.display = display; - } - - public String getDisplay() - { - return this.display; + return this.tooltip; } public void setPosition(int x, int y) { - this.textfield.x = x; - this.textfield.y = y; + this.x = x; + this.y = y; } public void setWidth(int width) { - this.textfield.width = width; + this.width = width; } public void setHeight(int height) { - this.textfield.height = height; + this.height = height; } } diff --git a/src/main/java/exopandora/worldhandler/gui/button/logic/ColorListButtonLogic.java b/src/main/java/exopandora/worldhandler/gui/button/logic/ColorListButtonLogic.java deleted file mode 100644 index 126776f..0000000 --- a/src/main/java/exopandora/worldhandler/gui/button/logic/ColorListButtonLogic.java +++ /dev/null @@ -1,46 +0,0 @@ -package exopandora.worldhandler.gui.button.logic; - -import java.util.Arrays; - -import com.mojang.realmsclient.gui.ChatFormatting; - -import exopandora.worldhandler.format.EnumColor; -import exopandora.worldhandler.gui.button.persistence.ButtonValue; -import net.minecraft.client.resources.I18n; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public abstract class ColorListButtonLogic implements IListButtonLogic -{ - @Override - public final int getMax() - { - return (int) Arrays.stream(ChatFormatting.values()).filter(ChatFormatting::isColor).count(); - } - - @Override - public Integer getObject(int index) - { - return index; - } - - @Override - public String getTooltipString(ButtonValue values) - { - return null; - } - - @Override - public String getDisplayString(ButtonValue values) - { - EnumColor color = EnumColor.getColorFromId(values.getIndex()); - return color + I18n.format("gui.worldhandler.color") + ": " + I18n.format("gui.worldhandler.color." + color.getFormat()); - } - - @Override - public String getId() - { - return "color"; - } -} diff --git a/src/main/java/exopandora/worldhandler/gui/button/logic/IListButtonLogic.java b/src/main/java/exopandora/worldhandler/gui/button/logic/IListButtonLogic.java deleted file mode 100644 index 47f6b45..0000000 --- a/src/main/java/exopandora/worldhandler/gui/button/logic/IListButtonLogic.java +++ /dev/null @@ -1,31 +0,0 @@ -package exopandora.worldhandler.gui.button.logic; - -import exopandora.worldhandler.gui.button.persistence.ButtonValue; -import exopandora.worldhandler.gui.container.Container; -import net.minecraft.client.gui.GuiButton; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public interface IListButtonLogic -{ - void actionPerformed(Container container, GuiButton button, ButtonValue values); - - int getMax(); - - T getObject(int index); - - String getDisplayString(ButtonValue values); - - default String getTooltipString(ButtonValue values) - { - if(values != null && values.getObject() != null) - { - return values.getObject().toString() + " (" + (values.getIndex() + 1) + "/" + this.getMax() + ")"; - } - - return null; - } - - String getId(); -} diff --git a/src/main/java/exopandora/worldhandler/gui/button/logic/ISliderResponder.java b/src/main/java/exopandora/worldhandler/gui/button/logic/ISliderResponder.java deleted file mode 100644 index 17f8754..0000000 --- a/src/main/java/exopandora/worldhandler/gui/button/logic/ISliderResponder.java +++ /dev/null @@ -1,11 +0,0 @@ -package exopandora.worldhandler.gui.button.logic; - -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public interface ISliderResponder -{ - void setValue(Object id, int value); - String getText(Object id, String format, int value); -} \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValue.java b/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValue.java deleted file mode 100644 index 62ac17e..0000000 --- a/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValue.java +++ /dev/null @@ -1,51 +0,0 @@ -package exopandora.worldhandler.gui.button.persistence; - -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ButtonValue -{ - private int index; - private T object; - - public void setIndex(int index) - { - this.index = index; - } - - public int getIndex() - { - return this.index; - } - - public void incrementIndex() - { - this.index++; - } - - public void incrementIndex(int amount) - { - this.index += amount; - } - - public void decrementIndex() - { - this.index--; - } - - public void decrementIndex(int amount) - { - this.index -= amount; - } - - public T getObject() - { - return this.object; - } - - public void setObject(T object) - { - this.object = object; - } -} diff --git a/src/main/java/exopandora/worldhandler/gui/button/persistence/SliderValue.java b/src/main/java/exopandora/worldhandler/gui/button/persistence/SliderValue.java deleted file mode 100644 index 25b16cb..0000000 --- a/src/main/java/exopandora/worldhandler/gui/button/persistence/SliderValue.java +++ /dev/null @@ -1,70 +0,0 @@ -package exopandora.worldhandler.gui.button.persistence; - -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class SliderValue -{ - private final double min; - private final double max; - private double position; - - private SliderValue(double min, double max) - { - this.min = min; - this.max = max; - } - - public SliderValue(double min, double max, double position) - { - this(min, max); - this.position = position; - } - - public SliderValue(double min, double max, int value) - { - this(min, max); - this.position = this.valueToPosition(value); - } - - public double getMin() - { - return this.min; - } - - public double getMax() - { - return this.max; - } - - public double getPosition() - { - return this.position; - } - - public void setPosition(double position) - { - this.position = position; - } - - public int getValue() - { - return (int) (this.min + (this.max - this.min) * this.position); - } - - public void setValue(int value) - { - this.position = this.valueToPosition(value); - } - - private double valueToPosition(int value) - { - if(this.min == this.max) - { - return 0; - } - - return (value - this.min) / (this.max - this.min); - } -} \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/gui/button/responder/AttributeResponder.java b/src/main/java/exopandora/worldhandler/gui/button/responder/AttributeResponder.java deleted file mode 100644 index 8b8a7a7..0000000 --- a/src/main/java/exopandora/worldhandler/gui/button/responder/AttributeResponder.java +++ /dev/null @@ -1,27 +0,0 @@ -package exopandora.worldhandler.gui.button.responder; - -import java.util.function.Consumer; - -import exopandora.worldhandler.builder.impl.abstr.EnumAttributes; -import exopandora.worldhandler.format.TextFormatting; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class AttributeResponder extends SimpleResponder -{ - public AttributeResponder(Consumer valueConsumer) - { - super(valueConsumer); - } - - @Override - public String getText(Object id, String format, int value) - { - String suffix = ": " + value + " " + ((EnumAttributes) id).getOperation().getDeclaration(); - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; - return TextFormatting.shortenString(format, 114 - fontRenderer.getStringWidth(suffix), fontRenderer) + suffix; - } -} diff --git a/src/main/java/exopandora/worldhandler/gui/button/responder/SimpleResponder.java b/src/main/java/exopandora/worldhandler/gui/button/responder/SimpleResponder.java deleted file mode 100644 index 76bd6e5..0000000 --- a/src/main/java/exopandora/worldhandler/gui/button/responder/SimpleResponder.java +++ /dev/null @@ -1,35 +0,0 @@ -package exopandora.worldhandler.gui.button.responder; - -import java.util.function.Consumer; - -import exopandora.worldhandler.format.TextFormatting; -import exopandora.worldhandler.gui.button.logic.ISliderResponder; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class SimpleResponder implements ISliderResponder -{ - private final Consumer valueConsumer; - - public SimpleResponder(Consumer valueConsumer) - { - this.valueConsumer = valueConsumer; - } - - @Override - public void setValue(Object id, int value) - { - this.valueConsumer.accept(value); - } - - @Override - public String getText(Object id, String format, int value) - { - String suffix = ": " + value; - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; - return TextFormatting.shortenString(format, 114 - fontRenderer.getStringWidth(suffix), fontRenderer) + suffix; - } -} diff --git a/src/main/java/exopandora/worldhandler/gui/category/Categories.java b/src/main/java/exopandora/worldhandler/gui/category/Categories.java index ecef943..2266ed1 100644 --- a/src/main/java/exopandora/worldhandler/gui/category/Categories.java +++ b/src/main/java/exopandora/worldhandler/gui/category/Categories.java @@ -2,10 +2,10 @@ package exopandora.worldhandler.gui.category; import exopandora.worldhandler.Main; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class Categories { public static final Category MAIN; @@ -29,7 +29,7 @@ public class Categories private static Category getRegisteredCategory(String name) { - Category category = Category.REGISTRY.getObject(new ResourceLocation(Main.MODID, name)); + Category category = Category.REGISTRY.get(new ResourceLocation(Main.MODID, name)); if(category == null) { diff --git a/src/main/java/exopandora/worldhandler/gui/category/Category.java b/src/main/java/exopandora/worldhandler/gui/category/Category.java index e9f000e..9898854 100644 --- a/src/main/java/exopandora/worldhandler/gui/category/Category.java +++ b/src/main/java/exopandora/worldhandler/gui/category/Category.java @@ -10,14 +10,17 @@ import exopandora.worldhandler.Main; import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Contents; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.RegistryNamespaced; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraft.util.registry.IRegistry; +import net.minecraft.util.registry.RegistryNamespacedDefaultedByKey; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistryEntry; -@SideOnly(Side.CLIENT) -public class Category +@OnlyIn(Dist.CLIENT) +public class Category extends ForgeRegistryEntry { - public static final RegistryNamespaced REGISTRY = new RegistryNamespaced(); + public static final String NAMESPACE = String.join("_", new String[] {Main.MODID, "category"}); + public static final IRegistry REGISTRY = IRegistry.func_212610_a(NAMESPACE, new RegistryNamespacedDefaultedByKey(new ResourceLocation(NAMESPACE, "main"))); private final List contents; diff --git a/src/main/java/exopandora/worldhandler/gui/config/GuiConfigWorldHandler.java b/src/main/java/exopandora/worldhandler/gui/config/GuiConfigWorldHandler.java deleted file mode 100644 index 15aa168..0000000 --- a/src/main/java/exopandora/worldhandler/gui/config/GuiConfigWorldHandler.java +++ /dev/null @@ -1,56 +0,0 @@ -package exopandora.worldhandler.gui.config; - -import java.util.ArrayList; -import java.util.List; - -import exopandora.worldhandler.Main; -import exopandora.worldhandler.WorldHandler; -import exopandora.worldhandler.config.ConfigButcher; -import exopandora.worldhandler.config.ConfigSettings; -import exopandora.worldhandler.config.ConfigSkin; -import exopandora.worldhandler.config.ConfigSliders; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.resources.I18n; -import net.minecraftforge.common.config.ConfigCategory; -import net.minecraftforge.common.config.ConfigElement; -import net.minecraftforge.fml.client.config.DummyConfigElement.DummyCategoryElement; -import net.minecraftforge.fml.client.config.GuiConfig; -import net.minecraftforge.fml.client.config.IConfigElement; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class GuiConfigWorldHandler extends GuiConfig -{ - public GuiConfigWorldHandler(GuiScreen parentScreen, List configElements) - { - super(parentScreen, configElements, Main.MODID, false, false, Main.NAME); - } - - public GuiConfigWorldHandler(GuiScreen parentScreen, ConfigCategory category) - { - this(parentScreen, new ConfigElement(category).getChildElements()); - } - - public GuiConfigWorldHandler(GuiScreen parentScreen, String category) - { - this(parentScreen, WorldHandler.CONFIG.getCategory(category)); - } - - public GuiConfigWorldHandler(GuiScreen parentScreen) - { - this(parentScreen, getConfigElements()); - } - - private static List getConfigElements() - { - List list = new ArrayList(); - - list.add(new DummyCategoryElement(I18n.format("gui.worldhandler.config.category.settings"), "gui.worldhandler.config", new ConfigElement(WorldHandler.CONFIG.getCategory(ConfigSettings.CATEGORY)).getChildElements())); - list.add(new DummyCategoryElement(I18n.format("gui.worldhandler.config.category.skin"), "gui.worldhandler.config", new ConfigElement(WorldHandler.CONFIG.getCategory(ConfigSkin.CATEGORY)).getChildElements())); - list.add(new DummyCategoryElement(I18n.format("gui.worldhandler.config.category.butcher"), "gui.worldhandler.config", new ConfigElement(WorldHandler.CONFIG.getCategory(ConfigButcher.CATEGORY)).getChildElements())); - list.add(new DummyCategoryElement(I18n.format("gui.worldhandler.config.category.sliders"), "gui.worldhandler.config", new ConfigElement(WorldHandler.CONFIG.getCategory(ConfigSliders.CATEGORY)).getChildElements())); - - return list; - } -} diff --git a/src/main/java/exopandora/worldhandler/gui/config/GuiFactoryWorldHandler.java b/src/main/java/exopandora/worldhandler/gui/config/GuiFactoryWorldHandler.java deleted file mode 100644 index f347e37..0000000 --- a/src/main/java/exopandora/worldhandler/gui/config/GuiFactoryWorldHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -package exopandora.worldhandler.gui.config; - -import java.util.Set; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.fml.client.IModGuiFactory; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class GuiFactoryWorldHandler implements IModGuiFactory -{ - @Override - public void initialize(Minecraft minecraft) - { - - } - - @Override - public Set runtimeGuiCategories() - { - return null; - } - - @Override - public boolean hasConfigGui() - { - return true; - } - - @Override - public GuiScreen createConfigGui(GuiScreen parentScreen) - { - return new GuiConfigWorldHandler(parentScreen); - } -} diff --git a/src/main/java/exopandora/worldhandler/gui/container/Container.java b/src/main/java/exopandora/worldhandler/gui/container/Container.java index aff9fe2..4875101 100644 --- a/src/main/java/exopandora/worldhandler/gui/container/Container.java +++ b/src/main/java/exopandora/worldhandler/gui/container/Container.java @@ -7,18 +7,31 @@ import exopandora.worldhandler.gui.content.element.Element; import exopandora.worldhandler.gui.content.element.IElement; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraft.client.gui.GuiTextField; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public abstract class Container extends GuiScreen implements IContainer { protected final List elements = new ArrayList(); @Override - public void add(GuiButton button) + public T add(T button) { - this.buttonList.add(button); + return super.addButton(button); + } + + public T add(T textfield) + { + this.children.add(textfield); + return textfield; + } + + @Override + public void initGui() + { + super.initGui(); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/container/IContainer.java b/src/main/java/exopandora/worldhandler/gui/container/IContainer.java index c52f260..a4fe7ed 100644 --- a/src/main/java/exopandora/worldhandler/gui/container/IContainer.java +++ b/src/main/java/exopandora/worldhandler/gui/container/IContainer.java @@ -1,16 +1,20 @@ package exopandora.worldhandler.gui.container; +import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.element.Element; import net.minecraft.client.gui.GuiButton; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public interface IContainer { - void add(GuiButton button); + T add(T button); + void initButtons(); void add(Element element); String getPlayer(); + + Content getContent(); } diff --git a/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java b/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandler.java similarity index 50% rename from src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java rename to src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandler.java index 3a7f08f..3568820 100644 --- a/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java +++ b/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandler.java @@ -1,776 +1,658 @@ -package exopandora.worldhandler.gui.container.impl; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.function.BiConsumer; - -import javax.annotation.Nullable; - -import com.google.common.base.Predicates; -import com.mojang.realmsclient.gui.ChatFormatting; - -import exopandora.worldhandler.WorldHandler; -import exopandora.worldhandler.builder.impl.BuilderDifficulty; -import exopandora.worldhandler.builder.impl.BuilderDifficulty.EnumDifficulty; -import exopandora.worldhandler.builder.impl.BuilderGamemode; -import exopandora.worldhandler.builder.impl.BuilderGamemode.EnumGamemode; -import exopandora.worldhandler.builder.impl.BuilderTime; -import exopandora.worldhandler.builder.impl.BuilderTime.EnumMode; -import exopandora.worldhandler.builder.impl.BuilderWeather; -import exopandora.worldhandler.builder.impl.BuilderWeather.EnumWeather; -import exopandora.worldhandler.builder.impl.BuilderWorldHandler; -import exopandora.worldhandler.config.ConfigSettings; -import exopandora.worldhandler.config.ConfigSkin; -import exopandora.worldhandler.format.TextFormatting; -import exopandora.worldhandler.gui.button.EnumIcon; -import exopandora.worldhandler.gui.button.EnumTooltip; -import exopandora.worldhandler.gui.button.GuiButtonTab; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; -import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; -import exopandora.worldhandler.gui.container.Container; -import exopandora.worldhandler.gui.content.Content; -import exopandora.worldhandler.gui.content.IContent; -import exopandora.worldhandler.gui.content.element.IElement; -import exopandora.worldhandler.helper.ResourceHelper; -import exopandora.worldhandler.util.UtilRender; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.resources.I18n; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.client.config.GuiUtils; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class GuiWorldHandlerContainer extends Container -{ - private final Content content; - private final int tabSize; - private final int bgTextureWidth = 248; - private final int bgTextureHeight = 166; - private final int tabDistance = 2; - private final int tabDistanceTotal; - private final double tabWidth; - private final double tabHalf; - private final double tabEpsilon; - private final String splash = this.getSplash(); - private final List finalButtons = new ArrayList(); - - private GuiTextFieldTooltip syntaxField; - private GuiTextFieldTooltip nameField; - - private static final BuilderWorldHandler BUILDER_WORLD_HANDLER = new BuilderWorldHandler(); - - public GuiWorldHandlerContainer(Content content) throws Exception - { - this.content = content; - this.tabSize = this.content.getCategory().getSize(); - this.tabDistanceTotal = Math.max(this.tabSize - 1, 1) * this.tabDistance; - this.tabWidth = (this.bgTextureWidth - this.tabDistanceTotal) / Math.max(this.tabSize, 2); - this.tabHalf = this.tabWidth / 2D; - this.tabEpsilon = this.bgTextureWidth - (this.tabDistanceTotal + this.tabHalf * Math.max(this.tabSize, 2) * 2D); - this.content.init(this); - } - - @Override - public void initGui() - { - try - { - this.finalButtons.clear(); - this.elements.clear(); - - //INIT - this.content.onPlayerNameChanged(this.getPlayer()); - this.content.initGui(this, this.getContentX(), this.getContentY()); - - //ELEMENTS - - for(IElement element : this.elements) - { - element.initGui(this); - } - - //SHORTCUTS - - final int x = this.width / 2 - 10; - final int delta = 21; - - if(ConfigSettings.areShortcutsEnabled()) - { - this.finalButtons.add(new GuiButtonWorldHandler(-1, x - delta * 7, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.dawn", ConfigSettings.getDawn())), EnumTooltip.RIGHT, EnumIcon.TIME_DAWN)); - this.finalButtons.add(new GuiButtonWorldHandler(-2, x - delta * 6, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.noon", ConfigSettings.getNoon())), EnumTooltip.RIGHT, EnumIcon.TIME_NOON)); - this.finalButtons.add(new GuiButtonWorldHandler(-3, x - delta * 5, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.sunset", ConfigSettings.getSunset())), EnumTooltip.RIGHT, EnumIcon.TIME_SUNSET)); - this.finalButtons.add(new GuiButtonWorldHandler(-4, x - delta * 4, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.midnight", ConfigSettings.getMidnight())), EnumTooltip.RIGHT, EnumIcon.TIME_MIDNIGHT)); - this.finalButtons.add(new GuiButtonWorldHandler(-5, x - delta * 3, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.weather", I18n.format("gui.worldhandler.shortcuts.tooltip.weather.clear")), EnumTooltip.RIGHT, EnumIcon.WEATHER_SUN)); - this.finalButtons.add(new GuiButtonWorldHandler(-6, x - delta * 2, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.weather", I18n.format("gui.worldhandler.shortcuts.tooltip.weather.rainy")), EnumTooltip.RIGHT, EnumIcon.WEATHER_RAIN)); - this.finalButtons.add(new GuiButtonWorldHandler(-7, x - delta * 1, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.weather", I18n.format("gui.worldhandler.shortcuts.tooltip.weather.thunder")), EnumTooltip.RIGHT, EnumIcon.WEATHER_STORM)); - this.finalButtons.add(new GuiButtonWorldHandler(-8, x - delta * 0, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.peaceful")), EnumTooltip.RIGHT, EnumIcon.DIFFICULTY_PEACEFUL)); - this.finalButtons.add(new GuiButtonWorldHandler(-9, x + delta * 1, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.easy")), EnumTooltip.RIGHT, EnumIcon.DIFFICULTY_EASY)); - this.finalButtons.add(new GuiButtonWorldHandler(-10, x + delta * 2, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.normal")), EnumTooltip.RIGHT, EnumIcon.DIFFICULTY_NORMAL)); - this.finalButtons.add(new GuiButtonWorldHandler(-11, x + delta * 3, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.hard")), EnumTooltip.RIGHT, EnumIcon.DIFFICULTY_HARD)); - this.finalButtons.add(new GuiButtonWorldHandler(-12, x + delta * 4, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.survival")), EnumTooltip.RIGHT, EnumIcon.GAMEMODE_SURVIVAL)); - this.finalButtons.add(new GuiButtonWorldHandler(-13, x + delta * 5, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.creative")), EnumTooltip.RIGHT, EnumIcon.GAMEMODE_CREATIVE)); - this.finalButtons.add(new GuiButtonWorldHandler(-14, x + delta * 6, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.adventure")), EnumTooltip.RIGHT, EnumIcon.GAMEMODE_ADVENTURE)); - this.finalButtons.add(new GuiButtonWorldHandler(-15, x + delta * 7, 0, 20, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.spectator")), EnumTooltip.RIGHT, EnumIcon.GAMEMODE_SPECTATOR)); - } - - //SYNTAX - - if(ConfigSettings.isCommandSyntaxEnabled()) - { - this.syntaxField = new GuiTextFieldTooltip(x - delta * 7 + 1, this.height - 22, delta * 15 - 3, 20); - this.updateSyntax(); - } - - //NAME - - this.nameField = new GuiTextFieldTooltip(0, 0, 0, 11); - this.nameField.setMaxStringLength(16); - this.nameField.setText(this.getPlayer()); - this.updateNameField(); - - final int backgroundX = this.getBackgroundX(); - final int backgroundY = this.getBackgroundY(); - - this.forEachTab((index, xOffset) -> - { - IContent tab = this.content.getCategory().getContent(index); - - if(!this.content.getActiveContent().equals(tab)) - { - this.finalButtons.add(new GuiButtonTab(-16, (int) (backgroundX + xOffset), backgroundY - 20, (int) this.tabWidth + (int) Math.ceil(this.tabEpsilon / this.tabSize), 21, index)); - } - }); - - //BUTTONS - - this.initButtons(); - } - catch(Exception e) - { - WorldHandler.throwError(e); - } - } - - public void initButtons() - { - this.buttonList.clear(); - - this.content.initButtons(this, this.getContentX(), this.getContentY()); - - if(this.finalButtons != null && !this.finalButtons.isEmpty()) - { - this.buttonList.addAll(this.finalButtons); - } - - for(IElement element : this.elements) - { - element.initButtons(this); - } - } - - private int getContentX() - { - return (this.width - this.bgTextureWidth) / 2 + 8 + this.getXOffset(); - } - - private int getContentY() - { - return this.height / 2 - 50 + this.getYOffset(); - } - - private int getXOffset() - { - return 0; - } - - private int getYOffset() - { - return ConfigSettings.areShortcutsEnabled() ? 11 : 8; - } - - @Override - public void updateScreen() - { - try - { - this.content.updateScreen(this); - this.updateSyntax(); - } - catch(Exception e) - { - WorldHandler.throwError(e); - } - } - - private int getBackgroundX() - { - return (this.width - this.bgTextureWidth) / 2 + this.getXOffset(); - } - - private int getBackgroundY() - { - return (this.height - this.bgTextureHeight) / 2 + this.getYOffset(); - } - - private int getWatchOffset() - { - return ConfigSettings.isWatchEnabled() ? 9 : 0; - } - - private void forEachTab(BiConsumer consumer) - { - double xOffset = 0D; - - for(int index = 0; index < this.tabSize; index++) - { - consumer.accept(index, xOffset); - xOffset += this.tabWidth + this.tabDistance + this.tabEpsilon / this.tabSize; - } - } - - private void updateSyntax() - { - if(ConfigSettings.isCommandSyntaxEnabled() && this.syntaxField != null) - { - if(!this.syntaxField.isFocused()) - { - this.syntaxField.setValidator(Predicates.alwaysTrue()); - - if(this.content.getCommandBuilder() != null) - { - this.syntaxField.setText(this.content.getCommandBuilder().toCommand()); - } - else - { - this.syntaxField.setText(BUILDER_WORLD_HANDLER.toCommand()); - } - - this.syntaxField.setValidator(string -> string.equals(this.syntaxField.getText())); - this.syntaxField.setCursorPositionZero(); - } - } - } - - private void updateNameField() - { - final int backgroundX = this.getBackgroundX(); - final int backgroundY = this.getBackgroundY(); - - if(WorldHandler.USERNAME.isEmpty()) - { - int width = this.fontRenderer.getStringWidth(I18n.format("gui.worldhandler.generic.edit_username")) + 2; - - this.nameField.setWidth(width); - this.nameField.setPosition(backgroundX + this.bgTextureWidth - this.getWatchOffset() - 7 - (this.fontRenderer.getStringWidth(this.content.getTitle()) + 2), backgroundY + 6); - } - else - { - int width = this.fontRenderer.getStringWidth(WorldHandler.USERNAME) + 2; - - this.nameField.setWidth(width); - this.nameField.setPosition(backgroundX + this.bgTextureWidth - this.getWatchOffset() - 7 - width, backgroundY + 6); - this.content.onPlayerNameChanged(WorldHandler.USERNAME); - } - } - - @Override - protected void actionPerformed(GuiButton button) throws IOException - { - try - { - buttons: - switch(button.id) - { - case 1: - Minecraft.getMinecraft().displayGuiScreen((GuiScreen) null); - Minecraft.getMinecraft().setIngameFocus(); - break; - case 0: - if(this.content.getBackContent() != null) - { - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(this.content.getBackContent())); - } - break; - case -1: - WorldHandler.sendCommand(new BuilderTime(EnumMode.SET, ConfigSettings.getDawn())); - break; - case -2: - WorldHandler.sendCommand(new BuilderTime(EnumMode.SET, ConfigSettings.getNoon())); - break; - case -3: - WorldHandler.sendCommand(new BuilderTime(EnumMode.SET, ConfigSettings.getSunset())); - break; - case -4: - WorldHandler.sendCommand(new BuilderTime(EnumMode.SET, ConfigSettings.getMidnight())); - break; - case -5: - WorldHandler.sendCommand(new BuilderWeather(EnumWeather.CLEAR)); - break; - case -6: - WorldHandler.sendCommand(new BuilderWeather(EnumWeather.RAIN)); - break; - case -7: - WorldHandler.sendCommand(new BuilderWeather(EnumWeather.THUNDER)); - break; - case -8: - WorldHandler.sendCommand(new BuilderDifficulty(EnumDifficulty.PEACEFUL)); - break; - case -9: - WorldHandler.sendCommand(new BuilderDifficulty(EnumDifficulty.EASY)); - break; - case -10: - WorldHandler.sendCommand(new BuilderDifficulty(EnumDifficulty.NORMAL)); - break; - case -11: - WorldHandler.sendCommand(new BuilderDifficulty(EnumDifficulty.HARD)); - break; - case -12: - WorldHandler.sendCommand(new BuilderGamemode(EnumGamemode.SURVIVAL)); - break; - case -13: - WorldHandler.sendCommand(new BuilderGamemode(EnumGamemode.CREATIVE)); - break; - case -14: - WorldHandler.sendCommand(new BuilderGamemode(EnumGamemode.ADVENTURE)); - break; - case -15: - WorldHandler.sendCommand(new BuilderGamemode(EnumGamemode.SPECTATOR)); - break; - case -16: - if(button instanceof GuiButtonTab) - { - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(this.content.getCategory().getContent(((GuiButtonTab)button).getIndex()))); - } - break; - default: - for(IElement element : this.elements) - { - if(element.actionPerformed(this, button)) - { - break buttons; - } - } - this.content.actionPerformed(this, button); - break; - } - } - catch(Exception e) - { - WorldHandler.throwError(e); - } - } - - private void defaultColor() - { - this.defaultColor(1.0F); - } - - private void defaultColor(float alpha) - { - GlStateManager.enableBlend(); - GlStateManager.color((float) ConfigSkin.getBackgroundRed() / 255, (float) ConfigSkin.getBackgroundGreen() / 255, (float) ConfigSkin.getBackgroundBlue() / 255, alpha * (float) ConfigSkin.getBackgroundAlpha() / 255); - } - - private void darkColor() - { - GlStateManager.enableBlend(); - GlStateManager.color((float) ConfigSkin.getBackgroundRed() / 255 - 0.3F, (float) ConfigSkin.getBackgroundGreen() / 255 - 0.3F, (float) ConfigSkin.getBackgroundBlue() / 255 - 0.3F, (float) ConfigSkin.getBackgroundAlpha() / 255); - } - - private void bindBackground() - { - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceHelper.getBackgroundTexture()); - } - - @Nullable - protected String getSplash() - { - Calendar calendar = Calendar.getInstance(); - int day = calendar.get(Calendar.DAY_OF_MONTH); - int month = calendar.get(Calendar.MONTH) + 1; - - if(day == 12 && month == 24) - { - return "Merry X-mas!"; - } - else if(day == 1 && month == 1) - { - return "Happy new year!"; - } - else if(day == 10 && month == 31) - { - return "OOoooOOOoooo! Spooky!"; - } - else if(day == 3 && month == 28) - { - return (calendar.get(Calendar.YEAR) - 2013) + " Years of World Handler!"; - } - - return null; - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) - { - try - { - final int backgroundX = this.getBackgroundX(); - final int backgroundY = this.getBackgroundY(); - - //DEFAULT BACKGROUND - - if(ConfigSkin.isBackgroundDrawingEnabled()) - { - super.drawDefaultBackground(); - } - - //COLOR - - this.defaultColor(); - - //BACKGROUND - - this.bindBackground(); - this.drawTexturedModalRect(backgroundX, backgroundY, 0, 0, this.bgTextureWidth, this.bgTextureHeight); - - //TABS - - this.forEachTab((index, xOffset) -> - { - IContent tab = this.content.getCategory().getContent(index); - int yOffset; - int fHeight; - int color; - - if(this.content.getActiveContent().equals(tab)) - { - yOffset = -22; - fHeight = 25; - color = 0xFFFFFF; - this.defaultColor(); - } - else - { - yOffset = -20; - fHeight = 20; - color = 0xE0E0E0; - this.darkColor(); - } - - this.bindBackground(); - this.drawTexturedModalRect((int) (backgroundX + xOffset), (int) (backgroundY + yOffset), 0, 0, (int) Math.ceil(this.tabHalf), fHeight); - this.drawTexturedModalRect((int) (backgroundX + this.tabHalf + xOffset), (int) (backgroundY + yOffset), this.bgTextureWidth - (int) Math.ceil(this.tabHalf), 0, (int) Math.ceil(this.tabHalf), fHeight); - - if(!ConfigSkin.areSharpEdgesEnabled()) - { - if(this.content.getActiveContent().equals(tab)) - { - //RIGHT TAB CURVATURE - - if(index < this.tabSize - 1 || this.tabSize == 1) - { - int factor = 2; - - for(int x = 0; x < factor; x++) - { - this.drawTexturedModalRect((int) (backgroundX + this.tabWidth + xOffset - x - 1), (int) (backgroundY + x + 1), (int) (this.tabWidth - x - 1), x + 1, x + 1, 1); - } - } - - //LEFT TAB CURVATURE - - if(index > 0) - { - int factor = 2; - - for(int x = 0; x < factor; x++) - { - this.drawTexturedModalRect((int) (backgroundX + xOffset), (int) (backgroundY + x + 1), xOffset.intValue(), x + 1, x + 1, 1); - } - } - - int width = (int)(this.tabWidth - 3); - int interval = 5; - - //LEFT GRADIENT - - if(index == 0) - { - for(int x = 0; x < width; x += interval) - { - this.defaultColor(1.0F - (x / (width + 5.0F * interval))); - this.drawTexturedModalRect((int) (backgroundX + xOffset), (int) (backgroundY + yOffset + fHeight + x / interval), 0, fHeight, width - x, 1); - } - } - - //RIGHT GRADIENT - - if(index == this.tabSize - 1 && this.tabSize > 1) - { - int offset = 3; - - for(int x = 0; x < width; x += interval) - { - this.defaultColor(1.0F - (x / (width + 5.0F * interval))); - this.drawTexturedModalRect((int) (backgroundX + Math.ceil(xOffset) + x + offset), (int) (backgroundY + yOffset + fHeight + x / interval), this.bgTextureWidth - width + x, fHeight, width - x, 1); - } - } - } - else - { - //LEFT CORNER FILLER - - if(index == 0) - { - int factor = 2; - - for(int x = 0; x < factor; x++) - { - this.drawTexturedModalRect(backgroundX, backgroundY + x, 0, fHeight, factor - x, 1); - } - } - - //RIGHT CORNER FILLER - - if(index == this.tabSize - 1) - { - int factor = 3; - - for(int x = 0; x < factor + 1; x++) - { - this.drawTexturedModalRect(backgroundX + this.bgTextureWidth - x, backgroundY + factor - x, this.bgTextureWidth - x, fHeight, x, 1); - } - } - } - } - - this.drawCenteredString(this.fontRenderer, ChatFormatting.UNDERLINE + tab.getTabTitle(), (int) (backgroundX + this.tabHalf + xOffset), (int) (backgroundY - 13), color); - }); - - this.defaultColor(); - - //VERSION LABEL - - final String label = "$mcversion-$version"; - final int hexAlpha = (int) (0xFF * 0.2) << 24; - final int color = ConfigSkin.getLabelColor() + hexAlpha; - final int versionWidth = this.width - this.fontRenderer.getStringWidth(label) - 2; - final int versionHeight = this.height - 10; - - this.fontRenderer.drawString(label, versionWidth, versionHeight, color); - - //TITLE - - final int maxWidth = this.bgTextureWidth - 7 - 2 - this.fontRenderer.getStringWidth(WorldHandler.USERNAME) - 2 - this.getWatchOffset() - 7; - this.fontRenderer.drawString(TextFormatting.shortenString(this.content.getTitle(), maxWidth, this.fontRenderer), backgroundX + 7, backgroundY + 7, ConfigSkin.getLabelColor()); - - //HEADLINE - - if(this.content.getHeadline() != null) - { - if(this.content.getHeadline().length > 0) - { - this.fontRenderer.drawString(this.content.getHeadline()[0], backgroundX + 8, backgroundY + 22, ConfigSkin.getHeadlineColor()); - } - - if(this.content.getHeadline().length > 1) - { - this.fontRenderer.drawString(this.content.getHeadline()[1], backgroundX + 126, backgroundY + 22, ConfigSkin.getHeadlineColor()); - } - } - - //NAME FIELD - - final String username = WorldHandler.USERNAME.isEmpty() && !this.nameField.isFocused() ? I18n.format("gui.worldhandler.generic.edit_username") : WorldHandler.USERNAME; - this.fontRenderer.drawString(username, backgroundX + 232 - this.fontRenderer.getStringWidth(username), backgroundY + 7, ConfigSkin.getLabelColor()); - - //WATCH - - if(ConfigSettings.isWatchEnabled()) - { - final int watchX = backgroundX + 233; - final int watchY = backgroundY + 5; - - UtilRender.drawWatchIntoGui(this, watchX, watchY, Minecraft.getMinecraft().world.getWorldInfo().getWorldTime(), ConfigSettings.isSmoothWatchEnabled()); - - if(ConfigSettings.areTooltipsEnabled()) - { - if(mouseX >= watchX && mouseX <= watchX + 9 && mouseY >= watchY && mouseY <= watchY + 9) - { - GuiUtils.drawHoveringText(Arrays.asList(TextFormatting.getWorldTime(Minecraft.getMinecraft().world.getWorldTime())), mouseX, mouseY + 9, this.width, this.height, this.width, this.fontRenderer); - GlStateManager.disableLighting(); - } - } - } - - //BUTTONS - - for(int x = 0; x < this.buttonList.size(); x++) - { - this.buttonList.get(x).drawButton(this.mc, mouseX, mouseY, partialTicks); - } - - for(int x = 0; x < this.labelList.size(); x++) - { - this.labelList.get(x).drawLabel(this.mc, mouseX, mouseY); - } - - //CONTAINER - - this.content.drawScreen(this, this.getContentX(), this.getContentY(), mouseX, mouseY, partialTicks); - - //CONTAINER ELEMENTS - - for(IElement element : this.elements) - { - element.draw(); - } - - //SYNTAX - - if(ConfigSettings.isCommandSyntaxEnabled() && this.syntaxField != null) - { - this.syntaxField.drawTextBox(); - } - - //SPLASHTEXT - - if(this.splash != null) - { - GlStateManager.pushMatrix(); - RenderHelper.enableGUIStandardItemLighting(); - GlStateManager.disableLighting(); - GlStateManager.translate((float) (backgroundX + 212), backgroundY + 15, 0.0F); - GlStateManager.rotate(17.0F, 0.0F, 0.0F, 1.0F); - - float scale = 1.1F - MathHelper.abs(MathHelper.sin((float) (Minecraft.getSystemTime() % 1000L) / 1000.0F * (float) Math.PI * 2.0F) * 0.1F); - scale = scale * 100.0F / this.fontRenderer.getStringWidth(this.splash); - GlStateManager.scale(scale, scale, scale); - - this.drawCenteredString(this.fontRenderer, this.splash, 0, (int) scale, 0xFFFF00); - - GlStateManager.popMatrix(); - } - - //TOOLTIPS - - if(ConfigSettings.areTooltipsEnabled()) - { - for(int x = 0; x < this.buttonList.size(); x++) - { - if(this.buttonList.get(x) instanceof GuiButtonWorldHandler) - { - ((GuiButtonWorldHandler) this.buttonList.get(x)).drawTooltip(mouseX, mouseY, this.width, this.height); - } - } - } - - //VERSION LABEL TOOLTIP - - if(mouseX >= versionWidth && mouseY >= versionHeight) - { - GuiUtils.drawHoveringText(Arrays.asList(label), versionWidth - 12, versionHeight + 12, this.width + this.fontRenderer.getStringWidth(label), this.height + 10, this.width, this.fontRenderer); - } - } - catch(Exception e) - { - WorldHandler.throwError(e); - } - } - - @Override - protected void keyTyped(char charTyped, int keyCode) throws IOException - { - try - { - super.keyTyped(charTyped, keyCode); - - this.content.keyTyped(this, charTyped, keyCode); - - if(this.nameField.isFocused()) - { - this.nameField.textboxKeyTyped(charTyped, keyCode); - WorldHandler.USERNAME = this.nameField.getText(); - this.updateNameField(); - } - - if(ConfigSettings.isCommandSyntaxEnabled() && this.syntaxField != null) - { - this.syntaxField.textboxKeyTyped(charTyped, keyCode); - } - - for(IElement element : this.elements) - { - element.keyTyped(this, charTyped, keyCode); - } - } - catch(Exception e) - { - WorldHandler.throwError(e); - } - } - - @Override - protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException - { - try - { - super.mouseClicked(mouseX, mouseY, mouseButton); - - this.content.mouseClicked(mouseX, mouseY, mouseButton); - this.nameField.mouseClicked(mouseX, mouseY, mouseButton); - - if(this.nameField.isFocused()) - { - this.nameField.setCursorPositionEnd(); - } - - if(ConfigSettings.isCommandSyntaxEnabled() && this.syntaxField != null) - { - this.syntaxField.mouseClicked(mouseX, mouseY, mouseButton); - } - - for(IElement element : this.elements) - { - element.mouseClicked(mouseX, mouseY, mouseButton); - } - } - catch(Exception e) - { - WorldHandler.throwError(e); - } - } - - @Override - public void onGuiClosed() - { - try - { - this.content.onGuiClosed(); - } - catch(Exception e) - { - WorldHandler.throwError(e); - } - } - - @Override - public boolean doesGuiPauseGame() - { - return ConfigSettings.isPauseEnabled(); - } - - @Override - public String getPlayer() - { - return WorldHandler.USERNAME; - } +package exopandora.worldhandler.gui.container.impl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.function.BiConsumer; + +import javax.annotation.Nullable; + +import com.google.common.base.Predicates; +import com.mojang.realmsclient.gui.ChatFormatting; + +import exopandora.worldhandler.Main; +import exopandora.worldhandler.WorldHandler; +import exopandora.worldhandler.builder.impl.BuilderWorldHandler; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.format.TextFormatting; +import exopandora.worldhandler.gui.button.EnumIcon; +import exopandora.worldhandler.gui.button.GuiButtonIcon; +import exopandora.worldhandler.gui.button.GuiButtonTab; +import exopandora.worldhandler.gui.button.GuiButtonTooltip; +import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; +import exopandora.worldhandler.gui.container.Container; +import exopandora.worldhandler.gui.content.Content; +import exopandora.worldhandler.gui.content.IContent; +import exopandora.worldhandler.gui.content.element.IElement; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.ResourceHelper; +import exopandora.worldhandler.util.UtilRender; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.client.config.GuiUtils; + +@OnlyIn(Dist.CLIENT) +public class GuiWorldHandler extends Container +{ + private final Content content; + private final int tabSize; + private final int bgTextureWidth = 248; + private final int bgTextureHeight = 166; + private final int tabDistance = 2; + private final int tabDistanceTotal; + private final double tabWidth; + private final double tabHalf; + private final double tabEpsilon; + private final String splash = this.getSplash(); + private final List finalButtons = new ArrayList(); + + private GuiTextFieldTooltip syntaxField; + private GuiTextFieldTooltip nameField; + + private static final BuilderWorldHandler BUILDER_WORLD_HANDLER = new BuilderWorldHandler(); + + public GuiWorldHandler(Content content) throws Exception + { + this.content = content; + this.tabSize = this.content.getCategory().getSize(); + this.tabDistanceTotal = Math.max(this.tabSize - 1, 1) * this.tabDistance; + this.tabWidth = (this.bgTextureWidth - this.tabDistanceTotal) / Math.max(this.tabSize, 2); + this.tabHalf = this.tabWidth / 2D; + this.tabEpsilon = this.bgTextureWidth - (this.tabDistanceTotal + this.tabHalf * Math.max(this.tabSize, 2) * 2D); + this.content.init(this); + } + + @Override + public void initGui() + { + super.initGui(); + + ActionHelper.tryRun(() -> + { + this.finalButtons.clear(); + this.elements.clear(); + this.buttons.clear(); + this.children.clear(); + + //INIT + this.content.onPlayerNameChanged(this.getPlayer()); + this.content.initGui(this, this.getContentX(), this.getContentY()); + + //ELEMENTS + + for(IElement element : this.elements) + { + element.initGui(this); + } + + //SHORTCUTS + + final int x = this.width / 2 - 10; + final int delta = 21; + + if(Config.getSettings().shortcuts()) + { + this.finalButtons.add(new GuiButtonIcon(x - delta * 7, 0, 20, 20, EnumIcon.TIME_DAWN, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.dawn", Config.getSettings().getDawn())), ActionHelper::timeDawn)); + this.finalButtons.add(new GuiButtonIcon(x - delta * 6, 0, 20, 20, EnumIcon.TIME_NOON, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.noon", Config.getSettings().getNoon())), ActionHelper::timeNoon)); + this.finalButtons.add(new GuiButtonIcon(x - delta * 5, 0, 20, 20, EnumIcon.TIME_SUNSET, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.sunset", Config.getSettings().getSunset())), ActionHelper::timeSunset)); + this.finalButtons.add(new GuiButtonIcon(x - delta * 4, 0, 20, 20, EnumIcon.TIME_MIDNIGHT, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.midnight", Config.getSettings().getMidnight())), ActionHelper::timeMidnight)); + this.finalButtons.add(new GuiButtonIcon(x - delta * 3, 0, 20, 20, EnumIcon.WEATHER_SUN, I18n.format("gui.worldhandler.shortcuts.tooltip.weather", I18n.format("gui.worldhandler.shortcuts.tooltip.weather.clear")), ActionHelper::weatherClear)); + this.finalButtons.add(new GuiButtonIcon(x - delta * 2, 0, 20, 20, EnumIcon.WEATHER_RAIN, I18n.format("gui.worldhandler.shortcuts.tooltip.weather", I18n.format("gui.worldhandler.shortcuts.tooltip.weather.rainy")), ActionHelper::weatherRain)); + this.finalButtons.add(new GuiButtonIcon(x - delta * 1, 0, 20, 20, EnumIcon.WEATHER_STORM, I18n.format("gui.worldhandler.shortcuts.tooltip.weather", I18n.format("gui.worldhandler.shortcuts.tooltip.weather.thunder")), ActionHelper::weatherThunder)); + this.finalButtons.add(new GuiButtonIcon(x - delta * 0, 0, 20, 20, EnumIcon.DIFFICULTY_PEACEFUL, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.peaceful")), ActionHelper::difficultyPeaceful)); + this.finalButtons.add(new GuiButtonIcon(x + delta * 1, 0, 20, 20, EnumIcon.DIFFICULTY_EASY, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.easy")), ActionHelper::difficultyEasy)); + this.finalButtons.add(new GuiButtonIcon(x + delta * 2, 0, 20, 20, EnumIcon.DIFFICULTY_NORMAL, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.normal")), ActionHelper::difficultyNormal)); + this.finalButtons.add(new GuiButtonIcon(x + delta * 3, 0, 20, 20, EnumIcon.DIFFICULTY_HARD, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.hard")), ActionHelper::difficultyHard)); + this.finalButtons.add(new GuiButtonIcon(x + delta * 4, 0, 20, 20, EnumIcon.GAMEMODE_SURVIVAL, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.survival")), ActionHelper::gamemodeSurvival)); + this.finalButtons.add(new GuiButtonIcon(x + delta * 5, 0, 20, 20, EnumIcon.GAMEMODE_CREATIVE, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.creative")), ActionHelper::gamemodeCreative)); + this.finalButtons.add(new GuiButtonIcon(x + delta * 6, 0, 20, 20, EnumIcon.GAMEMODE_ADVENTURE, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.adventure")), ActionHelper::gamemodeAdventure)); + this.finalButtons.add(new GuiButtonIcon(x + delta * 7, 0, 20, 20, EnumIcon.GAMEMODE_SPECTATOR, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.spectator")), ActionHelper::gamemodeSpectator)); + } + + //SYNTAX + + if(Config.getSettings().commandSyntax()) + { + this.syntaxField = new GuiTextFieldTooltip(x - delta * 7 + 1, this.height - 22, delta * 15 - 3, 20); + this.updateSyntax(); + } + + //NAME + + this.nameField = new GuiTextFieldTooltip(0, 0, 0, 11); + this.nameField.setMaxStringLength(16); + this.nameField.setText(this.getPlayer()); + this.nameField.setTextAcceptHandler((id, text) -> + { + WorldHandler.USERNAME = text; + this.updateNameField(); + }); + this.updateNameField(); + + final int backgroundX = this.getBackgroundX(); + final int backgroundY = this.getBackgroundY(); + + this.forEachTab((index, xOffset) -> + { + IContent tab = this.content.getCategory().getContent(index); + + if(!this.content.getActiveContent().equals(tab)) + { + this.finalButtons.add(new GuiButtonTab((int) (backgroundX + xOffset), backgroundY - 20, (int) this.tabWidth + (int) Math.ceil(this.tabEpsilon / this.tabSize), 21) + { + @Override + public void onClick(double mouseX, double mouseY) + { + ActionHelper.changeTab(GuiWorldHandler.this.content, index); + } + }); + } + }); + + //BUTTONS + + this.initButtons(); + }); + } + + public void initButtons() + { + this.buttons.clear(); + this.children.clear(); + this.content.initButtons(this, this.getContentX(), this.getContentY()); + + if(this.finalButtons != null && !this.finalButtons.isEmpty()) + { + this.finalButtons.forEach(this::add); + } + + if(Config.getSettings().commandSyntax()) + { + this.add(this.syntaxField); + } + + this.add(this.nameField); + + for(IElement element : this.elements) + { + element.initButtons(this); + } + } + + private int getContentX() + { + return (this.width - this.bgTextureWidth) / 2 + 8 + this.getXOffset(); + } + + private int getContentY() + { + return this.height / 2 - 50 + this.getYOffset(); + } + + private int getXOffset() + { + return 0; + } + + private int getYOffset() + { + return Config.getSettings().shortcuts() ? 11 : 8; + } + + @Override + public void tick() + { + ActionHelper.tryRun(this::update); + } + + private void update() + { + this.content.tick(this); + + for(IElement element : this.elements) + { + element.tick(); + } + + this.updateSyntax(); + } + + private int getBackgroundX() + { + return (this.width - this.bgTextureWidth) / 2 + this.getXOffset(); + } + + private int getBackgroundY() + { + return (this.height - this.bgTextureHeight) / 2 + this.getYOffset(); + } + + private int getWatchOffset() + { + return Config.getSettings().watch() ? 9 : 0; + } + + private void forEachTab(BiConsumer consumer) + { + double xOffset = 0D; + + for(int index = 0; index < this.tabSize; index++) + { + consumer.accept(index, xOffset); + xOffset += this.tabWidth + this.tabDistance + this.tabEpsilon / this.tabSize; + } + } + + private void updateSyntax() + { + if(Config.getSettings().commandSyntax() && this.syntaxField != null) + { + if(!this.syntaxField.isFocused()) + { + this.syntaxField.setValidator(Predicates.alwaysTrue()); + + if(this.content.getCommandBuilder() != null) + { + this.syntaxField.setText(this.content.getCommandBuilder().toCommand()); + } + else + { + this.syntaxField.setText(BUILDER_WORLD_HANDLER.toCommand()); + } + + this.syntaxField.setValidator(string -> string.equals(this.syntaxField.getText())); + this.syntaxField.setCursorPositionZero(); + } + + this.syntaxField.tick(); + } + } + + private void updateNameField() + { + final int backgroundX = this.getBackgroundX(); + final int backgroundY = this.getBackgroundY(); + + if(WorldHandler.USERNAME.isEmpty()) + { + int width = this.fontRenderer.getStringWidth(I18n.format("gui.worldhandler.generic.edit_username")) + 2; + this.nameField.setWidth(width); + this.nameField.setPosition(backgroundX + this.bgTextureWidth - this.getWatchOffset() - 7 - (this.fontRenderer.getStringWidth(this.content.getTitle()) + 2), backgroundY + 6); + } + else + { + int width = this.fontRenderer.getStringWidth(WorldHandler.USERNAME) + 2; + this.nameField.setWidth(width); + this.nameField.setPosition(backgroundX + this.bgTextureWidth - this.getWatchOffset() - 7 - width, backgroundY + 6); + } + + this.content.onPlayerNameChanged(WorldHandler.USERNAME); + } + + private void defaultColor() + { + this.defaultColor(1.0F); + } + + private void defaultColor(float alpha) + { + GlStateManager.enableBlend(); + GlStateManager.color4f(Config.getSkin().getBackgroundRedF(), Config.getSkin().getBackgroundGreenF(), Config.getSkin().getBackgroundBlueF(), alpha * Config.getSkin().getBackgroundAlphaF()); + } + + private void darkColor() + { + GlStateManager.enableBlend(); + GlStateManager.color4f(Config.getSkin().getBackgroundRedF() - 0.3F, Config.getSkin().getBackgroundGreenF() - 0.3F, Config.getSkin().getBackgroundBlueF() - 0.3F, Config.getSkin().getBackgroundAlphaF()); + } + + private void bindBackground() + { + Minecraft.getInstance().getTextureManager().bindTexture(ResourceHelper.getBackgroundTexture()); + } + + @Nullable + protected String getSplash() + { + Calendar calendar = Calendar.getInstance(); + int day = calendar.get(Calendar.DAY_OF_MONTH); + int month = calendar.get(Calendar.MONTH) + 1; + + if(day == 12 && month == 24) + { + return "Merry X-mas!"; + } + else if(day == 1 && month == 1) + { + return "Happy new year!"; + } + else if(day == 10 && month == 31) + { + return "OOoooOOOoooo! Spooky!"; + } + else if(day == 3 && month == 28) + { + return (calendar.get(Calendar.YEAR) - 2013) + " Years of World Handler!"; + } + + return null; + } + + @Override + public void render(int mouseX, int mouseY, float partialTicks) + { + ActionHelper.tryRun(() -> + { + final int backgroundX = this.getBackgroundX(); + final int backgroundY = this.getBackgroundY(); + + //DEFAULT BACKGROUND + + if(Config.getSkin().drawBackground()) + { + super.drawDefaultBackground(); + } + + //COLOR + + this.defaultColor(); + + //BACKGROUND + + this.bindBackground(); + this.drawTexturedModalRect(backgroundX, backgroundY, 0, 0, this.bgTextureWidth, this.bgTextureHeight); + + //TABS + + this.forEachTab((index, xOffset) -> + { + IContent tab = this.content.getCategory().getContent(index); + int yOffset; + int fHeight; + int color; + + if(this.content.getActiveContent().equals(tab)) + { + yOffset = -22; + fHeight = 25; + color = 0xFFFFFF; + this.defaultColor(); + } + else + { + yOffset = -20; + fHeight = 20; + color = 0xE0E0E0; + this.darkColor(); + } + + this.bindBackground(); + this.drawTexturedModalRect((int) (backgroundX + xOffset), (int) (backgroundY + yOffset), 0, 0, (int) Math.ceil(this.tabHalf), fHeight); + this.drawTexturedModalRect((int) (backgroundX + this.tabHalf + xOffset), (int) (backgroundY + yOffset), this.bgTextureWidth - (int) Math.ceil(this.tabHalf), 0, (int) Math.ceil(this.tabHalf), fHeight); + + if(!Config.getSkin().sharpEdges()) + { + if(this.content.getActiveContent().equals(tab)) + { + //RIGHT TAB CURVATURE + + if(index < this.tabSize - 1 || this.tabSize == 1) + { + int factor = 2; + + for(int x = 0; x < factor; x++) + { + this.drawTexturedModalRect((int) (backgroundX + this.tabWidth + xOffset - x - 1), (int) (backgroundY + x + 1), (int) (this.tabWidth - x - 1), x + 1, x + 1, 1); + } + } + + //LEFT TAB CURVATURE + + if(index > 0) + { + int factor = 2; + + for(int x = 0; x < factor; x++) + { + this.drawTexturedModalRect((int) (backgroundX + xOffset), (int) (backgroundY + x + 1), xOffset.intValue(), x + 1, x + 1, 1); + } + } + + int width = (int)(this.tabWidth - 3); + int interval = 5; + + //LEFT GRADIENT + + if(index == 0) + { + for(int x = 0; x < width; x += interval) + { + this.defaultColor(1.0F - (x / (width + 5.0F * interval))); + this.drawTexturedModalRect((int) (backgroundX + xOffset), (int) (backgroundY + yOffset + fHeight + x / interval), 0, fHeight, width - x, 1); + } + } + + //RIGHT GRADIENT + + if(index == this.tabSize - 1 && this.tabSize > 1) + { + int offset = 3; + + for(int x = 0; x < width; x += interval) + { + this.defaultColor(1.0F - (x / (width + 5.0F * interval))); + this.drawTexturedModalRect((int) (backgroundX + Math.ceil(xOffset) + x + offset), (int) (backgroundY + yOffset + fHeight + x / interval), this.bgTextureWidth - width + x, fHeight, width - x, 1); + } + } + } + else + { + //LEFT CORNER FILLER + + if(index == 0) + { + int factor = 2; + + for(int x = 0; x < factor; x++) + { + this.drawTexturedModalRect(backgroundX, backgroundY + x, 0, fHeight, factor - x, 1); + } + } + + //RIGHT CORNER FILLER + + if(index == this.tabSize - 1) + { + int factor = 3; + + for(int x = 0; x < factor + 1; x++) + { + this.drawTexturedModalRect(backgroundX + this.bgTextureWidth - x, backgroundY + factor - x, this.bgTextureWidth - x, fHeight, x, 1); + } + } + } + } + + this.drawCenteredString(this.fontRenderer, ChatFormatting.UNDERLINE + tab.getTabTitle(), (int) (backgroundX + this.tabHalf + xOffset), (int) (backgroundY - 13), color); + }); + + this.defaultColor(); + + //VERSION LABEL + + final String label = Main.MC_VERSION + "-" + Main.MOD_VERSION; + final int hexAlpha = (int) (0xFF * 0.2) << 24; + final int color = Config.getSkin().getLabelColor() + hexAlpha; + final int versionWidth = this.width - this.fontRenderer.getStringWidth(label) - 2; + final int versionHeight = this.height - 10; + + this.fontRenderer.drawString(label, versionWidth, versionHeight, color); + + //TITLE + + final int maxWidth = this.bgTextureWidth - 7 - 2 - this.fontRenderer.getStringWidth(WorldHandler.USERNAME) - 2 - this.getWatchOffset() - 7; + this.fontRenderer.drawString(TextFormatting.shortenString(this.content.getTitle(), maxWidth, this.fontRenderer), backgroundX + 7, backgroundY + 7, Config.getSkin().getLabelColor()); + + //HEADLINE + + if(this.content.getHeadline() != null) + { + if(this.content.getHeadline().length > 0) + { + this.fontRenderer.drawString(this.content.getHeadline()[0], backgroundX + 8, backgroundY + 22, Config.getSkin().getHeadlineColor()); + } + + if(this.content.getHeadline().length > 1) + { + this.fontRenderer.drawString(this.content.getHeadline()[1], backgroundX + 126, backgroundY + 22, Config.getSkin().getHeadlineColor()); + } + } + + //NAME FIELD + + final String username = WorldHandler.USERNAME.isEmpty() && !this.nameField.isFocused() ? I18n.format("gui.worldhandler.generic.edit_username") : WorldHandler.USERNAME; + this.fontRenderer.drawString(username, backgroundX + 232 - this.fontRenderer.getStringWidth(username), backgroundY + 7, Config.getSkin().getLabelColor()); + + //WATCH + + if(Config.getSettings().watch()) + { + final int watchX = backgroundX + 233; + final int watchY = backgroundY + 5; + + UtilRender.drawWatchIntoGui(this, watchX, watchY, Minecraft.getInstance().world.getWorldInfo().getDayTime(), Config.getSettings().smoothWatch()); + + if(Config.getSettings().tooltips()) + { + if(mouseX >= watchX && mouseX <= watchX + 9 && mouseY >= watchY && mouseY <= watchY + 9) + { + GuiUtils.drawHoveringText(Arrays.asList(TextFormatting.formatWorldTime(Minecraft.getInstance().world.getDayTime())), mouseX, mouseY + 9, this.width, this.height, this.width, this.fontRenderer); + GlStateManager.disableLighting(); + } + } + } + + //BUTTONS + + for(int x = 0; x < this.buttons.size(); x++) + { + this.buttons.get(x).render(mouseX, mouseY, partialTicks); + } + + for(int x = 0; x < this.labels.size(); x++) + { + this.labels.get(x).render(mouseX, mouseY, partialTicks); + } + + //CONTAINER + + this.content.drawScreen(this, this.getContentX(), this.getContentY(), mouseX, mouseY, partialTicks); + + //CONTAINER ELEMENTS + + for(IElement element : this.elements) + { + element.draw(mouseX, mouseY, partialTicks); + } + + //SYNTAX + + if(Config.getSettings().commandSyntax() && this.syntaxField != null) + { + this.syntaxField.drawTextField(mouseX, mouseY, partialTicks); + } + + //SPLASHTEXT + + if(this.splash != null) + { + GlStateManager.pushMatrix(); + RenderHelper.enableGUIStandardItemLighting(); + GlStateManager.disableLighting(); + GlStateManager.translatef((float) (backgroundX + 212), backgroundY + 15, 0.0F); + GlStateManager.rotatef(17.0F, 0.0F, 0.0F, 1.0F); + + float scale = 1.1F - MathHelper.abs(MathHelper.sin((float) (System.currentTimeMillis() % 1000L) / 1000.0F * (float) Math.PI * 2.0F) * 0.1F); + scale = scale * 100.0F / this.fontRenderer.getStringWidth(this.splash); + GlStateManager.scalef(scale, scale, scale); + + this.drawCenteredString(this.fontRenderer, this.splash, 0, (int) scale, 0xFFFF00); + + GlStateManager.popMatrix(); + } + + //TOOLTIPS + + if(Config.getSettings().tooltips()) + { + for(GuiButton button : this.buttons) + { + if(button instanceof GuiButtonTooltip) + { + ((GuiButtonTooltip) button).renderTooltip(mouseX, mouseY); + } + } + } + + //VERSION LABEL TOOLTIP + + if(mouseX >= versionWidth && mouseY >= versionHeight) + { + GuiUtils.drawHoveringText(Arrays.asList(label), versionWidth - 12, versionHeight + 12, this.width + this.fontRenderer.getStringWidth(label), this.height + 10, this.width, this.fontRenderer); + } + }); + } + + @Override + public boolean charTyped(char charTyped, int keyCode) + { + if(this.nameField.isFocused()) + { + this.nameField.setCursorPositionEnd(); + } + + return super.charTyped(charTyped, keyCode); + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int keyCode) + { + if(this.nameField.isFocused()) + { + this.nameField.setCursorPositionEnd(); + } + + return super.mouseClicked(mouseX, mouseY, keyCode); + } + + @Override + public void onGuiClosed() + { + ActionHelper.tryRun(this.content::onGuiClosed); + } + + @Override + public boolean doesGuiPauseGame() + { + return Config.getSettings().pause(); + } + + @Override + public String getPlayer() + { + return WorldHandler.USERNAME; + } + + @Override + public Content getContent() + { + return this.content; + } } \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/gui/content/Content.java b/src/main/java/exopandora/worldhandler/gui/content/Content.java index c45fd24..58161bf 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/Content.java +++ b/src/main/java/exopandora/worldhandler/gui/content/Content.java @@ -2,11 +2,12 @@ package exopandora.worldhandler.gui.content; import java.util.HashMap; import java.util.Map; +import java.util.function.Supplier; import exopandora.worldhandler.Main; -import exopandora.worldhandler.gui.button.persistence.ButtonValue; import exopandora.worldhandler.gui.content.impl.ContentAdvancements; import exopandora.worldhandler.gui.content.impl.ContentButcher; +import exopandora.worldhandler.gui.content.impl.ContentButcherSettings; import exopandora.worldhandler.gui.content.impl.ContentChangeWorld; import exopandora.worldhandler.gui.content.impl.ContentContainers; import exopandora.worldhandler.gui.content.impl.ContentContinue; @@ -18,24 +19,28 @@ import exopandora.worldhandler.gui.content.impl.ContentGamerules; import exopandora.worldhandler.gui.content.impl.ContentMain; import exopandora.worldhandler.gui.content.impl.ContentMultiplayer; import exopandora.worldhandler.gui.content.impl.ContentNoteEditor; +import exopandora.worldhandler.gui.content.impl.ContentScoreboardObjectives; import exopandora.worldhandler.gui.content.impl.ContentPlayer; +import exopandora.worldhandler.gui.content.impl.ContentScoreboardPlayers; import exopandora.worldhandler.gui.content.impl.ContentPotions; import exopandora.worldhandler.gui.content.impl.ContentRecipes; -import exopandora.worldhandler.gui.content.impl.ContentScoreboardObjectives; -import exopandora.worldhandler.gui.content.impl.ContentScoreboardPlayers; -import exopandora.worldhandler.gui.content.impl.ContentScoreboardTeams; +import exopandora.worldhandler.gui.content.impl.ContentSettings; import exopandora.worldhandler.gui.content.impl.ContentSignEditor; import exopandora.worldhandler.gui.content.impl.ContentSummon; +import exopandora.worldhandler.gui.content.impl.ContentScoreboardTeams; import exopandora.worldhandler.gui.content.impl.ContentWorldInfo; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.RegistryNamespaced; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraft.util.registry.IRegistry; +import net.minecraft.util.registry.RegistryNamespacedDefaultedByKey; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistryEntry; -@SideOnly(Side.CLIENT) -public abstract class Content implements IContent +@OnlyIn(Dist.CLIENT) +public abstract class Content extends ForgeRegistryEntry implements IContent { - public static final RegistryNamespaced REGISTRY = new RegistryNamespaced(); + public static final String NAMESPACE = String.join("_", new String[] {Main.MODID, "content"}); + public static final IRegistry REGISTRY = IRegistry.func_212610_a(NAMESPACE, new RegistryNamespacedDefaultedByKey(new ResourceLocation(NAMESPACE, "main"))); public static void registerContents() { @@ -78,36 +83,38 @@ public abstract class Content implements IContent //NO CATEGORY registerContent(20, "potions", new ContentPotions()); registerContent(21, "butcher", new ContentButcher()); + registerContent(22, "butcher_settings", new ContentButcherSettings()); + registerContent(23, "settings", new ContentSettings()); } - private static void registerContent(int id, String textualID, Content content) - { - registerContent(id, new ResourceLocation(Main.MODID, textualID), content); - } - - private static void registerContent(int id, ResourceLocation textualID, Content content) - { - REGISTRY.register(id, textualID, content); - } - - private Map persistence; - - public ButtonValue getPersistence(Object id) - { - if(this.persistence == null) - { - this.persistence = new HashMap(); - } - - if(this.persistence.containsKey(id)) - { - return this.persistence.get(id); - } - - ButtonValue values = new ButtonValue(); - - this.persistence.put(id, values); - - return values; - } + private static void registerContent(int id, String textualID, Content content) + { + registerContent(id, new ResourceLocation(Main.MODID, textualID), content); + } + + private static void registerContent(int id, ResourceLocation textualID, Content content) + { + REGISTRY.register(id, textualID, content); + } + + private Map persistence; + + @SuppressWarnings("unchecked") + public T getPersistence(String id, Supplier supplier) + { + if(this.persistence == null) + { + this.persistence = new HashMap(); + } + + if(this.persistence.containsKey(id)) + { + return (T) this.persistence.get(id); + } + + T object = supplier.get(); + this.persistence.put(id, object); + + return object; + } } diff --git a/src/main/java/exopandora/worldhandler/gui/content/Contents.java b/src/main/java/exopandora/worldhandler/gui/content/Contents.java index c83f674..f99b398 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/Contents.java +++ b/src/main/java/exopandora/worldhandler/gui/content/Contents.java @@ -4,10 +4,10 @@ import exopandora.worldhandler.Main; import exopandora.worldhandler.gui.content.impl.ContentContinue; import exopandora.worldhandler.gui.content.impl.abstr.ContentChild; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class Contents { public static final Content MAIN; @@ -40,50 +40,54 @@ public class Contents public static final ContentChild POTIONS; public static final ContentChild BUTCHER; + public static final ContentChild BUTCHER_SETTINGS; + public static final ContentChild SETTINGS; static { - MAIN = Contents.getRegisteredContainer("main"); - CONTAINERS = Contents.getRegisteredContainer("containers"); - MULTIPLAYER = Contents.getRegisteredContainer("multiplayer"); + MAIN = Contents.getRegisteredContent("main"); + CONTAINERS = Contents.getRegisteredContent("containers"); + MULTIPLAYER = Contents.getRegisteredContent("multiplayer"); - SUMMON = Contents.getRegisteredContainer("summon"); + SUMMON = Contents.getRegisteredContent("summon"); - CUSTOM_ITEM = Contents.getRegisteredContainer("custom_item"); - ENCHANTMENT = Contents.getRegisteredContainer("enchantment"); + CUSTOM_ITEM = Contents.getRegisteredContent("custom_item"); + ENCHANTMENT = Contents.getRegisteredContent("enchantment"); - EDIT_BLOCKS = Contents.getRegisteredContainer("edit_blocks"); - SIGN_EDITOR = Contents.getRegisteredContainer("sign_editor"); - NOTE_EDITOR = Contents.getRegisteredContainer("note_editor"); + EDIT_BLOCKS = Contents.getRegisteredContent("edit_blocks"); + SIGN_EDITOR = Contents.getRegisteredContent("sign_editor"); + NOTE_EDITOR = Contents.getRegisteredContent("note_editor"); - WORLD_INFO = Contents.getRegisteredContainer("world"); - GAMERULES = Contents.getRegisteredContainer("gamerules"); - RECIPES = Contents.getRegisteredContainer("recipes"); + WORLD_INFO = Contents.getRegisteredContent("world"); + GAMERULES = Contents.getRegisteredContent("gamerules"); + RECIPES = Contents.getRegisteredContent("recipes"); - PLAYER = Contents.getRegisteredContainer("player"); - EXPERIENCE = Contents.getRegisteredContainer("experience"); - ADVANCEMENTS = Contents.getRegisteredContainer("advancements"); + PLAYER = Contents.getRegisteredContent("player"); + EXPERIENCE = Contents.getRegisteredContent("experience"); + ADVANCEMENTS = Contents.getRegisteredContent("advancements"); - SCOREBOARD_OBJECTIVES = Contents.getRegisteredContainer("scoreboard_objectives"); - SCOREBOARD_TEAMS = Contents.getRegisteredContainer("scoreboard_teams"); - SCOREBOARD_PLAYERS = Contents.getRegisteredContainer("scoreboard_players"); + SCOREBOARD_OBJECTIVES = Contents.getRegisteredContent("scoreboard_objectives"); + SCOREBOARD_TEAMS = Contents.getRegisteredContent("scoreboard_teams"); + SCOREBOARD_PLAYERS = Contents.getRegisteredContent("scoreboard_players"); - CHANGE_WORLD = Contents.getRegisteredContainer("change_world"); - CONTINUE = Contents.getRegisteredContainer("continue"); + CHANGE_WORLD = (ContentChild) Contents.getRegisteredContent("change_world"); + CONTINUE = (ContentContinue) Contents.getRegisteredContent("continue"); - POTIONS = Contents.getRegisteredContainer("potions"); - BUTCHER = Contents.getRegisteredContainer("butcher"); + POTIONS = (ContentChild) Contents.getRegisteredContent("potions"); + BUTCHER = (ContentChild) Contents.getRegisteredContent("butcher"); + BUTCHER_SETTINGS = (ContentChild) Contents.getRegisteredContent("butcher_settings"); + SETTINGS = (ContentChild) Contents.getRegisteredContent("settings"); } - private static T getRegisteredContainer(String name) + private static Content getRegisteredContent(String name) { - Content content = Content.REGISTRY.getObject(new ResourceLocation(Main.MODID, name)); + Content content = Content.REGISTRY.get(new ResourceLocation(Main.MODID, name)); if(content == null) { - throw new IllegalStateException("Invalid Container requested: " + name); + throw new IllegalStateException("Invalid Content requested: " + name); } - return (T) content; + return content; } } \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/gui/content/IContent.java b/src/main/java/exopandora/worldhandler/gui/content/IContent.java index 484fb0d..e008f56 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/IContent.java +++ b/src/main/java/exopandora/worldhandler/gui/content/IContent.java @@ -5,11 +5,10 @@ import javax.annotation.Nullable; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.gui.category.Category; import exopandora.worldhandler.gui.container.Container; -import net.minecraft.client.gui.GuiButton; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public interface IContent { default void init(Container container) @@ -24,12 +23,7 @@ public interface IContent void initButtons(Container container, int x, int y); - default void updateScreen(Container container) - { - - } - - default void actionPerformed(Container container, GuiButton button) throws Exception + default void tick(Container container) { } @@ -39,16 +33,6 @@ public interface IContent } - default void keyTyped(Container container, char typedChar, int keyCode) - { - - } - - default void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - - } - default void onPlayerNameChanged(String username) { diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/Element.java b/src/main/java/exopandora/worldhandler/gui/content/element/Element.java index 216731e..2d21ed3 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/Element.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/Element.java @@ -1,9 +1,9 @@ package exopandora.worldhandler.gui.content.element; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public abstract class Element implements IElement { protected int x; diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/IElement.java b/src/main/java/exopandora/worldhandler/gui/content/element/IElement.java index 85654f2..d08ae8e 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/IElement.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/IElement.java @@ -1,25 +1,14 @@ package exopandora.worldhandler.gui.content.element; import exopandora.worldhandler.gui.container.Container; -import net.minecraft.client.gui.GuiButton; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public interface IElement { void initGui(Container container); void initButtons(Container container); - void draw(); - boolean actionPerformed(Container container, GuiButton button); - - default void keyTyped(Container container, char charTyped, int keyCode) - { - - } - - default void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - - } + void tick(); + void draw(int mouseX, int mouseY, float partialTicks); } diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java deleted file mode 100644 index e1b1d9e..0000000 --- a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java +++ /dev/null @@ -1,172 +0,0 @@ -package exopandora.worldhandler.gui.content.element.impl; - -import java.util.List; - -import javax.annotation.Nullable; - -import exopandora.worldhandler.gui.button.EnumTooltip; -import exopandora.worldhandler.gui.button.GuiButtonList; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; -import exopandora.worldhandler.gui.button.logic.IListButtonLogic; -import exopandora.worldhandler.gui.button.persistence.ButtonValue; -import exopandora.worldhandler.gui.container.Container; -import exopandora.worldhandler.gui.content.Content; -import exopandora.worldhandler.gui.content.element.Element; -import exopandora.worldhandler.gui.content.element.logic.ILogicClickList; -import exopandora.worldhandler.helper.Node; -import net.minecraft.client.gui.GuiButton; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ElementClickList extends Element -{ - private final int[] buttonIds; - private final List list; - private final ILogicClickList logic; - private final Content content; - private final ElementClickList parent; - private final int depth; - - private GuiButtonList button; - private ElementClickList child; - - public ElementClickList(int x, int y, List list, int[] buttonIds, Content content, ILogicClickList logic) - { - this(x, y, list, buttonIds, content, logic, null); - } - - private ElementClickList(int x, int y, List list, int[] buttonIds, Content content, ILogicClickList logic, ElementClickList parent) - { - super(x, y); - this.list = list; - this.buttonIds = buttonIds; - this.logic = logic; - this.content = content; - this.parent = parent; - this.depth = this.parent != null ? this.parent.depth + 1 : 1; - } - - @Override - public void initGui(Container container) - { - - } - - @Override - public void initButtons(Container container) - { - container.add(this.button = new GuiButtonList(this.getButtonId(), this.x, this.y, 114, 20, EnumTooltip.TOP_RIGHT, this.content, new IListButtonLogic() - { - @Override - public void actionPerformed(Container container, GuiButton button, ButtonValue values) - { - content.getPersistence(logic.getId() + (depth + 1)).setIndex(0); - container.initButtons(); - } - - @Override - public int getMax() - { - return list.size(); - } - - @Override - public Node getObject(int index) - { - return list.get(index); - } - - @Override - public String getDisplayString(ButtonValue values) - { - return logic.translate(getKeys()); - } - - @Override - public String getTooltipString(ButtonValue values) - { - if(values != null && values.getObject() != null) - { - return values.getObject().getKey() + " (" + (values.getIndex() + 1) + "/" + this.getMax() + ")"; - } - - return null; - } - - @Override - public String getId() - { - return logic.getId() + depth; - } - })); - - Node node = this.getValues().getObject(); - this.logic.consumeKey(this.getKeys()); - - if(node.getEntries() != null) - { - this.child = new ElementClickList(this.x, this.y + 24, node.getEntries(), this.buttonIds, this.content, this.logic, this); - this.child.initButtons(container); - } - else if(this.depth < this.buttonIds.length) - { - GuiButtonWorldHandler button = new GuiButtonWorldHandler(this.getButtonId(), this.x, this.y + 24, 114, 20, null); - button.enabled = false; - container.add(button); - } - } - - @Nullable - private ButtonValue getValues() - { - if(this.button != null) - { - return this.content.getPersistence(this.button.getLogic().getId()); - } - - return null; - } - - @Override - public boolean actionPerformed(Container container, GuiButton button) - { - if(button.id == this.getButtonId()) - { - this.button.actionPerformed(container, button); - return true; - } - else if(this.child != null) - { - return this.child.actionPerformed(container, button); - } - - return false; - } - - @Override - public void draw() - { - - } - - private int getButtonId() - { - return this.buttonIds[this.depth - 1]; - } - - private String[] getKeys() - { - return this.getKeys(new String[this.depth]); - } - - private String[] getKeys(String[] keys) - { - if(keys != null && this.depth <= keys.length) - { - keys[this.depth - 1] = this.getValues().getObject().getKey(); - } - - return this.parent != null ? this.parent.getKeys(keys) : keys; - } -} diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementColorMenu.java b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementColorMenu.java index 8bcd780..49b1787 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementColorMenu.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementColorMenu.java @@ -1,158 +1,157 @@ package exopandora.worldhandler.gui.content.element.impl; +import java.util.ArrayList; +import java.util.List; + import com.mojang.realmsclient.gui.ChatFormatting; +import exopandora.worldhandler.format.EnumColor; import exopandora.worldhandler.format.text.ColoredString; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiButtonList; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; -import exopandora.worldhandler.gui.button.logic.ColorListButtonLogic; -import exopandora.worldhandler.gui.button.persistence.ButtonValue; import exopandora.worldhandler.gui.container.Container; -import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.element.Element; -import exopandora.worldhandler.gui.content.element.logic.ILogicColorMenu; -import net.minecraft.client.gui.GuiButton; +import exopandora.worldhandler.gui.logic.ILogicColorMenu; +import exopandora.worldhandler.gui.logic.ILogicMapped; import net.minecraft.client.resources.I18n; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +@OnlyIn(Dist.CLIENT) public class ElementColorMenu extends Element { + private static final List COLORS = new ArrayList(); + + static + { + COLORS.add(EnumColor.DEFAULT); + COLORS.add(EnumColor.YELLOW); + COLORS.add(EnumColor.GOLD); + COLORS.add(EnumColor.DARK_RED); + COLORS.add(EnumColor.RED); + COLORS.add(EnumColor.LIGHT_PURPLE); + COLORS.add(EnumColor.DARK_PURPLE); + COLORS.add(EnumColor.BLUE); + COLORS.add(EnumColor.DARK_BLUE); + COLORS.add(EnumColor.DARK_AQUA); + COLORS.add(EnumColor.AQUA); + COLORS.add(EnumColor.GREEN); + COLORS.add(EnumColor.DARK_GREEN); + COLORS.add(EnumColor.BLACK); + COLORS.add(EnumColor.DARK_GRAY); + COLORS.add(EnumColor.GRAY); + COLORS.add(EnumColor.WHITE); + } + private GuiTextFieldTooltip textField; - private GuiButtonList colorList; - private final Content content; private final ColoredString string; - private final int[] ids; private final ILogicColorMenu logic; private final String translationKey; - public ElementColorMenu(Content content, int x, int y, String translationKey, ColoredString string, int[] ids) + public ElementColorMenu(int x, int y, String translationKey, ColoredString string) { - this(content, x, y, translationKey, string, ids, new ILogicColorMenu(){}); + this(x, y, translationKey, string, new ILogicColorMenu(){}); } - public ElementColorMenu(Content content, int x, int y, String translationKey, ColoredString string, int[] ids, ILogicColorMenu logic) + public ElementColorMenu(int x, int y, String translationKey, ColoredString string, ILogicColorMenu logic) { super(x, y); - this.content = content; this.translationKey = translationKey; this.string = string; - this.ids = ids; this.logic = logic; } @Override public void initGui(Container container) { - if(this.logic.drawTextfield()) + this.textField = new GuiTextFieldTooltip(this.x + 118, this.y, 114, 20, I18n.format(this.translationKey)); + this.textField.setValidator(this.logic::validate); + this.textField.setTextFormatter(this.string::textFormatter); + this.textField.setText(this.string.getText()); + this.textField.setTextAcceptHandler((id, text) -> { - this.textField = new GuiTextFieldTooltip(this.x + 118, this.y, 114, 20, I18n.format(this.translationKey)); - this.textField.setValidator(this.logic.getValidator()); - this.textField.setText(this.string.getTextFieldString()); - } + this.string.setText(text); + }); } @Override public void initButtons(Container container) { - if(this.logic.drawButtons()) + container.add(this.textField); + + if(this.logic.doDrawButtons()) { - container.add(this.colorList = new GuiButtonList(this.ids[0], this.x + 118, this.y + 24, 114, 20, this.content, new ColorListButtonLogic() + container.add(new GuiButtonList(this.x + 118, this.y + 24, COLORS, 114, 20, container, new ILogicMapped() { @Override - public void actionPerformed(Container container, GuiButton button, ButtonValue values) + public String translate(EnumColor item) { - string.setColor(values.getIndex()); + return item + I18n.format("gui.worldhandler.color") + ": " + I18n.format("gui.worldhandler.color." + item.getFormat()); + } + + @Override + public String toTooltip(EnumColor item) + { + return null; + } + + @Override + public String formatTooltip(EnumColor item, int index, int max) + { + return null; + } + + @Override + public void onClick(EnumColor item) + { + ElementColorMenu.this.string.setColor(item); } @Override public String getId() { - return logic.getId(); + return ElementColorMenu.this.logic.getId(); } })); - container.add(new GuiButtonWorldHandler(this.ids[1], this.x + 118, this.y + 48, 20, 20, (this.string.isItalic() ? ChatFormatting.ITALIC : ChatFormatting.RESET) + "I")); - container.add(new GuiButtonWorldHandler(this.ids[2], this.x + 118 + 24 - 1, this.y + 48, 20, 20, (this.string.isBold() ? ChatFormatting.BOLD : ChatFormatting.RESET) + "B")); - container.add(new GuiButtonWorldHandler(this.ids[3], this.x + 118 + 24 * 2 - 1, this.y + 48, 20, 20, (this.string.isUnderlined() ? ChatFormatting.UNDERLINE : ChatFormatting.RESET) + "U")); - container.add(new GuiButtonWorldHandler(this.ids[4], this.x + 118 + 24 * 3 - 1, this.y + 48, 20, 20, (this.string.isStriked() ? ChatFormatting.STRIKETHROUGH : ChatFormatting.RESET) + "S")); - container.add(new GuiButtonWorldHandler(this.ids[5], this.x + 118 + 24 * 4 - 2, this.y + 48, 20, 20, (this.string.isObfuscated() ? ChatFormatting.OBFUSCATED : ChatFormatting.RESET) + "O")); - } - } - - @Override - public boolean actionPerformed(Container container, GuiButton button) - { - if(button.id == this.ids[0]) - { - this.colorList.actionPerformed(container, button); - container.initGui(); - return true; - } - else if(button.id == this.ids[1]) - { - this.string.setItalic(!this.string.isItalic()); - container.initGui(); - return true; - } - else if(button.id == this.ids[2]) - { - this.string.setBold(!this.string.isBold()); - container.initGui(); - return true; - } - else if(button.id == this.ids[3]) - { - this.string.setUnderlined(!this.string.isUnderlined()); - container.initGui(); - return true; - } - else if(button.id == this.ids[4]) - { - this.string.setStriked(!this.string.isStriked()); - container.initGui(); - return true; - } - else if(button.id == this.ids[5]) - { - this.string.setObfuscated(!this.string.isObfuscated()); - container.initGui(); - return true; - } - - return false; - } - - @Override - public void draw() - { - if(this.logic.drawTextfield()) - { - this.textField.drawTextBox(); - } - } - - @Override - public void keyTyped(Container container, char charTyped, int keyCode) - { - if(this.logic.drawTextfield()) - { - if(this.textField.canType(charTyped)) + container.add(new GuiButtonBase(this.x + 118, this.y + 48, 20, 20, (this.string.isItalic() ? ChatFormatting.ITALIC : ChatFormatting.RESET) + "I", () -> { - if(this.textField.textboxKeyTyped(charTyped, keyCode)) - { - this.string.setText(this.textField.getText()); - container.initButtons(); - } - } + this.string.setItalic(!this.string.isItalic()); + container.initGui(); + })); + container.add(new GuiButtonBase(this.x + 118 + 24 - 1, this.y + 48, 20, 20, (this.string.isBold() ? ChatFormatting.BOLD : ChatFormatting.RESET) + "B", () -> + { + this.string.setBold(!this.string.isBold()); + container.initGui(); + })); + container.add(new GuiButtonBase(this.x + 118 + 24 * 2 - 1, this.y + 48, 20, 20, (this.string.isUnderlined() ? ChatFormatting.UNDERLINE : ChatFormatting.RESET) + "U", () -> + { + this.string.setUnderlined(!this.string.isUnderlined()); + container.initGui(); + })); + container.add(new GuiButtonBase(this.x + 118 + 24 * 3 - 1, this.y + 48, 20, 20, (this.string.isStriked() ? ChatFormatting.STRIKETHROUGH : ChatFormatting.RESET) + "S", () -> + { + this.string.setStriked(!this.string.isStriked()); + container.initGui(); + })); + container.add(new GuiButtonBase(this.x + 118 + 24 * 4 - 2, this.y + 48, 20, 20, (this.string.isObfuscated() ? ChatFormatting.OBFUSCATED : ChatFormatting.RESET) + "O", () -> + { + this.string.setObfuscated(!this.string.isObfuscated()); + container.initGui(); + })); } } @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) + public void tick() { - if(this.logic.drawTextfield()) - { - this.textField.mouseClicked(mouseX, mouseY, mouseButton); - } + this.textField.tick(); + } + + @Override + public void draw(int mouseX, int mouseY, float partialTicks) + { + this.textField.drawTextField(mouseX, mouseY, partialTicks); } } diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementMultiButtonList.java b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementMultiButtonList.java new file mode 100644 index 0000000..facf465 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementMultiButtonList.java @@ -0,0 +1,169 @@ +package exopandora.worldhandler.gui.content.element.impl; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.BiFunction; + +import javax.annotation.Nullable; + +import exopandora.worldhandler.gui.button.GuiButtonBase; +import exopandora.worldhandler.gui.button.GuiButtonList; +import exopandora.worldhandler.gui.button.GuiButtonList.Persistence; +import exopandora.worldhandler.gui.container.Container; +import exopandora.worldhandler.gui.content.element.Element; +import exopandora.worldhandler.gui.logic.ILogicClickList; +import exopandora.worldhandler.gui.logic.ILogicMapped; +import exopandora.worldhandler.helper.Node; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class ElementMultiButtonList extends Element +{ + private final List items; + private final ILogicClickList logic; + private final ElementMultiButtonList parent; + private final int depth; + private final int maxDepth; + + public ElementMultiButtonList(int x, int y, List list, int maxDepth, ILogicClickList logic) + { + this(x, y, list, maxDepth, logic, null); + } + + private ElementMultiButtonList(int x, int y, List list, int maxDepth, ILogicClickList logic, ElementMultiButtonList parent) + { + super(x, y); + this.items = list; + this.logic = logic; + this.parent = parent; + this.depth = this.parent != null ? this.parent.getDepth() + 1 : 0; + this.maxDepth = maxDepth; + } + + @Override + public void initGui(Container container) + { + + } + + @Override + public void initButtons(Container container) + { + container.add(new GuiButtonList(this.x, this.y, this.items, 114, 20, container, new ILogicMapped() + { + @Override + public String translate(Node item) + { + return ElementMultiButtonList.this.logic.translate(ElementMultiButtonList.this.buildKey(container, ElementMultiButtonList.this.logic::buildTranslationKey), ElementMultiButtonList.this.getDepth()); + } + + @Override + public String toTooltip(Node item) + { + return item.getKey(); + } + + @Override + public String formatTooltip(Node item, int index, int max) + { + return ILogicMapped.super.formatTooltip(item, index, max); + } + + @Override + public void onClick(Node item) + { + ElementMultiButtonList.this.getPersistence(container, 1).setIndex(0); + container.initButtons(); + } + + @Override + public String getId() + { + return ElementMultiButtonList.this.getId(); + } + })); + + Node node = this.getNode(container); + this.logic.onClick(this.buildKey(container, this.logic::buildEventKey), this.getDepth()); + + if(node.getEntries() != null) + { + ElementMultiButtonList child = new ElementMultiButtonList(this.x, this.y + 24, node.getEntries(), this.maxDepth, this.logic, this); + child.initButtons(container); + } + else + { + for(int x = this.getDepth() + 1; x < this.maxDepth; x++) + { + GuiButtonBase button = new GuiButtonBase(this.x, this.y + 24 * x, 114, 20, null, null); + button.enabled = false; + container.add(button); + } + } + } + + @Override + public void tick() + { + + } + + @Override + public void draw(int mouseX, int mouseY, float partialTicks) + { + + } + + protected int getDepth() + { + return this.depth; + } + + @Nullable + protected ElementMultiButtonList getParent() + { + return this.parent; + } + + protected String getId() + { + return this.getId(0); + } + + protected String getId(int offset) + { + return String.format("%s%d", ElementMultiButtonList.this.logic.getId(), ElementMultiButtonList.this.depth + offset); + } + + protected Persistence getPersistence(Container container) + { + return this.getPersistence(container, 0); + } + + protected Persistence getPersistence(Container container, int offset) + { + return container.getContent().getPersistence(this.getId(offset), Persistence::new); + } + + protected Node getNode(Container container) + { + return this.items.get(this.getPersistence(container).getIndex()); + } + + protected String buildKey(Container container, BiFunction, Integer, String> factory) + { + List nodes = new ArrayList(ElementMultiButtonList.this.depth + 1); + ElementMultiButtonList element = ElementMultiButtonList.this; + + while(element != null) + { + nodes.add(element.getNode(container).getKey()); + element = element.getParent(); + } + + Collections.reverse(nodes); + return factory.apply(nodes, ElementMultiButtonList.this.depth); + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementPageList.java b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementPageList.java index 0f1e3ed..7fe9ca9 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementPageList.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementPageList.java @@ -1,54 +1,43 @@ package exopandora.worldhandler.gui.content.element.impl; import java.util.List; +import java.util.Objects; -import exopandora.worldhandler.config.ConfigSkin; +import exopandora.worldhandler.config.Config; import exopandora.worldhandler.format.TextFormatting; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; -import exopandora.worldhandler.gui.button.persistence.ButtonValue; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.container.Container; -import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.element.Element; -import exopandora.worldhandler.gui.content.element.logic.ILogicPageList; +import exopandora.worldhandler.gui.logic.ILogicPageList; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) -public class ElementPageList extends Element +@OnlyIn(Dist.CLIENT) +public class ElementPageList extends Element { - private final List list; - private final ILogicPageList logic; - private final int length; + private final List items; + private final ILogicPageList logic; + private final Persistence persistence; private final int width; private final int height; - private final int[] ids; - private final ButtonValue values; + private final int length; - public ElementPageList(int x, int y, List list, K initial, int width, int height, int length, Content content, int[] ids, ILogicPageList logic) + public ElementPageList(int x, int y, List items, int width, int height, int length, Container container, ILogicPageList logic) { super(x, y); - this.list = list; - this.length = length; + this.items = Objects.requireNonNull(items); this.width = width; this.height = height; - this.logic = logic; - this.values = content.getPersistence(logic.getId()); - this.ids = ids; + this.length = length; + this.logic = Objects.requireNonNull(logic); + this.items.sort((a, b) -> this.logic.translate(a).compareTo(this.logic.translate(b))); + this.persistence = container.getContent().getPersistence(logic.getId(), Persistence::new); - this.list.sort((a, b) -> this.logic.translate(a).compareTo(this.logic.translate(b))); - - if(this.values.getObject() == null) + if(!this.items.isEmpty()) { - this.values.setObject(0); - this.values.setIndex(Math.max(0, this.list.indexOf(this.logic.getObject(initial)))); - - if(initial == null) - { - this.logic.onClick(this.list.get(0)); - } + this.logic.onClick(this.items.get(this.persistence.getSelectedIndex())); } } @@ -61,19 +50,18 @@ public class ElementPageList extends Element @Override public void initButtons(Container container) { - boolean extended = (this.list.size() == this.length + 1); + boolean extended = (this.items.size() == this.length + 1); if(!extended) { int buttonWidth = (this.width - 4) / 2; - GuiButtonWorldHandler left = new GuiButtonWorldHandler(this.ids[0], this.x, this.y + (this.height + 4) * this.length, buttonWidth + 1, this.height, "<"); - GuiButtonWorldHandler right = new GuiButtonWorldHandler(this.ids[1], this.x + 5 + buttonWidth, this.y + (this.height + 4) * this.length, buttonWidth, this.height, ">"); - - left.enabled = this.values.getObject() > 0; - right.enabled = this.values.getObject() < this.getTotalPages() - 1; - + GuiButtonBase left = new GuiButtonBase(this.x, this.y + (this.height + 4) * this.length, buttonWidth + 1, this.height, "<", () -> this.goLeft(container)); + left.enabled = this.persistence.getPage() > 0; container.add(left); + + GuiButtonBase right = new GuiButtonBase(this.x + 5 + buttonWidth, this.y + (this.height + 4) * this.length, buttonWidth, this.height, ">", () -> this.goRight(container)); + right.enabled = this.persistence.getPage() < this.getTotalPages() - 1; container.add(right); } @@ -81,84 +69,118 @@ public class ElementPageList extends Element for(int x = 0; x < length; x++) { - int index = this.values.getObject() * length + x; + int index = this.persistence.getPage() * length + x; + GuiButtonBase button; - if(index < this.list.size()) + if(index < this.items.size()) { - T entry = this.list.get(index); - this.logic.onRegister(this.ids[2], this.x, this.y + (this.height + 4) * x, this.width, this.height, TextFormatting.shortenString(this.logic.translate(entry), this.width, Minecraft.getMinecraft().fontRenderer), this.logic.getRegistryName(entry), this.values.getIndex() != index, entry, container); - } - else - { - GuiButtonWorldHandler button = new GuiButtonWorldHandler(this.ids[2], this.x, this.y + (this.height + 4) * x, this.width, this.height, null); - button.enabled = false; - container.add(button); - } - } - } - - @Override - public boolean actionPerformed(Container container, GuiButton button) - { - if(button.id == this.ids[0]) - { - int value = this.values.getObject(); - - if(GuiScreen.isShiftKeyDown()) - { - this.values.setObject(value - Math.min(10, value)); - } - else - { - this.values.setObject(value - 1); - } - - container.initGui(); - return true; - } - else if(button.id == this.ids[1]) - { - int value = this.values.getObject(); - - if(GuiScreen.isShiftKeyDown()) - { - this.values.setObject(value + Math.min(10, this.getTotalPages() - 1 - value)); - } - else - { - this.values.setObject(value + 1); - } - - container.initGui(); - return true; - } - else if(button.id == this.ids[2]) - { - for(int x = 0; x < this.list.size(); x++) - { - T entry = this.list.get(x); - - if(TextFormatting.shortenString(this.logic.translate(entry), this.width, Minecraft.getMinecraft().fontRenderer).equals(button.displayString)) + T item = this.items.get(index); + String text = TextFormatting.shortenString(this.logic.translate(item), this.width, Minecraft.getInstance().fontRenderer); + button = this.logic.onRegister(this.x, this.y + (this.height + 4) * x, this.width, this.height, text, item, () -> { - this.values.setIndex(x); - this.logic.onClick(entry); - container.initGui(); - return true; + this.persistence.setSelectedIndex(index); + this.logic.onClick(item); + }); + + if(this.logic.doDisable()) + { + button.enabled = this.persistence.getSelectedIndex() != index; } } + else + { + button = new GuiButtonBase(this.x, this.y + (this.height + 4) * x, this.width, this.height, null, null); + button.enabled = false; + } + + container.add(button); } - - return false; } @Override - public void draw() + public void tick() { - Minecraft.getMinecraft().fontRenderer.drawString((this.values.getObject() + 1) + "/" + this.getTotalPages(), this.x, this.y - 11, ConfigSkin.getHeadlineColor()); + + } + + @Override + public void draw(int mouseX, int mouseY, float partialTicks) + { + Minecraft.getInstance().fontRenderer.drawString(String.format("%d/%d", this.persistence.getPage() + 1, this.getTotalPages()), this.x, this.y - 11, Config.getSkin().getHeadlineColor()); + } + + private void goLeft(Container container) + { + int page = this.persistence.getPage(); + + if(GuiScreen.isShiftKeyDown()) + { + this.persistence.setPage(page - Math.min(10, page)); + } + else + { + this.persistence.setPage(page - 1); + } + + container.initButtons(); + } + + private void goRight(Container container) + { + int page = this.persistence.getPage(); + + if(GuiScreen.isShiftKeyDown()) + { + this.persistence.setPage(page + Math.min(10, this.getTotalPages() - 1 - page)); + } + else + { + this.persistence.setPage(page + 1); + } + + container.initButtons(); } private int getTotalPages() { - return (int) Math.ceil((float) this.list.size() / this.length); + return (int) Math.ceil((float) this.items.size() / this.length); + } + + @OnlyIn(Dist.CLIENT) + public static class Persistence + { + private int page; + private int selectedIndex; + + public Persistence() + { + this(0, 0); + } + + public Persistence(int page, int selectedIndex) + { + this.page = page; + this.selectedIndex = selectedIndex; + } + + public int getPage() + { + return this.page; + } + + public void setPage(int page) + { + this.page = page; + } + + public int getSelectedIndex() + { + return this.selectedIndex; + } + + public void setSelectedIndex(int selectedIndex) + { + this.selectedIndex = selectedIndex; + } } } diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogic.java b/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogic.java deleted file mode 100644 index 0d5851c..0000000 --- a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogic.java +++ /dev/null @@ -1,10 +0,0 @@ -package exopandora.worldhandler.gui.content.element.logic; - -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public interface ILogic -{ - String getId(); -} diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicClickList.java b/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicClickList.java deleted file mode 100644 index 7d6311c..0000000 --- a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicClickList.java +++ /dev/null @@ -1,16 +0,0 @@ -package exopandora.worldhandler.gui.content.element.logic; - -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public interface ILogicClickList extends ILogic -{ - String translate(String... keys); - void consumeKey(String... keys); - - default void consumeKeyImpl(String... keys) - { - this.consumeKey(keys[0] + "." + keys[1]); - } -} diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicColorMenu.java b/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicColorMenu.java deleted file mode 100644 index 3a41108..0000000 --- a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicColorMenu.java +++ /dev/null @@ -1,32 +0,0 @@ -package exopandora.worldhandler.gui.content.element.logic; - -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; - -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public interface ILogicColorMenu extends ILogic -{ - default Predicate getValidator() - { - return Predicates.notNull(); - } - - default boolean drawTextfield() - { - return true; - } - - default boolean drawButtons() - { - return true; - } - - @Override - default String getId() - { - return "color"; - } -} diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicPageList.java b/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicPageList.java deleted file mode 100644 index 5e02776..0000000 --- a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicPageList.java +++ /dev/null @@ -1,17 +0,0 @@ -package exopandora.worldhandler.gui.content.element.logic; - -import exopandora.worldhandler.gui.container.Container; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public interface ILogicPageList extends ILogic -{ - String translate(T key); - String getRegistryName(T key); - - void onClick(T clicked); - void onRegister(int id, int x, int y, int width, int height, String display, String registryKey, boolean enabled, T value, Container container); - - T getObject(K object); -} \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java index a1e2c5b..b8de916 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java @@ -4,46 +4,39 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; -import com.google.common.collect.Lists; import com.mojang.realmsclient.gui.ChatFormatting; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderAdvancement; import exopandora.worldhandler.builder.impl.BuilderAdvancement.EnumActionType; import exopandora.worldhandler.builder.impl.BuilderAdvancement.EnumMode; -import exopandora.worldhandler.builder.types.Type; -import exopandora.worldhandler.gui.button.EnumTooltip; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiButtonList; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; -import exopandora.worldhandler.gui.button.logic.IListButtonLogic; -import exopandora.worldhandler.gui.button.persistence.ButtonValue; +import exopandora.worldhandler.gui.button.GuiButtonTooltip; import exopandora.worldhandler.gui.category.Categories; import exopandora.worldhandler.gui.category.Category; import exopandora.worldhandler.gui.container.Container; -import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer; +import exopandora.worldhandler.gui.container.impl.GuiWorldHandler; 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 exopandora.worldhandler.helper.AdvancementHelper; +import exopandora.worldhandler.gui.logic.ILogicMapped; +import exopandora.worldhandler.gui.logic.ILogicPageList; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; +import exopandora.worldhandler.util.ActionHandler; import net.minecraft.advancements.Advancement; import net.minecraft.advancements.AdvancementManager; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.resources.I18n; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentAdvancements extends Content { - private final AdvancementHelper helper = new AdvancementHelper(); private final BuilderAdvancement builderAdvancement = new BuilderAdvancement(EnumMode.values()[0]); - - private GuiButtonList modeButton; - - private final List advancements = Lists.newArrayList(new AdvancementManager(null).getAdvancements()).parallelStream().filter(advancement -> advancement.getDisplay() != null).collect(Collectors.toList()); + private final List modes = Arrays.stream(EnumMode.values()).filter(mode -> !mode.equals(EnumMode.EVERYTHING)).collect(Collectors.toList()); @Override public ICommandBuilder getCommandBuilder() @@ -54,44 +47,41 @@ public class ContentAdvancements extends Content @Override public void initGui(Container container, int x, int y) { - ElementPageList list = new ElementPageList(x, y, this.advancements, null, 114, 20, 3, this, new int[] {6, 7, 8}, new ILogicPageList() + List advancements = new AdvancementManager().getAllAdvancements().stream() + .filter(advancement -> advancement.getDisplay() != null) + .collect(Collectors.toList()); + + ElementPageList list = new ElementPageList(x, y, advancements, 114, 20, 3, container, new ILogicPageList() { @Override - public String translate(Advancement key) + public String translate(Advancement item) { - return I18n.format(key.getDisplay().getTitle().getUnformattedText()); + return item.getDisplay().getTitle().getString(); } @Override - public void onClick(Advancement clicked) + public String toTooltip(Advancement item) { - builderAdvancement.setAdvancement(clicked.getId()); + return item.getId().toString(); } @Override - public String getRegistryName(Advancement key) + public void onClick(Advancement item) { - return key.getId().toString(); + ContentAdvancements.this.builderAdvancement.setAdvancement(item.getId()); + container.initButtons(); } @Override - public void onRegister(int id, int x, int y, int width, int height, String display, String registry, boolean enabled, Advancement value, Container container) + public GuiButtonBase onRegister(int x, int y, int width, int height, String text, Advancement item, ActionHandler actionHandler) { - GuiButtonWorldHandler button; - container.add(button = new GuiButtonWorldHandler(id, x, y, width, height, display, value.getId().toString(), EnumTooltip.TOP_RIGHT)); - button.enabled = enabled; - } - - @Override - public Advancement getObject(String object) - { - return helper.ADVANCEMENT_MANAGER.getAdvancement(Type.parseResourceLocation(object)); + return new GuiButtonTooltip(x, y, width, height, text, this.toTooltip(item), actionHandler); } @Override public String getId() { - return "advancements"; + return "advancement"; } }); @@ -101,35 +91,27 @@ public class ContentAdvancements extends Content @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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(this.modeButton = new GuiButtonList(2, x + 118, y, 114, 20, EnumTooltip.TOP_RIGHT, this, new IListButtonLogic() + container.add(new GuiButtonList(x + 118, y, this.modes, 114, 20, container, new ILogicMapped() { - private final EnumMode[] values = Arrays.stream(EnumMode.values()).filter(mode -> !mode.equals(EnumMode.EVERYTHING)).toArray(EnumMode[]::new); - @Override - public void actionPerformed(Container container, GuiButton button, ButtonValue values) + public String translate(EnumMode item) { - builderAdvancement.setMode(values.getObject()); + return I18n.format("gui.worldhandler.advancements." + item.toString()); } @Override - public int getMax() + public String toTooltip(EnumMode item) { - return this.values.length; + return item.toString(); } @Override - public EnumMode getObject(int index) + public void onClick(EnumMode item) { - return this.values[index]; - } - - @Override - public String getDisplayString(ButtonValue values) - { - return I18n.format("gui.worldhandler.advancements." + values.getObject().toString()); + ContentAdvancements.this.builderAdvancement.setMode(item); } @Override @@ -139,32 +121,18 @@ public class ContentAdvancements extends Content } })); - container.add(new GuiButtonWorldHandler(3, x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.advancements.grant"))); - container.add(new GuiButtonWorldHandler(4, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.advancements.revoke"))); - container.add(new GuiButtonWorldHandler(5, x + 118, y + 72, 114, 20, ChatFormatting.RED + I18n.format("gui.worldhandler.actions.reset"))); - } - - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception - { - switch(button.id) + container.add(new GuiButtonBase(x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.advancements.grant"), () -> { - case 2: - this.modeButton.actionPerformed(container, button); - container.initGui(); - break; - case 3: - WorldHandler.sendCommand(this.builderAdvancement.getBuilderForAction(EnumActionType.GRANT)); - break; - case 4: - WorldHandler.sendCommand(this.builderAdvancement.getBuilderForAction(EnumActionType.REVOKE)); - break; - case 5: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.CONTINUE.withBuilder(this.builderAdvancement.getBuilder(EnumActionType.REVOKE, EnumMode.EVERYTHING)).withParent(Contents.ADVANCEMENTS))); - break; - default: - break; - } + CommandHelper.sendCommand(this.builderAdvancement.getBuilderForAction(EnumActionType.GRANT)); + })); + container.add(new GuiButtonBase(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.advancements.revoke"), () -> + { + CommandHelper.sendCommand(this.builderAdvancement.getBuilderForAction(EnumActionType.REVOKE)); + })); + container.add(new GuiButtonBase(x + 118, y + 72, 114, 20, ChatFormatting.RED + I18n.format("gui.worldhandler.actions.reset"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.CONTINUE.withBuilder(this.builderAdvancement.getBuilder(EnumActionType.REVOKE, EnumMode.EVERYTHING)).withParent(Contents.ADVANCEMENTS))); + })); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentButcher.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentButcher.java index 44abbd1..691dd1b 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentButcher.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentButcher.java @@ -1,24 +1,23 @@ package exopandora.worldhandler.gui.content.impl; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderButcher; -import exopandora.worldhandler.config.ConfigButcher; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; -import exopandora.worldhandler.gui.config.GuiConfigWorldHandler; import exopandora.worldhandler.gui.container.Container; +import exopandora.worldhandler.gui.container.impl.GuiWorldHandler; +import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.impl.abstr.ContentChild; -import exopandora.worldhandler.helper.EntityHelper; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.resources.I18n; -import net.minecraft.entity.EntityList; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentButcher extends ContentChild { private GuiTextFieldTooltip radiusField; @@ -35,50 +34,80 @@ public class ContentButcher extends ContentChild public void initGui(Container container, int x, int y) { this.radiusField = new GuiTextFieldTooltip(x + 116 / 2, y + 12, 116, 20, I18n.format("gui.worldhandler.butcher.radius")); - this.radiusField.setValidator(string -> string != null && string.matches("[0-9]{0,8}")); + this.radiusField.setValidator(string -> + { + if(string == null) + { + return false; + } + + if(!string.isEmpty()) + { + try + { + Integer.parseInt(string); + } + catch(Exception e) + { + return false; + } + } + + return true; + }); this.radiusField.setText(this.radius); + this.radiusField.setTextAcceptHandler((id, text) -> + { + this.radius = text; + + if(!this.radius.isEmpty()) + { + this.builderButcher.setDistance(Integer.valueOf(this.radius)); + } + else + { + this.builderButcher.setDistance(0); + } + + container.initButtons(); + }); } @Override public void initButtons(Container container, int x, int y) { - GuiButtonWorldHandler slaughter; + GuiButtonBase slaughter; - 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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(new GuiButtonWorldHandler(3, x + 116 / 2, y + 36, 232 / 2, 20, I18n.format("gui.worldhandler.butcher.configure"))); - container.add(slaughter = new GuiButtonWorldHandler(2, x + 116 / 2, y + 60, 232 / 2, 20, I18n.format("gui.worldhandler.butcher.slaughter"))); + container.add(this.radiusField); + container.add(new GuiButtonBase(x + 116 / 2, y + 36, 232 / 2, 20, I18n.format("gui.worldhandler.butcher.configure"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.BUTCHER_SETTINGS.withParent(Contents.BUTCHER))); + })); - slaughter.enabled = this.radius != null && !this.radius.isEmpty(); + container.add(slaughter = new GuiButtonBase(2, x + 116 / 2, y + 60, 232 / 2, 20, I18n.format("gui.worldhandler.butcher.slaughter"), () -> + { + for(ResourceLocation entry : Config.getButcher().getEntities()) + { + CommandHelper.sendCommand(new BuilderButcher(entry, Integer.valueOf(this.radius))); + } + })); + + slaughter.enabled = this.radius != null && !this.radius.isEmpty() && !Config.CLIENT.getButcher().getEntities().isEmpty(); } @Override - public void actionPerformed(Container container, GuiButton button) throws Exception + public void tick(Container container) { - switch(button.id) - { - case 2: - for(ResourceLocation entity : EntityList.ENTITY_EGGS.keySet()) - { - if(ConfigButcher.getEntitiyMap().get(EntityHelper.getEntityName(entity))) - { - WorldHandler.sendCommand(new BuilderButcher(entity, Integer.valueOf(this.radius))); - } - } - break; - case 3: - Minecraft.getMinecraft().displayGuiScreen(new GuiConfigWorldHandler(container, ConfigButcher.CATEGORY)); - break; - default: - break; - } + this.radiusField.tick(); } @Override public void drawScreen(Container container, int x, int y, int mouseX, int mouseY, float partialTicks) { - this.radiusField.drawTextBox(); + this.radiusField.drawTextField(mouseX, mouseY, partialTicks); } @Override @@ -86,30 +115,4 @@ public class ContentButcher extends ContentChild { return I18n.format("gui.worldhandler.title.butcher"); } - - @Override - public void keyTyped(Container container, char typedChar, int keyCode) - { - if(this.radiusField.textboxKeyTyped(typedChar, keyCode)) - { - this.radius = this.radiusField.getText(); - - if(this.radius.length() > 0) - { - this.builderButcher.setRadius(Integer.valueOf(this.radius)); - } - else - { - this.builderButcher.setRadius(0); - } - - container.initButtons(); - } - } - - @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - this.radiusField.mouseClicked(mouseX, mouseY, mouseButton); - } } diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentButcherSettings.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentButcherSettings.java new file mode 100644 index 0000000..e2fc8b1 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentButcherSettings.java @@ -0,0 +1,108 @@ +package exopandora.worldhandler.gui.content.impl; + +import java.util.List; +import java.util.stream.Collectors; + +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.gui.button.GuiButtonBase; +import exopandora.worldhandler.gui.button.GuiButtonTooltip; +import exopandora.worldhandler.gui.container.Container; +import exopandora.worldhandler.gui.content.element.impl.ElementPageList; +import exopandora.worldhandler.gui.content.impl.abstr.ContentChild; +import exopandora.worldhandler.gui.logic.ILogicPageList; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.util.ActionHandler; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.EntityType; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; + +@OnlyIn(Dist.CLIENT) +public class ContentButcherSettings extends ContentChild +{ + private ResourceLocation entity; + + @Override + public void initGui(Container container, int x, int y) + { + List> list = ForgeRegistries.ENTITIES.getValues().stream().filter(EntityType::isSummonable).collect(Collectors.toList()); + + ElementPageList> entities = new ElementPageList>(x, y, list, 114, 20, 3, container, new ILogicPageList>() + { + @Override + public String translate(EntityType item) + { + TextFormatting color = TextFormatting.RED; + + if(Config.CLIENT.getButcher().containsEntity(item.getRegistryName())) + { + color = TextFormatting.GREEN; + } + + return color + I18n.format(item.getTranslationKey()); + } + + @Override + public String toTooltip(EntityType item) + { + return item.getRegistryName().toString(); + } + + @Override + public void onClick(EntityType item) + { + ContentButcherSettings.this.entity = item.getRegistryName(); + container.initButtons(); + } + + @Override + public GuiButtonBase onRegister(int x, int y, int width, int height, String text, EntityType item, ActionHandler actionHandler) + { + return new GuiButtonTooltip(x, y, width, height, text, this.toTooltip(item), actionHandler); + } + + @Override + public String getId() + { + return "entities"; + } + }); + + container.add(entities); + } + + @Override + public void initButtons(Container container, int x, int y) + { + GuiButtonBase button1; + GuiButtonBase button2; + + container.add(new GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); + + container.add(button1 = new GuiButtonBase(x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.generic.enable"), () -> + { + Config.CLIENT.getButcher().addEntity(this.entity); + container.initButtons(); + })); + container.add(button2 = new GuiButtonBase(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.generic.disable"), () -> + { + Config.CLIENT.getButcher().removeEntity(this.entity); + container.initButtons(); + })); + + boolean contains = Config.CLIENT.getButcher().containsEntity(this.entity); + + button1.enabled = !contains; + button2.enabled = contains; + } + + @Override + public String getTitle() + { + return this.parent.getTitle(); + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentChangeWorld.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentChangeWorld.java index 03fb528..908c587 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentChangeWorld.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentChangeWorld.java @@ -1,10 +1,11 @@ package exopandora.worldhandler.gui.content.impl; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.content.impl.abstr.ContentChild; +import exopandora.worldhandler.helper.ActionHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiConnecting; import net.minecraft.client.gui.GuiMainMenu; import net.minecraft.client.gui.GuiMultiplayer; import net.minecraft.client.gui.GuiScreen; @@ -12,73 +13,61 @@ import net.minecraft.client.gui.GuiWorldSelection; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.resources.I18n; -import net.minecraftforge.fml.client.FMLClientHandler; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentChangeWorld extends ContentChild { @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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(new GuiButtonWorldHandler(2, x + 116 / 2, y + 24, 232 / 2, 20, I18n.format("gui.worldhandler.change_world.singleplayer"))); - container.add(new GuiButtonWorldHandler(3, x + 116 / 2, y + 48, 232 / 2, 20, I18n.format("gui.worldhandler.change_world.multiplayer"))); - } - - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception - { - switch(button.id) + container.add(new GuiButtonBase(x + 116 / 2, y + 24, 232 / 2, 20, I18n.format("gui.worldhandler.change_world.singleplayer"), () -> { - case 2: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldSelection(container)); - break; - case 3: - ServerData server = Minecraft.getMinecraft().getCurrentServerData(); + Minecraft.getInstance().displayGuiScreen(new GuiWorldSelection(container)); + })); + container.add(new GuiButtonBase(x + 116 / 2, y + 48, 232 / 2, 20, I18n.format("gui.worldhandler.change_world.multiplayer"), () -> + { + ServerData server = Minecraft.getInstance().getCurrentServerData(); + + if(server != null) + { + Minecraft.getInstance().world.sendQuittingDisconnectingPacket(); + Minecraft.getInstance().loadWorld((WorldClient)null); - if(server != null) + Minecraft.getInstance().displayGuiScreen(new GuiMultiplayer(new GuiScreen() { - Minecraft.getMinecraft().world.sendQuittingDisconnectingPacket(); - Minecraft.getMinecraft().loadWorld((WorldClient)null); - - Minecraft.getMinecraft().displayGuiScreen(new GuiMultiplayer(new GuiScreen() + @Override + public void initGui() { - @Override - public void initGui() - { - FMLClientHandler.instance().connectToServer(new GuiMultiplayer(new GuiMainMenu()), server); - Minecraft.getMinecraft().displayGuiScreen((GuiScreen) null); - Minecraft.getMinecraft().setIngameFocus(); - } - })); - } - else + Minecraft.getInstance().displayGuiScreen(new GuiConnecting(new GuiMainMenu(), Minecraft.getInstance(), server)); + Minecraft.getInstance().mouseHelper.grabMouse(); + } + })); + } + else + { + String worldName = Minecraft.getInstance().getIntegratedServer().getWorldName(); + String folderName = Minecraft.getInstance().getIntegratedServer().getFolderName(); + + Minecraft.getInstance().world.sendQuittingDisconnectingPacket(); + Minecraft.getInstance().loadWorld(null); + + Minecraft.getInstance().displayGuiScreen(new GuiMultiplayer(new GuiScreen() { - String worldName = Minecraft.getMinecraft().getIntegratedServer().getWorldName(); - String folderName = Minecraft.getMinecraft().getIntegratedServer().getFolderName(); - - Minecraft.getMinecraft().world.sendQuittingDisconnectingPacket(); - Minecraft.getMinecraft().loadWorld((WorldClient)null); - - Minecraft.getMinecraft().displayGuiScreen(new GuiMultiplayer(new GuiScreen() + @Override + public void initGui() { - @Override - public void initGui() - { - Minecraft.getMinecraft().launchIntegratedServer(folderName, worldName, null); - Minecraft.getMinecraft().displayGuiScreen((GuiScreen) null); - Minecraft.getMinecraft().setIngameFocus(); - } - })); - } - break; - default: - break; - } + Minecraft.getInstance().launchIntegratedServer(folderName, worldName, null); + Minecraft.getInstance().displayGuiScreen(null); + Minecraft.getInstance().mouseHelper.grabMouse(); + } + })); + } + })); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContainers.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContainers.java index b7db7ab..787ab22 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContainers.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContainers.java @@ -1,107 +1,103 @@ package exopandora.worldhandler.gui.content.impl; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.impl.BuilderGive; -import exopandora.worldhandler.builder.impl.BuilderSetblock; -import exopandora.worldhandler.builder.types.Coordinate; -import exopandora.worldhandler.config.ConfigSettings; +import exopandora.worldhandler.builder.impl.BuilderSetBlock; +import exopandora.worldhandler.builder.types.Coordinate.CoordinateType; +import exopandora.worldhandler.builder.types.CoordinateInt; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiButtonItem; -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.helper.ActionHelper; import exopandora.worldhandler.helper.BlockHelper; +import exopandora.worldhandler.helper.CommandHelper; +import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.resources.I18n; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentContainers extends Content { @Override public void initButtons(Container container, int x, int y) { - container.add(new GuiButtonWorldHandler(1, x, y + 96, 232, 20, I18n.format("gui.worldhandler.generic.backToGame"))); + container.add(new GuiButtonBase(x, y + 96, 232, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(new GuiButtonWorldHandler(3, x + 24, y, 208, 20, Blocks.CRAFTING_TABLE.getLocalizedName())); - container.add(new GuiButtonWorldHandler(4, x + 24, y + 24, 208, 20, Blocks.ENDER_CHEST.getLocalizedName())); - container.add(new GuiButtonWorldHandler(5, x + 24, y + 48, 208, 20, Blocks.ANVIL.getLocalizedName())); - container.add(new GuiButtonWorldHandler(6, x + 24, y + 72, 208, 20, Blocks.ENCHANTING_TABLE.getLocalizedName())); - - container.add(new GuiButtonItem(7, x, y, 20, 20, new ItemStack(Blocks.CRAFTING_TABLE))); - container.add(new GuiButtonItem(8, x, y + 24, 20, 20, new ItemStack(Blocks.ENDER_CHEST))); - container.add(new GuiButtonItem(9, x, y + 48, 20, 20, new ItemStack(Blocks.ANVIL))); - container.add(new GuiButtonItem(10, x, y + 72, 20, 20, new ItemStack(Blocks.ENCHANTING_TABLE))); - } - - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception - { - switch(button.id) + container.add(new GuiButtonBase(x + 24, y, 208, 20, Blocks.CRAFTING_TABLE.getNameTextComponent().getFormattedText(), () -> { - case 3: - BlockHelper.setBlockNearPlayer(Blocks.CRAFTING_TABLE, (byte) 0, (byte) 0, (byte) 0, (byte) 0); - Minecraft.getMinecraft().displayGuiScreen((GuiScreen) null); - Minecraft.getMinecraft().setIngameFocus(); - break; - case 4: - BlockHelper.setBlockNearPlayer(Blocks.ENDER_CHEST, (byte) 2, (byte) 5, (byte) 3, (byte) 4); - Minecraft.getMinecraft().displayGuiScreen((GuiScreen) null); - Minecraft.getMinecraft().setIngameFocus(); - break; - case 5: - BlockHelper.setBlockNearPlayer(Blocks.ANVIL, (byte) 1, (byte) 0, (byte) 1, (byte) 0); - Minecraft.getMinecraft().displayGuiScreen((GuiScreen) null); - Minecraft.getMinecraft().setIngameFocus(); - break; - case 6: - BlockHelper.setBlockNearPlayer(Blocks.ENCHANTING_TABLE, (byte) 0, (byte) 0, (byte) 0, (byte) 0); - - int direction = MathHelper.floor((double) (Minecraft.getMinecraft().player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - double angle = direction * Math.PI / 2; - double sin = Math.sin(angle); - double cos = Math.cos(angle); - - for(int x = -2; x <= 2; x++) + BlockHelper.setBlockNearPlayer(Blocks.CRAFTING_TABLE); + ActionHelper.backToGame(); + })); + container.add(new GuiButtonBase(x + 24, y + 24, 208, 20, Blocks.ENDER_CHEST.getNameTextComponent().getFormattedText(), () -> + { + BlockHelper.setBlockNearPlayer(Blocks.ENDER_CHEST); + ActionHelper.backToGame(); + })); + container.add(new GuiButtonBase(x + 24, y + 48, 208, 20, Blocks.ANVIL.getNameTextComponent().getFormattedText(), () -> + { + BlockHelper.setBlockNearPlayer(Blocks.ANVIL); + ActionHelper.backToGame(); + })); + container.add(new GuiButtonBase(x + 24, y + 72, 208, 20, Blocks.ENCHANTING_TABLE.getNameTextComponent().getFormattedText(), () -> + { + double angle = Minecraft.getInstance().player.getHorizontalFacing().getHorizontalIndex() * Math.PI / 2; + double sin = Math.sin(angle); + double cos = Math.cos(angle); + + for(int xOffset = -2; xOffset <= 2; xOffset++) + { + for(int yOffset = 0; yOffset <= 1; yOffset++) { - for(int y = 0; y <= 1; y++) + for(int zOffset = 1; zOffset <= 4; zOffset++) { - for(int z = 1; z <= 4; z++) + Block block = null; + int cx = (int) Math.round(xOffset * cos - zOffset * sin); + int cz = (int) Math.round(xOffset * sin + zOffset * cos); + + if(!(xOffset >= -1 && xOffset <= 1 && zOffset < 4)) { - if(!(x >= -1 && x <= 1 && z < 4)) - { - WorldHandler.sendCommand(new BuilderSetblock(new Coordinate(x * cos - z * sin, true), new Coordinate(y, true), new Coordinate(x * sin + z * cos, true), Blocks.BOOKSHELF.getRegistryName(), ConfigSettings.getMode())); - } + block = Blocks.BOOKSHELF; + } + else if(xOffset == 0 && yOffset == 0 && zOffset == 2) + { + block = Blocks.ENCHANTING_TABLE; + } + + if(block != null) + { + CommandHelper.sendCommand(new BuilderSetBlock(new CoordinateInt(cx, CoordinateType.GLOBAL), new CoordinateInt(yOffset, CoordinateType.GLOBAL), new CoordinateInt(cz, CoordinateType.GLOBAL), block.getRegistryName(), Config.getSettings().getBlockPlacingMode())); } } } - - Minecraft.getMinecraft().displayGuiScreen((GuiScreen) null); - Minecraft.getMinecraft().setIngameFocus(); - break; - case 7: - WorldHandler.sendCommand(new BuilderGive(container.getPlayer(), Blocks.CRAFTING_TABLE.getRegistryName())); - break; - case 8: - WorldHandler.sendCommand(new BuilderGive(container.getPlayer(), Blocks.ENDER_CHEST.getRegistryName())); - break; - case 9: - WorldHandler.sendCommand(new BuilderGive(container.getPlayer(), Blocks.ANVIL.getRegistryName())); - break; - case 10: - WorldHandler.sendCommand(new BuilderGive(container.getPlayer(), Blocks.ENCHANTING_TABLE.getRegistryName())); - break; - default: - break; - } + } + + ActionHelper.backToGame(); + })); + + container.add(new GuiButtonItem(x, y, 20, 20, new ItemStack(Blocks.CRAFTING_TABLE), () -> + { + CommandHelper.sendCommand(new BuilderGive(container.getPlayer(), Blocks.CRAFTING_TABLE.getRegistryName())); + })); + container.add(new GuiButtonItem(x, y + 24, 20, 20, new ItemStack(Blocks.ENDER_CHEST), () -> + { + CommandHelper.sendCommand(new BuilderGive(container.getPlayer(), Blocks.ENDER_CHEST.getRegistryName())); + })); + container.add(new GuiButtonItem(x, y + 48, 20, 20, new ItemStack(Blocks.ANVIL), () -> + { + CommandHelper.sendCommand(new BuilderGive(container.getPlayer(), Blocks.ANVIL.getRegistryName())); + })); + container.add(new GuiButtonItem(x, y + 72, 20, 20, new ItemStack(Blocks.ENCHANTING_TABLE), () -> + { + CommandHelper.sendCommand(new BuilderGive(container.getPlayer(), Blocks.ENCHANTING_TABLE.getRegistryName())); + })); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContinue.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContinue.java index e5b46aa..4401ecf 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContinue.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContinue.java @@ -1,24 +1,22 @@ package exopandora.worldhandler.gui.content.impl; -import org.lwjgl.input.Keyboard; - import com.mojang.realmsclient.gui.ChatFormatting; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilderSyntax; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; import exopandora.worldhandler.gui.container.Container; -import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer; +import exopandora.worldhandler.gui.container.impl.GuiWorldHandler; import exopandora.worldhandler.gui.content.impl.abstr.ContentChild; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.resources.I18n; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentContinue extends ContentChild { private ICommandBuilder builder; @@ -59,53 +57,30 @@ public class ContentContinue extends ContentChild } this.commandField.setCursorPositionZero(); + this.commandField.setValidator(text -> text.equals(this.commandField.getText())); } @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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(new GuiButtonWorldHandler(2, x + 116 / 2, y + 36, 116, 20, ChatFormatting.RED + I18n.format("gui.worldhandler.generic.yes"))); - container.add(new GuiButtonWorldHandler(0, x + 116 / 2, y + 60, 116, 20, I18n.format("gui.worldhandler.generic.no"))); - } - - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception - { - switch(button.id) + container.add(this.commandField); + container.add(new GuiButtonBase(x + 116 / 2, y + 36, 116, 20, ChatFormatting.RED + I18n.format("gui.worldhandler.generic.yes"), () -> { - case 2: - WorldHandler.sendCommand(this.builder, this.special); - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(this.parent)); - break; - default: - break; - } + CommandHelper.sendCommand(this.builder, this.special); + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(this.parent)); + })); + container.add(new GuiButtonBase(x + 116 / 2, y + 60, 116, 20, I18n.format("gui.worldhandler.generic.no"), () -> ActionHelper.back(this))); } @Override public void drawScreen(Container container, int x, int y, int mouseX, int mouseY, float partialTicks) { - this.commandField.drawTextBox(); + this.commandField.drawTextField(mouseX, mouseY, partialTicks); } - @Override - public void keyTyped(Container container, char typedChar, int keyCode) - { - if(keyCode == Keyboard.KEY_RIGHT || keyCode == Keyboard.KEY_LEFT) - { - this.commandField.textboxKeyTyped(typedChar, keyCode); - } - } - - @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - this.commandField.mouseClicked(mouseX, mouseY, mouseButton); - } - @Override public String getTitle() { diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentCustomItem.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentCustomItem.java index 883d194..9ac39c0 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentCustomItem.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentCustomItem.java @@ -7,18 +7,14 @@ import java.util.stream.Stream; import com.google.common.base.Predicates; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderCustomItem; import exopandora.worldhandler.builder.impl.abstr.EnumAttributes; import exopandora.worldhandler.builder.impl.abstr.EnumAttributes.Applyable; -import exopandora.worldhandler.config.ConfigSliders; -import exopandora.worldhandler.gui.button.GuiButtonList; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiSlider; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; -import exopandora.worldhandler.gui.button.responder.AttributeResponder; -import exopandora.worldhandler.gui.button.responder.SimpleResponder; import exopandora.worldhandler.gui.category.Categories; import exopandora.worldhandler.gui.category.Category; import exopandora.worldhandler.gui.container.Container; @@ -26,16 +22,20 @@ import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.element.impl.ElementColorMenu; import exopandora.worldhandler.gui.content.element.impl.ElementPageList; -import exopandora.worldhandler.gui.content.element.logic.ILogicPageList; +import exopandora.worldhandler.gui.logic.ILogicPageList; +import exopandora.worldhandler.gui.logic.LogicSliderAttribute; +import exopandora.worldhandler.gui.logic.LogicSliderSimple; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; import exopandora.worldhandler.helper.ResourceHelper; -import net.minecraft.client.gui.GuiButton; +import exopandora.worldhandler.util.ActionHandler; import net.minecraft.client.resources.I18n; import net.minecraft.enchantment.Enchantment; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentCustomItem extends Content { private GuiTextFieldTooltip itemField; @@ -49,8 +49,6 @@ public class ContentCustomItem extends Content private String selectedPage = "start"; private String item; - private GuiButtonList colorButton; - private final List attributes = Stream.concat(EnumAttributes.getAttributesFor(Applyable.BOTH).stream(), EnumAttributes.getAttributesFor(Applyable.PLAYER).stream()).collect(Collectors.toList()); @Override @@ -66,9 +64,9 @@ public class ContentCustomItem extends Content { double ammount = this.builderCutomItem.getAttributeAmmount(attribute); - if(ammount > ConfigSliders.getMaxItemAttributes()) + if(ammount > Config.getSliders().getMaxItemAttributes()) { - this.builderCutomItem.setAttribute(attribute, ConfigSliders.getMaxItemAttributes()); + this.builderCutomItem.setAttribute(attribute, Config.getSliders().getMaxItemAttributes()); } } @@ -76,9 +74,9 @@ public class ContentCustomItem extends Content { short level = this.builderCutomItem.getEnchantmentLevel(enchantment); - if(level > ConfigSliders.getMaxItemEnchantment()) + if(level > Config.getSliders().getMaxItemEnchantment()) { - this.builderCutomItem.setEnchantment(enchantment, (short) ConfigSliders.getMaxItemEnchantment()); + this.builderCutomItem.setEnchantment(enchantment, (short) Config.getSliders().getMaxItemEnchantment()); } } } @@ -89,63 +87,73 @@ public class ContentCustomItem extends Content this.itemField = new GuiTextFieldTooltip(x + 118, y, 114, 20, I18n.format("gui.worldhandler.items.custom_item.start.item_id")); this.itemField.setValidator(Predicates.notNull()); this.itemField.setText(this.item); + this.itemField.setTextAcceptHandler((id, text) -> + { + this.item = text; + this.builderCutomItem.setItem(this.item); + container.initButtons(); + }); this.itemLore1Field = new GuiTextFieldTooltip(x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.items.custom_item.start.lore_1")); this.itemLore1Field.setValidator(Predicates.notNull()); this.itemLore1Field.setText(this.builderCutomItem.getLore1()); + this.itemLore1Field.setTextAcceptHandler((id, text) -> + { + this.builderCutomItem.setLore1(text); + container.initButtons(); + }); this.itemLore2Field = new GuiTextFieldTooltip(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.items.custom_item.start.lore_2")); this.itemLore2Field.setValidator(Predicates.notNull()); this.itemLore2Field.setText(this.builderCutomItem.getLore2()); + this.itemLore2Field.setTextAcceptHandler((id, text) -> + { + this.builderCutomItem.setLore2(text); + container.initButtons(); + }); if(this.selectedPage.equals("start")) { if(this.startPage == 1) { - ElementColorMenu colors = new ElementColorMenu(this, x, y, "gui.worldhandler.items.custom_item.start.custom_name", this.builderCutomItem.getName(), new int[] {10, 11, 12, 13, 14, 15}); - container.add(colors); + container.add(new ElementColorMenu(x, y, "gui.worldhandler.items.custom_item.start.custom_name", this.builderCutomItem.getName())); } } else if(this.selectedPage.equals("enchant")) { - ElementPageList enchantments = new ElementPageList(x + 118, y, new ArrayList(Enchantment.REGISTRY.getKeys()), null, 114, 20, 3, this, new int[] {10, 11, 12}, new ILogicPageList() + ElementPageList enchantments = new ElementPageList(x + 118, y, new ArrayList(ForgeRegistries.ENCHANTMENTS.getValues()), 114, 20, 3, container, new ILogicPageList() { @Override - public String translate(ResourceLocation key) + public String translate(Enchantment item) { - return I18n.format(Enchantment.REGISTRY.getObject(key).getName()); + return I18n.format(item.getName()); } @Override - public String getRegistryName(ResourceLocation key) + public String toTooltip(Enchantment item) { - return key.toString(); + return item.getRegistryName().toString(); } @Override - public void onClick(ResourceLocation clicked) + public void onClick(Enchantment item) { } @Override - public void onRegister(int id, int x, int y, int width, int height, String display, String registry, boolean enabled, ResourceLocation value, Container container) + public GuiButtonBase onRegister(int x, int y, int width, int height, String text, Enchantment item, ActionHandler actionHandler) { - container.add(new GuiSlider(Contents.CUSTOM_ITEM, container, value, x, y, width, height, display, 0, ConfigSliders.getMaxItemEnchantment(), 0, new SimpleResponder(response -> + return new GuiSlider(x, y, width, height, 0, Config.getSliders().getMaxItemEnchantment(), 0, container, new LogicSliderSimple(this.toTooltip(item), text, value -> { - builderCutomItem.setEnchantment(Enchantment.REGISTRY.getObject(value), response.shortValue()); - }))); + ContentCustomItem.this.builderCutomItem.setEnchantment(item, value.shortValue()); + })); } @Override - public ResourceLocation getObject(String object) + public boolean doDisable() { - if(object != null) - { - return new ResourceLocation(object.toString()); - } - - return null; + return false; } @Override @@ -154,44 +162,43 @@ public class ContentCustomItem extends Content return "enchantments"; } }); - container.add(enchantments); } else if(this.selectedPage.equals("attributes")) { - ElementPageList attributes = new ElementPageList(x + 118, y, this.attributes, null, 114, 20, 3, this, new int[] {13, 14, 15}, new ILogicPageList() + ElementPageList attributes = new ElementPageList(x + 118, y, this.attributes, 114, 20, 3, container, new ILogicPageList() { @Override - public String translate(EnumAttributes key) + public String translate(EnumAttributes item) { - return I18n.format("attribute.name." + key.getAttribute()); + return item.getTranslation(); } @Override - public void onClick(EnumAttributes clicked) + public String toTooltip(EnumAttributes item) + { + return item.getAttribute(); + } + + @Override + public void onClick(EnumAttributes item) { } @Override - public String getRegistryName(EnumAttributes key) + public GuiButtonBase onRegister(int x, int y, int width, int height, String text, EnumAttributes item, ActionHandler actionHandler) { - return key.getAttribute(); - } - - @Override - public void onRegister(int id, int x, int y, int width, int height, String display, String registry, boolean enabled, EnumAttributes value, Container container) - { - container.add(new GuiSlider(Contents.CUSTOM_ITEM, container, value, x, y, width, height, display, -ConfigSliders.getMaxItemAttributes(), ConfigSliders.getMaxItemAttributes(), 0, new AttributeResponder(response -> + return new GuiSlider(x, y, width, height, -Config.getSliders().getMaxItemAttributes(), Config.getSliders().getMaxItemEnchantment(), 0, container, new LogicSliderAttribute(item, text, value -> { - builderCutomItem.setAttribute(value, response); - }))); + ContentCustomItem.this.builderCutomItem.setAttribute(item, value); + })); } @Override - public EnumAttributes getObject(Object object) + public boolean doDisable() { - return null; + return false; } @Override @@ -208,135 +215,104 @@ public class ContentCustomItem extends Content @Override public void initButtons(Container container, int x, int y) { - GuiButtonWorldHandler button3; - GuiButtonWorldHandler button4; - GuiButtonWorldHandler button5; - GuiButtonWorldHandler button6; - GuiButtonWorldHandler button7; - GuiButtonWorldHandler button8; - GuiButtonWorldHandler button9; - GuiButtonWorldHandler button10; - GuiButtonWorldHandler button11; + GuiButtonBase button1; + GuiButtonBase button2; + GuiButtonBase button3; + GuiButtonBase button4; + GuiButtonBase button5; + GuiButtonBase button6; - 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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(button3 = new GuiButtonWorldHandler(3, x, y, 114, 20, I18n.format("gui.worldhandler.items.custom_item.start"))); - container.add(button4 = new GuiButtonWorldHandler(4, x, y + 24, 114, 20, I18n.format("gui.worldhandler.items.custom_item.enchantment"))); - container.add(button5 = new GuiButtonWorldHandler(5, x, y + 48, 114, 20, I18n.format("gui.worldhandler.items.custom_item.attributes"))); + container.add(button1 = new GuiButtonBase(x, y, 114, 20, I18n.format("gui.worldhandler.items.custom_item.start"), () -> + { + this.selectedPage = "start"; + container.initGui(); + })); + container.add(button2 = new GuiButtonBase(x, y + 24, 114, 20, I18n.format("gui.worldhandler.items.custom_item.enchantment"), () -> + { + this.selectedPage = "enchant"; + container.initGui(); + })); + container.add(button3 = new GuiButtonBase(x, y + 48, 114, 20, I18n.format("gui.worldhandler.items.custom_item.attributes"), () -> + { + this.selectedPage = "attributes"; + container.initGui(); + })); if(this.selectedPage.equals("start")) { - button3.enabled = false; + button1.enabled = false; - container.add(button7 = new GuiButtonWorldHandler(6, x + 118, y + 72, 56, 20, "<")); - container.add(button8 = new GuiButtonWorldHandler(7, x + 118 + 60, y + 72, 55, 20, ">")); + container.add(button5 = new GuiButtonBase(x + 118, y + 72, 56, 20, "<", () -> + { + this.startPage--; + container.initGui(); + })); + container.add(button6 = new GuiButtonBase(x + 118 + 60, y + 72, 55, 20, ">", () -> + { + this.startPage++; + container.initGui(); + })); - button7.enabled = this.startPage != 0; - button8.enabled = this.startPage != 1; + if(this.startPage == 0) + { + button5.enabled = false; + container.add(this.itemField); + container.add(this.itemLore1Field); + container.add(this.itemLore2Field); + } + else if(this.startPage == 1) + { + button6.enabled = false; + } } else if(this.selectedPage.equals("enchant")) { - button4.enabled = false; + button2.enabled = false; } else if(this.selectedPage.equals("attributes")) { - button5.enabled = false; + button3.enabled = false; } if(!this.builderCutomItem.needsCommandBlock() && !this.builderCutomItem.getName().isSpecial()) { - container.add(button6 = new GuiButtonWorldHandler(9, x, y + 72, 114, 20, I18n.format("gui.worldhandler.items.custom_item.custom_item"))); + container.add(button4 = new GuiButtonBase(x, y + 72, 114, 20, I18n.format("gui.worldhandler.items.custom_item.custom_item"), this::send)); } else { - container.add(button6 = new GuiButtonWorldHandler(9, x, y + 72, 114, 20, I18n.format("gui.worldhandler.actions.place_command_block"))); + container.add(button4 = new GuiButtonBase(x, y + 72, 114, 20, I18n.format("gui.worldhandler.actions.place_command_block"), this::send)); } - button6.enabled = ResourceHelper.isRegisteredItem(this.item); + button4.enabled = ResourceHelper.isRegistered(ResourceHelper.stringToResourceLocation(this.item), ForgeRegistries.ITEMS); + } + + private void send() + { + CommandHelper.sendCommand(this.builderCutomItem, this.builderCutomItem.getName().isSpecial()); } @Override - public void actionPerformed(Container container, GuiButton button) throws Exception + public void tick(Container container) { - switch(button.id) + if(this.selectedPage.equals("start") && this.startPage == 0) { - case 3: - this.selectedPage = "start"; - container.initGui(); - break; - case 4: - this.selectedPage = "enchant"; - container.initGui(); - break; - case 5: - this.selectedPage = "attributes"; - container.initGui(); - break; - case 6: - this.startPage--; - container.initGui(); - break; - case 7: - this.startPage++; - container.initGui(); - break; - case 9: - WorldHandler.sendCommand(this.builderCutomItem, this.builderCutomItem.getName().isSpecial()); - break; - default: - break; + this.itemField.tick(); + this.itemLore1Field.tick(); + this.itemLore2Field.tick(); } } @Override public void drawScreen(Container container, int x, int y, int mouseX, int mouseY, float partialTicks) { - if(this.selectedPage.equals("start")) + if(this.selectedPage.equals("start") && this.startPage == 0) { - if(this.startPage == 0) - { - this.itemField.drawTextBox(); - this.itemLore1Field.drawTextBox(); - this.itemLore2Field.drawTextBox(); - } - } - } - - @Override - public void keyTyped(Container container, char charTyped, int keyCode) - { - if(this.itemField.textboxKeyTyped(charTyped, keyCode)) - { - this.item = this.itemField.getText(); - this.builderCutomItem.setItem(this.item); - container.initButtons(); - } - - if(this.itemLore1Field.textboxKeyTyped(charTyped, keyCode)) - { - this.builderCutomItem.setLore1(this.itemLore1Field.getText()); - container.initButtons(); - } - - if(this.itemLore2Field.textboxKeyTyped(charTyped, keyCode)) - { - this.builderCutomItem.setLore2(this.itemLore2Field.getText()); - container.initButtons(); - } - } - - @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - if(this.selectedPage.equals("start")) - { - if(this.startPage == 0) - { - this.itemField.mouseClicked(mouseX, mouseY, mouseButton); - this.itemLore1Field.mouseClicked(mouseX, mouseY, mouseButton); - this.itemLore2Field.mouseClicked(mouseX, mouseY, mouseButton); - } + this.itemField.drawTextField(mouseX, mouseY, partialTicks); + this.itemLore1Field.drawTextField(mouseX, mouseY, partialTicks); + this.itemLore2Field.drawTextField(mouseX, mouseY, partialTicks); } } diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEditBlocks.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEditBlocks.java index 0897622..c99a0c9 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEditBlocks.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEditBlocks.java @@ -1,33 +1,34 @@ package exopandora.worldhandler.gui.content.impl; +import java.util.Arrays; + import com.google.common.base.Predicate; import com.google.common.base.Predicates; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderClone; import exopandora.worldhandler.builder.impl.BuilderClone.EnumMask; import exopandora.worldhandler.builder.impl.BuilderFill; import exopandora.worldhandler.builder.impl.BuilderWH; -import exopandora.worldhandler.gui.button.EnumTooltip; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiButtonList; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; -import exopandora.worldhandler.gui.button.logic.IListButtonLogic; -import exopandora.worldhandler.gui.button.persistence.ButtonValue; 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.logic.ILogicMapped; +import exopandora.worldhandler.helper.ActionHelper; import exopandora.worldhandler.helper.BlockHelper; +import exopandora.worldhandler.helper.CommandHelper; import exopandora.worldhandler.helper.ResourceHelper; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.resources.I18n; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentEditBlocks extends Content { private GuiTextFieldTooltip x1Field; @@ -41,15 +42,13 @@ public class ContentEditBlocks extends Content private GuiTextFieldTooltip block1Field; private GuiTextFieldTooltip block2Field; - private final BuilderFill builderFill = new BuilderFill().addPositionObservers(); - private final BuilderClone builderClone = new BuilderClone().addPositionObservers(); + private final BuilderFill builderFill = BlockHelper.addPositionObservers(new BuilderFill(), builder -> builder::setPosition1, builder -> builder::setPosition2); + private final BuilderClone builderClone = BlockHelper.addPositionObservers(new BuilderClone(), builder -> builder::setPosition1, builder -> builder::setPosition2); private final BuilderWH builderWH = new BuilderWH(); private String block1; private String block2; - private GuiButtonList cloneButton; - private String selectedPage = "coordinates"; @Override @@ -77,51 +76,103 @@ public class ContentEditBlocks extends Content this.x1Field = new GuiTextFieldTooltip(x + 118, y, 55, 20); this.x1Field.setValidator(this.getCoordinatePredicate("X1")); this.x1Field.setText("X1: " + BlockHelper.getPos1().getX()); + this.x1Field.setTextAcceptHandler((id, text) -> + { + BlockHelper.setPos1(BlockHelper.setX(BlockHelper.getPos1(), this.parseCoordinate(text))); + }); this.y1Field = new GuiTextFieldTooltip(x + 118, y + 24, 55, 20); this.y1Field.setValidator(this.getCoordinatePredicate("Y1")); this.y1Field.setText("Y1: " + BlockHelper.getPos1().getY()); + this.y1Field.setTextAcceptHandler((id, text) -> + { + BlockHelper.setPos1(BlockHelper.setY(BlockHelper.getPos1(), this.parseCoordinate(text))); + }); this.z1Field = new GuiTextFieldTooltip(x + 118, y + 48, 55, 20); this.z1Field.setValidator(this.getCoordinatePredicate("Z1")); this.z1Field.setText("Z1: " + BlockHelper.getPos1().getZ()); + this.z1Field.setTextAcceptHandler((id, text) -> + { + BlockHelper.setPos1(BlockHelper.setZ(BlockHelper.getPos1(), this.parseCoordinate(text))); + }); this.x2Field = new GuiTextFieldTooltip(x + 118 + 59, y, 55, 20); this.x2Field.setValidator(this.getCoordinatePredicate("X2")); this.x2Field.setText("X2: " + BlockHelper.getPos2().getX()); + this.x2Field.setTextAcceptHandler((id, text) -> + { + BlockHelper.setPos2(BlockHelper.setX(BlockHelper.getPos2(), this.parseCoordinate(text))); + }); this.y2Field = new GuiTextFieldTooltip(x + 118 + 59, y + 24, 55, 20); this.y2Field.setValidator(this.getCoordinatePredicate("Y2")); this.y2Field.setText("Y2: " + BlockHelper.getPos2().getY()); + this.y2Field.setTextAcceptHandler((id, text) -> + { + BlockHelper.setPos2(BlockHelper.setY(BlockHelper.getPos2(), this.parseCoordinate(text))); + }); this.z2Field = new GuiTextFieldTooltip(x + 118 + 59, y + 48, 55, 20); this.z2Field.setValidator(this.getCoordinatePredicate("Z2")); this.z2Field.setText("Z2: " + BlockHelper.getPos2().getZ()); + this.z2Field.setTextAcceptHandler((id, text) -> + { + BlockHelper.setPos2(BlockHelper.setZ(BlockHelper.getPos2(), this.parseCoordinate(text))); + }); this.block1Field = new GuiTextFieldTooltip(x + 118, y, 114, 20, this.selectedPage.equals("fill") ? I18n.format("gui.worldhandler.edit_blocks.fill.block_id_to_fill") : I18n.format("gui.worldhandler.edit_blocks.replace.block_id_replace")); this.block1Field.setValidator(Predicates.notNull()); this.block1Field.setText(this.block1); + this.block1Field.setTextAcceptHandler((id, text) -> + { + this.block1 = text; + this.builderFill.setBlock1(this.block1); + container.initButtons(); + }); this.block2Field = new GuiTextFieldTooltip(x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.edit_blocks.replace.block_id_place")); this.block2Field.setValidator(Predicates.notNull()); this.block2Field.setText(this.block2); + this.block2Field.setTextAcceptHandler((id, text) -> + { + this.block2 = text; + this.builderFill.setBlock2(this.block2); + container.initButtons(); + }); } @Override public void initButtons(Container container, int x, int y) { - GuiButtonWorldHandler button3; - GuiButtonWorldHandler button4; - GuiButtonWorldHandler button5; - GuiButtonWorldHandler button6; + GuiButtonBase button1; + GuiButtonBase button2; + GuiButtonBase button3; + GuiButtonBase button4; - 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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(button3 = new GuiButtonWorldHandler(2, x, y, 114, 20, I18n.format("gui.worldhandler.edit_blocks.coordinates"))); - container.add(button4 = new GuiButtonWorldHandler(3, x, y + 24, 114, 20, I18n.format("gui.worldhandler.edit_blocks.fill"))); - container.add(button5 = new GuiButtonWorldHandler(4, x, y + 48, 114, 20, I18n.format("gui.worldhandler.edit_blocks.replace"))); - container.add(button6 = new GuiButtonWorldHandler(5, x, y + 72, 114, 20, I18n.format("gui.worldhandler.edit_blocks.clone"))); + container.add(button1 = new GuiButtonBase(x, y, 114, 20, I18n.format("gui.worldhandler.edit_blocks.coordinates"), () -> + { + this.selectedPage = "coordinates"; + container.initGui(); + })); + container.add(button2 = new GuiButtonBase(x, y + 24, 114, 20, I18n.format("gui.worldhandler.edit_blocks.fill"), () -> + { + this.selectedPage = "fill"; + container.initGui(); + })); + container.add(button3 = new GuiButtonBase(x, y + 48, 114, 20, I18n.format("gui.worldhandler.edit_blocks.replace"), () -> + { + this.selectedPage = "replace"; + container.initGui(); + })); + container.add(button4 = new GuiButtonBase(x, y + 72, 114, 20, I18n.format("gui.worldhandler.edit_blocks.clone"), () -> + { + this.selectedPage = "clone"; + container.initGui(); + })); int yOffset1 = 0; int yOffset2 = 0; @@ -131,15 +182,57 @@ public class ContentEditBlocks extends Content if(this.selectedPage.equals("coordinates")) { - button3.enabled = false; + button1.enabled = false; yOffset1 = 72; yOffset2 = 72; width1 = 56; width2 = 56; xOffset2 = 58; + + container.add(this.x1Field); + container.add(this.y1Field); + container.add(this.z1Field); + container.add(this.x2Field); + container.add(this.y2Field); + container.add(this.z2Field); } else if(this.selectedPage.equals("fill")) + { + button2.enabled = false; + + yOffset1 = 24; + yOffset2 = 48; + width1 = 114; + width2 = 114; + xOffset2 = 0; + + container.add(this.block1Field); + container.add(button1 = new GuiButtonBase(x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.edit_blocks.fill"), () -> + { + CommandHelper.sendCommand(this.builderFill.getBuilderForFill()); + })); + button1.enabled = ResourceHelper.isRegistered(this.builderFill.getBlock1(), ForgeRegistries.BLOCKS); + } + else if(this.selectedPage.equals("replace")) + { + button3.enabled = false; + + yOffset1 = 48; + yOffset2 = 48; + width1 = 56; + width2 = 56; + xOffset2 = 58; + + container.add(this.block1Field); + container.add(this.block2Field); + container.add(button1 = new GuiButtonBase(8, x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.edit_blocks.replace"), () -> + { + CommandHelper.sendCommand(this.builderFill.getBuilderForReplace()); + })); + button1.enabled = ResourceHelper.isRegistered(this.builderFill.getBlock1(), ForgeRegistries.BLOCKS) && ResourceHelper.isRegistered(this.builderFill.getBlock2(), ForgeRegistries.BLOCKS); + } + else if(this.selectedPage.equals("clone")) { button4.enabled = false; @@ -149,56 +242,24 @@ public class ContentEditBlocks extends Content width2 = 114; xOffset2 = 0; - container.add(button3 = new GuiButtonWorldHandler(10, x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.edit_blocks.fill"))); - button3.enabled = ResourceHelper.isRegisteredBlock(this.builderFill.getBlock1String()); - } - else if(this.selectedPage.equals("replace")) - { - button5.enabled = false; - - yOffset1 = 48; - yOffset2 = 48; - width1 = 56; - width2 = 56; - xOffset2 = 58; - - container.add(button3 = new GuiButtonWorldHandler(8, x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.edit_blocks.replace"))); - button3.enabled = ResourceHelper.isRegisteredBlock(this.builderFill.getBlock1String()) && ResourceHelper.isRegisteredBlock(this.builderFill.getBlock2String()); - } - else if(this.selectedPage.equals("clone")) - { - button6.enabled = false; - - yOffset1 = 24; - yOffset2 = 48; - width1 = 114; - width2 = 114; - xOffset2 = 0; - - container.add(this.cloneButton = new GuiButtonList(9, x + 118, y, 114, 20, EnumTooltip.TOP_RIGHT, this, new IListButtonLogic() + container.add(new GuiButtonList(x + 118, y, Arrays.asList(EnumMask.values()), 114, 20, container, new ILogicMapped() { @Override - public void actionPerformed(Container container, GuiButton button, ButtonValue values) + public String translate(EnumMask item) { - builderClone.setMask(values.getObject()); + return I18n.format("gui.worldhandler.edit_blocks.clone.mode." + item.toString()); } @Override - public int getMax() + public String toTooltip(EnumMask item) { - return EnumMask.values().length; + return item.toString(); } @Override - public EnumMask getObject(int index) + public void onClick(EnumMask item) { - return EnumMask.values()[index]; - } - - @Override - public String getDisplayString(ButtonValue values) - { - return I18n.format("gui.worldhandler.edit_blocks.clone.mode." + values.getObject().toString()); + ContentEditBlocks.this.builderClone.setMask(item); } @Override @@ -208,56 +269,45 @@ public class ContentEditBlocks extends Content } })); - container.add(new GuiButtonWorldHandler(11, x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.edit_blocks.clone"))); + container.add(new GuiButtonBase(x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.edit_blocks.clone"), () -> + { + CommandHelper.sendCommand(this.builderClone); + })); } - container.add(new GuiButtonWorldHandler(6, x + 118, y + yOffset1, width1, 20, I18n.format("gui.worldhandler.edit_blocks.pos.set_pos_1"))); - container.add(new GuiButtonWorldHandler(7, x + 118 + xOffset2, y + yOffset2, width2, 20, I18n.format("gui.worldhandler.edit_blocks.pos.set_pos_2"))); + container.add(new GuiButtonBase(x + 118, y + yOffset1, width1, 20, I18n.format("gui.worldhandler.edit_blocks.pos.set_pos_1"), () -> + { + BlockHelper.setPos1(BlockHelper.getFocusedBlockPos()); + container.initGui(); + })); + container.add(new GuiButtonBase(x + 118 + xOffset2, y + yOffset2, width2, 20, I18n.format("gui.worldhandler.edit_blocks.pos.set_pos_2"), () -> + { + BlockHelper.setPos2(BlockHelper.getFocusedBlockPos()); + container.initGui(); + })); } @Override - public void actionPerformed(Container container, GuiButton button) throws Exception + public void tick(Container container) { - switch(button.id) + if(this.selectedPage.equals("coordinates")) { - case 2: - this.selectedPage = "coordinates"; - container.initGui(); - break; - case 3: - this.selectedPage = "fill"; - container.initGui(); - break; - case 4: - this.selectedPage = "replace"; - container.initGui(); - break; - case 5: - this.selectedPage = "clone"; - container.initGui(); - break; - case 6: - BlockHelper.setPos1(BlockHelper.getFocusedBlockPos()); - container.initGui(); - break; - case 7: - BlockHelper.setPos2(BlockHelper.getFocusedBlockPos()); - container.initGui(); - break; - case 8: - WorldHandler.sendCommand(this.builderFill.getBuilderForReplace()); - break; - case 9: - this.cloneButton.actionPerformed(container, button); - break; - case 10: - WorldHandler.sendCommand(this.builderFill.getBuilderForFill()); - break; - case 11: - WorldHandler.sendCommand(this.builderClone); - break; - default: - break; + this.x1Field.tick(); + this.y1Field.tick(); + this.z1Field.tick(); + + this.x2Field.tick(); + this.y2Field.tick(); + this.z2Field.tick(); + } + else if(this.selectedPage.equals("fill")) + { + this.block1Field.tick(); + } + else if(this.selectedPage.equals("replace")) + { + this.block1Field.tick(); + this.block2Field.tick(); } } @@ -266,93 +316,22 @@ public class ContentEditBlocks extends Content { if(this.selectedPage.equals("coordinates")) { - this.x1Field.drawTextBox(); - this.y1Field.drawTextBox(); - this.z1Field.drawTextBox(); + this.x1Field.drawTextField(mouseX, mouseY, partialTicks); + this.y1Field.drawTextField(mouseX, mouseY, partialTicks); + this.z1Field.drawTextField(mouseX, mouseY, partialTicks); - this.x2Field.drawTextBox(); - this.y2Field.drawTextBox(); - this.z2Field.drawTextBox(); + this.x2Field.drawTextField(mouseX, mouseY, partialTicks); + this.y2Field.drawTextField(mouseX, mouseY, partialTicks); + this.z2Field.drawTextField(mouseX, mouseY, partialTicks); } else if(this.selectedPage.equals("fill")) { - this.block1Field.drawTextBox(); + this.block1Field.drawTextField(mouseX, mouseY, partialTicks); } else if(this.selectedPage.equals("replace")) { - this.block1Field.drawTextBox(); - this.block2Field.drawTextBox(); - } - } - - @Override - public void keyTyped(Container container, char typedChar, int keyCode) - { - if(this.x1Field.textboxKeyTyped(typedChar, keyCode)) - { - BlockHelper.setPos1(BlockHelper.setX(BlockHelper.getPos1(), this.filterCoordinateText(this.x1Field.getText()))); - } - - if(this.y1Field.textboxKeyTyped(typedChar, keyCode)) - { - BlockHelper.setPos1(BlockHelper.setY(BlockHelper.getPos1(), this.filterCoordinateText(this.y1Field.getText()))); - } - - if(this.z1Field.textboxKeyTyped(typedChar, keyCode)) - { - BlockHelper.setPos1(BlockHelper.setZ(BlockHelper.getPos1(), this.filterCoordinateText(this.z1Field.getText()))); - } - - if(this.x2Field.textboxKeyTyped(typedChar, keyCode)) - { - BlockHelper.setPos2(BlockHelper.setX(BlockHelper.getPos2(), this.filterCoordinateText(this.x2Field.getText()))); - } - - if(this.y2Field.textboxKeyTyped(typedChar, keyCode)) - { - BlockHelper.setPos2(BlockHelper.setY(BlockHelper.getPos2(), this.filterCoordinateText(this.y2Field.getText()))); - } - - if(this.z2Field.textboxKeyTyped(typedChar, keyCode)) - { - BlockHelper.setPos2(BlockHelper.setZ(BlockHelper.getPos2(), this.filterCoordinateText(this.z2Field.getText()))); - } - - if(this.block1Field.textboxKeyTyped(typedChar, keyCode)) - { - this.block1 = this.block1Field.getText(); - this.builderFill.setBlock1(this.block1); - container.initButtons(); - } - - if(this.block2Field.textboxKeyTyped(typedChar, keyCode)) - { - this.block2 = this.block2Field.getText(); - this.builderFill.setBlock2(this.block2); - container.initButtons(); - } - } - - @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - if(this.selectedPage.equals("coordinates")) - { - this.x1Field.mouseClicked(mouseX, mouseY, mouseButton); - this.y1Field.mouseClicked(mouseX, mouseY, mouseButton); - this.z1Field.mouseClicked(mouseX, mouseY, mouseButton); - this.x2Field.mouseClicked(mouseX, mouseY, mouseButton); - this.y2Field.mouseClicked(mouseX, mouseY, mouseButton); - this.z2Field.mouseClicked(mouseX, mouseY, mouseButton); - } - else if(this.selectedPage.equals("fill")) - { - this.block1Field.mouseClicked(mouseX, mouseY, mouseButton); - } - else if(this.selectedPage.equals("replace")) - { - this.block1Field.mouseClicked(mouseX, mouseY, mouseButton); - this.block2Field.mouseClicked(mouseX, mouseY, mouseButton); + this.block1Field.drawTextField(mouseX, mouseY, partialTicks); + this.block2Field.drawTextField(mouseX, mouseY, partialTicks); } } @@ -361,7 +340,7 @@ public class ContentEditBlocks extends Content return string -> string.matches(coordinate + ": [-]?[0-9]*"); } - private int filterCoordinateText(String input) + private int parseCoordinate(String input) { if(input != null) { diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEnchantment.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEnchantment.java index 42faa8b..6d618f0 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEnchantment.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEnchantment.java @@ -2,29 +2,29 @@ package exopandora.worldhandler.gui.content.impl; import java.util.ArrayList; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderEnchantment; -import exopandora.worldhandler.builder.types.Type; -import exopandora.worldhandler.gui.button.EnumTooltip; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.gui.button.GuiButtonBase; +import exopandora.worldhandler.gui.button.GuiButtonTooltip; import exopandora.worldhandler.gui.button.GuiSlider; -import exopandora.worldhandler.gui.button.responder.SimpleResponder; 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 exopandora.worldhandler.gui.logic.ILogicPageList; +import exopandora.worldhandler.gui.logic.LogicSliderSimple; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; +import exopandora.worldhandler.util.ActionHandler; import net.minecraft.client.resources.I18n; import net.minecraft.enchantment.Enchantment; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentEnchantment extends Content { private final BuilderEnchantment builderEnchantment = new BuilderEnchantment(); @@ -38,39 +38,32 @@ public class ContentEnchantment extends Content @Override public void initGui(Container container, int x, int y) { - ElementPageList enchantments = new ElementPageList(x, y, new ArrayList(Enchantment.REGISTRY.getKeys()), null, 114, 20, 3, this, new int[] {3, 4, 5}, new ILogicPageList() + ElementPageList enchantments = new ElementPageList(x, y, new ArrayList(ForgeRegistries.ENCHANTMENTS.getValues()), 114, 20, 3, container, new ILogicPageList() { @Override - public String translate(ResourceLocation key) + public String translate(Enchantment item) { - return I18n.format(Enchantment.REGISTRY.getObject(key).getName()); + return I18n.format(item.getName()); } @Override - public String getRegistryName(ResourceLocation key) + public String toTooltip(Enchantment item) { - return key.toString(); + return item.getRegistryName().toString(); } @Override - public void onClick(ResourceLocation clicked) + public void onClick(Enchantment item) { - builderEnchantment.setEnchantment(clicked); - builderEnchantment.setLevel(1); + ContentEnchantment.this.builderEnchantment.setEnchantment(item); + ContentEnchantment.this.builderEnchantment.setLevel(1); + container.initButtons(); } @Override - public void onRegister(int id, int x, int y, int width, int height, String display, String registry, boolean enabled, ResourceLocation value, Container container) + public GuiButtonBase onRegister(int x, int y, int width, int height, String text, Enchantment item, ActionHandler actionHandler) { - GuiButtonWorldHandler button = new GuiButtonWorldHandler(id, x, y, width, height, display, registry, EnumTooltip.TOP_RIGHT); - button.enabled = enabled; - container.add(button); - } - - @Override - public ResourceLocation getObject(String object) - { - return Type.parseResourceLocation(object); + return new GuiButtonTooltip(x, y, width, height, text, this.toTooltip(item), actionHandler); } @Override @@ -86,29 +79,18 @@ public class ContentEnchantment extends Content @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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(new GuiSlider(this, container, "enchantment", x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.items.enchantment.level"), 1, Enchantment.REGISTRY.getObject(this.builderEnchantment.getEnchantment()).getMaxLevel(), 1, new SimpleResponder(value -> + container.add(new GuiSlider(x + 118, y + 24, 114, 20, 1, ForgeRegistries.ENCHANTMENTS.getValue(this.builderEnchantment.getEnchantment()).getMaxLevel(), 1, container, new LogicSliderSimple("enchantment", I18n.format("gui.worldhandler.items.enchantment.level"), value -> { this.builderEnchantment.setLevel(value.intValue()); }))); - container.add(new GuiButtonWorldHandler(2, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.items.enchantment.enchant"))); - } - - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception - { - switch(button.id) + container.add(new GuiButtonBase(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.items.enchantment.enchant"), () -> { - case 2: - WorldHandler.sendCommand(this.builderEnchantment); - container.initGui(); - break; - default: - break; - } + CommandHelper.sendCommand(this.builderEnchantment); + })); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentExperience.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentExperience.java index e92e966..a044f81 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentExperience.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentExperience.java @@ -1,30 +1,30 @@ package exopandora.worldhandler.gui.content.impl; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderExperience; -import exopandora.worldhandler.config.ConfigSliders; -import exopandora.worldhandler.gui.button.EnumTooltip; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.gui.button.GuiButtonBase; +import exopandora.worldhandler.gui.button.GuiButtonTooltip; import exopandora.worldhandler.gui.button.GuiSlider; -import exopandora.worldhandler.gui.button.responder.SimpleResponder; 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 net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; +import exopandora.worldhandler.gui.logic.LogicSliderSimple; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; import net.minecraft.client.resources.I18n; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentExperience extends Content { private final BuilderExperience builderExperience = new BuilderExperience(); - private GuiButtonWorldHandler addButton; - private GuiButtonWorldHandler removeButton; + + private GuiButtonBase buttonAdd; + private GuiButtonBase buttonRemove; @Override public ICommandBuilder getCommandBuilder() @@ -35,64 +35,51 @@ public class ContentExperience extends Content @Override public void init(Container container) { - if(this.builderExperience.getLevel() > ConfigSliders.getMaxExperience()) + if(this.builderExperience.getLevel() > Config.getSliders().getMaxExperience()) { - this.builderExperience.setLevel((int) ConfigSliders.getMaxExperience()); + this.builderExperience.setLevel((int) Config.getSliders().getMaxExperience()); } } @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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(new GuiSlider(this, container, "experience", x + 116 / 2, y, 114, 20, I18n.format("gui.worldhandler.title.player.experience"), 0, ConfigSliders.getMaxExperience(), 0, new SimpleResponder(value -> + container.add(new GuiSlider(x + 116 / 2, y, 114, 20, 0, Config.getSliders().getMaxExperience(), 0, container, new LogicSliderSimple("experience", I18n.format("gui.worldhandler.title.player.experience"), value -> { this.builderExperience.setLevel(value); }))); - container.add(this.addButton = new GuiButtonWorldHandler(3, x + 116 / 2, y + 24, 114, 20, I18n.format("gui.worldhandler.actions.add"))); - container.add(this.removeButton = new GuiButtonWorldHandler(4, x + 116 / 2, y + 48, 114, 20, I18n.format("gui.worldhandler.actions.remove"))); - container.add(new GuiButtonWorldHandler(5, x + 116 / 2, y + 72, 114, 20, I18n.format("gui.worldhandler.actions.reset"), I18n.format("gui.worldhandler.actions.set_to_0"), EnumTooltip.TOP_RIGHT)); - - boolean enabled = this.builderExperience.getLevel() > 0; - - this.addButton.enabled = enabled; - this.removeButton.enabled = enabled; - } - - @Override - public void updateScreen(Container container) - { - boolean enabled = this.builderExperience.getLevel() > 0; - - this.addButton.enabled = enabled; - this.removeButton.enabled = enabled; - } - - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception - { - switch(button.id) + container.add(this.buttonAdd = new GuiButtonBase(x + 116 / 2, y + 24, 114, 20, I18n.format("gui.worldhandler.actions.add"), () -> { - case 3: - WorldHandler.sendCommand(this.builderExperience); - container.initGui(); - break; - case 4: - if(Minecraft.getMinecraft().player.experienceLevel >= this.builderExperience.getLevel()) - { - WorldHandler.sendCommand(new BuilderExperience(-this.builderExperience.getLevel(), this.builderExperience.getPlayer())); - break; - } - case 5: - WorldHandler.sendCommand(new BuilderExperience(-Minecraft.getMinecraft().player.experienceLevel, this.builderExperience.getPlayer())); - container.initGui(); - break; - default: - break; - } + CommandHelper.sendCommand(this.builderExperience.getBuilderForAddLevels()); + container.initGui(); + })); + container.add(this.buttonRemove = new GuiButtonBase(x + 116 / 2, y + 48, 114, 20, I18n.format("gui.worldhandler.actions.remove"), () -> + { + CommandHelper.sendCommand(this.builderExperience.getBuilderForRemoveLevels()); + })); + container.add(new GuiButtonTooltip(x + 116 / 2, y + 72, 114, 20, I18n.format("gui.worldhandler.actions.reset"), I18n.format("gui.worldhandler.actions.set_to_0"), () -> + { + CommandHelper.sendCommand(this.builderExperience.getBuilderForResetLevels()); + container.initGui(); + })); + + boolean enabled = this.builderExperience.getLevel() > 0; + + this.buttonAdd.enabled = enabled; + this.buttonRemove.enabled = enabled; + } + + @Override + public void tick(Container container) + { + boolean enabled = this.builderExperience.getLevel() > 0; + + this.buttonAdd.enabled = enabled; + this.buttonRemove.enabled = enabled; } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentGamerules.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentGamerules.java index 916430a..329bed0 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentGamerules.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentGamerules.java @@ -1,14 +1,13 @@ package exopandora.worldhandler.gui.content.impl; -import java.util.Arrays; +import java.util.ArrayList; import com.google.common.base.Predicates; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderGamerule; -import exopandora.worldhandler.gui.button.EnumTooltip; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.gui.button.GuiButtonBase; +import exopandora.worldhandler.gui.button.GuiButtonTooltip; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; import exopandora.worldhandler.gui.category.Categories; import exopandora.worldhandler.gui.category.Category; @@ -16,15 +15,17 @@ 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.Minecraft; -import net.minecraft.client.gui.GuiButton; +import exopandora.worldhandler.gui.logic.ILogicPageList; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; +import exopandora.worldhandler.util.ActionHandler; import net.minecraft.client.resources.I18n; +import net.minecraft.world.GameRules; import net.minecraft.world.GameRules.ValueType; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentGamerules extends Content { private GuiTextFieldTooltip valueField; @@ -47,56 +48,48 @@ public class ContentGamerules extends Content this.valueField.setValidator(Predicates.notNull()); this.valueField.setText(this.value); this.valueField.setCursorPositionEnd(); + this.valueField.setTextAcceptHandler((id, text) -> + { + this.value = text; + this.builderGamerule.setValue(this.value); + }); - ElementPageList rules = new ElementPageList(x, y, Arrays.asList(Minecraft.getMinecraft().world.getGameRules().getRules()), null, 114, 20, 3, this, new int[] {5, 6, 7}, new ILogicPageList() + ElementPageList rules = new ElementPageList(x, y, new ArrayList(GameRules.getDefinitions().keySet()), 114, 20, 3, container, new ILogicPageList() { @Override - public String translate(String key) + public String translate(String item) { - String translated = I18n.format(key); - - if(!translated.equals(key)) - { - return translated; - } - - return I18n.format("gui.worldhandler.gamerules.rule." + key); + return I18n.format("gui.worldhandler.gamerules.rule." + item); } @Override - public void onClick(String clicked) + public String toTooltip(String item) { - builderGamerule.setRule(clicked); - booleanValue = Minecraft.getMinecraft().world.getGameRules().areSameType(clicked, ValueType.BOOLEAN_VALUE); + return item; + } + + @Override + public void onClick(String item) + { + ContentGamerules.this.builderGamerule.setRule(item); + ContentGamerules.this.booleanValue = GameRules.getDefinitions().get(item).getType().equals(ValueType.BOOLEAN_VALUE); - if(booleanValue) + if(ContentGamerules.this.booleanValue) { - builderGamerule.setValue(null); + ContentGamerules.this.builderGamerule.setValue(null); } else { - builderGamerule.setValue(value); + ContentGamerules.this.builderGamerule.setValue(ContentGamerules.this.value); } + + container.initButtons(); } @Override - public String getRegistryName(String key) + public GuiButtonBase onRegister(int x, int y, int width, int height, String text, String item, ActionHandler actionHandler) { - return key; - } - - @Override - public void onRegister(int id, int x, int y, int width, int height, String display, String registryKey, boolean enabled, String value, Container container) - { - GuiButtonWorldHandler button = new GuiButtonWorldHandler(id, x, y, width, height, display, registryKey, EnumTooltip.TOP_RIGHT); - button.enabled = enabled; - container.add(button); - } - - @Override - public String getObject(String object) - { - return object; + return new GuiButtonTooltip(x, y, width, height, text, this.toTooltip(item), actionHandler); } @Override @@ -112,36 +105,36 @@ public class ContentGamerules extends Content @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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); if(this.booleanValue) { - container.add(new GuiButtonWorldHandler(2, x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.generic.enable"))); - container.add(new GuiButtonWorldHandler(3, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.generic.disable"))); + container.add(new GuiButtonBase(x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.generic.enable"), () -> + { + CommandHelper.sendCommand(this.builderGamerule.getBuilderForValue(String.valueOf(true))); + })); + container.add(new GuiButtonBase(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.generic.disable"), () -> + { + CommandHelper.sendCommand(this.builderGamerule.getBuilderForValue(String.valueOf(false))); + })); } else { - container.add(new GuiButtonWorldHandler(4, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.actions.perform"))); + container.add(this.valueField); + container.add(new GuiButtonBase(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.actions.perform"), () -> + { + CommandHelper.sendCommand(this.builderGamerule); + })); } } @Override - public void actionPerformed(Container container, GuiButton button) throws Exception + public void tick(Container container) { - switch(button.id) + if(!this.booleanValue) { - case 2: - WorldHandler.sendCommand(this.builderGamerule.getBuilderForValue(String.valueOf(true))); - break; - case 3: - WorldHandler.sendCommand(this.builderGamerule.getBuilderForValue(String.valueOf(false))); - break; - case 4: - WorldHandler.sendCommand(this.builderGamerule); - break; - default: - break; + this.valueField.tick(); } } @@ -150,26 +143,7 @@ public class ContentGamerules extends Content { if(!this.booleanValue) { - this.valueField.drawTextBox(); - } - } - - @Override - public void keyTyped(Container container, char typedChar, int keyCode) - { - if(this.valueField.textboxKeyTyped(typedChar, keyCode)) - { - this.value = this.valueField.getText(); - this.builderGamerule.setValue(this.value); - } - } - - @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - if(!this.booleanValue) - { - this.valueField.mouseClicked(mouseX, mouseY, mouseButton); + this.valueField.drawTextField(mouseX, mouseY, partialTicks); } } diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMain.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMain.java index b346556..fab636f 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMain.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMain.java @@ -1,105 +1,94 @@ package exopandora.worldhandler.gui.content.impl; import exopandora.worldhandler.Main; -import exopandora.worldhandler.config.ConfigSettings; +import exopandora.worldhandler.config.Config; import exopandora.worldhandler.gui.button.EnumIcon; -import exopandora.worldhandler.gui.button.EnumTooltip; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.gui.button.GuiButtonBase; +import exopandora.worldhandler.gui.button.GuiButtonIcon; import exopandora.worldhandler.gui.category.Categories; import exopandora.worldhandler.gui.category.Category; -import exopandora.worldhandler.gui.config.GuiConfigWorldHandler; import exopandora.worldhandler.gui.container.Container; -import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer; +import exopandora.worldhandler.gui.container.impl.GuiWorldHandler; import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Contents; +import exopandora.worldhandler.helper.ActionHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreenResourcePacks; import net.minecraft.client.resources.I18n; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentMain extends Content { @Override public void initButtons(Container container, int x, int y) { - container.add(new GuiButtonWorldHandler(-1, x, y, 22, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.dawn", ConfigSettings.getDawn())), EnumTooltip.TOP_RIGHT, EnumIcon.TIME_DAWN)); - container.add(new GuiButtonWorldHandler(-2, x + 26, y, 22, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.noon", ConfigSettings.getNoon())), EnumTooltip.TOP_RIGHT, EnumIcon.TIME_NOON)); - container.add(new GuiButtonWorldHandler(-3, x + 26 * 2, y, 22, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.sunset", ConfigSettings.getSunset())), EnumTooltip.TOP_RIGHT, EnumIcon.TIME_SUNSET)); - container.add(new GuiButtonWorldHandler(-4, x + 26 * 3, y, 23, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.midnight", ConfigSettings.getMidnight())), EnumTooltip.TOP_RIGHT, EnumIcon.TIME_MIDNIGHT)); - container.add(new GuiButtonWorldHandler(-8, x + 26 * 4, y, 24, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.peaceful")), EnumTooltip.TOP_RIGHT, EnumIcon.DIFFICULTY_PEACEFUL)); - container.add(new GuiButtonWorldHandler(-9, x + 26 * 5 + 2, y, 23, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.easy")), EnumTooltip.TOP_RIGHT, EnumIcon.DIFFICULTY_EASY)); - container.add(new GuiButtonWorldHandler(-10, x + 26 * 6 + 2, y, 22, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.normal")), EnumTooltip.TOP_RIGHT, EnumIcon.DIFFICULTY_NORMAL)); - container.add(new GuiButtonWorldHandler(-11, x + 26 * 7 + 2, y, 22, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.hard")), EnumTooltip.TOP_RIGHT, EnumIcon.DIFFICULTY_HARD)); - container.add(new GuiButtonWorldHandler(10, x + 26 * 8 + 2, y, 22, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.settings"), EnumTooltip.TOP_RIGHT, EnumIcon.SETTINGS)); - - container.add(new GuiButtonWorldHandler(-5, x, y + 24, 22, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.weather", I18n.format("gui.worldhandler.shortcuts.tooltip.weather.clear")), EnumTooltip.TOP_RIGHT, EnumIcon.WEATHER_SUN)); - container.add(new GuiButtonWorldHandler(-6, x + 26, y + 24, 22, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.weather", I18n.format("gui.worldhandler.shortcuts.tooltip.weather.rainy")), EnumTooltip.TOP_RIGHT, EnumIcon.WEATHER_RAIN)); - container.add(new GuiButtonWorldHandler(-7, x + 26 * 2, y + 24, 22, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.weather", I18n.format("gui.worldhandler.shortcuts.tooltip.weather.thunder")), EnumTooltip.TOP_RIGHT, EnumIcon.WEATHER_STORM)); - container.add(new GuiButtonWorldHandler(11, x + 26 * 3, y + 24, 23, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.butcher"), EnumTooltip.TOP_RIGHT, EnumIcon.BUTCHER)); - container.add(new GuiButtonWorldHandler(12, x + 26 * 4, y + 24, 24, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.potions"), EnumTooltip.TOP_RIGHT, EnumIcon.POTION)); - container.add(new GuiButtonWorldHandler(-12, x + 26 * 5 + 2, y + 24, 23, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.survival")), EnumTooltip.TOP_RIGHT, EnumIcon.GAMEMODE_SURVIVAL)); - container.add(new GuiButtonWorldHandler(-13, x + 26 * 6 + 2, y + 24, 22, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.creative")), EnumTooltip.TOP_RIGHT, EnumIcon.GAMEMODE_CREATIVE)); - container.add(new GuiButtonWorldHandler(-14, x + 26 * 7 + 2, y + 24, 22, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.adventure")), EnumTooltip.TOP_RIGHT, EnumIcon.GAMEMODE_ADVENTURE)); - container.add(new GuiButtonWorldHandler(-15, x + 26 * 8 + 2, y + 24, 22, 20, null, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.spectator")), EnumTooltip.TOP_RIGHT, EnumIcon.GAMEMODE_SPECTATOR)); - - container.add(new GuiButtonWorldHandler(2, x, y + 48, 74, 20, I18n.format("gui.worldhandler.items"))); - container.add(new GuiButtonWorldHandler(3, x + 78, y + 48, 76, 20, I18n.format("gui.worldhandler.blocks"))); - container.add(new GuiButtonWorldHandler(9, x + 158, y + 48, 74, 20, I18n.format("gui.worldhandler.entities"))); - - container.add(new GuiButtonWorldHandler(7, x, y + 72, 74, 20, I18n.format("gui.worldhandler.world"))); - container.add(new GuiButtonWorldHandler(8, x + 78, y + 72, 76, 20, I18n.format("gui.worldhandler.player"))); - container.add(new GuiButtonWorldHandler(4, x + 158, y + 72, 74, 20, I18n.format("gui.worldhandler.scoreboard"))); - - container.add(new GuiButtonWorldHandler(6, x, y + 96, 74, 20, I18n.format("gui.worldhandler.change_world"))); - container.add(new GuiButtonWorldHandler(5, x + 78, y + 96, 76, 20, I18n.format("gui.worldhandler.resourcepack"))); - container.add(new GuiButtonWorldHandler(1, x + 158, y + 96, 74, 20, I18n.format("gui.worldhandler.generic.backToGame"))); - } - - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception - { - switch(button.id) + container.add(new GuiButtonIcon(x, y, 22, 20, EnumIcon.TIME_DAWN, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.dawn", Config.getSettings().getDawn())), ActionHelper::timeDawn)); + container.add(new GuiButtonIcon(x + 26, y, 22, 20, EnumIcon.TIME_NOON, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.noon", Config.getSettings().getNoon())), ActionHelper::timeNoon)); + container.add(new GuiButtonIcon(x + 26 * 2, y, 22, 20, EnumIcon.TIME_SUNSET, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.sunset", Config.getSettings().getSunset())), ActionHelper::timeSunset)); + container.add(new GuiButtonIcon(x + 26 * 3, y, 23, 20, EnumIcon.TIME_MIDNIGHT, I18n.format("gui.worldhandler.shortcuts.tooltip.time", I18n.format("gui.worldhandler.shortcuts.tooltip.time.midnight", Config.getSettings().getMidnight())), ActionHelper::timeMidnight)); + container.add(new GuiButtonIcon(x + 26 * 4, y, 24, 20, EnumIcon.DIFFICULTY_PEACEFUL, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.peaceful")), ActionHelper::difficultyPeaceful)); + container.add(new GuiButtonIcon(x + 26 * 5 + 2, y, 23, 20, EnumIcon.DIFFICULTY_EASY, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.easy")), ActionHelper::difficultyEasy)); + container.add(new GuiButtonIcon(x + 26 * 6 + 2, y, 22, 20, EnumIcon.DIFFICULTY_NORMAL, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.normal")), ActionHelper::difficultyNormal)); + container.add(new GuiButtonIcon(x + 26 * 7 + 2, y, 22, 20, EnumIcon.DIFFICULTY_HARD, I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty", I18n.format("gui.worldhandler.shortcuts.tooltip.difficulty.hard")), ActionHelper::difficultyHard)); + container.add(new GuiButtonIcon(x + 26 * 8 + 2, y, 22, 20, EnumIcon.SETTINGS, I18n.format("gui.worldhandler.shortcuts.tooltip.settings"), () -> { - case 2: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.CUSTOM_ITEM)); - break; - case 3: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.EDIT_BLOCKS)); - break; - case 4: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.SCOREBOARD_OBJECTIVES)); - break; - case 5: - Minecraft.getMinecraft().gameSettings.saveOptions(); - Minecraft.getMinecraft().displayGuiScreen(new GuiScreenResourcePacks(container)); - break; - case 6: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.CHANGE_WORLD.withParent(Contents.MAIN))); - break; - case 7: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.WORLD_INFO)); - break; - case 8: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.PLAYER)); - break; - case 9: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.SUMMON)); - break; - case 10: - Minecraft.getMinecraft().displayGuiScreen(new GuiConfigWorldHandler(container, ConfigSettings.CATEGORY)); - break; - case 11: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.BUTCHER.withParent(Contents.MAIN))); - break; - case 12: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.POTIONS.withParent(Contents.MAIN))); - break; - default: - break; - } + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.SETTINGS.withParent(Contents.MAIN))); + })); + + container.add(new GuiButtonIcon(x, y + 24, 22, 20, EnumIcon.WEATHER_SUN, I18n.format("gui.worldhandler.shortcuts.tooltip.weather", I18n.format("gui.worldhandler.shortcuts.tooltip.weather.clear")), ActionHelper::weatherClear)); + container.add(new GuiButtonIcon(x + 26, y + 24, 22, 20, EnumIcon.WEATHER_RAIN, I18n.format("gui.worldhandler.shortcuts.tooltip.weather", I18n.format("gui.worldhandler.shortcuts.tooltip.weather.rainy")), ActionHelper::weatherRain)); + container.add(new GuiButtonIcon(x + 26 * 2, y + 24, 22, 20, EnumIcon.WEATHER_STORM, I18n.format("gui.worldhandler.shortcuts.tooltip.weather", I18n.format("gui.worldhandler.shortcuts.tooltip.weather.thunder")), ActionHelper::weatherThunder)); + container.add(new GuiButtonIcon(x + 26 * 3, y + 24, 23, 20, EnumIcon.BUTCHER, I18n.format("gui.worldhandler.shortcuts.tooltip.butcher"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.BUTCHER.withParent(Contents.MAIN))); + })); + container.add(new GuiButtonIcon(x + 26 * 4, y + 24, 24, 20, EnumIcon.POTION, I18n.format("gui.worldhandler.shortcuts.tooltip.potions"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.POTIONS.withParent(Contents.MAIN))); + })); + container.add(new GuiButtonIcon(x + 26 * 5 + 2, y + 24, 23, 20, EnumIcon.GAMEMODE_SURVIVAL, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.survival")), ActionHelper::gamemodeSurvival)); + container.add(new GuiButtonIcon(x + 26 * 6 + 2, y + 24, 22, 20, EnumIcon.GAMEMODE_CREATIVE, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.creative")), ActionHelper::gamemodeCreative)); + container.add(new GuiButtonIcon(x + 26 * 7 + 2, y + 24, 22, 20, EnumIcon.GAMEMODE_ADVENTURE, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.adventure")), ActionHelper::gamemodeAdventure)); + container.add(new GuiButtonIcon(x + 26 * 8 + 2, y + 24, 22, 20, EnumIcon.GAMEMODE_SPECTATOR, I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode", I18n.format("gui.worldhandler.shortcuts.tooltip.gamemode.spectator")), ActionHelper::gamemodeSpectator)); + + container.add(new GuiButtonBase(x, y + 48, 74, 20, I18n.format("gui.worldhandler.items"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.CUSTOM_ITEM)); + })); + container.add(new GuiButtonBase(x + 78, y + 48, 76, 20, I18n.format("gui.worldhandler.blocks"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.EDIT_BLOCKS)); + })); + container.add(new GuiButtonBase(x + 158, y + 48, 74, 20, I18n.format("gui.worldhandler.entities"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.SUMMON)); + })); + + container.add(new GuiButtonBase(x, y + 72, 74, 20, I18n.format("gui.worldhandler.world"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.WORLD_INFO)); + })); + container.add(new GuiButtonBase(x + 78, y + 72, 76, 20, I18n.format("gui.worldhandler.player"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.PLAYER)); + })); + container.add(new GuiButtonBase(x + 158, y + 72, 74, 20, I18n.format("gui.worldhandler.scoreboard"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.SCOREBOARD_OBJECTIVES)); + })); + + container.add(new GuiButtonBase(x, y + 96, 74, 20, I18n.format("gui.worldhandler.change_world"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.CHANGE_WORLD.withParent(Contents.MAIN))); + })); + container.add(new GuiButtonBase(x + 78, y + 96, 76, 20, I18n.format("gui.worldhandler.resourcepack"), () -> + { + Minecraft.getInstance().gameSettings.saveOptions(); + Minecraft.getInstance().displayGuiScreen(new GuiScreenResourcePacks(container)); + })); + container.add(new GuiButtonBase(x + 158, y + 96, 74, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMultiplayer.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMultiplayer.java index 567d8d2..1efcc3c 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMultiplayer.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMultiplayer.java @@ -2,7 +2,6 @@ package exopandora.worldhandler.gui.content.impl; import com.google.common.base.Predicates; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderGeneric; import exopandora.worldhandler.builder.impl.BuilderMultiCommand; @@ -11,23 +10,25 @@ import exopandora.worldhandler.builder.impl.BuilderPlayerReason; import exopandora.worldhandler.builder.impl.BuilderWhitelist; import exopandora.worldhandler.builder.impl.BuilderWhitelist.EnumMode; import exopandora.worldhandler.gui.button.EnumIcon; -import exopandora.worldhandler.gui.button.EnumTooltip; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.gui.button.GuiButtonBase; +import exopandora.worldhandler.gui.button.GuiButtonIcon; +import exopandora.worldhandler.gui.button.GuiButtonTooltip; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; import exopandora.worldhandler.gui.category.Categories; import exopandora.worldhandler.gui.category.Category; import exopandora.worldhandler.gui.container.Container; -import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer; +import exopandora.worldhandler.gui.container.impl.GuiWorldHandler; import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Contents; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.resources.I18n; import net.minecraft.util.text.TextFormatting; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentMultiplayer extends Content { private GuiTextFieldTooltip playerField; @@ -87,172 +88,191 @@ public class ContentMultiplayer extends Content this.playerField.setFocused(false); this.playerField.setText(this.builderKick.getPlayer()); this.playerField.setMaxStringLength(16); + this.playerField.setTextAcceptHandler((id, text) -> + { + this.setPlayer(this.playerField.getText()); + container.initButtons(); + }); this.reasonField = new GuiTextFieldTooltip(x + 118, y + 24 + this.shiftDown, 114, 20, I18n.format("gui.worldhandler.multiplayer.kick_ban.reason")); this.reasonField.setValidator(Predicates.notNull()); this.reasonField.setFocused(false); this.reasonField.setText(this.builderKick.getReason()); + this.reasonField.setTextAcceptHandler((id, text) -> + { + this.setReason(this.reasonField.getText()); + container.initButtons(); + }); } @Override public void initButtons(Container container, int x, int y) { - GuiButtonWorldHandler button3; - GuiButtonWorldHandler button4; - GuiButtonWorldHandler button5; - GuiButtonWorldHandler button6; - GuiButtonWorldHandler button7; - GuiButtonWorldHandler button8; - GuiButtonWorldHandler button9; + GuiButtonBase button1; + GuiButtonBase button2; + GuiButtonBase button3; + GuiButtonBase button4; + GuiButtonBase button5; + GuiButtonBase button6; + GuiButtonBase button7; - container.add(new GuiButtonWorldHandler(1, x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(button3 = new GuiButtonWorldHandler(3, x, y, 114, 20, I18n.format("gui.worldhandler.multiplayer.kick") + " / " + I18n.format("gui.worldhandler.multiplayer.ban"))); - container.add(button4 = new GuiButtonWorldHandler(4, x, y + 24, 114, 20, I18n.format("gui.worldhandler.multiplayer.pardon"))); - container.add(button5 = new GuiButtonWorldHandler(5, x, y + 48, 114, 20, I18n.format("gui.worldhandler.multiplayer.permissions"))); - container.add(button6 = new GuiButtonWorldHandler(6, x, y + 72, 114, 20, I18n.format("gui.worldhandler.multiplayer.runtime"))); - container.add(button7 = new GuiButtonWorldHandler(7, x, y + 96, 114, 20, I18n.format("gui.worldhandler.multiplayer.whitelist"))); + container.add(button1 = new GuiButtonBase(x, y, 114, 20, I18n.format("gui.worldhandler.multiplayer.kick") + " / " + I18n.format("gui.worldhandler.multiplayer.ban"), () -> + { + this.selected = "kickBan"; + this.shiftDown = 0; + container.initGui(); + })); + container.add(button2 = new GuiButtonBase(x, y + 24, 114, 20, I18n.format("gui.worldhandler.multiplayer.pardon"), () -> + { + this.selected = "pardon"; + this.shiftDown = 24; + container.initGui(); + })); + container.add(button3 = new GuiButtonBase(x, y + 48, 114, 20, I18n.format("gui.worldhandler.multiplayer.permissions"), () -> + { + this.selected = "permissions"; + this.shiftDown = 12; + container.initGui(); + })); + container.add(button4 = new GuiButtonBase(x, y + 72, 114, 20, I18n.format("gui.worldhandler.multiplayer.runtime"), () -> + { + this.selected = "runtime"; + this.shiftDown = 0; + container.initGui(); + })); + container.add(button5 = new GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.multiplayer.whitelist"), () -> + { + this.selected = "whitelist"; + this.shiftDown = 0; + container.initGui(); + })); if(this.selected.equals("kickBan")) { - container.add(button8 = new GuiButtonWorldHandler(8, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.multiplayer.kick"), this.builderKick.toActualCommand(), EnumTooltip.TOP_RIGHT)); - container.add(button9 = new GuiButtonWorldHandler(9, x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.multiplayer.ban"), this.builderBan.toActualCommand(), EnumTooltip.TOP_RIGHT)); + container.add(this.playerField); + container.add(this.reasonField); + container.add(button6 = new GuiButtonTooltip(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.multiplayer.kick"), this.builderKick.toActualCommand(), () -> + { + CommandHelper.sendCommand(this.builderKick); + })); + container.add(button7 = new GuiButtonTooltip(x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.multiplayer.ban"), this.builderBan.toActualCommand(), () -> + { + CommandHelper.sendCommand(this.builderBan); + })); if(this.playerField.getText().isEmpty()) { - button8.enabled = false; - button9.enabled = false; + button6.enabled = false; + button7.enabled = false; + } + + button1.enabled = false; + } + else if(this.selected.equals("pardon")) + { + container.add(this.playerField); + container.add(button6 = new GuiButtonTooltip(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.multiplayer.pardon"), this.builderPardon.toActualCommand(), () -> + { + CommandHelper.sendCommand(this.builderPardon); + })); + + if(this.playerField.getText().isEmpty()) + { + button6.enabled = false; + } + + button2.enabled = false; + } + else if(this.selected.equals("permissions")) + { + container.add(this.playerField); + container.add(button6 = new GuiButtonTooltip(x + 118, y + 24 + 12, 114, 20, I18n.format("gui.worldhandler.multiplayer.permissions.give"), this.builderOp.toActualCommand(), () -> + { + CommandHelper.sendCommand(this.builderOp); + })); + container.add(button7 = new GuiButtonTooltip(x + 118, y + 48 + 12, 114, 20, I18n.format("gui.worldhandler.multiplayer.permissions.take"), this.builderDeop.toActualCommand(), () -> + { + CommandHelper.sendCommand(this.builderDeop); + })); + + if(this.playerField.getText().isEmpty()) + { + button6.enabled = false; + button7.enabled = false; } button3.enabled = false; } - else if(this.selected.equals("pardon")) + else if(this.selected.equals("runtime")) { - container.add(button8 = new GuiButtonWorldHandler(10, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.multiplayer.pardon"), this.builderPardon.toActualCommand(), EnumTooltip.TOP_RIGHT)); - - if(this.playerField.getText().isEmpty()) + container.add(new GuiButtonTooltip(x + 118, y, 114, 20, I18n.format("gui.worldhandler.multiplayer.runtime.save_world"), this.builderSaveAll.toActualCommand(), () -> { - button8.enabled = false; - } + CommandHelper.sendCommand(this.builderSaveAll); + })); + container.add(new GuiButtonTooltip(x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.multiplayer.runtime.autosave", I18n.format("gui.worldhandler.generic.on")), this.builderSaveOn.toActualCommand(), () -> + { + CommandHelper.sendCommand(this.builderSaveOn); + })); + container.add(new GuiButtonTooltip(x + 118, y + 48, 114, 20, TextFormatting.RED + I18n.format("gui.worldhandler.multiplayer.runtime.autosave", I18n.format("gui.worldhandler.generic.off")), this.builderSaveOff.toActualCommand(), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.CONTINUE.withBuilder(this.builderSaveOff).withParent(Contents.MULTIPLAYER))); + })); + container.add(new GuiButtonTooltip(x + 118, y + 72, 114, 20, TextFormatting.RED + I18n.format("gui.worldhandler.multiplayer.runtime.stop_server"), this.builderStop.toActualCommand(), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.CONTINUE.withBuilder(this.builderStop).withParent(Contents.MULTIPLAYER))); + })); button4.enabled = false; } - else if(this.selected.equals("permissions")) + else if(this.selected.equals("whitelist")) { - container.add(button8 = new GuiButtonWorldHandler(11, x + 118, y + 24 + 12, 114, 20, I18n.format("gui.worldhandler.multiplayer.permissions.give"), this.builderOp.toActualCommand(), EnumTooltip.TOP_RIGHT)); - container.add(button9 = new GuiButtonWorldHandler(12, x + 118, y + 48 + 12, 114, 20, I18n.format("gui.worldhandler.multiplayer.permissions.take"), this.builderDeop.toActualCommand(), EnumTooltip.TOP_RIGHT)); + container.add(this.playerField); + container.add(button6 = new GuiButtonBase(x + 118, y + 24, 44, 20, I18n.format("gui.worldhandler.multiplayer.whitelist.add"), () -> + { + CommandHelper.sendCommand(this.builderWhitelist.getBuilder(EnumMode.ADD)); + })); + container.add(button7 = new GuiButtonBase(x + 118 + 47, y + 24, 44, 20, I18n.format("gui.worldhandler.multiplayer.whitelist.remove"), () -> + { + CommandHelper.sendCommand(this.builderWhitelist.getBuilder(EnumMode.REMOVE)); + })); + + container.add(new GuiButtonBase(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.multiplayer.whitelist.whitelist", I18n.format("gui.worldhandler.generic.on")), () -> + { + CommandHelper.sendCommand(this.builderWhitelist.getBuilder(EnumMode.ON)); + })); + container.add(new GuiButtonBase(x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.multiplayer.whitelist.whitelist", I18n.format("gui.worldhandler.generic.off")), () -> + { + CommandHelper.sendCommand(this.builderWhitelist.getBuilder(EnumMode.OFF)); + })); + + container.add(new GuiButtonIcon(x + 232 - 20, y + 24, 20, 20, EnumIcon.RELOAD, I18n.format("gui.worldhandler.multiplayer.whitelist.reload"), () -> + { + CommandHelper.sendCommand(this.builderWhitelist.getBuilder(EnumMode.RELOAD)); + })); if(this.playerField.getText().isEmpty()) { - button8.enabled = false; - button9.enabled = false; + button6.enabled = false; + button7.enabled = false; } button5.enabled = false; } - else if(this.selected.equals("runtime")) - { - container.add(new GuiButtonWorldHandler(13, x + 118, y, 114, 20, I18n.format("gui.worldhandler.multiplayer.runtime.save_world"), this.builderSaveAll.toActualCommand(), EnumTooltip.TOP_RIGHT)); - container.add(new GuiButtonWorldHandler(14, x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.multiplayer.runtime.autosave", I18n.format("gui.worldhandler.generic.on")), this.builderSaveOn.toActualCommand(), EnumTooltip.TOP_RIGHT)); - container.add(new GuiButtonWorldHandler(15, x + 118, y + 48, 114, 20, TextFormatting.RED + I18n.format("gui.worldhandler.multiplayer.runtime.autosave", I18n.format("gui.worldhandler.generic.off")), this.builderSaveOff.toActualCommand(), EnumTooltip.TOP_RIGHT)); - container.add(new GuiButtonWorldHandler(16, x + 118, y + 72, 114, 20, TextFormatting.RED + I18n.format("gui.worldhandler.multiplayer.runtime.stop_server"), this.builderStop.toActualCommand(), EnumTooltip.TOP_RIGHT)); - - button6.enabled = false; - } - else if(this.selected.equals("whitelist")) - { - container.add(button8 = new GuiButtonWorldHandler(17, x + 118, y + 24, 44, 20, I18n.format("gui.worldhandler.multiplayer.whitelist.add"))); - container.add(button9 = new GuiButtonWorldHandler(18, x + 118 + 47, y + 24, 44, 20, I18n.format("gui.worldhandler.multiplayer.whitelist.remove"))); - - container.add(new GuiButtonWorldHandler(19, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.multiplayer.whitelist.whitelist", I18n.format("gui.worldhandler.generic.on")))); - container.add(new GuiButtonWorldHandler(20, x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.multiplayer.whitelist.whitelist", I18n.format("gui.worldhandler.generic.off")))); - - container.add(new GuiButtonWorldHandler(21, x + 232 - 20, y + 24, 20, 20, null, I18n.format("gui.worldhandler.multiplayer.whitelist.reload"), EnumTooltip.TOP_RIGHT, EnumIcon.RELOAD)); - - if(this.playerField.getText().isEmpty()) - { - button8.enabled = false; - button9.enabled = false; - } - - button7.enabled = false; - } } @Override - public void actionPerformed(Container container, GuiButton button) throws Exception + public void tick(Container container) { - switch(button.id) + if(this.selected.equals("kickBan")) { - case 3: - this.selected = "kickBan"; - this.shiftDown = 0; - container.initGui(); - break; - case 4: - this.selected = "pardon"; - this.shiftDown = 24; - container.initGui(); - break; - case 5: - this.selected = "permissions"; - this.shiftDown = 12; - container.initGui(); - break; - case 6: - this.selected = "runtime"; - this.shiftDown = 0; - container.initGui(); - break; - case 7: - this.selected = "whitelist"; - this.shiftDown = 0; - container.initGui(); - break; - case 8: - WorldHandler.sendCommand(this.builderKick); - break; - case 9: - WorldHandler.sendCommand(this.builderBan); - break; - case 10: - WorldHandler.sendCommand(this.builderPardon); - break; - case 11: - WorldHandler.sendCommand(this.builderOp); - break; - case 12: - WorldHandler.sendCommand(this.builderDeop); - break; - case 13: - WorldHandler.sendCommand(this.builderSaveAll); - break; - case 14: - WorldHandler.sendCommand(this.builderSaveOn); - break; - case 15: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.CONTINUE.withBuilder(this.builderSaveOff).withParent(Contents.MULTIPLAYER))); - break; - case 16: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.CONTINUE.withBuilder(this.builderStop).withParent(Contents.MULTIPLAYER))); - break; - case 17: - WorldHandler.sendCommand(this.builderWhitelist.getBuilder(EnumMode.ADD)); - break; - case 18: - WorldHandler.sendCommand(this.builderWhitelist.getBuilder(EnumMode.REMOVE)); - break; - case 19: - WorldHandler.sendCommand(this.builderWhitelist.getBuilder(EnumMode.ON)); - break; - case 20: - WorldHandler.sendCommand(this.builderWhitelist.getBuilder(EnumMode.OFF)); - break; - case 21: - WorldHandler.sendCommand(this.builderWhitelist.getBuilder(EnumMode.RELOAD)); - break; - default: - break; + this.reasonField.tick(); + } + + if(!this.selected.equals("runtime")) + { + this.playerField.tick(); } } @@ -261,12 +281,12 @@ public class ContentMultiplayer extends Content { if(this.selected.equals("kickBan")) { - this.reasonField.drawTextBox(); + this.reasonField.drawTextField(mouseX, mouseY, partialTicks); } if(!this.selected.equals("runtime")) { - this.playerField.drawTextBox(); + this.playerField.drawTextField(mouseX, mouseY, partialTicks); } } @@ -312,29 +332,6 @@ public class ContentMultiplayer extends Content return Contents.MULTIPLAYER; } - @Override - public void keyTyped(Container container, char typedChar, int keyCode) - { - if(this.playerField.textboxKeyTyped(typedChar, keyCode)) - { - this.setPlayer(this.playerField.getText()); - container.initButtons(); - } - - if(this.reasonField.textboxKeyTyped(typedChar, keyCode)) - { - this.setReason(this.reasonField.getText()); - container.initButtons(); - } - } - - @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - this.playerField.mouseClicked(mouseX, mouseY, mouseButton); - this.reasonField.mouseClicked(mouseX, mouseY, mouseButton); - } - @Override public Content getBackContent() { diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentNoteEditor.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentNoteEditor.java index 0d3fb97..0c9c044 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentNoteEditor.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentNoteEditor.java @@ -1,41 +1,39 @@ package exopandora.worldhandler.gui.content.impl; -import org.lwjgl.input.Keyboard; - +import exopandora.worldhandler.Main; import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderNoteEditor; -import exopandora.worldhandler.config.ConfigSkin; -import exopandora.worldhandler.gui.button.GuiButtonKeyboard; -import exopandora.worldhandler.gui.button.GuiButtonKeyboard.Orientation; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.gui.button.GuiButtonBase; +import exopandora.worldhandler.gui.button.GuiButtonPiano; +import exopandora.worldhandler.gui.button.GuiButtonPiano.Type; 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.helper.ActionHelper; import exopandora.worldhandler.helper.BlockHelper; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; +import exopandora.worldhandler.helper.CommandHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.resources.I18n; import net.minecraft.init.Blocks; -import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemStack; +import net.minecraft.state.properties.NoteBlockInstrument; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentNoteEditor extends Content { + private static final ResourceLocation NOTE = new ResourceLocation(Main.MODID, "textures/misc/note.png"); private final BuilderNoteEditor builderNoteEditor = new BuilderNoteEditor(); private boolean isActive; @@ -49,137 +47,127 @@ public class ContentNoteEditor extends Content @Override public void init(Container container) { - this.isActive = BlockHelper.isFocusedBlockEqualTo(Blocks.NOTEBLOCK); + this.isActive = BlockHelper.isFocusedBlockEqualTo(Blocks.NOTE_BLOCK); this.builderNoteEditor.setPosition(BlockHelper.getFocusedBlockPos()); } @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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); if(this.isActive) { BlockPos pos = this.builderNoteEditor.getBlockPos(); SoundEvent sound = this.getSoundEvent(pos.down()); - container.add(new GuiButtonKeyboard(4, x - 3 + 15, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.g"), Orientation.NORMAL, 0.53F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(5, x - 3 + 15 * 2, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.a"), Orientation.NORMAL, 0.6F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(6, x - 3 + 15 * 3, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.b"), Orientation.RIGHT, 0.67F, container, this, pos, sound)); + container.add(new GuiButtonPiano(x - 3 + 15, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.g"), sound, 0.53F, Type.NORMAL, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(1)); + })); + container.add(new GuiButtonPiano(x - 3 + 15 * 2, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.a"), sound, 0.6F, Type.NORMAL, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(3)); + })); + container.add(new GuiButtonPiano(x - 3 + 15 * 3, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.b"), sound, 0.67F, Type.RIGHT, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(5)); + })); - container.add(new GuiButtonKeyboard(7, x - 3 + 15 * 4, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.c"), Orientation.LEFT, 0.7F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(8, x - 3 + 15 * 5, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.d"), Orientation.NORMAL, 0.8F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(9, x - 3 + 15 * 6, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.e"), Orientation.RIGHT, 0.9F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(10, x - 3 + 15 * 7, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.f"), Orientation.LEFT, 0.95F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(11, x - 3 + 15 * 8, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.g"), Orientation.NORMAL, 1.05F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(12, x - 3 + 15 * 9, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.a"), Orientation.NORMAL, 1.2F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(13, x - 3 + 15 * 10, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.b"), Orientation.RIGHT, 1.32F, container, this, pos, sound)); + container.add(new GuiButtonPiano(x - 3 + 15 * 4, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.c"), sound, 0.7F, Type.LEFT, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(6)); + })); + container.add(new GuiButtonPiano(x - 3 + 15 * 5, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.d"), sound, 0.8F, Type.NORMAL, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(8)); + })); + container.add(new GuiButtonPiano(x - 3 + 15 * 6, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.e"), sound, 0.9F, Type.RIGHT, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(10)); + })); + container.add(new GuiButtonPiano(x - 3 + 15 * 7, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.f"), sound, 0.95F, Type.LEFT, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(11)); + })); + container.add(new GuiButtonPiano(x - 3 + 15 * 8, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.g"), sound, 1.05F, Type.NORMAL, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(13)); + })); + container.add(new GuiButtonPiano(x - 3 + 15 * 9, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.a"), sound, 1.2F, Type.NORMAL, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(15)); + })); + container.add(new GuiButtonPiano(x - 3 + 15 * 10, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.b"), sound, 1.32F, Type.RIGHT, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(17)); + })); - container.add(new GuiButtonKeyboard(14, x - 3 + 15 * 11, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.c"), Orientation.LEFT, 1.4F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(15, x - 3 + 15 * 12, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.d"), Orientation.NORMAL, 1.6F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(16, x - 3 + 15 * 13, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.e"), Orientation.RIGHT, 1.8F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(17, x - 3 + 15 * 14, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.f"), Orientation.LEFT, 1.9F, container, this, pos, sound)); + container.add(new GuiButtonPiano(x - 3 + 15 * 11, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.c"), sound, 1.4F, Type.LEFT, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(18)); + })); + container.add(new GuiButtonPiano(x - 3 + 15 * 12, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.d"), sound, 1.6F, Type.NORMAL, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(20)); + })); + container.add(new GuiButtonPiano(x - 3 + 15 * 13, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.e"), sound, 1.8F, Type.RIGHT, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(22)); + })); + container.add(new GuiButtonPiano(x - 3 + 15 * 14, y, 14, 92, I18n.format("gui.worldhandler.blocks.note_block_editor.f"), sound, 1.9F, Type.LEFT, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(23)); + })); - container.add(new GuiButtonKeyboard(18, x - 3 - 5 + 15, y, 9, 58, "F#", Orientation.BLACK, 0.5F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(19, x - 3 - 5 + 15 * 2, y, 9, 58, "G#", Orientation.BLACK, 0.56F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(20, x - 3 - 5 + 15 * 3, y, 9, 58, "A#", Orientation.BLACK, 0.63F, container, this, pos, sound)); + container.add(new GuiButtonPiano(x - 3 - 5 + 15, y, 9, 58, "F#", sound, 0.5F, Type.BLACK, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(0)); + })); + container.add(new GuiButtonPiano(x - 3 - 5 + 15 * 2, y, 9, 58, "G#", sound, 0.56F, Type.BLACK, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(2)); + })); + container.add(new GuiButtonPiano(x - 3 - 5 + 15 * 3, y, 9, 58, "A#", sound, 0.63F, Type.BLACK, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(4)); + })); - container.add(new GuiButtonKeyboard(21, x - 3 - 5 + 15 * 5, y, 9, 58, "C#", Orientation.BLACK, 0.75F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(22, x - 3 - 5 + 15 * 6, y, 9, 58, "D#", Orientation.BLACK, 0.85F, container, this, pos, sound)); + container.add(new GuiButtonPiano(x - 3 - 5 + 15 * 5, y, 9, 58, "C#", sound, 0.75F, Type.BLACK, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(7)); + })); + container.add(new GuiButtonPiano(x - 3 - 5 + 15 * 6, y, 9, 58, "D#", sound, 0.85F, Type.BLACK, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(9)); + })); - container.add(new GuiButtonKeyboard(23, x - 3 - 5 + 15 * 8, y, 9, 58, "F#", Orientation.BLACK, 1.0F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(24, x - 3 - 5 + 15 * 9, y, 9, 58, "G#", Orientation.BLACK, 1.1F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(25, x - 3 - 5 + 15 * 10, y, 9, 58, "A#", Orientation.BLACK, 1.25F, container, this, pos, sound)); + container.add(new GuiButtonPiano(x - 3 - 5 + 15 * 8, y, 9, 58, "F#", sound, 1.0F, Type.BLACK, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(12)); + })); + container.add(new GuiButtonPiano(x - 3 - 5 + 15 * 9, y, 9, 58, "G#", sound, 1.1F, Type.BLACK, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(14)); + })); + container.add(new GuiButtonPiano(x - 3 - 5 + 15 * 10, y, 9, 58, "A#", sound, 1.25F, Type.BLACK, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(16)); + })); - container.add(new GuiButtonKeyboard(26, x - 3 - 5 + 15 * 12, y, 9, 58, "C#", Orientation.BLACK, 1.5F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(27, x - 3 - 5 + 15 * 13, y, 9, 58, "D#", Orientation.BLACK, 1.7F, container, this, pos, sound)); - container.add(new GuiButtonKeyboard(28, x - 3 - 5 + 15 * 15, y, 9, 58, "F#", Orientation.BLACK, 2.0F, container, this, pos, sound)); - } - } - - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception - { - switch(button.id) - { - case 4: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 1)); - break; - case 5: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 3)); - break; - case 6: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 5)); - break; - case 7: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 6)); - break; - case 8: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 8)); - break; - case 9: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 10)); - break; - case 10: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 11)); - break; - case 11: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 13)); - break; - case 12: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 15)); - break; - case 13: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 17)); - break; - case 14: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 18)); - break; - case 15: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 20)); - break; - case 16: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 22)); - break; - case 17: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 23)); - break; - case 18: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 0)); - break; - case 19: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 2)); - break; - case 20: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 4)); - break; - case 21: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 7)); - break; - case 22: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 9)); - break; - case 23: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 12)); - break; - case 24: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 14)); - break; - case 25: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 16)); - break; - case 26: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 19)); - break; - case 27: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 21)); - break; - case 28: - WorldHandler.sendCommand(this.builderNoteEditor.getBuilderForNote((byte) 24)); - break; - default: - break; + container.add(new GuiButtonPiano(x - 3 - 5 + 15 * 12, y, 9, 58, "C#", sound, 1.5F, Type.BLACK, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(19)); + })); + container.add(new GuiButtonPiano(x - 3 - 5 + 15 * 13, y, 9, 58, "D#", sound, 1.7F, Type.BLACK, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(21)); + })); + container.add(new GuiButtonPiano(x - 3 - 5 + 15 * 15, y, 9, 58, "F#", sound, 2.0F, Type.BLACK, () -> + { + CommandHelper.sendCommand(this.builderNoteEditor.getBuilderForNote(24)); + })); } } @@ -188,7 +176,7 @@ public class ContentNoteEditor extends Content { if(this.isActive) { - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("worldhandler:textures/misc/note.png")); + Minecraft.getInstance().getTextureManager().bindTexture(NOTE); container.drawTexturedModalRect(x - 1, y - 1, 0, 0, 8, 59); container.drawTexturedModalRect(x - 1, y - 1 + 59, 0, 59, 13, 35); @@ -203,68 +191,26 @@ public class ContentNoteEditor extends Content { float scale = 4; - GlStateManager.color(1.0F, 1.0F, 1.0F); + GlStateManager.color3f(1.0F, 1.0F, 1.0F); GlStateManager.pushMatrix(); RenderHelper.enableGUIStandardItemLighting(); - GlStateManager.translate(container.width / 2 - 8 * scale, container.height / 2 - 15 - 8 * scale, 0); - GlStateManager.scale(scale, scale, scale); - Minecraft.getMinecraft().getRenderItem().renderItemIntoGUI(new ItemStack(Blocks.NOTEBLOCK), 0, 0); + GlStateManager.translatef(container.width / 2 - 8 * scale, container.height / 2 - 15 - 8 * scale, 0); + GlStateManager.scalef(scale, scale, scale); + Minecraft.getInstance().getItemRenderer().renderItemIntoGUI(new ItemStack(Blocks.NOTE_BLOCK), 0, 0); RenderHelper.disableStandardItemLighting(); GlStateManager.popMatrix(); - String displayString = I18n.format("gui.worldhandler.blocks.note_block_editor.look_at_note_block", Keyboard.getKeyName(WorldHandler.KEY_WORLD_HANDLER.getKeyCode())); - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; - fontRenderer.drawString(displayString, x + 116 - fontRenderer.getStringWidth(displayString) / 2, y + 70, ConfigSkin.getLabelColor()); + String displayString = I18n.format("gui.worldhandler.blocks.note_block_editor.look_at_note_block", WorldHandler.KEY_WORLD_HANDLER.getKey().getName()); + FontRenderer fontRenderer = Minecraft.getInstance().fontRenderer; + fontRenderer.drawString(displayString, x + 116 - fontRenderer.getStringWidth(displayString) / 2, y + 70, Config.getSkin().getLabelColor()); } } private SoundEvent getSoundEvent(BlockPos blockPos) { - IBlockState blockstate = Minecraft.getMinecraft().world.getBlockState(blockPos); - Material material = blockstate.getMaterial(); - Block block = blockstate.getBlock(); - - if(block.equals(Blocks.CLAY)) - { - return SoundEvents.BLOCK_NOTE_FLUTE; - } - else if(block.equals(Blocks.GOLD_BLOCK)) - { - return SoundEvents.BLOCK_NOTE_BELL; - } - else if(block.equals(Blocks.WOOL)) - { - return SoundEvents.BLOCK_NOTE_GUITAR; - } - else if(block.equals(Blocks.PACKED_ICE)) - { - return SoundEvents.BLOCK_NOTE_CHIME; - } - else if(block.equals(Blocks.BONE_BLOCK)) - { - return SoundEvents.BLOCK_NOTE_XYLOPHONE; - } - - if(material.equals(Material.WOOD)) - { - return SoundEvents.BLOCK_NOTE_BASS; - } - else if(material.equals(Material.SAND)) - { - return SoundEvents.BLOCK_NOTE_SNARE; - } - else if(material.equals(Material.GLASS)) - { - return SoundEvents.BLOCK_NOTE_HAT; - } - else if(material.equals(Material.ROCK)) - { - return SoundEvents.BLOCK_NOTE_BASEDRUM; - } - - return SoundEvents.BLOCK_NOTE_HARP; + return NoteBlockInstrument.byState(Minecraft.getInstance().world.getBlockState(blockPos)).getSound(); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlayer.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlayer.java index 1922f1e..8b89cb1 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlayer.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlayer.java @@ -6,25 +6,27 @@ import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderGeneric; import exopandora.worldhandler.builder.impl.BuilderMultiCommand; +import exopandora.worldhandler.builder.impl.BuilderPlayer; import exopandora.worldhandler.builder.impl.BuilderSpawnpoint; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; import exopandora.worldhandler.gui.category.Categories; import exopandora.worldhandler.gui.category.Category; import exopandora.worldhandler.gui.container.Container; -import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer; +import exopandora.worldhandler.gui.container.impl.GuiWorldHandler; import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Contents; +import exopandora.worldhandler.helper.ActionHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.inventory.GuiInventory; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.resources.I18n; import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentPlayer extends Content { private String selectedMain = "start"; @@ -39,7 +41,7 @@ public class ContentPlayer extends Content private final BuilderGeneric builderSetworldspawn = new BuilderGeneric("setworldspawn"); private final BuilderSpawnpoint builderSpawnpoint = new BuilderSpawnpoint(WorldHandler.USERNAME); - private final BuilderGeneric builderKill = new BuilderGeneric("kill"); + private final BuilderPlayer builderKill = new BuilderPlayer("kill"); private final BuilderGeneric builderClear = new BuilderGeneric("clear"); private final BuilderMultiCommand builderMiscellaneous = new BuilderMultiCommand(this.builderSetworldspawn, this.builderSpawnpoint, this.builderKill, this.builderClear); @@ -65,104 +67,94 @@ public class ContentPlayer extends Content this.coinsField = new GuiTextFieldTooltip(x + 118, y + 36, 114, 20); this.xpField = new GuiTextFieldTooltip(x + 118, y + 60, 114, 20); - this.updateScreen(container); + this.tick(container); } @Override public void initButtons(Container container, int x, int y) { - GuiButtonWorldHandler button3; - GuiButtonWorldHandler button4; - GuiButtonWorldHandler button5; - GuiButtonWorldHandler button6; + GuiButtonBase button1; + GuiButtonBase button2; + GuiButtonBase button3; + GuiButtonBase button4; - 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(button3 = new GuiButtonWorldHandler(4, x, y, 114, 20, I18n.format("gui.worldhandler.entities.player.start"))); - container.add(button4 = new GuiButtonWorldHandler(5, x, y + 24, 114, 20, I18n.format("gui.worldhandler.entities.player.score"))); - container.add(button5 = new GuiButtonWorldHandler(6, x, y + 48, 114, 20, I18n.format("gui.worldhandler.entities.player.position"))); - container.add(button6 = new GuiButtonWorldHandler(7, x, y + 72, 114, 20, I18n.format("gui.worldhandler.entities.player.miscellaneous"))); + container.add(new GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); + + container.add(button1 = new GuiButtonBase(x, y, 114, 20, I18n.format("gui.worldhandler.entities.player.start"), () -> + { + this.selectedMain = "start"; + container.initGui(); + })); + container.add(button2 = new GuiButtonBase(x, y + 24, 114, 20, I18n.format("gui.worldhandler.entities.player.score"), () -> + { + this.selectedMain = "score"; + container.initGui(); + })); + container.add(button3 = new GuiButtonBase(x, y + 48, 114, 20, I18n.format("gui.worldhandler.entities.player.position"), () -> + { + this.selectedMain = "position"; + container.initGui(); + })); + container.add(button4 = new GuiButtonBase(x, y + 72, 114, 20, I18n.format("gui.worldhandler.entities.player.miscellaneous"), () -> + { + this.selectedMain = "miscellaneous"; + container.initGui(); + })); if(this.selectedMain.equals("start")) { - button3.enabled = false; + button1.enabled = false; } else if(this.selectedMain.equals("score")) { - button4.enabled = false; + button2.enabled = false; } else if(this.selectedMain.equals("position")) { - button5.enabled = false; + button3.enabled = false; - container.add(new GuiButtonWorldHandler(8, x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.entities.player.position.copy_position"))); + container.add(new GuiButtonBase(x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.entities.player.position.copy_position"), () -> + { + int posX = MathHelper.floor(Minecraft.getInstance().player.posX); + int posY = MathHelper.floor(Minecraft.getInstance().player.posY); + int posZ = MathHelper.floor(Minecraft.getInstance().player.posZ); + + Minecraft.getInstance().keyboardListener.setClipboardString(posX + " " + posY + " " + posZ); + })); } else if(this.selectedMain.equals("miscellaneous")) { - button6.enabled = false; + button4.enabled = false; - container.add(new GuiButtonWorldHandler(9, x + 118, y, 114, 20, ChatFormatting.RED + I18n.format("gui.worldhandler.entities.player.miscellaneous.set_spawn"))); - container.add(new GuiButtonWorldHandler(10, x + 118, y + 24, 114, 20, ChatFormatting.RED + I18n.format("gui.worldhandler.entities.player.miscellaneous.set_global_spawn"))); - container.add(new GuiButtonWorldHandler(11, x + 118, y + 48, 114, 20, ChatFormatting.RED + I18n.format("gui.worldhandler.entities.player.miscellaneous.kill"))); - container.add(new GuiButtonWorldHandler(12, x + 118, y + 72, 114, 20, ChatFormatting.RED + I18n.format("gui.worldhandler.entities.player.miscellaneous.clear_inventory"))); + container.add(new GuiButtonBase(x + 118, y, 114, 20, ChatFormatting.RED + I18n.format("gui.worldhandler.entities.player.miscellaneous.set_spawn"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.CONTINUE.withBuilder(this.builderSpawnpoint).withParent(Contents.PLAYER))); + })); + container.add(new GuiButtonBase(x + 118, y + 24, 114, 20, ChatFormatting.RED + I18n.format("gui.worldhandler.entities.player.miscellaneous.set_global_spawn"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.CONTINUE.withBuilder(this.builderSetworldspawn).withParent(Contents.PLAYER))); + })); + container.add(new GuiButtonBase(x + 118, y + 48, 114, 20, ChatFormatting.RED + I18n.format("gui.worldhandler.entities.player.miscellaneous.kill"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.CONTINUE.withBuilder(this.builderKill).withParent(Contents.PLAYER))); + })); + container.add(new GuiButtonBase(x + 118, y + 72, 114, 20, ChatFormatting.RED + I18n.format("gui.worldhandler.entities.player.miscellaneous.clear_inventory"), () -> + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.CONTINUE.withBuilder(this.builderClear).withParent(Contents.PLAYER))); + })); } } @Override - public void updateScreen(Container container) + public void tick(Container container) { - this.posXField.setText("X: " + MathHelper.floor(Minecraft.getMinecraft().player.posX)); - this.posYField.setText("Y: " + MathHelper.floor(Minecraft.getMinecraft().player.posY)); - this.posZField.setText("Z: " + MathHelper.floor(Minecraft.getMinecraft().player.posZ)); - this.scoreField.setText(I18n.format("gui.worldhandler.entities.player.score") + ": " + Minecraft.getMinecraft().player.getScore()); - this.coinsField.setText(I18n.format("gui.worldhandler.entities.player.score.experience") + ": " + Minecraft.getMinecraft().player.experienceLevel + "L"); - this.xpField.setText(I18n.format("gui.worldhandler.entities.player.score.experience_coins") + ": " + Minecraft.getMinecraft().player.experienceTotal); - } - - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception - { - switch(button.id) - { - case 4: - this.selectedMain = "start"; - container.initGui(); - break; - case 5: - this.selectedMain = "score"; - container.initGui(); - break; - case 6: - this.selectedMain = "position"; - container.initGui(); - break; - case 7: - this.selectedMain = "miscellaneous"; - container.initGui(); - break; - case 8: - int posX = MathHelper.floor(Minecraft.getMinecraft().player.posX); - int posY = MathHelper.floor(Minecraft.getMinecraft().player.posY); - int posZ = MathHelper.floor(Minecraft.getMinecraft().player.posZ); - - container.setClipboardString(posX + " " + posY + " " + posZ); - break; - case 9: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.CONTINUE.withBuilder(this.builderSpawnpoint).withParent(Contents.PLAYER))); - break; - case 10: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.CONTINUE.withBuilder(this.builderSetworldspawn).withParent(Contents.PLAYER))); - break; - case 11: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.CONTINUE.withBuilder(this.builderKill).withParent(Contents.PLAYER))); - break; - case 12: - Minecraft.getMinecraft().displayGuiScreen(new GuiWorldHandlerContainer(Contents.CONTINUE.withBuilder(this.builderClear).withParent(Contents.PLAYER))); - break; - default: - break; - } + this.posXField.setText("X: " + MathHelper.floor(Minecraft.getInstance().player.posX)); + this.posYField.setText("Y: " + MathHelper.floor(Minecraft.getInstance().player.posY)); + this.posZField.setText("Z: " + MathHelper.floor(Minecraft.getInstance().player.posZ)); + this.scoreField.setText(I18n.format("gui.worldhandler.entities.player.score") + ": " + Minecraft.getInstance().player.getScore()); + this.coinsField.setText(I18n.format("gui.worldhandler.entities.player.score.experience") + ": " + Minecraft.getInstance().player.experienceLevel + "L"); + this.xpField.setText(I18n.format("gui.worldhandler.entities.player.score.experience_coins") + ": " + Minecraft.getInstance().player.experienceTotal); } @Override @@ -172,25 +164,26 @@ public class ContentPlayer extends Content { int xPos = x + 175; int yPos = y + 82; - int playerNameWidth = Minecraft.getMinecraft().fontRenderer.getStringWidth(Minecraft.getMinecraft().player.getName()) / 2; + int playerNameWidth = Minecraft.getInstance().fontRenderer.getStringWidth(Minecraft.getInstance().player.getName().getFormattedText()) / 2; - container.drawRect(container.width / 2 - playerNameWidth - 1 + 59, yPos - 74, container.width / 2 + playerNameWidth + 1 + 59, yPos - 65, 0x3F000000); - Minecraft.getMinecraft().fontRenderer.drawString(Minecraft.getMinecraft().player.getName(), container.width / 2 - playerNameWidth + 59, yPos - 73, 0xE0E0E0); + Gui.drawRect(container.width / 2 - playerNameWidth - 1 + 59, yPos - 74, container.width / 2 + playerNameWidth + 1 + 59, yPos - 65, 0x3F000000); + Minecraft.getInstance().fontRenderer.drawString(Minecraft.getInstance().player.getName().getFormattedText(), container.width / 2 - playerNameWidth + 59, yPos - 73, 0xE0E0E0); - GuiInventory.drawEntityOnScreen(xPos, yPos, 30, xPos - mouseX, yPos - mouseY - 44, Minecraft.getMinecraft().player); - GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); + GuiInventory.drawEntityOnScreen(xPos, yPos, 30, xPos - mouseX, yPos - mouseY - 44, Minecraft.getInstance().player); + GlStateManager.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); } else if(this.selectedMain.equals("score")) { - this.scoreField.drawTextBox(); - this.xpField.drawTextBox(); - this.coinsField.drawTextBox(); + this.scoreField.drawTextField(mouseX, mouseY, partialTicks); + this.xpField.drawTextField(mouseX, mouseY, partialTicks); + this.coinsField.drawTextField(mouseX, mouseY, partialTicks); } else if(this.selectedMain.equals("position")) { - this.posXField.drawTextBox(); - this.posYField.drawTextBox(); - this.posZField.drawTextBox(); + this.posXField.drawTextField(mouseX, mouseY, partialTicks); + this.posYField.drawTextField(mouseX, mouseY, partialTicks); + this.posZField.drawTextField(mouseX, mouseY, partialTicks); } } @@ -198,6 +191,7 @@ public class ContentPlayer extends Content public void onPlayerNameChanged(String username) { this.builderSpawnpoint.setPlayer(username); + this.builderKill.setPlayer(username); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPotions.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPotions.java index 4cfcbcc..1fd424e 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPotions.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPotions.java @@ -2,29 +2,30 @@ package exopandora.worldhandler.gui.content.impl; import java.util.ArrayList; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderMultiCommand; import exopandora.worldhandler.builder.impl.BuilderPotionEffect; import exopandora.worldhandler.builder.impl.BuilderPotionItem; -import exopandora.worldhandler.config.ConfigSliders; -import exopandora.worldhandler.gui.button.EnumTooltip; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.gui.button.GuiButtonBase; +import exopandora.worldhandler.gui.button.GuiButtonTooltip; import exopandora.worldhandler.gui.button.GuiSlider; -import exopandora.worldhandler.gui.button.responder.SimpleResponder; import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.content.element.impl.ElementPageList; -import exopandora.worldhandler.gui.content.element.logic.ILogicPageList; import exopandora.worldhandler.gui.content.impl.abstr.ContentChild; -import net.minecraft.client.gui.GuiButton; +import exopandora.worldhandler.gui.logic.ILogicPageList; +import exopandora.worldhandler.gui.logic.LogicSliderSimple; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; +import exopandora.worldhandler.util.ActionHandler; import net.minecraft.client.resources.I18n; import net.minecraft.init.Items; import net.minecraft.potion.Potion; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentPotions extends ContentChild { private int potionPage; @@ -41,18 +42,18 @@ public class ContentPotions extends ContentChild @Override public void init(Container container) { - if(this.builderPotion.getAmplifier() > ConfigSliders.getMaxPotionAmplifier()) + if(this.builderPotion.getAmplifier() > Config.getSliders().getMaxPotionAmplifier()) { - this.builderPotion.setAmplifier((byte) ConfigSliders.getMaxPotionAmplifier()); + this.builderPotion.setAmplifier((byte) Config.getSliders().getMaxPotionAmplifier()); } for(Potion potion : this.builderPotionItem.getPotions()) { byte amplifier = this.builderPotionItem.getAmplifier(potion); - if(amplifier > ConfigSliders.getMaxPotionAmplifier()) + if(amplifier > Config.getSliders().getMaxPotionAmplifier()) { - this.builderPotionItem.setAmplifier(potion, (byte) ConfigSliders.getMaxPotionAmplifier()); + this.builderPotionItem.setAmplifier(potion, (byte) Config.getSliders().getMaxPotionAmplifier()); } } } @@ -60,43 +61,31 @@ public class ContentPotions extends ContentChild @Override public void initGui(Container container, int x, int y) { - ElementPageList potions = new ElementPageList(x, y, new ArrayList(Potion.REGISTRY.getKeys()), null, 114, 20, 3, this, new int[] {15, 16, 17}, new ILogicPageList() + ElementPageList potions = new ElementPageList(x, y, new ArrayList(ForgeRegistries.POTIONS.getValues()), 114, 20, 3, container, new ILogicPageList() { @Override - public String translate(ResourceLocation key) + public String translate(Potion item) { - return I18n.format(Potion.REGISTRY.getObject(key).getName()); + return I18n.format(item.getName()); } @Override - public void onClick(ResourceLocation clicked) + public String toTooltip(Potion item) { - builderPotion.setEffect(clicked); + return item.getRegistryName().toString(); } @Override - public String getRegistryName(ResourceLocation key) + public void onClick(Potion item) { - return key.toString(); + ContentPotions.this.builderPotion.setEffect(item); + container.initButtons(); } @Override - public void onRegister(int id, int x, int y, int width, int height, String display, String registryKey, boolean enabled, ResourceLocation value, Container container) + public GuiButtonBase onRegister(int x, int y, int width, int height, String text, Potion item, ActionHandler actionHandler) { - GuiButtonWorldHandler button = new GuiButtonWorldHandler(id, x, y, width, height, display, registryKey, EnumTooltip.TOP_RIGHT); - button.enabled = enabled; - container.add(button); - } - - @Override - public ResourceLocation getObject(Potion object) - { - if(object != null) - { - return object.getRegistryName(); - } - - return null; + return new GuiButtonTooltip(x, y, width, height, text, this.toTooltip(item), actionHandler); } @Override @@ -112,28 +101,48 @@ public class ContentPotions extends ContentChild @Override public void initButtons(Container container, int x, int y) { - GuiButtonWorldHandler button6; - GuiButtonWorldHandler button7; - GuiButtonWorldHandler button8; - GuiButtonWorldHandler button9; - GuiButtonWorldHandler button10; + GuiButtonBase button1; + GuiButtonBase button2; + GuiButtonBase button3; + GuiButtonBase button4; + GuiButtonBase button5; - container.add(new GuiButtonWorldHandler(1, x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"))); - container.add(new GuiButtonWorldHandler(0, x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"))); + container.add(new GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); if(this.potionPage == 0) { - container.add(new GuiButtonWorldHandler(5, x + 118, y + 12, 114, 20, I18n.format("gui.worldhandler.potions.effect.give"))); - container.add(new GuiButtonWorldHandler(6, x + 118, y + 36, 114, 20, I18n.format("gui.worldhandler.potions.effect.remove"))); - container.add(new GuiButtonWorldHandler(7, x + 118, y + 60, 114, 20, I18n.format("gui.worldhandler.potions.effect.remove_all"))); + container.add(new GuiButtonBase(x + 118, y + 12, 114, 20, I18n.format("gui.worldhandler.potions.effect.give"), () -> + { + this.next(container); + })); + container.add(new GuiButtonBase(x + 118, y + 36, 114, 20, I18n.format("gui.worldhandler.potions.effect.remove"), () -> + { + CommandHelper.sendCommand(this.builderPotion.getRemoveCommand()); + container.initGui(); + })); + container.add(new GuiButtonBase(x + 118, y + 60, 114, 20, I18n.format("gui.worldhandler.potions.effect.remove_all"), () -> + { + CommandHelper.sendCommand(this.builderPotion.getClearCommand()); + container.initGui(); + })); } else if(this.potionPage == 1) { Potion potion = this.builderPotion.getEffectAsPotion(); - container.add(new GuiButtonWorldHandler(8, x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.potions.effect.ambient", (this.builderPotionItem.getAmbient(potion) ? I18n.format("gui.worldhandler.generic.on") : I18n.format("gui.worldhandler.generic.off"))))); - container.add(new GuiButtonWorldHandler(9, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.potions.effect.particles", (this.builderPotion.getHideParticles() ? I18n.format("gui.worldhandler.generic.off") : I18n.format("gui.worldhandler.generic.on"))))); - container.add(new GuiSlider(this, container, "potions_amplifier" + potion.getRegistryName(), x + 118, y, 114, 20, I18n.format("gui.worldhandler.potions.effect.amplifier"), 0, ConfigSliders.getMaxPotionAmplifier(), 0, new SimpleResponder(value -> + container.add(new GuiButtonBase(x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.potions.effect.ambient", this.builderPotionItem.getAmbient(potion) ? I18n.format("gui.worldhandler.generic.on") : I18n.format("gui.worldhandler.generic.off")), () -> + { + this.builderPotionItem.setAmbient(potion, !this.builderPotionItem.getAmbient(potion)); + container.initGui(); + })); + container.add(new GuiButtonBase(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.potions.effect.particles", this.builderPotion.getHideParticles() ? I18n.format("gui.worldhandler.generic.off") : I18n.format("gui.worldhandler.generic.on")), () -> + { + this.builderPotion.setHideParticles(!this.builderPotion.getHideParticles()); + this.builderPotionItem.setShowParticles(potion, !this.builderPotionItem.getShowParticles(potion)); + container.initGui(); + })); + container.add(new GuiSlider(x + 118, y, 114, 20, 0, Config.getSliders().getMaxPotionAmplifier(), 0, container, new LogicSliderSimple("amplifier" + potion.getRegistryName(), I18n.format("gui.worldhandler.potions.effect.amplifier"), value -> { this.builderPotion.setAmplifier(value.byteValue()); this.builderPotionItem.setAmplifier(potion, value.byteValue()); @@ -143,17 +152,17 @@ public class ContentPotions extends ContentChild { Potion potion = this.builderPotion.getEffectAsPotion(); - container.add(new GuiSlider(this, container, "seconds" + potion.getRegistryName(), x + 118, y, 114, 20, I18n.format("gui.worldhandler.potion.time.seconds"), 0, 59, 0, new SimpleResponder(value -> + container.add(new GuiSlider(x + 118, y, 114, 20, 0, 59, 0, container, new LogicSliderSimple("s" + potion.getRegistryName(), I18n.format("gui.worldhandler.potion.time.seconds"), value -> { this.builderPotion.setSeconds(value.intValue()); this.builderPotionItem.setSeconds(potion, value.intValue()); }))); - container.add(new GuiSlider(this, container, "minutes" + potion.getRegistryName(), x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.potion.time.minutes"), 0, 59, 0, new SimpleResponder(value -> + container.add(new GuiSlider(x + 118, y + 24, 114, 20, 0, 59, 0, container, new LogicSliderSimple("m" + potion.getRegistryName(), I18n.format("gui.worldhandler.potion.time.minutes"), value -> { this.builderPotion.setMinutes(value.intValue()); this.builderPotionItem.setMinutes(potion, value.intValue()); }))); - container.add(new GuiSlider(this, container, "hours" + potion.getRegistryName(), x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.potion.time.hours"), 0, 99, 0, new SimpleResponder(value -> + container.add(new GuiSlider(x + 118, y + 48, 114, 20, 0, 99, 0, container, new LogicSliderSimple("h" + potion.getRegistryName(), I18n.format("gui.worldhandler.potion.time.hours"), value -> { this.builderPotion.setHours(value.intValue()); this.builderPotionItem.setHours(potion, value.intValue()); @@ -161,90 +170,66 @@ public class ContentPotions extends ContentChild } else if(this.potionPage == 3) { - container.add(button6 = new GuiButtonWorldHandler(10, x + 118, y, 114, 20, I18n.format("gui.worldhandler.potions.effect"))); - container.add(button7 = new GuiButtonWorldHandler(14, x + 118, y + 24, 56, 20, I18n.format("gui.worldhandler.potions.effect.tipped_arrow"))); - container.add(button8 = new GuiButtonWorldHandler(11, x + 178, y + 24, 55, 20, I18n.format("gui.worldhandler.potions.effect.bottle"), I18n.format("gui.worldhandler.actions.place_command_block"), EnumTooltip.TOP_RIGHT)); - container.add(button9 = new GuiButtonWorldHandler(13, x + 118, y + 48, 56, 20, I18n.format("gui.worldhandler.potions.effect.splash"), I18n.format("gui.worldhandler.actions.place_command_block"), EnumTooltip.TOP_RIGHT)); - container.add(button10 = new GuiButtonWorldHandler(12, x + 178, y + 48, 55, 20, I18n.format("gui.worldhandler.potions.effect.lingering"), I18n.format("gui.worldhandler.actions.place_command_block"), EnumTooltip.TOP_RIGHT)); + container.add(button1 = new GuiButtonBase(x + 118, y, 114, 20, I18n.format("gui.worldhandler.potions.effect"), () -> + { + CommandHelper.sendCommand(this.builderPotion.getGiveCommand()); + this.potionPage = 0; + container.initGui(); + })); + container.add(button2 = new GuiButtonBase(x + 118, y + 24, 56, 20, I18n.format("gui.worldhandler.potions.effect.tipped_arrow"), () -> + { + CommandHelper.sendCommand(this.builderPotionItem.getBuilderForPotion(Items.TIPPED_ARROW)); + this.potionPage = 0; + container.initGui(); + })); + container.add(button3 = new GuiButtonTooltip(x + 178, y + 24, 55, 20, I18n.format("gui.worldhandler.potions.effect.bottle"), I18n.format("gui.worldhandler.actions.place_command_block"), () -> + { + CommandHelper.sendCommand(this.builderPotionItem.getBuilderForPotion(Items.POTION)); + this.potionPage = 0; + container.initGui(); + })); + container.add(button4 = new GuiButtonTooltip(x + 118, y + 48, 56, 20, I18n.format("gui.worldhandler.potions.effect.splash"), I18n.format("gui.worldhandler.actions.place_command_block"), () -> + { + CommandHelper.sendCommand(this.builderPotionItem.getBuilderForPotion(Items.SPLASH_POTION)); + this.potionPage = 0; + container.initGui(); + })); + container.add(button5 = new GuiButtonTooltip(x + 178, y + 48, 55, 20, I18n.format("gui.worldhandler.potions.effect.lingering"), I18n.format("gui.worldhandler.actions.place_command_block"), () -> + { + CommandHelper.sendCommand(this.builderPotionItem.getBuilderForPotion(Items.LINGERING_POTION)); + this.potionPage = 0; + container.initGui(); + })); boolean enabled = this.builderPotion.getAmplifier() >= 0; - button6.enabled = enabled; - button7.enabled = enabled; - button8.enabled = enabled; - button9.enabled = enabled; - button10.enabled = enabled; + button1.enabled = enabled; + button2.enabled = enabled; + button3.enabled = enabled; + button4.enabled = enabled; + button5.enabled = enabled; } if(this.potionPage > 0) { - container.add(new GuiButtonWorldHandler(4, x + 118, y + 72, 56, 20, "<")); - container.add(button6 = new GuiButtonWorldHandler(5, x + 118 + 60, y + 72, 55, 20, ">")); + container.add(new GuiButtonBase(4, x + 118, y + 72, 56, 20, "<", () -> + { + this.potionPage--; + container.initGui(); + })); + container.add(button1 = new GuiButtonBase(5, x + 118 + 60, y + 72, 55, 20, ">", () -> + { + this.next(container); + })); - button6.enabled = this.potionPage < 3; + button1.enabled = this.potionPage < 3; } } - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception + private void next(Container container) { - Potion potion = this.builderPotion.getEffectAsPotion(); - - switch(button.id) - { - case 4: - this.potionPage--; - container.initGui(); - break; - case 5: - this.potionPage++; - container.initGui(); - break; - case 6: - WorldHandler.sendCommand(this.builderPotion.getRemoveCommand()); - container.initGui(); - break; - case 7: - WorldHandler.sendCommand(this.builderPotion.getClearCommand()); - container.initGui(); - break; - case 8: - this.builderPotionItem.setAmbient(potion, !this.builderPotionItem.getAmbient(potion)); - container.initGui(); - break; - case 9: - this.builderPotion.setHideParticles(!this.builderPotion.getHideParticles()); - this.builderPotionItem.setShowParticles(potion, !this.builderPotionItem.getShowParticles(potion)); - container.initGui(); - break; - case 10: - WorldHandler.sendCommand(this.builderPotion); - this.potionPage = 0; - container.initGui(); - break; - case 11: - WorldHandler.sendCommand(this.builderPotionItem.getBuilderForPotion(Items.POTIONITEM)); - this.potionPage = 0; - container.initGui(); - break; - case 12: - WorldHandler.sendCommand(this.builderPotionItem.getBuilderForPotion(Items.LINGERING_POTION)); - this.potionPage = 0; - container.initGui(); - break; - case 13: - WorldHandler.sendCommand(this.builderPotionItem.getBuilderForPotion(Items.SPLASH_POTION)); - this.potionPage = 0; - container.initGui(); - break; - case 14: - WorldHandler.sendCommand(this.builderPotionItem.getBuilderForPotion(Items.TIPPED_ARROW)); - this.potionPage = 0; - container.initGui(); - break; - default: - break; - } + this.potionPage++; + container.initGui(); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java index eb4f41c..86e1117 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java @@ -1,31 +1,31 @@ package exopandora.worldhandler.gui.content.impl; -import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; -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.button.GuiButtonBase; +import exopandora.worldhandler.gui.button.GuiButtonTooltip; 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 exopandora.worldhandler.gui.logic.ILogicPageList; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; +import exopandora.worldhandler.util.ActionHandler; +import net.minecraft.client.Minecraft; 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; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentRecipes extends Content { private final BuilderRecipe builderRecipe = new BuilderRecipe(); @@ -39,53 +39,41 @@ public class ContentRecipes extends Content @Override public void initGui(Container container, int x, int y) { - List recipes = new ArrayList(); + List recipes = Minecraft.getInstance().player.getRecipeBook().getRecipes().stream() + .flatMap(recipe -> recipe.getRecipes().stream()) + .filter(recipe -> !recipe.isDynamic()) + .collect(Collectors.toList()); - 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[] {4, 5, 6}, new ILogicPageList() + ElementPageList list = new ElementPageList(x, y, recipes, 114, 20, 3, container, new ILogicPageList() { @Override - public String translate(IRecipe key) + public String translate(IRecipe item) { - if(!key.getRecipeOutput().equals(ItemStack.EMPTY)) + if(!item.getRecipeOutput().equals(ItemStack.EMPTY)) { - return key.getRecipeOutput().getDisplayName(); + return item.getRecipeOutput().getDisplayName().getFormattedText(); } - return key.getRegistryName().toString(); + return item.getId().toString(); } @Override - public void onClick(IRecipe clicked) + public String toTooltip(IRecipe item) { - builderRecipe.setRecipe(clicked.getRegistryName()); + return item.getId().toString(); } @Override - public String getRegistryName(IRecipe key) + public void onClick(IRecipe item) { - return key.getRegistryName().toString(); + ContentRecipes.this.builderRecipe.setRecipe(item); + container.initButtons(); } @Override - public void onRegister(int id, int x, int y, int width, int height, String display, String registry, boolean enabled, IRecipe value, Container container) + public GuiButtonBase onRegister(int x, int y, int width, int height, String text, IRecipe item, ActionHandler actionHandler) { - 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 getObject(String object) - { - return CraftingManager.REGISTRY.getObject(Type.parseResourceLocation(object)); + return new GuiButtonTooltip(x, y, width, height, text, this.toTooltip(item), actionHandler); } @Override @@ -101,29 +89,19 @@ public class ContentRecipes extends Content @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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::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) throws Exception - { - switch(button.id) + container.add(new GuiButtonBase(x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.recipes.give"), () -> { - 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; - } + CommandHelper.sendCommand(this.builderRecipe.getBuilderForMode(EnumMode.GIVE)); + container.initButtons(); + })); + container.add(new GuiButtonBase(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.recipes.take"), () -> + { + CommandHelper.sendCommand(this.builderRecipe.getBuilderForMode(EnumMode.TAKE)); + container.initButtons(); + })); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java index dee6b30..5e4b3d7 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java @@ -1,31 +1,38 @@ package exopandora.worldhandler.gui.content.impl; import java.util.Arrays; +import java.util.List; + +import javax.annotation.Nullable; import com.google.common.base.Predicates; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderScoreboardObjectives; +import exopandora.worldhandler.builder.impl.BuilderScoreboardObjectives.EnumMode; import exopandora.worldhandler.format.EnumColor; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; 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.ElementClickList; -import exopandora.worldhandler.gui.content.element.logic.ILogicClickList; +import exopandora.worldhandler.gui.content.element.impl.ElementMultiButtonList; import exopandora.worldhandler.gui.content.impl.abstr.ContentScoreboard; -import exopandora.worldhandler.helper.EntityHelper; -import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiButton; +import exopandora.worldhandler.gui.logic.ILogicClickList; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; +import exopandora.worldhandler.helper.RegistryTranslator; import net.minecraft.client.resources.I18n; -import net.minecraft.item.Item; +import net.minecraft.stats.StatList; +import net.minecraft.stats.StatType; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraft.util.registry.IRegistry; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.IForgeRegistry; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentScoreboardObjectives extends ContentScoreboard { private GuiTextFieldTooltip objectField; @@ -44,65 +51,76 @@ public class ContentScoreboardObjectives extends ContentScoreboard { this.objectField = new GuiTextFieldTooltip(x + 118, y + (this.selectedObjective.equals("remove") ? 24 : 0), 114, 20, I18n.format("gui.worldhandler.scoreboard.objectives.objective")); this.objectField.setValidator(Predicates.notNull()); - this.objectField.setText(this.objective); + this.objectField.setText(ContentScoreboard.getObjective()); + this.objectField.setTextAcceptHandler((id, text) -> + { + ContentScoreboard.setObjective(text); + this.builderObjectives.setObjective(ContentScoreboard.getObjective()); + container.initButtons(); + }); if(this.selectedObjective.equals("create")) { - ElementClickList objectives = new ElementClickList(x + 118, y + 24, HELPER.getObjectives(), new int[] {7, 8}, this, new ILogicClickList() + ElementMultiButtonList objectives = new ElementMultiButtonList(x + 118, y + 24, HELPER.getObjectives(), 2, new ILogicClickList() { @Override - public void consumeKey(String... keys) + public String translate(String key, int depth) { - if(keys.length > 1) + ResourceLocation resource = this.makeResourceLocation(key); + + if(resource != null) { - this.consumeKeyImpl(keys); + StatType type = IRegistry.field_212634_w.func_212608_b(resource); + + if(type != null) + { + if(type.equals(StatList.CUSTOM)) + { + return I18n.format("gui.worldhandler.scoreboard.objectives.stat.custom"); + } + else if(type.equals(StatList.ENTITY_KILLED)) + { + return I18n.format("gui.worldhandler.scoreboard.objectives.stat.killed"); + } + else if(type.equals(StatList.ENTITY_KILLED_BY)) + { + return I18n.format("gui.worldhandler.scoreboard.objectives.stat.killed_by"); + } + + return I18n.format(type.getTranslationKey()); + } + + String translation = RegistryTranslator.translate(resource); + + if(translation != null) + { + return I18n.format(translation); + } } - else + + if(Arrays.stream(EnumColor.values()).map(EnumColor::getFormat).anyMatch(Predicates.equalTo(key))) { - builderObjectives.setCriteria(keys[0]); + return I18n.format("gui.worldhandler.color." + key); } + + return I18n.format("gui.worldhandler.scoreboard.objectives.stat." + key); } @Override - public String translate(String... keys) + public void onClick(String key, int depth) { - if(keys.length > 1) + ContentScoreboardObjectives.this.builderObjectives.setCriteria(key); + } + + @Override + public String buildEventKey(List keys, int depth) + { + if(this.isRegistryItem(keys.get(keys.size() - 1))) { - return this.translate(keys[1]); - } - else - { - String format = "gui.worldhandler.scoreboard.objectives.criteria." + keys[0]; - String result = I18n.format(format); - - if(result.equals(format)) - { - ResourceLocation location = new ResourceLocation(keys[0]); - - if(Item.REGISTRY.containsKey(location)) - { - result = I18n.format(Item.REGISTRY.getObject(location).getUnlocalizedName() + ".name"); - } - else if(Block.REGISTRY.containsKey(location)) - { - result = Block.REGISTRY.getObject(location).getLocalizedName(); - } - else if(EntityHelper.doesExist(keys[0])) - { - result = I18n.format("entity." + keys[0] + ".name"); - } - else if(Arrays.stream(EnumColor.values()).map(EnumColor::getFormat).anyMatch(Predicates.equalTo(keys[0]))) - { - result = I18n.format("gui.worldhandler.color." + keys[0]); - } - else - { - result = I18n.format(keys[0]); - } - } - - return result; + return String.join(":", keys); } + + return ILogicClickList.super.buildEventKey(keys, depth); } @Override @@ -110,38 +128,66 @@ public class ContentScoreboardObjectives extends ContentScoreboard { return "objectives"; } + + @Nullable + private ResourceLocation makeResourceLocation(String key) + { + return ResourceLocation.makeResourceLocation(key.replace(".", ":")); + } + + @Nullable + private boolean isRegistryItem(String key) + { + return this.isRegistryItem(this.makeResourceLocation(key)); + } + + @Nullable + private boolean isRegistryItem(ResourceLocation resource) + { + IForgeRegistry[] registries = new IForgeRegistry[] {ForgeRegistries.BLOCKS, ForgeRegistries.ITEMS, ForgeRegistries.ENTITIES}; + + for(IForgeRegistry registry : registries) + { + if(registry.containsKey(resource)) + { + return true; + } + } + + if(IRegistry.field_212623_l.func_212607_c(resource)) + { + return true; + } + + return false; + } }); container.add(objectives); } else if(this.selectedObjective.equals("display") || this.selectedObjective.equals("undisplay")) { - ElementClickList slots = new ElementClickList(x + 118, y + 24 + (this.selectedObjective.equals("undisplay") ? -12 : 0), HELPER.getSlots(), new int[] {9, 10}, this, new ILogicClickList() + ElementMultiButtonList slots = new ElementMultiButtonList(x + 118, y + 24 + (this.selectedObjective.equals("undisplay") ? -12 : 0), HELPER.getSlots(), 2, new ILogicClickList() { @Override - public String translate(String... keys) + public String translate(String key, int depth) { - if(keys.length > 1) + if(depth == 0) { - return I18n.format("gui.worldhandler.color." + keys[1]); + return I18n.format("gui.worldhandler.scoreboard.slot." + key); } - else + else if(depth == 1) { - return I18n.format("gui.worldhandler.scoreboard.slot." + keys[0]); + return I18n.format("gui.worldhandler.color." + key); } + + return key; } @Override - public void consumeKey(String... keys) + public void onClick(String key, int depth) { - if(keys.length > 1) - { - this.consumeKeyImpl(keys); - } - else - { - builderObjectives.setSlot(keys[0]); - } + ContentScoreboardObjectives.this.builderObjectives.setSlot(key); } @Override @@ -158,73 +204,71 @@ public class ContentScoreboardObjectives extends ContentScoreboard @Override public void initButtons(Container container, int x, int y) { - GuiButtonWorldHandler button3; - GuiButtonWorldHandler button4; - GuiButtonWorldHandler button5; - GuiButtonWorldHandler button6; + GuiButtonBase button1; + GuiButtonBase button2; + GuiButtonBase button3; + GuiButtonBase button4; - 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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(button3 = new GuiButtonWorldHandler(2, x, y, 114, 20, I18n.format("gui.worldhandler.scoreboard.objectives.create"))); - container.add(button4 = new GuiButtonWorldHandler(3, x, y + 24, 114, 20, I18n.format("gui.worldhandler.scoreboard.objectives.display"))); - container.add(button5 = new GuiButtonWorldHandler(4, x, y + 48, 114, 20, I18n.format("gui.worldhandler.scoreboard.objectives.undisplay"))); - container.add(button6 = new GuiButtonWorldHandler(5, x, y + 72, 114, 20, I18n.format("gui.worldhandler.scoreboard.objectives.remove"))); + container.add(button1 = new GuiButtonBase(x, y, 114, 20, I18n.format("gui.worldhandler.scoreboard.objectives.create"), () -> + { + this.selectedObjective = "create"; + container.initGui(); + })); + container.add(button2 = new GuiButtonBase(x, y + 24, 114, 20, I18n.format("gui.worldhandler.scoreboard.objectives.display"), () -> + { + this.selectedObjective = "display"; + container.initGui(); + })); + container.add(button3 = new GuiButtonBase(x, y + 48, 114, 20, I18n.format("gui.worldhandler.scoreboard.objectives.undisplay"), () -> + { + this.selectedObjective = "undisplay"; + container.initGui(); + })); + container.add(button4 = new GuiButtonBase(x, y + 72, 114, 20, I18n.format("gui.worldhandler.scoreboard.objectives.remove"), () -> + { + this.selectedObjective = "remove"; + container.initGui(); + })); - button3.enabled = !this.selectedObjective.equals("create"); - button4.enabled = !this.selectedObjective.equals("display"); - button5.enabled = !this.selectedObjective.equals("undisplay"); - button6.enabled = !this.selectedObjective.equals("remove"); + button1.enabled = !this.selectedObjective.equals("create"); + button2.enabled = !this.selectedObjective.equals("display"); + button3.enabled = !this.selectedObjective.equals("undisplay"); + button4.enabled = !this.selectedObjective.equals("remove"); - boolean enabled = this.builderObjectives.getObjective() != null && this.builderObjectives.getObjective().length() > 0; int yOffset = this.selectedObjective.equals("undisplay") ? -12 : (this.selectedObjective.equals("remove") ? -24 : 0); if(this.selectedObjective.equals("undisplay")) { this.builderObjectives.setObjective(null); - enabled = true; } else if(this.selectedObjective.equals("remove")) { - this.builderObjectives.setMode("remove"); + this.builderObjectives.setMode(EnumMode.REMOVE); } if(!this.selectedObjective.equals("undisplay")) { - this.builderObjectives.setObjective(this.objective); + container.add(this.objectField); + this.builderObjectives.setObjective(ContentScoreboard.getObjective()); } - container.add(button3 = new GuiButtonWorldHandler(6, x + 118, y + 72 + yOffset, 114, 20, I18n.format("gui.worldhandler.actions.perform"))); - button3.enabled = enabled; + container.add(button1 = new GuiButtonBase(x + 118, y + 72 + yOffset, 114, 20, I18n.format("gui.worldhandler.actions.perform"), () -> + { + CommandHelper.sendCommand(this.builderObjectives); + container.initGui(); + })); + button1.enabled = this.selectedObjective.equals("undisplay") || ContentScoreboard.isObjectiveValid(); } @Override - public void actionPerformed(Container container, GuiButton button) throws Exception + public void tick(Container container) { - switch(button.id) + if(!this.selectedObjective.equals("undisplay")) { - case 2: - this.selectedObjective = "create"; - container.initGui(); - break; - case 3: - this.selectedObjective = "display"; - container.initGui(); - break; - case 4: - this.selectedObjective = "undisplay"; - container.initGui(); - break; - case 5: - this.selectedObjective = "remove"; - container.initGui(); - break; - case 6: - WorldHandler.sendCommand(this.builderObjectives); - container.initGui(); - break; - default: - break; + this.objectField.tick(); } } @@ -233,27 +277,7 @@ public class ContentScoreboardObjectives extends ContentScoreboard { if(!this.selectedObjective.equals("undisplay")) { - this.objectField.drawTextBox(); - } - } - - @Override - public void keyTyped(Container container, char typedChar, int keyCode) - { - if(this.objectField.textboxKeyTyped(typedChar, keyCode)) - { - this.objective = this.objectField.getText(); - this.builderObjectives.setObjective(this.objective); - container.initButtons(); - } - } - - @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - if(!this.selectedObjective.equals("undisplay")) - { - this.objectField.mouseClicked(mouseX, mouseY, mouseButton); + this.objectField.drawTextField(mouseX, mouseY, partialTicks); } } diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardPlayers.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardPlayers.java index 36f5b8d..49c1f1d 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardPlayers.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardPlayers.java @@ -1,191 +1,247 @@ package exopandora.worldhandler.gui.content.impl; -import com.google.common.base.Predicate; +import com.google.common.base.Predicates; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; +import exopandora.worldhandler.builder.impl.BuilderMultiCommand; import exopandora.worldhandler.builder.impl.BuilderScoreboardPlayers; -import exopandora.worldhandler.builder.impl.BuilderScoreboardPlayers.EnumPoints; -import exopandora.worldhandler.builder.impl.BuilderScoreboardPlayers.EnumTag; -import exopandora.worldhandler.config.ConfigSliders; -import exopandora.worldhandler.gui.button.EnumTooltip; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.builder.impl.BuilderScoreboardPlayers.EnumMode; +import exopandora.worldhandler.builder.impl.BuilderTag; +import exopandora.worldhandler.builder.impl.BuilderTrigger; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.gui.button.GuiButtonBase; +import exopandora.worldhandler.gui.button.GuiButtonTooltip; import exopandora.worldhandler.gui.button.GuiSlider; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; -import exopandora.worldhandler.gui.button.responder.SimpleResponder; import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.impl.abstr.ContentScoreboard; -import net.minecraft.client.gui.GuiButton; +import exopandora.worldhandler.gui.logic.LogicSliderSimple; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; import net.minecraft.client.resources.I18n; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentScoreboardPlayers extends ContentScoreboard { private GuiTextFieldTooltip objectField; private GuiTextFieldTooltip tagField; private final BuilderScoreboardPlayers builderPlayers = new BuilderScoreboardPlayers(); - private final Predicate nonNullNoSpace = string -> string != null && !string.matches("(.* .*)+"); + private final BuilderTag builderTag = new BuilderTag(); + private final BuilderTrigger builderTrigger = new BuilderTrigger(); + private final BuilderMultiCommand builderTriggerMulti = new BuilderMultiCommand(this.builderTrigger, this.builderPlayers); private String selectedPlayer = "add|set|remove"; private String tag; - private GuiButtonWorldHandler addButton; - private GuiButtonWorldHandler removeButton; + private GuiButtonBase addButton; + private GuiButtonBase removeButton; @Override public ICommandBuilder getCommandBuilder() { - return this.builderPlayers; + if(this.selectedPlayer.equals("add|set|remove")) + { + return this.builderPlayers; + } + else if(this.selectedPlayer.equals("tag")) + { + return this.builderTag; + } + else if(this.selectedPlayer.equals("enable")) + { + return this.builderTriggerMulti; + } + + return null; } @Override public void init(Container container) { - if(this.builderPlayers.getPoints() > ConfigSliders.getMaxPlayerPoints()) + if(this.builderPlayers.getPoints() > Config.getSliders().getMaxPlayerPoints()) { - this.builderPlayers.setPoints((int) ConfigSliders.getMaxPlayerPoints()); + this.builderPlayers.setPoints((int) Config.getSliders().getMaxPlayerPoints()); + } + + if(this.builderTrigger.getValue() > Config.getSliders().getMaxTriggerValue()) + { + this.builderTrigger.setValue((int) Config.getSliders().getMaxTriggerValue()); } } @Override public void initGui(Container container, int x, int y) { - this.objectField = new GuiTextFieldTooltip(x + 118, y + (this.selectedPlayer.equals("enable") ? 24 : 0), 114, 20, I18n.format("gui.worldhandler.scoreboard.objectives.objective")); - this.objectField.setValidator(this.nonNullNoSpace); - this.objectField.setText(this.objective); + this.objectField = new GuiTextFieldTooltip(x + 118, y, 114, 20, I18n.format("gui.worldhandler.scoreboard.objectives.objective")); + this.objectField.setValidator(Predicates.notNull()); + this.objectField.setText(ContentScoreboard.getObjective()); + this.objectField.setTextAcceptHandler((id, text) -> + { + ContentScoreboard.setObjective(text); + this.builderPlayers.setObjective(ContentScoreboard.getObjective()); + this.builderTrigger.setObjective(ContentScoreboard.getObjective()); + container.initButtons(); + }); this.tagField = new GuiTextFieldTooltip(x + 118, y + 12, 114, 20, I18n.format("gui.worldhandler.scoreboard.players.tag")); - this.tagField.setValidator(this.nonNullNoSpace); + this.tagField.setValidator(string -> string != null && !string.contains(" ")); this.tagField.setText(this.tag); + this.tagField.setTextAcceptHandler((id, text) -> + { + this.tag = text; + this.builderTag.setName(this.tag); + container.initButtons(); + }); } @Override public void initButtons(Container container, int x, int y) { - GuiButtonWorldHandler button3; - GuiButtonWorldHandler button4; - GuiButtonWorldHandler button5; + GuiButtonBase button1; + GuiButtonBase button2; + GuiButtonBase button3; - 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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(button3 = new GuiButtonWorldHandler(2, x, y + 12, 114, 20, I18n.format("gui.worldhandler.scoreboard.players.points"))); - container.add(button4 = new GuiButtonWorldHandler(3, x, y + 36, 114, 20, I18n.format("gui.worldhandler.scoreboard.players.tag"))); - container.add(button5 = new GuiButtonWorldHandler(4, x, y + 60, 114, 20, I18n.format("gui.worldhandler.scoreboard.players.trigger"))); + container.add(button1 = new GuiButtonBase(x, y + 12, 114, 20, I18n.format("gui.worldhandler.scoreboard.players.points"), () -> + { + this.selectedPlayer = "add|set|remove"; + container.initGui(); + })); + container.add(button2 = new GuiButtonBase(x, y + 36, 114, 20, I18n.format("gui.worldhandler.scoreboard.players.tag"), () -> + { + this.selectedPlayer = "tag"; + container.initGui(); + })); + container.add(button3 = new GuiButtonBase(x, y + 60, 114, 20, I18n.format("gui.worldhandler.scoreboard.players.trigger"), () -> + { + this.selectedPlayer = "enable"; + container.initGui(); + })); - button3.enabled = !this.selectedPlayer.equals("add|set|remove"); - button4.enabled = !this.selectedPlayer.equals("tag"); - button5.enabled = !this.selectedPlayer.equals("enable"); + button1.enabled = !this.selectedPlayer.equals("add|set|remove"); + button2.enabled = !this.selectedPlayer.equals("tag"); + button3.enabled = !this.selectedPlayer.equals("enable"); + boolean enabled = ContentScoreboard.isObjectiveValid(); this.builderPlayers.setMode(this.selectedPlayer); - boolean objective = this.builderPlayers.getObjective() != null && !this.builderPlayers.getObjective().isEmpty(); - if(this.selectedPlayer.equals("add|set|remove")) { - container.add(new GuiSlider(this, container, "points", x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.scoreboard.players.points"), 0, ConfigSliders.getMaxPlayerPoints(), 0, new SimpleResponder(value -> + container.add(new GuiSlider(x + 118, y + 24, 114, 20, 0, Config.getSliders().getMaxPlayerPoints(), 0, container, new LogicSliderSimple("points", I18n.format("gui.worldhandler.scoreboard.players.points"), value -> { this.builderPlayers.setPoints(value); }))); + container.add(this.addButton = new GuiButtonBase(x + 118, y + 48, 56, 20, I18n.format("gui.worldhandler.actions.add"), () -> + { + CommandHelper.sendCommand(this.builderPlayers.getBuilderForPoints(EnumMode.ADD)); + container.initGui(); + })); + container.add(this.removeButton = new GuiButtonBase(x + 118 + 114 / 2 + 1, y + 48, 56, 20, I18n.format("gui.worldhandler.actions.remove"), () -> + { + CommandHelper.sendCommand(this.builderPlayers.getBuilderForPoints(EnumMode.REMOVE)); + container.initGui(); + })); + container.add(button1 = new GuiButtonTooltip(x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.actions.reset"), I18n.format("gui.worldhandler.actions.set_to_0"), () -> + { + CommandHelper.sendCommand(this.builderPlayers.getBuilderForPoints(EnumMode.SET, 0)); + container.initGui(); + })); - container.add(this.addButton = new GuiButtonWorldHandler(5, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.actions.add"))); - container.add(this.removeButton = new GuiButtonWorldHandler(6, x + 118, y + 72, 56, 20, I18n.format("gui.worldhandler.actions.remove"))); - container.add(button5 = new GuiButtonWorldHandler(7, x + 118 + 114 / 2 + 1, y + 72, 56, 20, I18n.format("gui.worldhandler.actions.reset"), I18n.format("gui.worldhandler.actions.set_to_0"), EnumTooltip.TOP_RIGHT)); + boolean points = enabled && this.builderPlayers.getPoints() > 0; - boolean enabled = objective && this.builderPlayers.getPoints() > 0; - - this.addButton.enabled = enabled; - this.removeButton.enabled = enabled; - button5.enabled = objective; + this.addButton.enabled = points; + this.removeButton.enabled = points; + button1.enabled = enabled; } else if(this.selectedPlayer.equals("tag")) { - container.add(button3 = new GuiButtonWorldHandler(8, x + 118, y + 36, 114, 20, I18n.format("gui.worldhandler.actions.add"))); - container.add(button4 = new GuiButtonWorldHandler(9, x + 118, y + 60, 114, 20, I18n.format("gui.worldhandler.actions.remove"))); + container.add(button1 = new GuiButtonBase(x + 118, y + 36, 114, 20, I18n.format("gui.worldhandler.actions.add"), () -> + { + CommandHelper.sendCommand(this.builderTag.getBuilderForMode(BuilderTag.EnumMode.ADD)); + container.initGui(); + })); + container.add(button2 = new GuiButtonBase(x + 118, y + 60, 114, 20, I18n.format("gui.worldhandler.actions.remove"), () -> + { + CommandHelper.sendCommand(this.builderTag.getBuilderForMode(BuilderTag.EnumMode.REMOVE)); + container.initGui(); + })); - boolean enabled = this.tag != null && !this.tag.isEmpty(); + boolean tag = this.tag != null && !this.tag.isEmpty(); - button3.enabled = enabled; - button4.enabled = enabled; + button1.enabled = tag; + button2.enabled = tag; } else if(this.selectedPlayer.equals("enable")) { - container.add(button3 = new GuiButtonWorldHandler(10, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.generic.enable"))); + container.add(new GuiSlider(x + 118, y + 24, 114, 20, 0, Config.getSliders().getMaxTriggerValue(), 0, container, new LogicSliderSimple("enable", I18n.format("gui.worldhandler.generic.value"), value -> + { + this.builderTrigger.setValue(value.intValue()); + }))); + container.add(this.addButton = new GuiButtonBase(x + 118, y + 48, 56, 20, I18n.format("gui.worldhandler.actions.add"), () -> + { + CommandHelper.sendCommand(this.builderTrigger.getBuilderForMode(BuilderTrigger.EnumMode.ADD)); + container.initGui(); + })); + container.add(this.removeButton = new GuiButtonBase(x + 118 + 114 / 2 + 1, y + 48, 56, 20, I18n.format("gui.worldhandler.actions.set"), () -> + { + CommandHelper.sendCommand(this.builderTrigger.getBuilderForMode(BuilderTrigger.EnumMode.SET)); + container.initGui(); + })); + container.add(button1 = new GuiButtonBase(x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.generic.enable"), () -> + { + CommandHelper.sendCommand(this.builderPlayers.getBuilderForEnable()); + container.initGui(); + })); - button3.enabled = objective; + this.addButton.enabled = enabled && this.builderTrigger.getValue() > 0; + this.removeButton.enabled = enabled; + button1.enabled = enabled; } if(this.selectedPlayer.equals("tag")) { - this.builderPlayers.setTag(this.tag); + container.add(this.tagField); } else { - this.builderPlayers.setObjective(this.objective); + container.add(this.objectField); + this.builderPlayers.setObjective(ContentScoreboard.getObjective()); + this.builderTrigger.setObjective(ContentScoreboard.getObjective()); } } @Override - public void updateScreen(Container container) + public void tick(Container container) { - if(this.selectedPlayer.equals("add|set|remove")) + if(this.selectedPlayer.equals("tag")) { - boolean objective = this.builderPlayers.getObjective() != null && !this.builderPlayers.getObjective().isEmpty(); - boolean enabled = objective && this.builderPlayers.getPoints() > 0; + this.tagField.tick(); + } + else + { + boolean enabled = ContentScoreboard.isObjectiveValid(); - this.addButton.enabled = enabled; - this.removeButton.enabled = enabled; - } - } - - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception - { - switch(button.id) - { - case 2: - this.selectedPlayer = "add|set|remove"; - container.initGui(); - break; - case 3: - this.selectedPlayer = "tag"; - container.initGui(); - break; - case 4: - this.selectedPlayer = "enable"; - container.initGui(); - break; - case 5: - WorldHandler.sendCommand(this.builderPlayers.getBuilderForPoints(EnumPoints.ADD)); - container.initGui(); - break; - case 6: - WorldHandler.sendCommand(this.builderPlayers.getBuilderForPoints(EnumPoints.REMOVE)); - container.initGui(); - break; - case 7: - WorldHandler.sendCommand(this.builderPlayers.getBuilderForPoints(EnumPoints.SET, 0)); - container.initGui(); - break; - case 8: - WorldHandler.sendCommand(this.builderPlayers.getBuilderForTag(EnumTag.ADD)); - container.initGui(); - break; - case 9: - WorldHandler.sendCommand(this.builderPlayers.getBuilderForTag(EnumTag.REMOVE)); - container.initGui(); - break; - case 10: - WorldHandler.sendCommand(this.builderPlayers); - container.initGui(); - break; - default: - break; + if(this.selectedPlayer.equals("add|set|remove")) + { + boolean points = enabled && this.builderPlayers.getPoints() > 0; + + this.addButton.enabled = points; + this.removeButton.enabled = points; + } + else if(this.selectedPlayer.equals("enable")) + { + this.addButton.enabled = enabled && this.builderTrigger.getValue() > 0; + this.removeButton.enabled = enabled; + } + + this.objectField.tick(); } } @@ -194,42 +250,11 @@ public class ContentScoreboardPlayers extends ContentScoreboard { if(this.selectedPlayer.equals("tag")) { - this.tagField.drawTextBox(); + this.tagField.drawTextField(mouseX, mouseY, partialTicks); } else { - this.objectField.drawTextBox(); - } - } - - @Override - public void keyTyped(Container container, char typedChar, int keyCode) - { - if(this.objectField.textboxKeyTyped(typedChar, keyCode)) - { - this.objective = this.objectField.getText(); - this.builderPlayers.setObjective(this.objective); - container.initButtons(); - } - - if(this.tagField.textboxKeyTyped(typedChar, keyCode)) - { - this.tag = this.tagField.getText(); - this.builderPlayers.setTag(this.tag); - container.initButtons(); - } - } - - @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - if(this.selectedPlayer.equals("tag")) - { - this.tagField.mouseClicked(mouseX, mouseY, mouseButton); - } - else - { - this.objectField.mouseClicked(mouseX, mouseY, mouseButton); + this.objectField.drawTextField(mouseX, mouseY, partialTicks); } } @@ -249,5 +274,6 @@ public class ContentScoreboardPlayers extends ContentScoreboard public void onPlayerNameChanged(String username) { this.builderPlayers.setPlayer(username); + this.builderTag.setPlayer(username); } } diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java index 0ad56e7..28c0567 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java @@ -1,28 +1,29 @@ package exopandora.worldhandler.gui.content.impl; import java.util.Arrays; +import java.util.List; import com.google.common.base.Predicates; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; -import exopandora.worldhandler.builder.impl.BuilderScoreboardTeams; -import exopandora.worldhandler.builder.impl.BuilderScoreboardTeams.EnumMode; +import exopandora.worldhandler.builder.impl.BuilderTeams; +import exopandora.worldhandler.builder.impl.BuilderTeams.EnumMode; import exopandora.worldhandler.format.EnumColor; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; 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.ElementClickList; -import exopandora.worldhandler.gui.content.element.logic.ILogicClickList; +import exopandora.worldhandler.gui.content.element.impl.ElementMultiButtonList; import exopandora.worldhandler.gui.content.impl.abstr.ContentScoreboard; -import net.minecraft.client.gui.GuiButton; +import exopandora.worldhandler.gui.logic.ILogicClickList; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; import net.minecraft.client.resources.I18n; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentScoreboardTeams extends ContentScoreboard { private GuiTextFieldTooltip teamField; @@ -30,7 +31,7 @@ public class ContentScoreboardTeams extends ContentScoreboard private String team; private String selectedTeam = "add"; - private final BuilderScoreboardTeams builderTeams = new BuilderScoreboardTeams(); + private final BuilderTeams builderTeams = new BuilderTeams(); @Override public ICommandBuilder getCommandBuilder() @@ -44,39 +45,53 @@ public class ContentScoreboardTeams extends ContentScoreboard this.teamField = new GuiTextFieldTooltip(x + 118, y + (this.selectedTeam.equals("option") ? 0 : (this.selectedTeam.equals("add") ? 24 : 12)), 114, 20, I18n.format("gui.worldhandler.scoreboard.team.team")); this.teamField.setValidator(Predicates.notNull()); this.teamField.setText(this.team); + this.teamField.setTextAcceptHandler((id, text) -> + { + this.team = text; + this.builderTeams.setTeam(this.team); + container.initButtons(); + }); if(this.selectedTeam.equals("option")) { - ElementClickList options = new ElementClickList(x + 118, y + 24, HELPER.getOptions(), new int[] {6, 7}, this, new ILogicClickList() + ElementMultiButtonList options = new ElementMultiButtonList(x + 118, y + 24, HELPER.getOptions(), 2, new ILogicClickList() { @Override - public String translate(String... keys) + public String translate(String key, int depth) { - if(keys.length > 1) + if(depth == 0) { - if(Arrays.stream(EnumColor.values()).map(EnumColor::getFormat).anyMatch(Predicates.equalTo(keys[1]))) + return I18n.format("gui.worldhandler.scoreboard.team.options." + key); + } + else if(depth == 1) + { + if(Arrays.stream(EnumColor.values()).map(EnumColor::getFormat).anyMatch(Predicates.equalTo(key))) { - return I18n.format("gui.worldhandler.color." + keys[1]); + return I18n.format("gui.worldhandler.color." + key); } - return I18n.format("gui.worldhandler.scoreboard.team.suboption." + keys[1]); - } - else - { - return I18n.format("gui.worldhandler.scoreboard.team.options." + keys[0]); + return I18n.format("gui.worldhandler.scoreboard.team.suboption." + key); } + + return key; } @Override - public void consumeKey(String... keys) + public String buildEventKey(List keys, int depth) { - if(keys.length > 1) + return ILogicClickList.super.buildTranslationKey(keys, depth); + } + + @Override + public void onClick(String key, int depth) + { + if(depth == 0) { - builderTeams.setValue(keys[1]); + ContentScoreboardTeams.this.builderTeams.setRule(key); } - else + else if(depth == 1) { - builderTeams.setRule(keys[0]); + ContentScoreboardTeams.this.builderTeams.setValue(key); } } @@ -94,23 +109,39 @@ public class ContentScoreboardTeams extends ContentScoreboard @Override public void initButtons(Container container, int x, int y) { - GuiButtonWorldHandler button3; - GuiButtonWorldHandler button4; - GuiButtonWorldHandler button5; - GuiButtonWorldHandler button6; + GuiButtonBase button1; + GuiButtonBase button2; + GuiButtonBase button3; + GuiButtonBase button4; - 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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(button3 = new GuiButtonWorldHandler(2, x, y, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.create"))); - container.add(button4 = new GuiButtonWorldHandler(3, x, y + 24, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.join") + " / " + I18n.format("gui.worldhandler.scoreboard.team.leave"))); - container.add(button5 = new GuiButtonWorldHandler(4, x, y + 48, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.remove") + " / " + I18n.format("gui.worldhandler.scoreboard.team.empty"))); - container.add(button6 = new GuiButtonWorldHandler(5, x, y + 72, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.options"))); + container.add(button1 = new GuiButtonBase(x, y, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.create"), () -> + { + this.selectedTeam = "add"; + container.initGui(); + })); + container.add(button2 = new GuiButtonBase(x, y + 24, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.join") + " / " + I18n.format("gui.worldhandler.scoreboard.team.leave"), () -> + { + this.selectedTeam = "join|leave"; + container.initGui(); + })); + container.add(button3 = new GuiButtonBase(x, y + 48, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.remove") + " / " + I18n.format("gui.worldhandler.scoreboard.team.empty"), () -> + { + this.selectedTeam = "remove|empty"; + container.initGui(); + })); + container.add(button4 = new GuiButtonBase(x, y + 72, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.options"), () -> + { + this.selectedTeam = "option"; + container.initGui(); + })); - button3.enabled = !this.selectedTeam.equals("add"); - button4.enabled = !this.selectedTeam.equals("join|leave"); - button5.enabled = !this.selectedTeam.equals("remove|empty"); - button6.enabled = !this.selectedTeam.equals("option"); + button1.enabled = !this.selectedTeam.equals("add"); + button2.enabled = !this.selectedTeam.equals("join|leave"); + button3.enabled = !this.selectedTeam.equals("remove|empty"); + button4.enabled = !this.selectedTeam.equals("option"); this.builderTeams.setMode(this.selectedTeam); @@ -124,96 +155,61 @@ public class ContentScoreboardTeams extends ContentScoreboard { this.builderTeams.setPlayer(container.getPlayer()); - container.add(button3 = new GuiButtonWorldHandler(9, x + 118, y + 36, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.join"))); - container.add(new GuiButtonWorldHandler(10, x + 118, y + 60, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.leave"))); + container.add(button1 = new GuiButtonBase(x + 118, y + 36, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.join"), () -> + { + CommandHelper.sendCommand(this.builderTeams.getBuilderForMode(EnumMode.JOIN)); + container.initButtons(); + })); + container.add(new GuiButtonBase(x + 118, y + 60, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.leave"), () -> + { + CommandHelper.sendCommand(this.builderTeams.getBuilderForMode(EnumMode.LEAVE)); + container.initButtons(); + })); - button3.enabled = enabled; + button1.enabled = enabled; } else if(this.selectedTeam.equals("remove|empty")) { - container.add(button3 = new GuiButtonWorldHandler(11, x + 118, y + 36, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.remove"))); - container.add(button4 = new GuiButtonWorldHandler(12, x + 118, y + 60, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.empty"))); + container.add(button1 = new GuiButtonBase(x + 118, y + 36, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.remove"), () -> + { + CommandHelper.sendCommand(this.builderTeams.getBuilderForMode(EnumMode.REMOVE)); + container.initButtons(); + })); + container.add(button2 = new GuiButtonBase(x + 118, y + 60, 114, 20, I18n.format("gui.worldhandler.scoreboard.team.empty"), () -> + { + CommandHelper.sendCommand(this.builderTeams.getBuilderForMode(EnumMode.EMPTY)); + container.initButtons(); + })); - button3.enabled = enabled; - button4.enabled = enabled; + button1.enabled = enabled; + button2.enabled = enabled; } if(!this.selectedTeam.equals("join|leave") && !this.selectedTeam.equals("remove|empty")) { int yOffset = this.selectedTeam.equals("option") ? 24 : 0; - container.add(button3 = new GuiButtonWorldHandler(8, x + 118, y + 48 + yOffset, 114, 20, I18n.format("gui.worldhandler.actions.perform"))); - button3.enabled = enabled; + container.add(button1 = new GuiButtonBase(x + 118, y + 48 + yOffset, 114, 20, I18n.format("gui.worldhandler.actions.perform"), () -> + { + CommandHelper.sendCommand(this.builderTeams); + container.initButtons(); + })); + button1.enabled = enabled; } + + container.add(this.teamField); } @Override - public void actionPerformed(Container container, GuiButton button) throws Exception + public void tick(Container container) { - switch(button.id) - { - case 2: - this.selectedTeam = "add"; - container.initGui(); - break; - case 3: - this.selectedTeam = "join|leave"; - container.initGui(); - break; - case 4: - this.selectedTeam = "remove|empty"; - container.initGui(); - break; - case 5: - this.selectedTeam = "option"; - container.initGui(); - break; - case 8: - WorldHandler.sendCommand(this.builderTeams); - container.initButtons(); - break; - case 9: - WorldHandler.sendCommand(this.builderTeams.getBuilderForMode(EnumMode.JOIN)); - container.initButtons(); - break; - case 10: - WorldHandler.sendCommand(this.builderTeams.getBuilderForMode(EnumMode.LEAVE)); - container.initButtons(); - break; - case 11: - WorldHandler.sendCommand(this.builderTeams.getBuilderForMode(EnumMode.REMOVE)); - container.initButtons(); - break; - case 12: - WorldHandler.sendCommand(this.builderTeams.getBuilderForMode(EnumMode.EMPTY)); - container.initButtons(); - break; - default: - break; - } + this.teamField.tick(); } @Override public void drawScreen(Container container, int x, int y, int mouseX, int mouseY, float partialTicks) { - this.teamField.drawTextBox(); - } - - @Override - public void keyTyped(Container container, char typedChar, int keyCode) - { - if(this.teamField.textboxKeyTyped(typedChar, keyCode)) - { - this.team = this.teamField.getText(); - this.builderTeams.setTeam(this.team); - container.initButtons(); - } - } - - @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - this.teamField.mouseClicked(mouseX, mouseY, mouseButton); + this.teamField.drawTextField(mouseX, mouseY, partialTicks); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSettings.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSettings.java new file mode 100644 index 0000000..727a82e --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSettings.java @@ -0,0 +1,234 @@ +package exopandora.worldhandler.gui.content.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Supplier; + +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.gui.button.GuiButtonBase; +import exopandora.worldhandler.gui.button.GuiButtonTooltip; +import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; +import exopandora.worldhandler.gui.container.Container; +import exopandora.worldhandler.gui.content.element.impl.ElementPageList; +import exopandora.worldhandler.gui.content.impl.ContentSettings.Setting.BooleanSetting; +import exopandora.worldhandler.gui.content.impl.ContentSettings.Setting.IntegerSetting; +import exopandora.worldhandler.gui.content.impl.abstr.ContentChild; +import exopandora.worldhandler.gui.logic.ILogicPageList; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.util.ActionHandler; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class ContentSettings extends ContentChild +{ + private static final List> SETTINGS = new ArrayList>(); + + static + { + SETTINGS.add(new BooleanSetting("command_syntax", Config.CLIENT.getSettings()::commandSyntax, Config.CLIENT.getSettings()::setCommandSyntax)); + SETTINGS.add(new BooleanSetting("shortcuts", Config.CLIENT.getSettings()::shortcuts, Config.CLIENT.getSettings()::setShortcuts)); + SETTINGS.add(new BooleanSetting("key_shortcuts", Config.CLIENT.getSettings()::shortcutKeys, Config.CLIENT.getSettings()::setShortcutKeys)); + SETTINGS.add(new BooleanSetting("tooltips", Config.CLIENT.getSettings()::tooltips, Config.CLIENT.getSettings()::setTooltips)); + SETTINGS.add(new BooleanSetting("watch", Config.CLIENT.getSettings()::watch, Config.CLIENT.getSettings()::setWatch)); + SETTINGS.add(new BooleanSetting("smooth_watch", Config.CLIENT.getSettings()::smoothWatch, Config.CLIENT.getSettings()::setSmoothWatch)); + SETTINGS.add(new BooleanSetting("pause_game", Config.CLIENT.getSettings()::pause, Config.CLIENT.getSettings()::setPause)); + SETTINGS.add(new BooleanSetting("custom_times", Config.CLIENT.getSettings()::customTimes, Config.CLIENT.getSettings()::setCustomTimes)); + SETTINGS.add(new BooleanSetting("permission_query", Config.CLIENT.getSettings()::permissionQuery, Config.CLIENT.getSettings()::setPermissionQuery)); + SETTINGS.add(new BooleanSetting("highlight_blocks", Config.CLIENT.getSettings()::highlightBlocks, Config.CLIENT.getSettings()::setHighlightBlocks)); + SETTINGS.add(new IntegerSetting("custom_time_dawn", Config.CLIENT.getSettings()::getDawn, Config.CLIENT.getSettings()::setDawn)); + SETTINGS.add(new IntegerSetting("custom_time_noon", Config.CLIENT.getSettings()::getNoon, Config.CLIENT.getSettings()::setNoon)); + SETTINGS.add(new IntegerSetting("custom_time_sunset", Config.CLIENT.getSettings()::getSunset, Config.CLIENT.getSettings()::setSunset)); + SETTINGS.add(new IntegerSetting("custom_time_midnight", Config.CLIENT.getSettings()::getMidnight, Config.CLIENT.getSettings()::setMidnight)); + } + + private Setting setting; + private GuiTextFieldTooltip valueField; + + @Override + public void initGui(Container container, int x, int y) + { + ElementPageList> settings = new ElementPageList>(x, y, SETTINGS, 114, 20, 3, container, new ILogicPageList>() + { + @Override + public String translate(Setting item) + { + return I18n.format("gui.worldhandler.config.key.settings." + item.getKey()); + } + + @Override + public String toTooltip(Setting item) + { + return I18n.format("gui.worldhandler.config.comment.settings." + item.getKey()); + } + + @Override + public void onClick(Setting item) + { + ContentSettings.this.setting = item; + container.initButtons(); + } + + @Override + public GuiButtonBase onRegister(int x, int y, int width, int height, String text, Setting item, ActionHandler actionHandler) + { + return new GuiButtonTooltip(x, y, width, height, text, this.toTooltip(item), actionHandler); + } + + @Override + public String getId() + { + return "settings"; + } + }); + + container.add(settings); + + this.valueField = new GuiTextFieldTooltip(x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.generic.value")); + this.valueField.setValidator(string -> + { + if(string == null) + { + return false; + } + + if(!string.isEmpty()) + { + try + { + Integer.parseInt(string); + } + catch(Exception e) + { + return false; + } + } + + return true; + }); + } + + @Override + public void initButtons(Container container, int x, int y) + { + GuiButtonBase button1; + GuiButtonBase button2; + + container.add(new GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); + + if(this.setting instanceof BooleanSetting) + { + BooleanSetting setting = (BooleanSetting) this.setting; + + container.add(button1 = new GuiButtonBase(x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.generic.enable"), () -> + { + setting.set(true); + container.initButtons(); + })); + container.add(button2 = new GuiButtonBase(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.generic.disable"), () -> + { + setting.set(false); + container.initButtons(); + })); + + boolean enabled = setting.get(); + + button1.enabled = !enabled; + button2.enabled = enabled; + } + else if(this.setting instanceof IntegerSetting) + { + IntegerSetting setting = (IntegerSetting) this.setting; + this.valueField.setText(String.valueOf(setting.get())); + + container.add(this.valueField); + container.add(new GuiButtonBase(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.actions.set"), () -> + { + String text = this.valueField.getText(); + + if(text.isEmpty()) + { + setting.set(0); + } + else + { + setting.set(Integer.parseInt(text)); + } + + container.initButtons(); + })); + } + } + + @Override + public void tick(Container container) + { + if(this.setting instanceof IntegerSetting) + { + this.valueField.tick(); + } + } + + @Override + public void drawScreen(Container container, int x, int y, int mouseX, int mouseY, float partialTicks) + { + if(this.setting instanceof IntegerSetting) + { + this.valueField.drawTextField(mouseX, mouseY, partialTicks); + } + } + + @Override + public String getTitle() + { + return I18n.format("gui.worldhandler.config.category.settings"); + } + + public abstract static class Setting + { + private final String key; + private final Supplier getter; + private final Consumer setter; + + public Setting(String key, Supplier getter, Consumer setter) + { + this.key = key; + this.getter = getter; + this.setter = setter; + } + + public String getKey() + { + return this.key; + } + + public T get() + { + return this.getter.get(); + } + + public void set(T value) + { + this.setter.accept(value); + } + + public static class BooleanSetting extends Setting + { + public BooleanSetting(String key, Supplier getter, Consumer setter) + { + super(key, getter, setter); + } + } + + public static class IntegerSetting extends Setting + { + public IntegerSetting(String key, Supplier getter, Consumer setter) + { + super(key, getter, setter); + } + } + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSignEditor.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSignEditor.java index 603aecf..afce3b0 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSignEditor.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSignEditor.java @@ -1,16 +1,13 @@ package exopandora.worldhandler.gui.content.impl; -import org.lwjgl.input.Keyboard; -import com.google.common.base.Predicate; import com.google.common.base.Predicates; -import exopandora.worldhandler.Main; import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderSignEditor; -import exopandora.worldhandler.config.ConfigSkin; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; import exopandora.worldhandler.gui.category.Categories; import exopandora.worldhandler.gui.category.Category; @@ -18,31 +15,28 @@ 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.ElementColorMenu; -import exopandora.worldhandler.gui.content.element.logic.ILogicColorMenu; +import exopandora.worldhandler.gui.logic.ILogicColorMenu; +import exopandora.worldhandler.helper.ActionHelper; import exopandora.worldhandler.helper.BlockHelper; +import exopandora.worldhandler.helper.CommandHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.resources.I18n; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentSignEditor extends Content { - private static final ResourceLocation LOGO = new ResourceLocation(Main.MODID, "textures/logo.png"); - private int selectedLine = 0; private boolean editColor; private GuiTextFieldTooltip commandField; - private GuiTextFieldTooltip textlineField; private final BuilderSignEditor builderSignEditor = new BuilderSignEditor(); @@ -57,7 +51,7 @@ public class ContentSignEditor extends Content @Override public void init(Container container) { - this.isActive = BlockHelper.isFocusedBlockEqualTo(Blocks.STANDING_SIGN) || BlockHelper.isFocusedBlockEqualTo(Blocks.WALL_SIGN); + this.isActive = BlockHelper.isFocusedBlockEqualTo(Blocks.SIGN) || BlockHelper.isFocusedBlockEqualTo(Blocks.WALL_SIGN); this.builderSignEditor.setPosition(BlockHelper.getFocusedBlockPos()); } @@ -65,30 +59,35 @@ public class ContentSignEditor extends Content public void initGui(Container container, int x, int y) { if(this.isActive) - { + { this.commandField = new GuiTextFieldTooltip(x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.commmand")); this.commandField.setValidator(Predicates.notNull()); this.commandField.setText(this.builderSignEditor.getCommand(this.selectedLine)); this.commandField.setCursorPositionEnd(); + this.commandField.setTextAcceptHandler((id, text) -> + { + this.builderSignEditor.setCommand(this.selectedLine, text); + container.initButtons(); + }); - ElementColorMenu colors = new ElementColorMenu(this, x, y, "gui.worldhandler.blocks.sign_editor.text_line_" + (this.selectedLine + 1), this.builderSignEditor.getColoredString(this.selectedLine), new int[] {8, 9, 10, 11, 12, 13}, new ILogicColorMenu() + ElementColorMenu colors = new ElementColorMenu(x, y, "gui.worldhandler.blocks.sign_editor.text_line_" + (this.selectedLine + 1), this.builderSignEditor.getColoredString(this.selectedLine), new ILogicColorMenu() { @Override - public Predicate getValidator() + public boolean validate(String text) { - return string -> Minecraft.getMinecraft().fontRenderer.getStringWidth(string) <= 90; + return Minecraft.getInstance().fontRenderer.getStringWidth(text) <= 90; } @Override - public boolean drawButtons() + public boolean doDrawButtons() { - return editColor; + return ContentSignEditor.this.editColor; } @Override public String getId() { - return "color" + selectedLine; + return "color" + ContentSignEditor.this.selectedLine; } }); @@ -99,71 +98,63 @@ public class ContentSignEditor extends Content @Override public void initButtons(Container container, int x, int y) { - GuiButtonWorldHandler button3; - GuiButtonWorldHandler button4; - GuiButtonWorldHandler button5; - GuiButtonWorldHandler button6; + GuiButtonBase button1; + GuiButtonBase button2; + GuiButtonBase button3; + GuiButtonBase button4; - 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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); if(this.isActive) { - container.add(button3 = new GuiButtonWorldHandler(3, x, y, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.text_line_1"))); - container.add(button4 = new GuiButtonWorldHandler(4, x, y + 24, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.text_line_2"))); - container.add(button5 = new GuiButtonWorldHandler(5, x, y + 48, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.text_line_3"))); - container.add(button6 = new GuiButtonWorldHandler(6, x, y + 72, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.text_line_4"))); + container.add(button1 = new GuiButtonBase(x, y, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.text_line_1"), () -> + { + this.selectedLine = 0; + container.initGui(); + })); + container.add(button2 = new GuiButtonBase(x, y + 24, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.text_line_2"), () -> + { + this.selectedLine = 1; + container.initGui(); + })); + container.add(button3 = new GuiButtonBase(x, y + 48, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.text_line_3"), () -> + { + this.selectedLine = 2; + container.initGui(); + })); + container.add(button4 = new GuiButtonBase(x, y + 72, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.text_line_4"), () -> + { + this.selectedLine = 3; + container.initGui(); + })); if(this.editColor) { - container.add(new GuiButtonWorldHandler(7, x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.done"))); + container.add(new GuiButtonBase(x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.done"), () -> this.toggleEditColor(container))); } else { - container.add(new GuiButtonWorldHandler(7, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.format_text_line"))); - container.add(new GuiButtonWorldHandler(2, x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.actions.place_command_block"))); + container.add(this.commandField); + container.add(new GuiButtonBase(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.blocks.sign_editor.format_text_line"), () -> this.toggleEditColor(container))); + container.add(new GuiButtonBase(x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.actions.place_command_block"), () -> + { + CommandHelper.sendCommand(this.builderSignEditor, this.builderSignEditor.isSpecial()); + })); } - button3.enabled = this.selectedLine != 0; - button4.enabled = this.selectedLine != 1; - button5.enabled = this.selectedLine != 2; - button6.enabled = this.selectedLine != 3; + button1.enabled = this.selectedLine != 0; + button2.enabled = this.selectedLine != 1; + button3.enabled = this.selectedLine != 2; + button4.enabled = this.selectedLine != 3; } } - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception + private void toggleEditColor(Container container) { - switch(button.id) - { - case 2: - WorldHandler.sendCommand(this.builderSignEditor, this.builderSignEditor.isSpecial()); - break; - case 3: - this.selectedLine = 0; - container.initGui(); - break; - case 4: - this.selectedLine = 1; - container.initGui(); - break; - case 5: - this.selectedLine = 2; - container.initGui(); - break; - case 6: - this.selectedLine = 3; - container.initGui(); - break; - case 7: - this.editColor = !this.editColor; - container.initGui(); - break; - default: - break; - } + this.editColor = !this.editColor; + container.initGui(); } - @Override public void drawScreen(Container container, int x, int y, int mouseX, int mouseY, float partialTicks) { @@ -171,49 +162,27 @@ public class ContentSignEditor extends Content { if(!this.editColor) { - this.commandField.drawTextBox(); + this.commandField.drawTextField(mouseX, mouseY, partialTicks); } } else { float scale = 4; - GlStateManager.color(1.0F, 1.0F, 1.0F); + GlStateManager.color3f(1.0F, 1.0F, 1.0F); GlStateManager.pushMatrix(); RenderHelper.enableGUIStandardItemLighting(); - GlStateManager.translate(container.width / 2 - 8.5F * scale, container.height / 2 - 15 - 8.5F * scale, 0); - GlStateManager.scale(scale, scale, scale); - Minecraft.getMinecraft().getRenderItem().renderItemIntoGUI(new ItemStack(Items.SIGN), 0, 0); + GlStateManager.translatef(container.width / 2 - 8.5F * scale, container.height / 2 - 15 - 8.5F * scale, 0); + GlStateManager.scalef(scale, scale, scale); + Minecraft.getInstance().getItemRenderer().renderItemIntoGUI(new ItemStack(Items.SIGN), 0, 0); RenderHelper.disableStandardItemLighting(); GlStateManager.popMatrix(); - String displayString = I18n.format("gui.worldhandler.blocks.sign_editor.look_at_sign", Keyboard.getKeyName(WorldHandler.KEY_WORLD_HANDLER.getKeyCode())); - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; - fontRenderer.drawString(displayString, x + 116 - fontRenderer.getStringWidth(displayString) / 2, y + 70, ConfigSkin.getLabelColor()); - } - } - - @Override - public void keyTyped(Container container, char charTyped, int keyCode) - { - if(this.isActive) - { - if(this.commandField.textboxKeyTyped(charTyped, keyCode)) - { - this.builderSignEditor.setCommand(this.selectedLine, this.commandField.getText()); - container.initButtons(); - } - } - } - - @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - if(this.isActive) - { - this.commandField.mouseClicked(mouseX, mouseY, mouseButton); + String displayString = I18n.format("gui.worldhandler.blocks.sign_editor.look_at_sign", WorldHandler.KEY_WORLD_HANDLER.func_197978_k()); + FontRenderer fontRenderer = Minecraft.getInstance().fontRenderer; + fontRenderer.drawString(displayString, x + 116 - fontRenderer.getStringWidth(displayString) / 2, y + 70, Config.getSkin().getLabelColor()); } } diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSummon.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSummon.java index d7def3b..c2bdce5 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSummon.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSummon.java @@ -9,39 +9,39 @@ import org.lwjgl.opengl.GL11; import com.google.common.base.Predicates; -import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.impl.BuilderSummon; import exopandora.worldhandler.builder.impl.abstr.EnumAttributes; import exopandora.worldhandler.builder.impl.abstr.EnumAttributes.Applyable; -import exopandora.worldhandler.config.ConfigSliders; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiButtonItem; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; import exopandora.worldhandler.gui.button.GuiSlider; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; -import exopandora.worldhandler.gui.button.responder.AttributeResponder; -import exopandora.worldhandler.gui.button.responder.SimpleResponder; 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 exopandora.worldhandler.util.UtilPlayer; +import exopandora.worldhandler.gui.logic.ILogicPageList; +import exopandora.worldhandler.gui.logic.LogicSliderAttribute; +import exopandora.worldhandler.gui.logic.LogicSliderSimple; +import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.CommandHelper; +import exopandora.worldhandler.util.ActionHandler; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.resources.I18n; -import net.minecraft.entity.EntityList; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.init.MobEffects; import net.minecraft.potion.Potion; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentSummon extends Content { private GuiTextFieldTooltip mobField; @@ -73,9 +73,9 @@ public class ContentSummon extends Content { double ammount = this.builderSummon.getAttributeAmmount(attribute); - if(ammount > ConfigSliders.getMaxSummonAttributes()) + if(ammount > Config.getSliders().getMaxSummonAttributes()) { - this.builderSummon.setAttribute(attribute, ConfigSliders.getMaxSummonAttributes()); + this.builderSummon.setAttribute(attribute, Config.getSliders().getMaxSummonAttributes()); } } @@ -83,16 +83,16 @@ public class ContentSummon extends Content { byte amplifier = this.builderSummon.getAmplifier(potion); - if(amplifier > ConfigSliders.getMaxSummonPotionAmplifier()) + if(amplifier > Config.getSliders().getMaxSummonPotionAmplifier()) { - this.builderSummon.setAmplifier(potion, (byte) ConfigSliders.getMaxSummonPotionAmplifier()); + this.builderSummon.setAmplifier(potion, (byte) Config.getSliders().getMaxSummonPotionAmplifier()); } int minutes = this.builderSummon.getMinutes(potion); - if(minutes > ConfigSliders.getMaxSummonPotionMinutes()) + if(minutes > Config.getSliders().getMaxSummonPotionMinutes()) { - this.builderSummon.setMinutes(potion, (int) ConfigSliders.getMaxSummonPotionMinutes()); + this.builderSummon.setMinutes(potion, (int) Config.getSliders().getMaxSummonPotionMinutes()); } } } @@ -100,55 +100,71 @@ public class ContentSummon extends Content @Override public void initGui(Container container, int x, int y) { - this.builderSummon.setDirection(UtilPlayer.getPlayerDirection()); - this.mobField = new GuiTextFieldTooltip(x + 118, y, 114, 20, I18n.format("gui.worldhandler.entities.summon.start.mob_id") + " (" + I18n.format("gui.worldhandler.generic.name") + ")"); this.mobField.setValidator(Predicates.notNull()); this.mobField.setText(this.mob); + this.mobField.setTextAcceptHandler((id, text) -> + { + this.mob = text; + this.builderSummon.setEntity(this.mob); + container.initButtons(); + }); this.customNameField = new GuiTextFieldTooltip(x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.entities.summon.start.custom_name")); this.customNameField.setValidator(Predicates.notNull()); this.customNameField.setText(this.name); + this.customNameField.setTextAcceptHandler((id, text) -> + { + this.name = text; + this.builderSummon.setCustomName(this.name); + container.initButtons(); + }); this.passengerField = new GuiTextFieldTooltip(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.entities.summon.start.passenger_mob_id")); this.passengerField.setValidator(Predicates.notNull()); this.passengerField.setText(this.passenger); + this.passengerField.setTextAcceptHandler((id, text) -> + { + this.passenger = this.passengerField.getText(); + this.builderSummon.setPassenger(this.passenger); + container.initButtons(); + }); if(this.page.equals("attributes")) { - ElementPageList attributes = new ElementPageList(x + 118, y, this.attributes, null, 114, 20, 3, this, new int[] {6, 7, 8}, new ILogicPageList() + ElementPageList attributes = new ElementPageList(x + 118, y, this.attributes, 114, 20, 3, container, new ILogicPageList() { @Override - public String translate(EnumAttributes key) + public String translate(EnumAttributes item) { - return key.getTranslation(); + return item.getTranslation(); } @Override - public void onClick(EnumAttributes clicked) + public String toTooltip(EnumAttributes item) + { + return item.getAttribute(); + } + + @Override + public void onClick(EnumAttributes item) { } @Override - public String getRegistryName(EnumAttributes key) + public GuiButtonBase onRegister(int x, int y, int width, int height, String text, EnumAttributes item, ActionHandler actionHandler) { - return key.getAttribute(); - } - - @Override - public void onRegister(int id, int x, int y, int width, int height, String display, String registry, boolean enabled, EnumAttributes value, Container container) - { - container.add(new GuiSlider(Contents.SUMMON, container, value, x, y, width, height, display, -ConfigSliders.getMaxSummonAttributes(), ConfigSliders.getMaxSummonAttributes(), 0, new AttributeResponder(response -> + return new GuiSlider(x, y, width, height, -Config.getSliders().getMaxSummonAttributes(), Config.getSliders().getMaxSummonAttributes(), 0, container, new LogicSliderAttribute(item, text, value -> { - builderSummon.setAttribute(value, response); - }))); + ContentSummon.this.builderSummon.setAttribute(item, value); + })); } @Override - public EnumAttributes getObject(Object object) + public boolean doDisable() { - return null; + return false; } @Override @@ -165,92 +181,123 @@ public class ContentSummon extends Content @Override public void initButtons(Container container, int x, int y) { - GuiButtonWorldHandler button3; - GuiButtonWorldHandler button4; - GuiButtonWorldHandler button5; - GuiButtonWorldHandler button6; - GuiButtonWorldHandler button7; - GuiButtonWorldHandler button8; - GuiButtonWorldHandler button9; - GuiButtonWorldHandler button10; + GuiButtonBase button1; + GuiButtonBase button2; + GuiButtonBase button3; + GuiButtonBase button4; + GuiButtonBase button5; + GuiButtonBase button6; + GuiButtonBase button7; + GuiButtonItem button8; + GuiButtonItem button9; + GuiButtonItem button10; GuiButtonItem button11; GuiButtonItem button12; - GuiButtonItem button13; + GuiButtonBase button13; GuiButtonItem button14; GuiButtonItem button15; - GuiButtonWorldHandler button16; + GuiButtonItem button16; GuiButtonItem button17; GuiButtonItem button18; - GuiButtonItem button19; + GuiButtonBase button19; GuiButtonItem button20; GuiButtonItem button21; - GuiButtonWorldHandler button22; + GuiButtonItem button22; GuiButtonItem button23; GuiButtonItem button24; - GuiButtonItem button25; - GuiButtonItem button26; - GuiButtonItem button27; - GuiButtonWorldHandler button28; + GuiButtonBase button25; - 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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(button7 = new GuiButtonWorldHandler(12, x, y, 114, 20, I18n.format("gui.worldhandler.entities.summon.start"))); - container.add(button8 = new GuiButtonWorldHandler(3, x, y + 24, 114, 20, I18n.format("gui.worldhandler.entities.summon.potion_effects"))); - container.add(button9 = new GuiButtonWorldHandler(4, x, y + 48, 114, 20, I18n.format("gui.worldhandler.entities.summon.attributes"))); - container.add(button10 = new GuiButtonWorldHandler(5, x, y + 72, 114, 20, I18n.format("gui.worldhandler.entities.summon.equipment"))); + container.add(button4 = new GuiButtonBase(x, y, 114, 20, I18n.format("gui.worldhandler.entities.summon.start"), () -> + { + this.page = "main"; + container.initGui(); + })); + container.add(button5 = new GuiButtonBase(x, y + 24, 114, 20, I18n.format("gui.worldhandler.entities.summon.potion_effects"), () -> + { + this.page = "potionEffects"; + container.initGui(); + })); + container.add(button6 = new GuiButtonBase(x, y + 48, 114, 20, I18n.format("gui.worldhandler.entities.summon.attributes"), () -> + { + this.page = "attributes"; + container.initGui(); + })); + container.add(button7 = new GuiButtonBase(x, y + 72, 114, 20, I18n.format("gui.worldhandler.entities.summon.equipment"), () -> + { + this.page = "equipment"; + container.initGui(); + })); if(this.page.equals("main")) { - button7.enabled = false; + button4.enabled = false; + + container.add(this.mobField); + container.add(this.customNameField); + container.add(this.passengerField); if(!this.builderSummon.needsCommandBlock() && !this.builderSummon.getCustomName().isSpecial()) { - container.add(button5 = new GuiButtonWorldHandler(9, x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.title.entities.summon"))); + container.add(button3 = new GuiButtonBase(x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.title.entities.summon"), this::send)); } else { - container.add(button5 = new GuiButtonWorldHandler(9, x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.actions.place_command_block"))); + container.add(button3 = new GuiButtonBase(x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.actions.place_command_block"), this::send)); } - button5.enabled = EntityList.isRegistered(this.builderSummon.getEntity()); + button3.enabled = ForgeRegistries.ENTITIES.containsKey(this.builderSummon.getEntity()); } else if(this.page.equals("potionEffects")) { - button8.enabled = false; + button5.enabled = false; - container.add(button3 = new GuiButtonWorldHandler(14, x + 118, y + 72, 56, 20, "<")); - container.add(button4 = new GuiButtonWorldHandler(15, x + 118 + 60, y + 72, 55, 20, ">")); + container.add(button1 = new GuiButtonBase(x + 118, y + 72, 56, 20, "<", () -> + { + this.potionPage--; + container.initGui(); + })); + container.add(button2 = new GuiButtonBase(x + 118 + 60, y + 72, 55, 20, ">", () -> + { + this.potionPage++; + container.initGui(); + })); int count = 0; for(ResourceLocation location : this.getSortedPotionList()) { - Potion potion = Potion.REGISTRY.getObject(location); + Potion potion = ForgeRegistries.POTIONS.getValue(location); if(!potion.equals(MobEffects.INSTANT_DAMAGE) && !potion.equals(MobEffects.INSTANT_HEALTH)) { if(this.potionPage == 0) { - button3.enabled = false; + button1.enabled = false; } - - if(this.potionPage == Potion.REGISTRY.getKeys().size() - 3) + + if(this.potionPage == ForgeRegistries.POTIONS.getKeys().size() - 3) { - button4.enabled = false; + button2.enabled = false; } if(count == this.potionPage) { - container.add(new GuiSlider(this, container, "amplifier" + potion.getRegistryName(), x + 118, y, 114, 20, I18n.format(potion.getName()), 0, ConfigSliders.getMaxSummonPotionAmplifier(), 0, new SimpleResponder(value -> + container.add(new GuiSlider(x + 118, y, 114, 20, 0, Config.getSliders().getMaxSummonPotionAmplifier(), 0, container, new LogicSliderSimple("amplifier" + potion.getRegistryName(), I18n.format(potion.getName()), value -> { this.builderSummon.setAmplifier(potion, value.byteValue()); }))); - container.add(new GuiSlider(this, container, "duration" + potion.getRegistryName(), x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.potion.time.minutes"), 0, ConfigSliders.getMaxSummonPotionMinutes(), 0, new SimpleResponder(value -> + container.add(new GuiSlider(x + 118, y + 24, 114, 20, 0, Config.getSliders().getMaxSummonPotionMinutes(), 0, container, new LogicSliderSimple("duration" + potion.getRegistryName(), I18n.format("gui.worldhandler.potion.time.minutes"), value -> { this.builderSummon.setMinutes(potion, value); }))); - container.add(new GuiButtonWorldHandler(54, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.potions.effect.particles", this.builderSummon.getShowParticles(potion) ? I18n.format("gui.worldhandler.generic.on") : I18n.format("gui.worldhandler.generic.off")))); + container.add(new GuiButtonBase(x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.potions.effect.particles", this.builderSummon.getShowParticles(potion) ? I18n.format("gui.worldhandler.generic.on") : I18n.format("gui.worldhandler.generic.off")), () -> + { + this.builderSummon.setShowParticles(potion, !this.builderSummon.getShowParticles(potion)); + container.initGui(); + })); break; } @@ -260,316 +307,275 @@ public class ContentSummon extends Content } else if(this.page.equals("attributes")) { - button9.enabled = false; + button6.enabled = false; } else if(this.page.equals("equipment")) { - container.add(button3 = new GuiButtonWorldHandler(16, x + 118, y + 72, 56, 20, "<")); - container.add(button4 = new GuiButtonWorldHandler(17, x + 118 + 60, y + 72, 54, 20, ">")); + container.add(button1 = new GuiButtonBase(x + 118, y + 72, 56, 20, "<", () -> + { + this.equipmentPage--; + container.initGui(); + })); + container.add(button2 = new GuiButtonBase(x + 118 + 60, y + 72, 54, 20, ">", () -> + { + this.equipmentPage++; + container.initGui(); + })); if(this.equipmentPage == 0) { - button3.enabled = false; + button1.enabled = false; - container.add(button11 = new GuiButtonItem(18, x + 118, y, 18, 20, Items.LEATHER_HELMET)); - container.add(button12 = new GuiButtonItem(19, x + 118 + 20 - 1, y, 18, 20, Items.IRON_HELMET)); - container.add(button13 = new GuiButtonItem(20, x + 118 + 20 * 2 - 2, y, 18, 20, Items.CHAINMAIL_HELMET)); - container.add(button14 = new GuiButtonItem(21, x + 118 + 20 * 3 - 3, y, 18, 20, Items.GOLDEN_HELMET)); - container.add(button15 = new GuiButtonItem(22, x + 118 + 20 * 4 - 4, y, 18, 20, Items.DIAMOND_HELMET)); - container.add(button16 = new GuiButtonWorldHandler(23, x + 118 + 20 * 5 - 5, y, 20, 20, null)); + container.add(button8 = new GuiButtonItem(x + 118, y, 18, 20, Items.LEATHER_HELMET, () -> + { + this.builderSummon.setArmorItem(3, Items.LEATHER_HELMET); + container.initGui(); + })); + container.add(button9 = new GuiButtonItem(x + 118 + 20 - 1, y, 18, 20, Items.IRON_HELMET, () -> + { + this.builderSummon.setArmorItem(3, Items.IRON_HELMET); + container.initGui(); + })); + container.add(button10 = new GuiButtonItem(x + 118 + 20 * 2 - 2, y, 18, 20, Items.CHAINMAIL_HELMET, () -> + { + this.builderSummon.setArmorItem(3, Items.CHAINMAIL_HELMET); + container.initGui(); + })); + container.add(button11 = new GuiButtonItem(x + 118 + 20 * 3 - 3, y, 18, 20, Items.GOLDEN_HELMET, () -> + { + this.builderSummon.setArmorItem(3, Items.GOLDEN_HELMET); + container.initGui(); + })); + container.add(button12 = new GuiButtonItem(x + 118 + 20 * 4 - 4, y, 18, 20, Items.DIAMOND_HELMET, () -> + { + this.builderSummon.setArmorItem(3, Items.DIAMOND_HELMET); + container.initGui(); + })); + container.add(button13 = new GuiButtonBase(x + 118 + 20 * 5 - 5, y, 20, 20, null, () -> + { + this.builderSummon.setArmorItem(3, Blocks.AIR); + container.initGui(); + })); - container.add(button17 = new GuiButtonItem(24, x + 118, y + 24, 18, 20, Items.LEATHER_CHESTPLATE)); - container.add(button18 = new GuiButtonItem(25, x + 118 + 20 - 1, y + 24, 18, 20, Items.IRON_CHESTPLATE)); - container.add(button19 = new GuiButtonItem(26, x + 118 + 20 * 2 - 2, y + 24, 18, 20, Items.CHAINMAIL_CHESTPLATE)); - container.add(button20 = new GuiButtonItem(27, x + 118 + 20 * 3 - 3, y + 24, 18, 20, Items.GOLDEN_CHESTPLATE)); - container.add(button21 = new GuiButtonItem(28, x + 118 + 20 * 4 - 4, y + 24, 18, 20, Items.DIAMOND_CHESTPLATE)); - container.add(button22 = new GuiButtonWorldHandler(29, x + 118 + 20 * 5 - 5, y + 24, 20, 20, null)); + container.add(button14 = new GuiButtonItem(x + 118, y + 24, 18, 20, Items.LEATHER_CHESTPLATE, () -> + { + this.builderSummon.setArmorItem(2, Items.LEATHER_CHESTPLATE); + container.initGui(); + })); + container.add(button15 = new GuiButtonItem(x + 118 + 20 - 1, y + 24, 18, 20, Items.IRON_CHESTPLATE, () -> + { + this.builderSummon.setArmorItem(2, Items.IRON_CHESTPLATE); + container.initGui(); + })); + container.add(button16 = new GuiButtonItem(x + 118 + 20 * 2 - 2, y + 24, 18, 20, Items.CHAINMAIL_CHESTPLATE, () -> + { + this.builderSummon.setArmorItem(2, Items.CHAINMAIL_CHESTPLATE); + container.initGui(); + })); + container.add(button17 = new GuiButtonItem(x + 118 + 20 * 3 - 3, y + 24, 18, 20, Items.GOLDEN_CHESTPLATE, () -> + { + this.builderSummon.setArmorItem(2, Items.GOLDEN_CHESTPLATE); + container.initGui(); + })); + container.add(button18 = new GuiButtonItem(x + 118 + 20 * 4 - 4, y + 24, 18, 20, Items.DIAMOND_CHESTPLATE, () -> + { + this.builderSummon.setArmorItem(2, Items.DIAMOND_CHESTPLATE); + container.initGui(); + })); + container.add(button19 = new GuiButtonBase(x + 118 + 20 * 5 - 5, y + 24, 20, 20, null, () -> + { + this.builderSummon.setArmorItem(2, Blocks.AIR); + container.initGui(); + })); - container.add(button23 = new GuiButtonItem(30, x + 118, y + 48, 18, 20, Items.LEATHER_LEGGINGS)); - container.add(button24 = new GuiButtonItem(31, x + 118 + 20 - 1, y + 48, 18, 20, Items.IRON_LEGGINGS)); - container.add(button25 = new GuiButtonItem(32, x + 118 + 20 * 2 - 2, y + 48, 18, 20, Items.CHAINMAIL_LEGGINGS)); - container.add(button26 = new GuiButtonItem(33, x + 118 + 20 * 3 - 3, y + 48, 18, 20, Items.GOLDEN_LEGGINGS)); - container.add(button27 = new GuiButtonItem(34, x + 118 + 20 * 4 - 4, y + 48, 18, 20, Items.DIAMOND_LEGGINGS)); - container.add(button28 = new GuiButtonWorldHandler(35, x + 118 + 20 * 5 - 5, y + 48, 20, 20, null)); + container.add(button20 = new GuiButtonItem(x + 118, y + 48, 18, 20, Items.LEATHER_LEGGINGS, () -> + { + this.builderSummon.setArmorItem(1, Items.LEATHER_LEGGINGS); + container.initGui(); + })); + container.add(button21 = new GuiButtonItem(x + 118 + 20 - 1, y + 48, 18, 20, Items.IRON_LEGGINGS, () -> + { + this.builderSummon.setArmorItem(1, Items.IRON_LEGGINGS); + container.initGui(); + })); + container.add(button22 = new GuiButtonItem(x + 118 + 20 * 2 - 2, y + 48, 18, 20, Items.CHAINMAIL_LEGGINGS, () -> + { + this.builderSummon.setArmorItem(1, Items.CHAINMAIL_LEGGINGS); + container.initGui(); + })); + container.add(button23 = new GuiButtonItem(x + 118 + 20 * 3 - 3, y + 48, 18, 20, Items.GOLDEN_LEGGINGS, () -> + { + this.builderSummon.setArmorItem(1, Items.GOLDEN_LEGGINGS); + container.initGui(); + })); + container.add(button24 = new GuiButtonItem(x + 118 + 20 * 4 - 4, y + 48, 18, 20, Items.DIAMOND_LEGGINGS, () -> + { + this.builderSummon.setArmorItem(1, Items.DIAMOND_LEGGINGS); + container.initGui(); + })); + container.add(button25 = new GuiButtonBase(x + 118 + 20 * 5 - 5, y + 48, 20, 20, null, () -> + { + this.builderSummon.setArmorItem(1, Blocks.AIR); + container.initGui(); + })); - button11.enabled = !this.builderSummon.getArmorItem(3).equals(Items.LEATHER_HELMET.getRegistryName()); - button12.enabled = !this.builderSummon.getArmorItem(3).equals(Items.IRON_HELMET.getRegistryName()); - button13.enabled = !this.builderSummon.getArmorItem(3).equals(Items.CHAINMAIL_HELMET.getRegistryName()); - button14.enabled = !this.builderSummon.getArmorItem(3).equals(Items.GOLDEN_HELMET.getRegistryName()); - button15.enabled = !this.builderSummon.getArmorItem(3).equals(Items.DIAMOND_HELMET.getRegistryName()); - button16.enabled = !this.builderSummon.getArmorItem(3).equals(Blocks.AIR.getRegistryName()); + button8.enabled = !this.builderSummon.getArmorItem(3).equals(Items.LEATHER_HELMET.getRegistryName()); + button9.enabled = !this.builderSummon.getArmorItem(3).equals(Items.IRON_HELMET.getRegistryName()); + button10.enabled = !this.builderSummon.getArmorItem(3).equals(Items.CHAINMAIL_HELMET.getRegistryName()); + button11.enabled = !this.builderSummon.getArmorItem(3).equals(Items.GOLDEN_HELMET.getRegistryName()); + button12.enabled = !this.builderSummon.getArmorItem(3).equals(Items.DIAMOND_HELMET.getRegistryName()); + button13.enabled = !this.builderSummon.getArmorItem(3).equals(Blocks.AIR.getRegistryName()); - button17.enabled = !this.builderSummon.getArmorItem(2).equals(Items.LEATHER_CHESTPLATE.getRegistryName()); - button18.enabled = !this.builderSummon.getArmorItem(2).equals(Items.IRON_CHESTPLATE.getRegistryName()); - button19.enabled = !this.builderSummon.getArmorItem(2).equals(Items.CHAINMAIL_CHESTPLATE.getRegistryName()); - button20.enabled = !this.builderSummon.getArmorItem(2).equals(Items.GOLDEN_CHESTPLATE.getRegistryName()); - button21.enabled = !this.builderSummon.getArmorItem(2).equals(Items.DIAMOND_CHESTPLATE.getRegistryName()); - button22.enabled = !this.builderSummon.getArmorItem(2).equals(Blocks.AIR.getRegistryName()); + button14.enabled = !this.builderSummon.getArmorItem(2).equals(Items.LEATHER_CHESTPLATE.getRegistryName()); + button15.enabled = !this.builderSummon.getArmorItem(2).equals(Items.IRON_CHESTPLATE.getRegistryName()); + button16.enabled = !this.builderSummon.getArmorItem(2).equals(Items.CHAINMAIL_CHESTPLATE.getRegistryName()); + button17.enabled = !this.builderSummon.getArmorItem(2).equals(Items.GOLDEN_CHESTPLATE.getRegistryName()); + button18.enabled = !this.builderSummon.getArmorItem(2).equals(Items.DIAMOND_CHESTPLATE.getRegistryName()); + button19.enabled = !this.builderSummon.getArmorItem(2).equals(Blocks.AIR.getRegistryName()); - button23.enabled = !this.builderSummon.getArmorItem(1).equals(Items.LEATHER_LEGGINGS.getRegistryName()); - button24.enabled = !this.builderSummon.getArmorItem(1).equals(Items.IRON_LEGGINGS.getRegistryName()); - button25.enabled = !this.builderSummon.getArmorItem(1).equals(Items.CHAINMAIL_LEGGINGS.getRegistryName()); - button26.enabled = !this.builderSummon.getArmorItem(1).equals(Items.GOLDEN_LEGGINGS.getRegistryName()); - button27.enabled = !this.builderSummon.getArmorItem(1).equals(Items.DIAMOND_LEGGINGS.getRegistryName()); - button28.enabled = !this.builderSummon.getArmorItem(1).equals(Blocks.AIR.getRegistryName()); + button20.enabled = !this.builderSummon.getArmorItem(1).equals(Items.LEATHER_LEGGINGS.getRegistryName()); + button21.enabled = !this.builderSummon.getArmorItem(1).equals(Items.IRON_LEGGINGS.getRegistryName()); + button22.enabled = !this.builderSummon.getArmorItem(1).equals(Items.CHAINMAIL_LEGGINGS.getRegistryName()); + button23.enabled = !this.builderSummon.getArmorItem(1).equals(Items.GOLDEN_LEGGINGS.getRegistryName()); + button24.enabled = !this.builderSummon.getArmorItem(1).equals(Items.DIAMOND_LEGGINGS.getRegistryName()); + button25.enabled = !this.builderSummon.getArmorItem(1).equals(Blocks.AIR.getRegistryName()); } else if(this.equipmentPage == 1) { - button4.enabled = false; + button2.enabled = false; - container.add(button11 = new GuiButtonItem(36, x + 118, y, 18, 20, Items.LEATHER_BOOTS)); - container.add(button12 = new GuiButtonItem(37, x + 118 + 20 - 1, y, 18, 20, Items.IRON_BOOTS)); - container.add(button13 = new GuiButtonItem(38, x + 118 + 20 * 2 - 2, y, 18, 20, Items.CHAINMAIL_BOOTS)); - container.add(button14 = new GuiButtonItem(39, x + 118 + 20 * 3 - 3, y, 18, 20, Items.GOLDEN_BOOTS)); - container.add(button15 = new GuiButtonItem(40, x + 118 + 20 * 4 - 4, y, 18, 20, Items.DIAMOND_BOOTS)); - container.add(button16 = new GuiButtonWorldHandler(41, x + 118 + 20 * 5 - 5, y, 20, 20, null)); + container.add(button8 = new GuiButtonItem(x + 118, y, 18, 20, Items.LEATHER_BOOTS, () -> + { + this.builderSummon.setArmorItem(0, Items.LEATHER_BOOTS); + container.initGui(); + })); + container.add(button9 = new GuiButtonItem(x + 118 + 20 - 1, y, 18, 20, Items.IRON_BOOTS, () -> + { + this.builderSummon.setArmorItem(0, Items.IRON_BOOTS); + container.initGui(); + })); + container.add(button10 = new GuiButtonItem(x + 118 + 20 * 2 - 2, y, 18, 20, Items.CHAINMAIL_BOOTS, () -> + { + this.builderSummon.setArmorItem(0, Items.CHAINMAIL_BOOTS); + container.initGui(); + })); + container.add(button11 = new GuiButtonItem(x + 118 + 20 * 3 - 3, y, 18, 20, Items.GOLDEN_BOOTS, () -> + { + this.builderSummon.setArmorItem(0, Items.GOLDEN_BOOTS); + container.initGui(); + })); + container.add(button12 = new GuiButtonItem(x + 118 + 20 * 4 - 4, y, 18, 20, Items.DIAMOND_BOOTS, () -> + { + this.builderSummon.setArmorItem(0, Items.DIAMOND_BOOTS); + container.initGui(); + })); + container.add(button13 = new GuiButtonBase(x + 118 + 20 * 5 - 5, y, 20, 20, null, () -> + { + this.builderSummon.setArmorItem(0, Blocks.AIR); + container.initGui(); + })); - container.add(button17 = new GuiButtonItem(42, x + 118, y + 24, 18, 20, Items.WOODEN_SWORD)); - container.add(button18 = new GuiButtonItem(43, x + 118 + 20 - 1, y + 24, 18, 20, Items.STONE_SWORD)); - container.add(button19 = new GuiButtonItem(44, x + 118 + 20 * 2 - 2, y + 24, 18, 20, Items.IRON_SWORD)); - container.add(button20 = new GuiButtonItem(45, x + 118 + 20 * 3 - 3, y + 24, 18, 20, Items.GOLDEN_SWORD)); - container.add(button21 = new GuiButtonItem(46, x + 118 + 20 * 4 - 4, y + 24, 18, 20, Items.DIAMOND_SWORD)); - container.add(button22 = new GuiButtonWorldHandler(47, x + 118 + 20 * 5 - 5, y + 24, 20, 20, null)); + container.add(button14 = new GuiButtonItem(x + 118, y + 24, 18, 20, Items.WOODEN_SWORD, () -> + { + this.builderSummon.setHandItem(0, Items.WOODEN_SWORD); + container.initGui(); + })); + container.add(button15 = new GuiButtonItem(x + 118 + 20 - 1, y + 24, 18, 20, Items.STONE_SWORD, () -> + { + this.builderSummon.setHandItem(0, Items.STONE_SWORD); + container.initGui(); + })); + container.add(button16 = new GuiButtonItem(x + 118 + 20 * 2 - 2, y + 24, 18, 20, Items.IRON_SWORD, () -> + { + this.builderSummon.setHandItem(0, Items.IRON_SWORD); + container.initGui(); + })); + container.add(button17 = new GuiButtonItem(x + 118 + 20 * 3 - 3, y + 24, 18, 20, Items.GOLDEN_SWORD, () -> + { + this.builderSummon.setHandItem(0, Items.GOLDEN_SWORD); + container.initGui(); + })); + container.add(button18 = new GuiButtonItem(x + 118 + 20 * 4 - 4, y + 24, 18, 20, Items.DIAMOND_SWORD, () -> + { + this.builderSummon.setHandItem(0, Items.DIAMOND_SWORD); + container.initGui(); + })); + container.add(button19 = new GuiButtonBase(x + 118 + 20 * 5 - 5, y + 24, 20, 20, null, () -> + { + this.builderSummon.setHandItem(0, Blocks.AIR); + container.initGui(); + })); - container.add(button23 = new GuiButtonItem(48, x + 118, y + 48, 18, 20, Items.WOODEN_SWORD)); - container.add(button24 = new GuiButtonItem(49, x + 118 + 20 - 1, y + 48, 18, 20, Items.STONE_SWORD)); - container.add(button25 = new GuiButtonItem(50, x + 118 + 20 * 2 - 2, y + 48, 18, 20, Items.IRON_SWORD)); - container.add(button26 = new GuiButtonItem(51, x + 118 + 20 * 3 - 3, y + 48, 18, 20, Items.GOLDEN_SWORD)); - container.add(button27 = new GuiButtonItem(52, x + 118 + 20 * 4 - 4, y + 48, 18, 20, Items.DIAMOND_SWORD)); - container.add(button28 = new GuiButtonWorldHandler(53, x + 118 + 20 * 5 - 5, y + 48, 20, 20, null)); + container.add(button20 = new GuiButtonItem(x + 118, y + 48, 18, 20, Items.WOODEN_SWORD, () -> + { + this.builderSummon.setHandItem(1, Items.WOODEN_SWORD); + container.initGui(); + })); + container.add(button21 = new GuiButtonItem(x + 118 + 20 - 1, y + 48, 18, 20, Items.STONE_SWORD, () -> + { + this.builderSummon.setHandItem(1, Items.STONE_SWORD); + container.initGui(); + })); + container.add(button22 = new GuiButtonItem(x + 118 + 20 * 2 - 2, y + 48, 18, 20, Items.IRON_SWORD, () -> + { + this.builderSummon.setHandItem(1, Items.IRON_SWORD); + container.initGui(); + })); + container.add(button23 = new GuiButtonItem(x + 118 + 20 * 3 - 3, y + 48, 18, 20, Items.GOLDEN_SWORD, () -> + { + this.builderSummon.setHandItem(1, Items.GOLDEN_SWORD); + container.initGui(); + })); + container.add(button24 = new GuiButtonItem(x + 118 + 20 * 4 - 4, y + 48, 18, 20, Items.DIAMOND_SWORD, () -> + { + this.builderSummon.setHandItem(1, Items.DIAMOND_SWORD); + container.initGui(); + })); + container.add(button25 = new GuiButtonBase(x + 118 + 20 * 5 - 5, y + 48, 20, 20, null, () -> + { + this.builderSummon.setHandItem(1, Blocks.AIR); + container.initGui(); + })); - button11.enabled = !this.builderSummon.getArmorItem(0).equals(Items.LEATHER_BOOTS.getRegistryName()); - button12.enabled = !this.builderSummon.getArmorItem(0).equals(Items.IRON_BOOTS.getRegistryName()); - button13.enabled = !this.builderSummon.getArmorItem(0).equals(Items.CHAINMAIL_BOOTS.getRegistryName()); - button14.enabled = !this.builderSummon.getArmorItem(0).equals(Items.GOLDEN_BOOTS.getRegistryName()); - button15.enabled = !this.builderSummon.getArmorItem(0).equals(Items.DIAMOND_BOOTS.getRegistryName()); - button16.enabled = !this.builderSummon.getArmorItem(0).equals(Blocks.AIR.getRegistryName()); + button8.enabled = !this.builderSummon.getArmorItem(0).equals(Items.LEATHER_BOOTS.getRegistryName()); + button9.enabled = !this.builderSummon.getArmorItem(0).equals(Items.IRON_BOOTS.getRegistryName()); + button10.enabled = !this.builderSummon.getArmorItem(0).equals(Items.CHAINMAIL_BOOTS.getRegistryName()); + button11.enabled = !this.builderSummon.getArmorItem(0).equals(Items.GOLDEN_BOOTS.getRegistryName()); + button12.enabled = !this.builderSummon.getArmorItem(0).equals(Items.DIAMOND_BOOTS.getRegistryName()); + button13.enabled = !this.builderSummon.getArmorItem(0).equals(Blocks.AIR.getRegistryName()); - button17.enabled = !this.builderSummon.getHandItem(0).equals(Items.WOODEN_SWORD.getRegistryName()); - button18.enabled = !this.builderSummon.getHandItem(0).equals(Items.STONE_SWORD.getRegistryName()); - button19.enabled = !this.builderSummon.getHandItem(0).equals(Items.IRON_SWORD.getRegistryName()); - button20.enabled = !this.builderSummon.getHandItem(0).equals(Items.GOLDEN_SWORD.getRegistryName()); - button21.enabled = !this.builderSummon.getHandItem(0).equals(Items.DIAMOND_SWORD.getRegistryName()); - button22.enabled = !this.builderSummon.getHandItem(0).equals(Blocks.AIR.getRegistryName()); + button14.enabled = !this.builderSummon.getHandItem(0).equals(Items.WOODEN_SWORD.getRegistryName()); + button15.enabled = !this.builderSummon.getHandItem(0).equals(Items.STONE_SWORD.getRegistryName()); + button16.enabled = !this.builderSummon.getHandItem(0).equals(Items.IRON_SWORD.getRegistryName()); + button17.enabled = !this.builderSummon.getHandItem(0).equals(Items.GOLDEN_SWORD.getRegistryName()); + button18.enabled = !this.builderSummon.getHandItem(0).equals(Items.DIAMOND_SWORD.getRegistryName()); + button19.enabled = !this.builderSummon.getHandItem(0).equals(Blocks.AIR.getRegistryName()); - button23.enabled = !this.builderSummon.getHandItem(1).equals(Items.WOODEN_SWORD.getRegistryName()); - button24.enabled = !this.builderSummon.getHandItem(1).equals(Items.STONE_SWORD.getRegistryName()); - button25.enabled = !this.builderSummon.getHandItem(1).equals(Items.IRON_SWORD.getRegistryName()); - button26.enabled = !this.builderSummon.getHandItem(1).equals(Items.GOLDEN_SWORD.getRegistryName()); - button27.enabled = !this.builderSummon.getHandItem(1).equals(Items.DIAMOND_SWORD.getRegistryName()); - button28.enabled = !this.builderSummon.getHandItem(1).equals(Blocks.AIR.getRegistryName()); + button20.enabled = !this.builderSummon.getHandItem(1).equals(Items.WOODEN_SWORD.getRegistryName()); + button21.enabled = !this.builderSummon.getHandItem(1).equals(Items.STONE_SWORD.getRegistryName()); + button22.enabled = !this.builderSummon.getHandItem(1).equals(Items.IRON_SWORD.getRegistryName()); + button23.enabled = !this.builderSummon.getHandItem(1).equals(Items.GOLDEN_SWORD.getRegistryName()); + button24.enabled = !this.builderSummon.getHandItem(1).equals(Items.DIAMOND_SWORD.getRegistryName()); + button25.enabled = !this.builderSummon.getHandItem(1).equals(Blocks.AIR.getRegistryName()); } - button10.enabled = false; + button7.enabled = false; } } - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception + private void send() { - switch(button.id) + CommandHelper.sendCommand(this.builderSummon, this.builderSummon.getCustomName().isSpecial()); + } + + @Override + public void tick(Container container) + { + if(this.page.equals("main")) { - case 3: - this.page = "potionEffects"; - container.initGui(); - break; - case 4: - this.page = "attributes"; - container.initGui(); - break; - case 5: - this.page = "equipment"; - container.initGui(); - break; - case 9: - WorldHandler.sendCommand(this.builderSummon, this.builderSummon.getCustomName().isSpecial()); - break; - case 12: - this.page = "main"; - container.initGui(); - break; - case 14: - this.potionPage--; - container.initGui(); - break; - case 15: - this.potionPage++; - container.initGui(); - break; - case 16: - this.equipmentPage--; - container.initGui(); - break; - case 17: - this.equipmentPage++; - container.initGui(); - break; - case 18: - this.builderSummon.setArmorItem(3, Items.LEATHER_HELMET); - container.initGui(); - break; - case 19: - this.builderSummon.setArmorItem(3, Items.IRON_HELMET); - container.initGui(); - break; - case 20: - this.builderSummon.setArmorItem(3, Items.CHAINMAIL_HELMET); - container.initGui(); - break; - case 21: - this.builderSummon.setArmorItem(3, Items.GOLDEN_HELMET); - container.initGui(); - break; - case 22: - this.builderSummon.setArmorItem(3, Items.DIAMOND_HELMET); - container.initGui(); - break; - case 23: - this.builderSummon.setArmorItem(3, Blocks.AIR); - container.initGui(); - break; - case 24: - this.builderSummon.setArmorItem(2, Items.LEATHER_CHESTPLATE); - container.initGui(); - break; - case 25: - this.builderSummon.setArmorItem(2, Items.IRON_CHESTPLATE); - container.initGui(); - break; - case 26: - this.builderSummon.setArmorItem(2, Items.CHAINMAIL_CHESTPLATE); - container.initGui(); - break; - case 27: - this.builderSummon.setArmorItem(2, Items.GOLDEN_CHESTPLATE); - container.initGui(); - break; - case 28: - this.builderSummon.setArmorItem(2, Items.DIAMOND_CHESTPLATE); - container.initGui(); - break; - case 29: - this.builderSummon.setArmorItem(2, Blocks.AIR); - container.initGui(); - break; - case 30: - this.builderSummon.setArmorItem(1, Items.LEATHER_LEGGINGS); - container.initGui(); - break; - case 31: - this.builderSummon.setArmorItem(1, Items.IRON_LEGGINGS); - container.initGui(); - break; - case 32: - this.builderSummon.setArmorItem(1, Items.CHAINMAIL_LEGGINGS); - container.initGui(); - break; - case 33: - this.builderSummon.setArmorItem(1, Items.GOLDEN_LEGGINGS); - container.initGui(); - break; - case 34: - this.builderSummon.setArmorItem(1, Items.DIAMOND_LEGGINGS); - container.initGui(); - break; - case 35: - this.builderSummon.setArmorItem(1, Blocks.AIR); - container.initGui(); - break; - case 36: - this.builderSummon.setArmorItem(0, Items.LEATHER_BOOTS); - container.initGui(); - break; - case 37: - this.builderSummon.setArmorItem(0, Items.IRON_BOOTS); - container.initGui(); - break; - case 38: - this.builderSummon.setArmorItem(0, Items.CHAINMAIL_BOOTS); - container.initGui(); - break; - case 39: - this.builderSummon.setArmorItem(0, Items.GOLDEN_BOOTS); - container.initGui(); - break; - case 40: - this.builderSummon.setArmorItem(0, Items.DIAMOND_BOOTS); - container.initGui(); - break; - case 41: - this.builderSummon.setArmorItem(0, Blocks.AIR); - container.initGui(); - break; - case 42: - this.builderSummon.setHandItem(0, Items.WOODEN_SWORD); - container.initGui(); - break; - case 43: - this.builderSummon.setHandItem(0, Items.STONE_SWORD); - container.initGui(); - break; - case 44: - this.builderSummon.setHandItem(0, Items.IRON_SWORD); - container.initGui(); - break; - case 45: - this.builderSummon.setHandItem(0, Items.GOLDEN_SWORD); - container.initGui(); - break; - case 46: - this.builderSummon.setHandItem(0, Items.DIAMOND_SWORD); - container.initGui(); - break; - case 47: - this.builderSummon.setHandItem(0, Blocks.AIR); - container.initGui(); - break; - case 48: - this.builderSummon.setHandItem(1, Items.WOODEN_SWORD); - container.initGui(); - break; - case 49: - this.builderSummon.setHandItem(1, Items.STONE_SWORD); - container.initGui(); - break; - case 50: - this.builderSummon.setHandItem(1, Items.IRON_SWORD); - container.initGui(); - break; - case 51: - this.builderSummon.setHandItem(1, Items.GOLDEN_SWORD); - container.initGui(); - break; - case 52: - this.builderSummon.setHandItem(1, Items.DIAMOND_SWORD); - container.initGui(); - break; - case 53: - this.builderSummon.setHandItem(1, Blocks.AIR); - container.initGui(); - break; - case 54: - int count = 0; - - for(ResourceLocation value : this.getSortedPotionList()) - { - Potion potion = Potion.getPotionFromResourceLocation(value.toString()); - - if(!potion.equals(MobEffects.INSTANT_DAMAGE) && !potion.equals(MobEffects.INSTANT_HEALTH)) - { - if(count == this.potionPage) - { - this.builderSummon.setShowParticles(potion, !this.builderSummon.getShowParticles(potion)); - break; - } - - count++; - } - } - container.initGui(); - break; - default: - break; + this.mobField.tick(); + this.customNameField.tick(); + this.passengerField.tick(); } } @@ -578,14 +584,14 @@ public class ContentSummon extends Content { if(this.page.equals("main")) { - this.mobField.drawTextBox(); - this.customNameField.drawTextBox(); - this.passengerField.drawTextBox(); + this.mobField.drawTextField(mouseX, mouseY, partialTicks); + this.customNameField.drawTextField(mouseX, mouseY, partialTicks); + this.passengerField.drawTextField(mouseX, mouseY, partialTicks); } else if(this.page.equals("equipment")) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("textures/gui/container/beacon.png")); + Minecraft.getInstance().getTextureManager().bindTexture(new ResourceLocation("textures/gui/container/beacon.png")); for(int row = 0; row < 3; row++) { @@ -594,46 +600,10 @@ public class ContentSummon extends Content } } - @Override - public void keyTyped(Container container, char charTyped, int keyCode) - { - if(this.mobField.textboxKeyTyped(charTyped, keyCode)) - { - this.mob = this.mobField.getText(); - this.builderSummon.setEntity(this.mob); - container.initButtons(); - } - - if(this.customNameField.textboxKeyTyped(charTyped, keyCode)) - { - this.name = this.customNameField.getText(); - this.builderSummon.setCustomName(this.name); - container.initButtons(); - } - - if(this.passengerField.textboxKeyTyped(charTyped, keyCode)) - { - this.passenger = this.passengerField.getText(); - this.builderSummon.setPassenger(this.passenger); - container.initButtons(); - } - } - - @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - if(this.page.equals("main")) - { - this.mobField.mouseClicked(mouseX, mouseY, mouseButton); - this.customNameField.mouseClicked(mouseX, mouseY, mouseButton); - this.passengerField.mouseClicked(mouseX, mouseY, mouseButton); - } - } - private List getSortedPotionList() { - List potions = new ArrayList(Potion.REGISTRY.getKeys()); - potions.sort((a, b) -> I18n.format(Potion.REGISTRY.getObject(a).getName()).compareTo(I18n.format(Potion.REGISTRY.getObject(b).getName()))); + List potions = new ArrayList(ForgeRegistries.POTIONS.getKeys()); + potions.sort((a, b) -> I18n.format(ForgeRegistries.POTIONS.getValue(a).getName()).compareTo(I18n.format(ForgeRegistries.POTIONS.getValue(b).getName()))); return potions; } @@ -663,7 +633,7 @@ public class ContentSummon extends Content if(this.page.equals("potionEffects")) { - headline[1] = (this.potionPage + 1) + "/" + (Potion.REGISTRY.getKeys().size() - 2); + headline[1] = (this.potionPage + 1) + "/" + (ForgeRegistries.POTIONS.getKeys().size() - 2); } else if(this.page.equals("equipment")) { diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentWorldInfo.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentWorldInfo.java index c3938d6..2d70946 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentWorldInfo.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentWorldInfo.java @@ -3,22 +3,23 @@ package exopandora.worldhandler.gui.content.impl; import java.util.function.Function; import exopandora.worldhandler.format.TextFormatting; -import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; +import exopandora.worldhandler.gui.button.GuiButtonBase; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; 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.helper.ActionHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.resources.I18n; import net.minecraft.world.World; +import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.storage.WorldInfo; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ContentWorldInfo extends Content { private String selectedMain = "start"; @@ -37,12 +38,7 @@ public class ContentWorldInfo extends Content @Override public void initGui(Container container, int x, int y) { - World world = Minecraft.getMinecraft().world; - - if(Minecraft.getMinecraft().getIntegratedServer() != null) - { - world = Minecraft.getMinecraft().getIntegratedServer().getEntityWorld(); - } + World world = this.getWorld(); this.posXField = new GuiTextFieldTooltip(x + 118, y + 12, 114, 20); this.posXField.setText(I18n.format("gui.worldhandler.world_info.start.spawn") + " X: " + this.getWorldInfo(WorldInfo::getSpawnX, world)); @@ -53,17 +49,16 @@ public class ContentWorldInfo extends Content this.posZField = new GuiTextFieldTooltip(x + 118, y + 60, 114, 20); this.posZField.setText(I18n.format("gui.worldhandler.world_info.start.spawn") + " Z: " + this.getWorldInfo(WorldInfo::getSpawnZ, world)); - this.worldField = new GuiTextFieldTooltip(x + 118, y + 12, 114, 20); + this.worldField = new GuiTextFieldTooltip(x + 118, y, 114, 20); this.worldField.setText(I18n.format("gui.worldhandler.world_info.world.name") + ": " + this.getWorldInfo(WorldInfo::getWorldName, world)); - this.terrainField = new GuiTextFieldTooltip(x + 118, y + 36, 114, 20); + this.terrainField = new GuiTextFieldTooltip(x + 118, y + 24, 114, 20); this.terrainField.setText(I18n.format("gui.worldhandler.world_info.world.world_type") + ": " + this.getWorldInfo(info -> I18n.format(info.getTerrainType().getTranslationKey()), world)); - this.seedField = new GuiTextFieldTooltip(x + 118, y + 60, 114, 20); - this.seedField.setText(I18n.format("gui.worldhandler.world_info.world.seed") + ": " + (Minecraft.getMinecraft().getIntegratedServer() != null ? world.getWorldInfo().getSeed() : I18n.format("gui.worldhandler.world_info.n_a"))); + this.seedField = new GuiTextFieldTooltip(x + 118, y + 48, 114, 20); + this.seedField.setText(I18n.format("gui.worldhandler.world_info.world.seed") + ": " + this.getSeed(world)); this.seedField.setValidator(string -> string.equals(this.seedField.getText())); this.seedField.setCursorPositionZero(); - this.updateCursorPosition(); this.currentTimeField = new GuiTextFieldTooltip(x + 118, y + 24, 114, 20); this.updateCurrentTime(); @@ -75,16 +70,28 @@ public class ContentWorldInfo extends Content @Override public void initButtons(Container container, int x, int y) { - GuiButtonWorldHandler start; - GuiButtonWorldHandler world; - GuiButtonWorldHandler stats; + GuiButtonBase start; + GuiButtonBase world; + GuiButtonBase stats; - 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 GuiButtonBase(x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back"), () -> ActionHelper.back(this))); + container.add(new GuiButtonBase(x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame"), ActionHelper::backToGame)); - container.add(start = new GuiButtonWorldHandler(2, x, y + 12, 114, 20, I18n.format("gui.worldhandler.world_info.start"))); - container.add(world = new GuiButtonWorldHandler(3, x, y + 36, 114, 20, I18n.format("gui.worldhandler.world_info.world"))); - container.add(stats = new GuiButtonWorldHandler(4, x, y + 60, 114, 20, I18n.format("gui.worldhandler.world_info.statistics"))); + container.add(start = new GuiButtonBase(x, y + 12, 114, 20, I18n.format("gui.worldhandler.world_info.start"), () -> + { + this.selectedMain = "start"; + container.initGui(); + })); + container.add(world = new GuiButtonBase(x, y + 36, 114, 20, I18n.format("gui.worldhandler.world_info.world"), () -> + { + this.selectedMain = "world"; + container.initGui(); + })); + container.add(stats = new GuiButtonBase(x, y + 60, 114, 20, I18n.format("gui.worldhandler.world_info.statistics"), () -> + { + this.selectedMain = "stats"; + container.initGui(); + })); if(this.selectedMain.equals("start")) { @@ -92,7 +99,15 @@ public class ContentWorldInfo extends Content } else if(this.selectedMain.equals("world")) { + GuiButtonBase seed; + world.enabled = false; + container.add(seed = new GuiButtonBase(x + 118, y + 72, 114, 20, I18n.format("gui.worldhandler.world_info.world.copy_seed"), () -> + { + Minecraft.getInstance().keyboardListener.setClipboardString(this.getSeed(this.getWorld())); + })); + + seed.enabled = Minecraft.getInstance().getIntegratedServer() != null; } else if(this.selectedMain.equals("stats")) { @@ -101,32 +116,11 @@ public class ContentWorldInfo extends Content } @Override - public void updateScreen(Container container) + public void tick(Container container) { this.updateCurrentTime(); this.updateTotalTime(); - } - - @Override - public void actionPerformed(Container container, GuiButton button) throws Exception - { - switch(button.id) - { - case 2: - this.selectedMain = "start"; - container.initGui(); - break; - case 3: - this.selectedMain = "world"; - container.initGui(); - break; - case 4: - this.selectedMain = "stats"; - container.initGui(); - break; - default: - break; - } + this.seedField.tick(); } @Override @@ -134,51 +128,31 @@ public class ContentWorldInfo extends Content { if(this.selectedMain.equals("start")) { - this.posXField.drawTextBox(); - this.posYField.drawTextBox(); - this.posZField.drawTextBox(); + this.posXField.drawTextField(mouseX, mouseY, partialTicks); + this.posYField.drawTextField(mouseX, mouseY, partialTicks); + this.posZField.drawTextField(mouseX, mouseY, partialTicks); } else if(this.selectedMain.equals("world")) { - this.worldField.drawTextBox(); - this.terrainField.drawTextBox(); - this.seedField.drawTextBox(); + this.worldField.drawTextField(mouseX, mouseY, partialTicks); + this.terrainField.drawTextField(mouseX, mouseY, partialTicks); + this.seedField.drawTextField(mouseX, mouseY, partialTicks); } else if(this.selectedMain.equals("stats")) { - this.totalTimeField.drawTextBox(); - this.currentTimeField.drawTextBox(); + this.totalTimeField.drawTextField(mouseX, mouseY, partialTicks); + this.currentTimeField.drawTextField(mouseX, mouseY, partialTicks); } } private void updateCurrentTime() { - this.currentTimeField.setText(I18n.format("gui.worldhandler.world_info.statistics.world_time") + ": " + TextFormatting.getWorldTime(Minecraft.getMinecraft().world.getWorldInfo().getWorldTime())); + this.currentTimeField.setText(I18n.format("gui.worldhandler.world_info.statistics.world_time") + ": " + TextFormatting.formatWorldTime(Minecraft.getInstance().world.getWorldInfo().getDayTime())); } private void updateTotalTime() { - this.totalTimeField.setText(I18n.format("gui.worldhandler.world_info.statistics.played") + ": " + TextFormatting.getTotalTimePlayed(Minecraft.getMinecraft().world.getWorldInfo().getWorldTotalTime())); - } - - @Override - public void keyTyped(Container container, char typedChar, int keyCode) - { - if(this.selectedMain.equals("world")) - { - this.seedField.textboxKeyTyped(typedChar, keyCode); - this.updateCursorPosition(); - } - } - - @Override - public void mouseClicked(int mouseX, int mouseY, int mouseButton) - { - if(this.selectedMain.equals("world")) - { - this.seedField.mouseClicked(mouseX, mouseY, mouseButton); - this.updateCursorPosition(); - } + this.totalTimeField.setText(I18n.format("gui.worldhandler.world_info.statistics.played") + ": " + TextFormatting.getTotalTimePlayed(Minecraft.getInstance().world.getWorldInfo().getGameTime())); } private String getWorldInfo(Function function, World world) @@ -191,14 +165,19 @@ public class ContentWorldInfo extends Content return I18n.format("gui.worldhandler.world_info.n_a"); } - private void updateCursorPosition() + private World getWorld() { - int length = I18n.format("gui.worldhandler.world_info.start.spawn").length(); - - if(this.seedField.getCursorPosition() < length + 2) + if(Minecraft.getInstance().getIntegratedServer() != null) { - this.seedField.setCursorPosition(length + 1); + return Minecraft.getInstance().getIntegratedServer().getWorld(DimensionType.OVERWORLD); } + + return Minecraft.getInstance().world; + } + + private String getSeed(World world) + { + return Minecraft.getInstance().getIntegratedServer() != null ? String.valueOf(world.getWorldInfo().getSeed()) : I18n.format("gui.worldhandler.world_info.n_a"); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/abstr/ContentChild.java b/src/main/java/exopandora/worldhandler/gui/content/impl/abstr/ContentChild.java index 56a0d8e..e7077f6 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/abstr/ContentChild.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/abstr/ContentChild.java @@ -3,10 +3,10 @@ package exopandora.worldhandler.gui.content.impl.abstr; import exopandora.worldhandler.gui.category.Category; import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Contents; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public abstract class ContentChild extends Content { protected Content parent; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/abstr/ContentScoreboard.java b/src/main/java/exopandora/worldhandler/gui/content/impl/abstr/ContentScoreboard.java index 6d12a48..3c54962 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/abstr/ContentScoreboard.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/abstr/ContentScoreboard.java @@ -5,14 +5,29 @@ import exopandora.worldhandler.gui.category.Category; import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.helper.ScoreboardHelper; import net.minecraft.client.resources.I18n; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public abstract class ContentScoreboard extends Content { protected static final ScoreboardHelper HELPER = new ScoreboardHelper(); - protected static String objective; + private static String objective; + + protected static boolean isObjectiveValid() + { + return ContentScoreboard.objective != null && ContentScoreboard.objective.length() > 0; + } + + protected static void setObjective(String objective) + { + ContentScoreboard.objective = objective; + } + + protected static String getObjective() + { + return ContentScoreboard.objective; + } @Override public Category getCategory() diff --git a/src/main/java/exopandora/worldhandler/gui/logic/ILogic.java b/src/main/java/exopandora/worldhandler/gui/logic/ILogic.java new file mode 100644 index 0000000..621567c --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/logic/ILogic.java @@ -0,0 +1,10 @@ +package exopandora.worldhandler.gui.logic; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public interface ILogic +{ + String getId(); +} diff --git a/src/main/java/exopandora/worldhandler/gui/logic/ILogicClickList.java b/src/main/java/exopandora/worldhandler/gui/logic/ILogicClickList.java new file mode 100644 index 0000000..e9a7856 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/logic/ILogicClickList.java @@ -0,0 +1,24 @@ +package exopandora.worldhandler.gui.logic; + +import java.util.List; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public interface ILogicClickList extends ILogic +{ + String translate(String key, int depth); + + default String buildTranslationKey(List keys, int depth) + { + return keys.get(depth); + } + + default String buildEventKey(List keys, int depth) + { + return String.join(".", keys); + } + + void onClick(String key, int depth); +} diff --git a/src/main/java/exopandora/worldhandler/gui/logic/ILogicColorMenu.java b/src/main/java/exopandora/worldhandler/gui/logic/ILogicColorMenu.java new file mode 100644 index 0000000..59ac1d8 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/logic/ILogicColorMenu.java @@ -0,0 +1,24 @@ +package exopandora.worldhandler.gui.logic; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public interface ILogicColorMenu extends ILogic +{ + default boolean validate(String text) + { + return text != null; + } + + default boolean doDrawButtons() + { + return true; + } + + @Override + default String getId() + { + return "color"; + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/logic/ILogicMapped.java b/src/main/java/exopandora/worldhandler/gui/logic/ILogicMapped.java new file mode 100644 index 0000000..9312c40 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/logic/ILogicMapped.java @@ -0,0 +1,25 @@ +package exopandora.worldhandler.gui.logic; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public interface ILogicMapped extends ILogic +{ + String translate(T item); + String toTooltip(T item); + + default String formatTooltip(T item, int index, int max) + { + String tooltip = this.toTooltip(item); + + if(tooltip != null) + { + return String.format("%s (%d/%d)", tooltip, index, max); + } + + return null; + } + + void onClick(T item); +} diff --git a/src/main/java/exopandora/worldhandler/gui/logic/ILogicPageList.java b/src/main/java/exopandora/worldhandler/gui/logic/ILogicPageList.java new file mode 100644 index 0000000..f0e0ace --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/logic/ILogicPageList.java @@ -0,0 +1,17 @@ +package exopandora.worldhandler.gui.logic; + +import exopandora.worldhandler.gui.button.GuiButtonBase; +import exopandora.worldhandler.util.ActionHandler; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public interface ILogicPageList extends ILogicMapped +{ + GuiButtonBase onRegister(int x, int y, int width, int height, String text, T item, ActionHandler actionHandler); + + default boolean doDisable() + { + return true; + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/logic/LogicSliderAttribute.java b/src/main/java/exopandora/worldhandler/gui/logic/LogicSliderAttribute.java new file mode 100644 index 0000000..1d7ab1f --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/logic/LogicSliderAttribute.java @@ -0,0 +1,25 @@ +package exopandora.worldhandler.gui.logic; + +import java.util.function.Consumer; + +import exopandora.worldhandler.builder.impl.abstr.EnumAttributes; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class LogicSliderAttribute extends LogicSliderSimple +{ + private final EnumAttributes attribute; + + public LogicSliderAttribute(EnumAttributes attribute, String text, Consumer listener) + { + super(attribute.getAttribute(), text, listener); + this.attribute = attribute; + } + + @Override + public String formatSuffix(int value) + { + return " " + this.attribute.getOperation().getDeclaration(); + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/logic/LogicSliderSimple.java b/src/main/java/exopandora/worldhandler/gui/logic/LogicSliderSimple.java new file mode 100644 index 0000000..0a7847e --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/logic/LogicSliderSimple.java @@ -0,0 +1,52 @@ +package exopandora.worldhandler.gui.logic; + +import java.util.function.Consumer; + +import exopandora.worldhandler.gui.button.GuiSlider.ILogicSlider; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class LogicSliderSimple implements ILogicSlider +{ + private final String id; + private final String text; + private final Consumer listener; + + public LogicSliderSimple(String id, String text, Consumer listener) + { + this.id = id; + this.text = text; + this.listener = listener; + } + + @Override + public String formatPrefix(int value) + { + return this.text; + } + + @Override + public String formatSuffix(int value) + { + return ""; + } + + @Override + public String formatValue(int value) + { + return ": " + String.valueOf(value); + } + + @Override + public void onChangeSliderValue(int value) + { + this.listener.accept(value); + } + + @Override + public String getId() + { + return this.id; + } +} diff --git a/src/main/java/exopandora/worldhandler/helper/ActionHelper.java b/src/main/java/exopandora/worldhandler/helper/ActionHelper.java new file mode 100644 index 0000000..20e8518 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/helper/ActionHelper.java @@ -0,0 +1,186 @@ +package exopandora.worldhandler.helper; + +import com.mojang.realmsclient.gui.ChatFormatting; + +import exopandora.worldhandler.Main; +import exopandora.worldhandler.builder.impl.BuilderDifficulty; +import exopandora.worldhandler.builder.impl.BuilderDifficulty.EnumDifficulty; +import exopandora.worldhandler.builder.impl.BuilderGamemode; +import exopandora.worldhandler.builder.impl.BuilderGamemode.EnumGamemode; +import exopandora.worldhandler.builder.impl.BuilderTime; +import exopandora.worldhandler.builder.impl.BuilderTime.EnumMode; +import exopandora.worldhandler.builder.impl.BuilderWeather; +import exopandora.worldhandler.builder.impl.BuilderWeather.EnumWeather; +import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.gui.container.impl.GuiWorldHandler; +import exopandora.worldhandler.gui.content.Content; +import exopandora.worldhandler.gui.content.Contents; +import exopandora.worldhandler.util.ActionHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.init.Blocks; +import net.minecraft.util.text.ChatType; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.ClickEvent.Action; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class ActionHelper +{ + public static void backToGame() + { + Minecraft.getInstance().displayGuiScreen(null); + Minecraft.getInstance().mouseHelper.grabMouse(); + } + + public static void back(Content content) throws Exception + { + if(content.getBackContent() != null) + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(content.getBackContent())); + } + } + + public static void changeTab(Content content, int index) + { + try + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(content.getCategory().getContent(index))); + } + catch(Exception e) + { + e.printStackTrace(); + } + } + + public static void timeDawn() + { + CommandHelper.sendCommand(new BuilderTime(EnumMode.SET, Config.getSettings().getDawn())); + } + + public static void timeNoon() + { + CommandHelper.sendCommand(new BuilderTime(EnumMode.SET, Config.getSettings().getNoon())); + } + + public static void timeSunset() + { + CommandHelper.sendCommand(new BuilderTime(EnumMode.SET, Config.getSettings().getSunset())); + } + + public static void timeMidnight() + { + CommandHelper.sendCommand(new BuilderTime(EnumMode.SET, Config.getSettings().getMidnight())); + } + + public static void weatherClear() + { + CommandHelper.sendCommand(new BuilderWeather(EnumWeather.CLEAR)); + } + + public static void weatherRain() + { + CommandHelper.sendCommand(new BuilderWeather(EnumWeather.RAIN)); + } + + public static void weatherThunder() + { + CommandHelper.sendCommand(new BuilderWeather(EnumWeather.THUNDER)); + } + + public static void difficultyPeaceful() + { + CommandHelper.sendCommand(new BuilderDifficulty(EnumDifficulty.PEACEFUL)); + } + + public static void difficultyEasy() + { + CommandHelper.sendCommand(new BuilderDifficulty(EnumDifficulty.EASY)); + } + + public static void difficultyNormal() + { + CommandHelper.sendCommand(new BuilderDifficulty(EnumDifficulty.NORMAL)); + } + + public static void difficultyHard() + { + CommandHelper.sendCommand(new BuilderDifficulty(EnumDifficulty.HARD)); + } + + public static void gamemodeSurvival() + { + CommandHelper.sendCommand(new BuilderGamemode(EnumGamemode.SURVIVAL)); + } + + public static void gamemodeCreative() + { + CommandHelper.sendCommand(new BuilderGamemode(EnumGamemode.CREATIVE)); + } + + public static void gamemodeAdventure() + { + CommandHelper.sendCommand(new BuilderGamemode(EnumGamemode.ADVENTURE)); + } + + public static void gamemodeSpectator() + { + CommandHelper.sendCommand(new BuilderGamemode(EnumGamemode.SPECTATOR)); + } + + public static void tryRun(ActionHandler action) + { + try + { + action.run(); + } + catch(Exception e) + { + if(!Minecraft.getInstance().isGameFocused()) + { + Minecraft.getInstance().displayGuiScreen(null); + Minecraft.getInstance().mouseHelper.grabMouse(); + } + + TextComponentString name = new TextComponentString(Main.NAME); + name.setStyle(new Style().setUnderlined(true).setClickEvent(new ClickEvent(Action.OPEN_URL, Main.URL))); + + TextComponentTranslation message = new TextComponentTranslation("worldhandler.error.gui", name); + message.setStyle(new Style().setColor(net.minecraft.util.text.TextFormatting.RED)); + + Minecraft.getInstance().ingameGUI.addChatMessage(ChatType.SYSTEM, message); + e.printStackTrace(); + } + } + + public static void displayGui() + { + if(!CommandHelper.canPlayerIssueCommand() && Config.getSettings().permissionQuery()) + { + Minecraft.getInstance().ingameGUI.addChatMessage(ChatType.SYSTEM, new TextComponentString(ChatFormatting.RED + I18n.format("worldhandler.permission.refused"))); + Minecraft.getInstance().ingameGUI.addChatMessage(ChatType.SYSTEM, new TextComponentString(ChatFormatting.RED + I18n.format("worldhandler.permission.refused.change", I18n.format("gui.worldhandler.config.key.settings.permission_query")))); + } + else + { + ActionHelper.tryRun(() -> + { + if(BlockHelper.isFocusedBlockEqualTo(Blocks.SIGN) || BlockHelper.isFocusedBlockEqualTo(Blocks.WALL_SIGN)) + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.SIGN_EDITOR)); + } + else if(BlockHelper.isFocusedBlockEqualTo(Blocks.NOTE_BLOCK)) + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.NOTE_EDITOR)); + } + else + { + Minecraft.getInstance().displayGuiScreen(new GuiWorldHandler(Contents.MAIN)); + } + }); + } + } +} diff --git a/src/main/java/exopandora/worldhandler/helper/AdvancementHelper.java b/src/main/java/exopandora/worldhandler/helper/AdvancementHelper.java deleted file mode 100644 index d4cbe11..0000000 --- a/src/main/java/exopandora/worldhandler/helper/AdvancementHelper.java +++ /dev/null @@ -1,38 +0,0 @@ -package exopandora.worldhandler.helper; - -import java.util.List; - -import exopandora.worldhandler.builder.impl.BuilderAdvancement.EnumMode; -import net.minecraft.advancements.AdvancementManager; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class AdvancementHelper -{ - public static final AdvancementManager ADVANCEMENT_MANAGER = new AdvancementManager(null); - private final Node modes = new Node(); - - public AdvancementHelper() - { - this.init(); - } - - private void init() - { - for(EnumMode mode : EnumMode.values()) - { - this.modes.addNode(mode.toString()); - } - } - - public List getModes() - { - if(this.modes != null) - { - return this.modes.getEntries(); - } - - return null; - } -} diff --git a/src/main/java/exopandora/worldhandler/helper/BlockHelper.java b/src/main/java/exopandora/worldhandler/helper/BlockHelper.java index 831d045..9b65a59 100644 --- a/src/main/java/exopandora/worldhandler/helper/BlockHelper.java +++ b/src/main/java/exopandora/worldhandler/helper/BlockHelper.java @@ -3,29 +3,36 @@ package exopandora.worldhandler.helper; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; +import java.util.function.Function; import javax.annotation.Nonnull; import org.apache.commons.lang3.ArrayUtils; -import exopandora.worldhandler.WorldHandler; -import exopandora.worldhandler.builder.impl.BuilderSetblock; -import exopandora.worldhandler.builder.types.Coordinate; -import exopandora.worldhandler.config.ConfigSettings; -import exopandora.worldhandler.util.UtilPlayer; -import io.netty.buffer.Unpooled; +import exopandora.worldhandler.builder.impl.BuilderFill; +import exopandora.worldhandler.builder.impl.BuilderSetBlock; +import exopandora.worldhandler.builder.impl.BuilderSummon; +import exopandora.worldhandler.builder.types.BlockResourceLocation; +import exopandora.worldhandler.builder.types.Coordinate.CoordinateType; +import exopandora.worldhandler.builder.types.CoordinateDouble; +import exopandora.worldhandler.builder.types.CoordinateInt; +import exopandora.worldhandler.config.Config; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; +import net.minecraft.entity.EntityType; import net.minecraft.init.Blocks; -import net.minecraft.network.PacketBuffer; -import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.play.client.CPacketUpdateCommandBlock; +import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntityCommandBlock; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class BlockHelper { private static BlockPos POS_1 = BlockPos.ORIGIN; @@ -36,32 +43,29 @@ public class BlockHelper public static BlockPos getFocusedBlockPos() { - RayTraceResult rayTrace = Minecraft.getMinecraft().objectMouseOver; + RayTraceResult rayTrace = Minecraft.getInstance().objectMouseOver; - if(rayTrace != null) + if(rayTrace != null && rayTrace.type.equals(RayTraceResult.Type.BLOCK)) { - if(rayTrace.typeOfHit.equals(RayTraceResult.Type.BLOCK)) + BlockPos position = rayTrace.getBlockPos(); + + if(!ArrayUtils.contains(BLACKLIST, Minecraft.getInstance().world.getBlockState(position).getBlock())) { - BlockPos position = rayTrace.getBlockPos(); - - if(!ArrayUtils.contains(BLACKLIST, Minecraft.getMinecraft().world.getBlockState(position).getBlock())) - { - return position; - } + return position; } } - return Minecraft.getMinecraft().player.getPosition(); + return Minecraft.getInstance().player.getPosition(); } public static boolean isFocusedBlockEqualTo(Block block) { - return Block.isEqualTo(getFocusedBlock(), block); + return getBlock(getFocusedBlockPos()) == block; } - public static Block getFocusedBlock() + public static Block getBlock(BlockPos pos) { - return Minecraft.getMinecraft().world.getBlockState(getFocusedBlockPos()).getBlock(); + return Minecraft.getInstance().world.getBlockState(pos).getBlock(); } public static BlockPos setX(BlockPos pos, double x) @@ -117,6 +121,13 @@ public class BlockHelper } } + public static T addPositionObservers(T observer, Function> pos1generator, Function> pos2generator) + { + BlockHelper.addPos1Observer(pos1generator.apply(observer)); + BlockHelper.addPos2Observer(pos2generator.apply(observer)); + return observer; + } + public static void addPos1Observer(Consumer observer) { POS_1_OBSERVERS.add(observer); @@ -137,90 +148,83 @@ public class BlockHelper POS_2_OBSERVERS.add(observer); } + private static NBTTagCompound newCommandBlock(String command) + { + NBTTagCompound blockState = new NBTTagCompound(); + blockState.setString("Name", Blocks.COMMAND_BLOCK.getRegistryName().toString()); + + NBTTagCompound tileEntityData = new NBTTagCompound(); + tileEntityData.setString("Command", command); + tileEntityData.setBoolean("auto", true); + + NBTTagCompound commandBlock = new NBTTagCompound(); + commandBlock.setInt("Time", 1); + commandBlock.setTag("BlockState", blockState); + commandBlock.setTag("TileEntityData", tileEntityData); + + return commandBlock; + } + public static boolean setCommandBlockNearPlayer(String command) { - if(UtilPlayer.canIssueCommand()) + if(CommandHelper.canPlayerIssueCommand() && Minecraft.getInstance().getConnection() != null) { - BlockPos player = new BlockPos(Minecraft.getMinecraft().player.posX, Minecraft.getMinecraft().player.posY, Minecraft.getMinecraft().player.posZ); - BlockPos block = player; - BlockPos button = player; + BuilderFill fill = new BuilderFill(); + fill.setX1(new CoordinateInt(0, CoordinateType.GLOBAL)); + fill.setY1(new CoordinateInt(-2, CoordinateType.GLOBAL)); + fill.setZ1(new CoordinateInt(0, CoordinateType.GLOBAL)); + fill.setX2(new CoordinateInt(0, CoordinateType.GLOBAL)); + fill.setY2(new CoordinateInt(0, CoordinateType.GLOBAL)); + fill.setZ2(new CoordinateInt(0, CoordinateType.GLOBAL)); + fill.setBlock1(new BlockResourceLocation(Blocks.AIR.getRegistryName())); - int meta = 0; + NBTTagCompound block = newCommandBlock(fill.toActualCommand()); + block.setString("id", "falling_block"); - switch(UtilPlayer.getPlayerDirection()) - { - case 0: - block = block.add(0, 0, 2); - button = button.add(0, 0, 1); - meta = 4; - break; - case 1: - block = block.add(-2, 0, 0); - button = button.add(-1, 0, 0); - meta = 1; - break; - case 2: - block = block.add(0, 0, -2); - button = button.add(0, 0, -1); - meta = 3; - break; - case 3: - block = block.add(2, 0, 0); - button = button.add(1, 0, 0); - meta = 2; - break; - } + NBTTagList passengers = new NBTTagList(); + passengers.add(block); - boolean flag = false; + NBTTagCompound nbt = newCommandBlock(command); + nbt.setTag("Passengers", passengers); - if(Minecraft.getMinecraft().world.isAirBlock(block)) - { - Minecraft.getMinecraft().player.sendChatMessage(new BuilderSetblock(block, Blocks.COMMAND_BLOCK.getRegistryName(), 0, ConfigSettings.getMode()).toActualCommand()); - Minecraft.getMinecraft().player.sendChatMessage(new BuilderSetblock(button, Blocks.WOODEN_BUTTON.getRegistryName(), meta, ConfigSettings.getMode()).toActualCommand()); - flag = true; - } + Minecraft.getInstance().displayGuiScreen(null); + Minecraft.getInstance().mouseHelper.grabMouse(); - if(Minecraft.getMinecraft().world.getBlockState(block).getBlock().equals(Blocks.COMMAND_BLOCK) || flag) - { - if(Minecraft.getMinecraft().getConnection() != null) - { - PacketBuffer packetbuffer = new PacketBuffer(Unpooled.buffer()); - packetbuffer.writeInt(block.getX()); - packetbuffer.writeInt(block.getY()); - packetbuffer.writeInt(block.getZ()); - packetbuffer.writeString(command); - packetbuffer.writeBoolean(true); - packetbuffer.writeString(TileEntityCommandBlock.Mode.REDSTONE.name()); - packetbuffer.writeBoolean(false); - packetbuffer.writeBoolean(false); - - Minecraft.getMinecraft().getConnection().sendPacket(new CPacketCustomPayload("MC|AutoCmd", packetbuffer)); - - return true; - } - } + BuilderSummon summon = new BuilderSummon(); + summon.setEntity(EntityType.FALLING_BLOCK.getRegistryName().toString()); + summon.setX(new CoordinateDouble(0.0, CoordinateType.LOCAL)); + summon.setY(new CoordinateDouble(0.54, CoordinateType.LOCAL)); + summon.setZ(new CoordinateDouble(0.0, CoordinateType.LOCAL)); + summon.setNBT(nbt); + + BlockPos pos = Minecraft.getInstance().player.getPosition().add(0, 3, 0); + Minecraft.getInstance().player.sendChatMessage(new BuilderSetBlock(pos, Blocks.COMMAND_BLOCK.getRegistryName(), Config.CLIENT.getSettings().getBlockPlacingMode()).toActualCommand()); + Minecraft.getInstance().getConnection().sendPacket(new CPacketUpdateCommandBlock(pos, summon.toActualCommand(false), TileEntityCommandBlock.Mode.REDSTONE, true, false, true)); + + return true; } return false; } - public static void setBlockNearPlayer(Block block, byte southMeta, byte westMeta, byte northMeta, byte eastMeta) + public static void setBlockNearPlayer(Block block) { - int direction = UtilPlayer.getPlayerDirection(); - - switch(direction) + System.out.println(Minecraft.getInstance().player.getHorizontalFacing()); + switch(Minecraft.getInstance().player.getHorizontalFacing()) { - case 0: - WorldHandler.sendCommand(new BuilderSetblock(new Coordinate(), new Coordinate(), new Coordinate(2, true), block.getRegistryName(), southMeta, ConfigSettings.getMode())); + case NORTH: + CommandHelper.sendCommand(new BuilderSetBlock(new CoordinateInt(CoordinateType.LOCAL), new CoordinateInt(CoordinateType.LOCAL), new CoordinateInt(2, CoordinateType.LOCAL), block.getRegistryName(), Config.getSettings().getBlockPlacingMode()).withState(BlockStateProperties.HORIZONTAL_FACING, EnumFacing.SOUTH)); break; - case 1: - WorldHandler.sendCommand(new BuilderSetblock(new Coordinate(-2, true), new Coordinate(), new Coordinate(), block.getRegistryName(), westMeta, ConfigSettings.getMode())); + case EAST: + CommandHelper.sendCommand(new BuilderSetBlock(new CoordinateInt(CoordinateType.LOCAL), new CoordinateInt(CoordinateType.LOCAL), new CoordinateInt(2, CoordinateType.LOCAL), block.getRegistryName(), Config.getSettings().getBlockPlacingMode()).withState(BlockStateProperties.HORIZONTAL_FACING, EnumFacing.WEST)); break; - case 2: - WorldHandler.sendCommand(new BuilderSetblock(new Coordinate(), new Coordinate(), new Coordinate(-2, true), block.getRegistryName(), northMeta, ConfigSettings.getMode())); + case SOUTH: + CommandHelper.sendCommand(new BuilderSetBlock(new CoordinateInt(CoordinateType.LOCAL), new CoordinateInt(CoordinateType.LOCAL), new CoordinateInt(2, CoordinateType.LOCAL), block.getRegistryName(), Config.getSettings().getBlockPlacingMode()).withState(BlockStateProperties.HORIZONTAL_FACING, EnumFacing.NORTH)); break; - case 3: - WorldHandler.sendCommand(new BuilderSetblock(new Coordinate(2, true), new Coordinate(), new Coordinate(), block.getRegistryName(), eastMeta, ConfigSettings.getMode())); + case WEST: + CommandHelper.sendCommand(new BuilderSetBlock(new CoordinateInt(CoordinateType.LOCAL), new CoordinateInt(CoordinateType.LOCAL), new CoordinateInt(2, CoordinateType.LOCAL), block.getRegistryName(), Config.getSettings().getBlockPlacingMode()).withState(BlockStateProperties.HORIZONTAL_FACING, EnumFacing.EAST)); + break; + default: break; } } diff --git a/src/main/java/exopandora/worldhandler/helper/CommandHelper.java b/src/main/java/exopandora/worldhandler/helper/CommandHelper.java new file mode 100644 index 0000000..88d624f --- /dev/null +++ b/src/main/java/exopandora/worldhandler/helper/CommandHelper.java @@ -0,0 +1,67 @@ +package exopandora.worldhandler.helper; + +import com.mojang.brigadier.CommandDispatcher; + +import exopandora.worldhandler.WorldHandler; +import exopandora.worldhandler.builder.ICommandBuilder; +import exopandora.worldhandler.builder.ICommandBuilderSyntax; +import exopandora.worldhandler.command.CommandWH; +import exopandora.worldhandler.command.CommandWorldHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.command.CommandSource; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class CommandHelper +{ + public static void sendFeedback(CommandSource source, String message) + { + source.sendFeedback(new TextComponentString(message), false); + } + + public static boolean canPlayerIssueCommand() + { + return Minecraft.getInstance().player.hasPermissionLevel(1); + } + + public static void registerCommands(CommandDispatcher dispatcher) + { + CommandWorldHandler.register(dispatcher); + CommandWH.register(dispatcher); + } + + public static void sendCommand(ICommandBuilder builder) + { + CommandHelper.sendCommand(builder, false); + } + + public static void sendCommand(ICommandBuilder builder, boolean special) + { + if(builder != null) + { + String command; + + if(builder instanceof ICommandBuilderSyntax) + { + command = ((ICommandBuilderSyntax) builder).toActualCommand(); + } + else + { + command = builder.toCommand(); + } + + WorldHandler.LOGGER.info("Command: " + command); + + if(builder.needsCommandBlock() || special) + { + BlockHelper.setCommandBlockNearPlayer(command); + } + else + { + Minecraft.getInstance().player.sendChatMessage(command); + } + } + } +} diff --git a/src/main/java/exopandora/worldhandler/helper/EntityHelper.java b/src/main/java/exopandora/worldhandler/helper/EntityHelper.java deleted file mode 100644 index 4cacd02..0000000 --- a/src/main/java/exopandora/worldhandler/helper/EntityHelper.java +++ /dev/null @@ -1,84 +0,0 @@ -package exopandora.worldhandler.helper; - -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; - -import javax.annotation.Nullable; - -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.EntityEntry; -import net.minecraftforge.fml.common.registry.ForgeRegistries; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class EntityHelper -{ - private static final Map RESOURCELOCATION_TO_NAME = new HashMap(); - private static final Map, ResourceLocation> CLASS_TO_RESOURCELOCATION = new HashMap, ResourceLocation>(); - - static - { - if(ForgeRegistries.ENTITIES.getEntries().isEmpty()) - { - throw new RuntimeException("Accessed Entities before register!"); - } - - for(Entry entity : ForgeRegistries.ENTITIES.getEntries()) - { - RESOURCELOCATION_TO_NAME.put(entity.getKey(), entity.getValue().getName()); - CLASS_TO_RESOURCELOCATION.put(entity.getValue().getEntityClass(), entity.getKey()); - } - } - - @Nullable - public static String getUnifiedEntityName(String name) - { - for(ResourceLocation location : RESOURCELOCATION_TO_NAME.keySet()) - { - if(RESOURCELOCATION_TO_NAME.get(location).equals(name)) - { - return location.getResourcePath(); - } - } - - return null; - } - - public static String getEntityName(ResourceLocation location) - { - return RESOURCELOCATION_TO_NAME.get(location); - } - - @Nullable - public static String getEntityName(String name) - { - for(ResourceLocation location : RESOURCELOCATION_TO_NAME.keySet()) - { - if(location.getResourcePath().equals(name)) - { - return RESOURCELOCATION_TO_NAME.get(location); - } - } - - return null; - } - - public static boolean doesExist(ResourceLocation key) - { - return RESOURCELOCATION_TO_NAME.containsKey(key); - } - - public static boolean doesExist(String value) - { - return RESOURCELOCATION_TO_NAME.containsValue(value); - } - - @Nullable - public static ResourceLocation getResourceLocation(Class entity) - { - return CLASS_TO_RESOURCELOCATION.get(entity); - } -} diff --git a/src/main/java/exopandora/worldhandler/helper/EnumHelper.java b/src/main/java/exopandora/worldhandler/helper/EnumHelper.java index 92a994c..074f545 100644 --- a/src/main/java/exopandora/worldhandler/helper/EnumHelper.java +++ b/src/main/java/exopandora/worldhandler/helper/EnumHelper.java @@ -2,14 +2,14 @@ package exopandora.worldhandler.helper; import javax.annotation.Nullable; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class EnumHelper { @Nullable - public static > T valueOf(Class klass, String name) + public static > T valueOf(String name, Class klass) { try { diff --git a/src/main/java/exopandora/worldhandler/helper/Node.java b/src/main/java/exopandora/worldhandler/helper/Node.java index 90c6fc9..848947c 100644 --- a/src/main/java/exopandora/worldhandler/helper/Node.java +++ b/src/main/java/exopandora/worldhandler/helper/Node.java @@ -6,16 +6,14 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.function.BiFunction; +import java.util.function.BiPredicate; import javax.annotation.Nullable; -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class Node { private final String key; @@ -157,10 +155,15 @@ public class Node public void mergeItems() { - this.mergeItems(null, this); + this.mergeItems(null, this, null); } - private void mergeItems(Node root, Node child) + public void mergeItems(BiPredicate predicate) + { + this.mergeItems(null, this, predicate); + } + + private void mergeItems(Node root, Node child, BiPredicate predicate) { if(child != null && child.getEntries() != null) { @@ -168,7 +171,7 @@ public class Node { for(Node node : child.getEntries()) { - this.mergeItems(child, node); + this.mergeItems(child, node, predicate); } } else @@ -181,14 +184,13 @@ public class Node { if(node.getEntries() != null && !node.getEntries().isEmpty()) { - this.mergeItems(child, node); + this.mergeItems(child, node, predicate); flag = false; break; } - else + else if(predicate != null) { - ResourceLocation location = new ResourceLocation(child.getKey(), node.getKey()); - flag = flag && (Item.REGISTRY.containsKey(location) || Block.REGISTRY.containsKey(location)); + flag = flag && predicate.test(child.getKey(), node.getKey()); } } @@ -277,4 +279,10 @@ public class Node return false; } + + @Override + public String toString() + { + return this.getKey(); + } } diff --git a/src/main/java/exopandora/worldhandler/helper/RegistryTranslator.java b/src/main/java/exopandora/worldhandler/helper/RegistryTranslator.java new file mode 100644 index 0000000..3ac00cb --- /dev/null +++ b/src/main/java/exopandora/worldhandler/helper/RegistryTranslator.java @@ -0,0 +1,72 @@ +package exopandora.worldhandler.helper; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.EntityType; +import net.minecraft.item.Item; +import net.minecraft.potion.Potion; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.IRegistry; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.ForgeRegistryEntry; +import net.minecraftforge.registries.IForgeRegistry; + +@OnlyIn(Dist.CLIENT) +public class RegistryTranslator +{ + private static final Map, Function> FORGE = new HashMap, Function>(); + private static final Map, Function> VANILLA = new HashMap, Function>(); + + static + { + register(ForgeRegistries.BLOCKS, Block::getTranslationKey); + register(ForgeRegistries.ITEMS, Item::getTranslationKey); + register(ForgeRegistries.POTIONS, Potion::getName); + register(ForgeRegistries.BIOMES, Biome::getTranslationKey); + register(ForgeRegistries.ENCHANTMENTS, Enchantment::getName); + register(ForgeRegistries.ENTITIES, EntityType::getTranslationKey); + register(IRegistry.field_212623_l, stat -> "stat." + stat.toString().replace(':', '.')); + } + + private static > void register(IForgeRegistry registry, Function mapper) + { + FORGE.put(registry, mapper); + } + + private static void register(IRegistry registry, Function mapper) + { + VANILLA.put(registry, mapper); + } + + @Nullable + @SuppressWarnings("unchecked") + public static String translate(ResourceLocation resource) + { + for(IForgeRegistry registry : FORGE.keySet()) + { + if(registry.containsKey(resource)) + { + return ((Function) FORGE.get(registry)).apply((T) registry.getValue(resource)); + } + } + + for(IRegistry registry : VANILLA.keySet()) + { + if(registry.func_212607_c(resource)) + { + return ((Function) VANILLA.get(registry)).apply((T) registry.func_212608_b(resource)); + } + } + + return null; + } +} diff --git a/src/main/java/exopandora/worldhandler/helper/ResourceHelper.java b/src/main/java/exopandora/worldhandler/helper/ResourceHelper.java index 3221f92..aef5ad9 100644 --- a/src/main/java/exopandora/worldhandler/helper/ResourceHelper.java +++ b/src/main/java/exopandora/worldhandler/helper/ResourceHelper.java @@ -1,19 +1,17 @@ package exopandora.worldhandler.helper; -import java.util.function.Predicate; - import javax.annotation.Nullable; import exopandora.worldhandler.Main; -import exopandora.worldhandler.config.ConfigSkin; -import net.minecraft.block.Block; -import net.minecraft.entity.EntityList; -import net.minecraft.item.Item; +import exopandora.worldhandler.builder.types.BlockResourceLocation; +import exopandora.worldhandler.builder.types.ItemResourceLocation; +import exopandora.worldhandler.config.Config; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.registries.IForgeRegistry; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ResourceHelper { private static final ResourceLocation BACKGROUND = new ResourceLocation("textures/gui/demo_background.png"); @@ -24,38 +22,57 @@ public class ResourceHelper { if(resource != null) { - return new ResourceLocation(resource.replaceAll(" ", "_")); + return new ResourceLocation(stripToResourceLocation(resource)); } return null; } - public static boolean isRegisteredItem(String item) + @Nullable + public static String stripToResourceLocation(String resource) { - return Item.REGISTRY.getKeys().contains(stringToResourceLocation(item)); - } - - public static boolean isRegisteredBlock(String block) - { - return Block.REGISTRY.getKeys().contains(stringToResourceLocation(block)); - } - - public static boolean isRegisteredMob(String mob) - { - return EntityList.isRegistered(stringToResourceLocation(mob)); - } - - public static boolean isRegisteredAdvancement(String advancement) - { - return AdvancementHelper.ADVANCEMENT_MANAGER.getAdvancement(stringToResourceLocation(advancement)) != null; + if(resource != null) + { + return resource.toLowerCase().replaceAll("[^a-z0-9/._\\-:]", "_"); + } + + return null; } @Nullable - public static ResourceLocation stringToResourceLocationNullable(String resource, Predicate predicate) + public static boolean isRegistered(ResourceLocation resource, IForgeRegistry registry) { - if(predicate.test(resource)) + return resource != null && registry != null && registry.containsKey(resource); + } + + @Nullable + public static boolean isRegistered(BlockResourceLocation resource, IForgeRegistry registry) + { + if(resource != null) { - return stringToResourceLocation(resource); + return isRegistered(resource.getResourceLocation(), registry); + } + + return false; + } + + @Nullable + public static boolean isRegistered(ItemResourceLocation resource, IForgeRegistry registry) + { + if(resource != null) + { + return isRegistered(resource.getResourceLocation(), registry); + } + + return false; + } + + @Nullable + public static ResourceLocation assertRegistered(ResourceLocation resource, IForgeRegistry registry) + { + if(ResourceHelper.isRegistered(resource, registry)) + { + return resource; } return null; @@ -63,7 +80,7 @@ public class ResourceHelper public static ResourceLocation getBackgroundTexture() { - if(ConfigSkin.getTextureType().equals("resourcepack")) + if(Config.getSkin().getTextureType().equals("resourcepack")) { return BACKGROUND; } @@ -73,16 +90,16 @@ public class ResourceHelper public static ResourceLocation getIconTexture() { - return new ResourceLocation(Main.MODID, "textures/icons/icons" + ConfigSkin.getIconSize() + ".png"); + return new ResourceLocation(Main.MODID, "textures/icons/icons" + Config.getSkin().getIconSize() + ".png"); } public static ResourceLocation getButtonTexture() { - if(ConfigSkin.getTextureType().equals("resourcepack")) + if(Config.getSkin().getTextureType().equals("resourcepack")) { return BUTTON; } - return new ResourceLocation(Main.MODID, "textures/skins/" + ConfigSkin.getTextureType() + "/" + ConfigSkin.getTextureType() + "_buttons.png"); + return new ResourceLocation(Main.MODID, "textures/skins/" + Config.getSkin().getTextureType() + "/" + Config.getSkin().getTextureType() + "_buttons.png"); } } diff --git a/src/main/java/exopandora/worldhandler/helper/ScoreboardHelper.java b/src/main/java/exopandora/worldhandler/helper/ScoreboardHelper.java index c20d85a..08e2a5f 100644 --- a/src/main/java/exopandora/worldhandler/helper/ScoreboardHelper.java +++ b/src/main/java/exopandora/worldhandler/helper/ScoreboardHelper.java @@ -8,13 +8,17 @@ import java.util.function.Predicate; import com.google.common.base.Predicates; import com.mojang.realmsclient.gui.ChatFormatting; -import net.minecraft.scoreboard.IScoreCriteria; +import net.minecraft.scoreboard.ScoreCriteria; import net.minecraft.scoreboard.Team.CollisionRule; import net.minecraft.scoreboard.Team.EnumVisible; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraft.stats.StatList; +import net.minecraft.stats.StatType; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.IRegistry; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ScoreboardHelper { private final Node objectives = new Node(); @@ -37,13 +41,28 @@ public class ScoreboardHelper //Objectives - for(String criteria : IScoreCriteria.INSTANCES.keySet()) + for(String scoreCriteria : ScoreCriteria.INSTANCES.keySet()) { - this.objectives.insertNode(criteria.split("[.]")); + this.objectives.insertNode(scoreCriteria.split("[.:]")); + } + + this.objectives.merge("minecraft", (parent, child) -> parent + "." + child); + + for(StatType type : IRegistry.field_212634_w) + { + if(!type.equals(StatList.CUSTOM)) + { + List entries = new ArrayList(); + + for(ResourceLocation key : type.getRegistry().getKeys()) + { + entries.add(new Node(this.buildKey(key))); + } + + this.objectives.addNode(this.buildKey(IRegistry.field_212634_w.getKey(type)), entries); + } } - this.objectives.merge("stat", (parent, child) -> parent + "." + child); - this.objectives.mergeItems(); this.objectives.sort(); //Slots @@ -59,12 +78,18 @@ public class ScoreboardHelper this.options.addNode("color", colors); this.options.addNode("nametagVisibility", visibility); this.options.addNode("deathMessageVisibility", visibility); - this.options.addNode("friendlyfire", bool); + this.options.addNode("friendlyFire", bool); this.options.addNode("seeFriendlyInvisibles", bool); this.options.addNode("collisionRule", collision); + this.options.sort(); } + private String buildKey(ResourceLocation key) + { + return key.toString().replace(":", "."); + } + private List createList(T[] array, Function mapper) { return this.createList(array, mapper, Predicates.alwaysTrue()); diff --git a/src/main/java/exopandora/worldhandler/hud/BiomeIndicator.java b/src/main/java/exopandora/worldhandler/hud/BiomeIndicator.java deleted file mode 100644 index 811d785..0000000 --- a/src/main/java/exopandora/worldhandler/hud/BiomeIndicator.java +++ /dev/null @@ -1,102 +0,0 @@ -package exopandora.worldhandler.hud; - -import java.util.HashSet; -import java.util.Set; - -import javax.annotation.Nullable; - -import net.minecraft.client.Minecraft; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class BiomeIndicator -{ - private final Set biomes = new HashSet(); - private String currentBiome; - private int ticksRemaining; - - public BiomeIndicator() - { - this.init(); - } - - private void init() - { - Set biomes = new HashSet(); - - for(ResourceLocation location : Biome.REGISTRY.getKeys()) - { - biomes.add(this.filterName(Biome.REGISTRY.getObject(location).getBiomeName())); - } - - this.biomes.addAll(biomes); - - for(String biome : biomes) - { - for(String index : biomes) - { - if(index.matches(biome + "([A-Za-z ])+") || index.matches("([A-Za-z ])+ " + biome)) - { - this.biomes.remove(index); - } - } - } - - this.biomes.remove("River"); - this.biomes.remove("Beach"); - } - - public void tick() - { - int posX = MathHelper.floor(Minecraft.getMinecraft().player.posX); - int posY = MathHelper.floor(Minecraft.getMinecraft().player.posY); - int posZ = MathHelper.floor(Minecraft.getMinecraft().player.posZ); - - BlockPos pos = new BlockPos(posX, posY, posZ); - - if(Minecraft.getMinecraft().world != null && Minecraft.getMinecraft().world.isBlockLoaded(pos)) - { - Chunk chunk = Minecraft.getMinecraft().world.getChunkFromBlockCoords(pos); - String biome = this.getBaseBiome(this.filterName(chunk.getBiome(pos, Minecraft.getMinecraft().world.getBiomeProvider()).getBiomeName())); - - if(this.ticksRemaining == 0 && biome != null) - { - if(this.currentBiome == null || !this.currentBiome.equals(biome)) - { - Minecraft.getMinecraft().ingameGUI.displayTitle(biome, null, 20, 60, 20); - this.ticksRemaining = 100; - this.currentBiome = biome; - } - } - else if(this.ticksRemaining > 0) - { - this.ticksRemaining--; - } - } - } - - private String filterName(String biome) - { - return biome.replaceAll("([a-z])([A-Z])", "$1 $2").replaceAll("[^A-Za-z ]", "").replaceAll("( [A-Z])$", ""); - } - - @Nullable - private String getBaseBiome(String input) - { - for(String biome : this.biomes) - { - if(input.matches("([A-Za-z ])*" + biome + "([A-Za-z ])*")) - { - return biome; - } - } - - return null; - } -} diff --git a/src/main/java/exopandora/worldhandler/installer/ChangeFolderListener.java b/src/main/java/exopandora/worldhandler/installer/ChangeFolderListener.java index 8f3e625..47eab79 100644 --- a/src/main/java/exopandora/worldhandler/installer/ChangeFolderListener.java +++ b/src/main/java/exopandora/worldhandler/installer/ChangeFolderListener.java @@ -8,10 +8,7 @@ import javax.swing.JFileChooser; import javax.swing.JTextField; import exopandora.worldhandler.Main; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -@SideOnly(Side.CLIENT) public class ChangeFolderListener implements ActionListener { private final JTextField textField; diff --git a/src/main/java/exopandora/worldhandler/installer/ForumListener.java b/src/main/java/exopandora/worldhandler/installer/ForumListener.java index 490bcbd..a8d353f 100644 --- a/src/main/java/exopandora/worldhandler/installer/ForumListener.java +++ b/src/main/java/exopandora/worldhandler/installer/ForumListener.java @@ -5,10 +5,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URI; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import exopandora.worldhandler.Main; -@SideOnly(Side.CLIENT) public class ForumListener implements ActionListener { @Override @@ -18,7 +16,7 @@ public class ForumListener implements ActionListener { try { - Desktop.getDesktop().browse(new URI("$url")); + Desktop.getDesktop().browse(new URI(Main.URL)); } catch(Exception e) { diff --git a/src/main/java/exopandora/worldhandler/installer/InstallListener.java b/src/main/java/exopandora/worldhandler/installer/InstallListener.java index f8d4cab..a1f4185 100644 --- a/src/main/java/exopandora/worldhandler/installer/InstallListener.java +++ b/src/main/java/exopandora/worldhandler/installer/InstallListener.java @@ -12,10 +12,7 @@ import javax.swing.JOptionPane; import javax.swing.JTextField; import exopandora.worldhandler.Main; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -@SideOnly(Side.CLIENT) public class InstallListener implements ActionListener { private final JFrame parent; @@ -37,7 +34,7 @@ public class InstallListener implements ActionListener File mods = new File(directory, "mods"); File versions = new File(directory, "versions"); - if(!this.isPartialFileNameInFolder(versions, "$mcversion", "Forge")) + if(!this.isPartialFileNameInFolder(versions, Main.MC_VERSION, "Forge")) { JOptionPane.showMessageDialog(null, "Please install Mineceaft Forge", null, JOptionPane.ERROR_MESSAGE); } @@ -54,8 +51,8 @@ public class InstallListener implements ActionListener try { Path path = new File(InstallListener.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).toPath(); - Files.copy(path, new File(mods, "WorldHandler-$mcversion-$version-Universal.jar").toPath(), StandardCopyOption.REPLACE_EXISTING); - JOptionPane.showMessageDialog(null, Main.NAME + " $mcversion-$version has been successfully installed", null, JOptionPane.INFORMATION_MESSAGE); + Files.copy(path, new File(mods, "WorldHandler-" + Main.MC_VERSION + "-" + Main.MOD_VERSION + "-Universal.jar").toPath(), StandardCopyOption.REPLACE_EXISTING); + JOptionPane.showMessageDialog(null, Main.NAME + " " + Main.MC_VERSION + "-" + Main.MOD_VERSION + " has been successfully installed", null, JOptionPane.INFORMATION_MESSAGE); } catch(Exception e) { diff --git a/src/main/java/exopandora/worldhandler/installer/Window.java b/src/main/java/exopandora/worldhandler/installer/Window.java index 31ef12d..76cf54e 100644 --- a/src/main/java/exopandora/worldhandler/installer/Window.java +++ b/src/main/java/exopandora/worldhandler/installer/Window.java @@ -18,10 +18,7 @@ import javax.swing.JPanel; import javax.swing.JTextField; import exopandora.worldhandler.Main; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -@SideOnly(Side.CLIENT) public class Window implements Runnable { private final JFrame frame = new JFrame(); @@ -29,7 +26,7 @@ public class Window implements Runnable @Override public void run() { - String titleString = Main.NAME + " $mcversion-$version Installer"; + String titleString = Main.NAME + " " + Main.MC_VERSION + "-" + Main.MOD_VERSION + " Installer"; this.frame.setResizable(false); this.frame.setTitle(titleString); diff --git a/src/main/java/exopandora/worldhandler/proxy/ClientProxy.java b/src/main/java/exopandora/worldhandler/proxy/ClientProxy.java index 8b84502..1c23681 100644 --- a/src/main/java/exopandora/worldhandler/proxy/ClientProxy.java +++ b/src/main/java/exopandora/worldhandler/proxy/ClientProxy.java @@ -1,10 +1,19 @@ package exopandora.worldhandler.proxy; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import exopandora.worldhandler.event.ClientEventHandler; +import exopandora.worldhandler.event.KeyHandler; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.MinecraftForge; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class ClientProxy extends CommonProxy { - + @Override + public void setup() + { + MinecraftForge.EVENT_BUS.addListener(KeyHandler::keyInputEvent); + MinecraftForge.EVENT_BUS.addListener(ClientEventHandler::renderWorldLastEvent); + MinecraftForge.EVENT_BUS.addListener(ClientEventHandler::clientChatEvent); + } } diff --git a/src/main/java/exopandora/worldhandler/proxy/CommonProxy.java b/src/main/java/exopandora/worldhandler/proxy/CommonProxy.java index 0354bb7..8cc414b 100644 --- a/src/main/java/exopandora/worldhandler/proxy/CommonProxy.java +++ b/src/main/java/exopandora/worldhandler/proxy/CommonProxy.java @@ -2,5 +2,8 @@ package exopandora.worldhandler.proxy; public class CommonProxy { - + public void setup() + { + + } } diff --git a/src/main/java/exopandora/worldhandler/util/ActionHandler.java b/src/main/java/exopandora/worldhandler/util/ActionHandler.java new file mode 100644 index 0000000..4a91abb --- /dev/null +++ b/src/main/java/exopandora/worldhandler/util/ActionHandler.java @@ -0,0 +1,11 @@ +package exopandora.worldhandler.util; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@FunctionalInterface +@OnlyIn(Dist.CLIENT) +public interface ActionHandler +{ + void run() throws Exception; +} \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/util/UtilKeyBinding.java b/src/main/java/exopandora/worldhandler/util/UtilKeyBinding.java index 7ddeda8..f14ee63 100644 --- a/src/main/java/exopandora/worldhandler/util/UtilKeyBinding.java +++ b/src/main/java/exopandora/worldhandler/util/UtilKeyBinding.java @@ -3,25 +3,25 @@ package exopandora.worldhandler.util; import org.apache.commons.lang3.ArrayUtils; import exopandora.worldhandler.WorldHandler; -import exopandora.worldhandler.config.ConfigSettings; +import exopandora.worldhandler.config.Config; import net.minecraft.client.Minecraft; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.client.registry.ClientRegistry; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class UtilKeyBinding { public static void updatePosKeys() { boolean isRegistered = arePosKeysRegistered(); - if(ConfigSettings.arePosShortcutsEnabled() && !isRegistered) + if(Config.getSettings().shortcutKeys() && !isRegistered) { ClientRegistry.registerKeyBinding(WorldHandler.KEY_WORLD_HANDLER_POS1); ClientRegistry.registerKeyBinding(WorldHandler.KEY_WORLD_HANDLER_POS2); } - else if(!ConfigSettings.arePosShortcutsEnabled() && isRegistered) + else if(!Config.getSettings().shortcutKeys() && isRegistered) { removePosKeys(); } @@ -29,11 +29,11 @@ public class UtilKeyBinding public static boolean arePosKeysRegistered() { - return ArrayUtils.contains(Minecraft.getMinecraft().gameSettings.keyBindings, WorldHandler.KEY_WORLD_HANDLER_POS1) || ArrayUtils.contains(Minecraft.getMinecraft().gameSettings.keyBindings, WorldHandler.KEY_WORLD_HANDLER_POS2); + return ArrayUtils.contains(Minecraft.getInstance().gameSettings.keyBindings, WorldHandler.KEY_WORLD_HANDLER_POS1) || ArrayUtils.contains(Minecraft.getInstance().gameSettings.keyBindings, WorldHandler.KEY_WORLD_HANDLER_POS2); } public static void removePosKeys() { - Minecraft.getMinecraft().gameSettings.keyBindings = ArrayUtils.removeElements(Minecraft.getMinecraft().gameSettings.keyBindings, WorldHandler.KEY_WORLD_HANDLER_POS1, WorldHandler.KEY_WORLD_HANDLER_POS2); + Minecraft.getInstance().gameSettings.keyBindings = ArrayUtils.removeElements(Minecraft.getInstance().gameSettings.keyBindings, WorldHandler.KEY_WORLD_HANDLER_POS1, WorldHandler.KEY_WORLD_HANDLER_POS2); } } \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/util/UtilPlayer.java b/src/main/java/exopandora/worldhandler/util/UtilPlayer.java deleted file mode 100644 index d621734..0000000 --- a/src/main/java/exopandora/worldhandler/util/UtilPlayer.java +++ /dev/null @@ -1,20 +0,0 @@ -package exopandora.worldhandler.util; - -import net.minecraft.client.Minecraft; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class UtilPlayer -{ - public static boolean canIssueCommand() - { - return Minecraft.getMinecraft().player.getPermissionLevel() > 0; - } - - public static int getPlayerDirection() - { - return MathHelper.floor((double) (Minecraft.getMinecraft().player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - } -} diff --git a/src/main/java/exopandora/worldhandler/util/UtilRender.java b/src/main/java/exopandora/worldhandler/util/UtilRender.java index f45c048..bc4cca7 100644 --- a/src/main/java/exopandora/worldhandler/util/UtilRender.java +++ b/src/main/java/exopandora/worldhandler/util/UtilRender.java @@ -1,15 +1,15 @@ package exopandora.worldhandler.util; -import exopandora.worldhandler.config.ConfigSkin; +import exopandora.worldhandler.config.Config; import exopandora.worldhandler.format.TextFormatting; import exopandora.worldhandler.helper.ResourceHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.client.renderer.GlStateManager; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -@SideOnly(Side.CLIENT) +@OnlyIn(Dist.CLIENT) public class UtilRender { public static void drawWatchIntoGui(Gui gui, int width, int height, long worldTicks, boolean smooth) @@ -27,27 +27,27 @@ public class UtilRender float rotationMinute = (360 / 60) * minute - 180F; GlStateManager.pushMatrix(); - GlStateManager.translate(width + 5, height + 5, 0F); - GlStateManager.scale(0.25F, 0.25F, 0.25F); + GlStateManager.translatef(width + 5, height + 5, 0F); + GlStateManager.scalef(0.25F, 0.25F, 0.25F); - GlStateManager.rotate(rotationHour, 0F, 0F, 1F); + GlStateManager.rotatef(rotationHour, 0F, 0F, 1F); Gui.drawRect(-1, -1, 1, 11, 0xFF383838); - GlStateManager.rotate(-rotationHour, 0F, 0F, 1F); + GlStateManager.rotatef(-rotationHour, 0F, 0F, 1F); - GlStateManager.rotate(rotationMinute, 0F, 0F, 1F); + GlStateManager.rotatef(rotationMinute, 0F, 0F, 1F); Gui.drawRect(-1, -1, 1, 15, 0xFF6F6F6F); - GlStateManager.rotate(-rotationMinute, 0F, 0F, 1F); + GlStateManager.rotatef(-rotationMinute, 0F, 0F, 1F); - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.color3f(1.0F, 1.0F, 1.0F); GlStateManager.popMatrix(); - GlStateManager.color((float) ConfigSkin.getButtonRed() / 255, (float) ConfigSkin.getButtonGreen() / 255, (float) ConfigSkin.getButtonBlue() / 255, 1.0F); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceHelper.getIconTexture()); + GlStateManager.color3f(Config.getSkin().getButtonRedF(), Config.getSkin().getButtonGreenF(), Config.getSkin().getButtonBlueF()); + Minecraft.getInstance().getTextureManager().bindTexture(ResourceHelper.getIconTexture()); gui.drawTexturedModalRect(width + 0, height, 48, 0, 10, 10); GlStateManager.pushMatrix(); - GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.scalef(0.5F, 0.5F, 0.5F); Gui.drawRect((width + 5) * 2 - 1, (height + 4) * 2 + 1, (width + 6) * 2 - 1, (height + 5) * 2 + 1, 0xFF000000); GlStateManager.popMatrix(); } diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..a858ed6 --- /dev/null +++ b/src/main/resources/META-INF/mods.toml @@ -0,0 +1,24 @@ +modLoader="javafml" +loaderVersion="[24,)" +updateJSONURL="https://raw.githubusercontent.com/Exopandora/worldhandler/master/version.json" +issueTrackerURL="https://github.com/Exopandora/WorldHandler/issues" +displayURL="https://minecraft.curseforge.com/projects/world-handler-command-gui" +logoFile="logo.png" +credits="Author: Exopandora, Simplified Chinese Translation: fhfuih (samhzy)" +authors="Exopandora" + +[[mods]] +modId="worldhandler" +version="1.13.2-2.3" +displayName="World Handler" +description=''' +The World Handler provides a smart Gui for people without having to know any complex commands and gives them a look inside the art of Minecraft map and world making. +Now anyone can easily create maps or just save a few ammount of time and provides an easy to use interface. +''' + +[[dependencies.worldhandler]] + modId="minecraft" + mandatory=true + versionRange="[1.13,)" + ordering="NONE" + side="BOTH" \ No newline at end of file diff --git a/src/main/resources/assets/worldhandler/lang/de_de.json b/src/main/resources/assets/worldhandler/lang/de_de.json new file mode 100644 index 0000000..9c37141 --- /dev/null +++ b/src/main/resources/assets/worldhandler/lang/de_de.json @@ -0,0 +1,450 @@ +{ + "gui.worldhandler.config.tooltip": "World Handler Einstellungen", + + "gui.worldhandler.config.category.settings": "Einstellungen", + "gui.worldhandler.config.category.skin": "Skin", + "gui.worldhandler.config.category.butcher": "Metzler", + "gui.worldhandler.config.category.sliders": "Regler", + + "gui.worldhandler.config.key.settings.biome_indicator": "Biome Indikator", + "gui.worldhandler.config.key.settings.command_syntax": "Befehlssyntax", + "gui.worldhandler.config.key.settings.shortcuts": "Schnellsteuerleiste", + "gui.worldhandler.config.key.settings.key_shortcuts": "Tasten Abkürzungen", + "gui.worldhandler.config.key.settings.tooltips": "Tooltips", + "gui.worldhandler.config.key.settings.watch": "Uhr", + "gui.worldhandler.config.key.settings.smooth_watch": "Geschmeidige Uhr", + "gui.worldhandler.config.key.settings.pause_game": "Spiel Pausieren", + "gui.worldhandler.config.key.settings.custom_times": "Benutzerdefinierte Zeiten", + "gui.worldhandler.config.key.settings.permission_query": "Berechtigungsabfrage", + "gui.worldhandler.config.key.settings.highlight_blocks": "Blöcke Hervorheben", + "gui.worldhandler.config.key.settings.custom_time_dawn": "Sonnenaufgangszeit", + "gui.worldhandler.config.key.settings.custom_time_noon": "Mittagszeit", + "gui.worldhandler.config.key.settings.custom_time_sunset": "Sonnenuntergangszeit", + "gui.worldhandler.config.key.settings.custom_time_midnight": "Mitternachtszeit", + "gui.worldhandler.config.key.settings.block_placing_mode": "Platziermodus für Blöcke", + + "gui.worldhandler.config.comment.settings.custom_time_dawn": "Aktiviert Biome Indikator", + "gui.worldhandler.config.comment.settings.command_syntax": "Aktiviert Befehlssyntax", + "gui.worldhandler.config.comment.settings.shortcuts": "Aktiviert Schnellsteuerleiste", + "gui.worldhandler.config.comment.settings.key_shortcuts": "Aktiviert Tasten Abkürzungen", + "gui.worldhandler.config.comment.settings.tooltips": "Aktiviert Tooltips", + "gui.worldhandler.config.comment.settings.watch": "Aktiviert Uhr", + "gui.worldhandler.config.comment.settings.smooth_watch": "Aktiviert Geschmeidige Uhr", + "gui.worldhandler.config.comment.settings.pause_game": "Spiel Pausieren", + "gui.worldhandler.config.comment.settings.custom_times": "Aktiviert Benutzerdefinierte Zeiten", + "gui.worldhandler.config.comment.settings.permission_query": "Aktiviert Berechtigungsabfrage", + "gui.worldhandler.config.comment.settings.highlight_blocks": "Hebt ausgewählte Blöcke hervor", + "gui.worldhandler.config.comment.settings.custom_time_dawn": "Sonnenaufgangszeit in Ticks", + "gui.worldhandler.config.comment.settings.custom_time_noon": "Mittagszeit in Ticks", + "gui.worldhandler.config.comment.settings.custom_time_sunset": "Sonnenuntergangszeit in Ticks", + "gui.worldhandler.config.comment.settings.custom_time_midnight": "Mitternachtszeit in Ticks", + "gui.worldhandler.config.comment.settings.block_placing_mode": "Platziermodus für Blöcke", + + "gui.worldhandler.config.key.skin.icons": "Ikon Größe", + "gui.worldhandler.config.key.skin.label_color": "Label Farbe", + "gui.worldhandler.config.key.skin.headline_color": "Farbe der Überschrift", + "gui.worldhandler.config.key.skin.background_red": "Hintergrund Rot", + "gui.worldhandler.config.key.skin.background_green": "Hintergrund Grün", + "gui.worldhandler.config.key.skin.background_blue": "Hintergrund Blau", + "gui.worldhandler.config.key.skin.button_red": "Schaltflächen Rot", + "gui.worldhandler.config.key.skin.button_green": "Schaltflächen Grün", + "gui.worldhandler.config.key.skin.button_blue": "Schaltflächen Blau", + "gui.worldhandler.config.key.skin.textures": "Texturen", + "gui.worldhandler.config.key.skin.sharp_tab_edges": "Scharfe Tab Kanten", + "gui.worldhandler.config.key.skin.draw_background": "Zeichne Hintergrund", + "gui.worldhandler.config.key.skin.background_alpha": "Hintergrund Alpha", + "gui.worldhandler.config.key.skin.button_alpha": "Hintergrund Alpha", + + "gui.worldhandler.config.comment.skin.icons": "Größe der Ikons", + "gui.worldhandler.config.comment.skin.label_color": "Label Farbe", + "gui.worldhandler.config.comment.skin.headline_color": "Farbe der Überschrift", + "gui.worldhandler.config.comment.skin.background_red": "Hintergrund Rot", + "gui.worldhandler.config.comment.skin.background_green": "Hintergrund Grün", + "gui.worldhandler.config.comment.skin.background_blue": "Hintergrund Blau", + "gui.worldhandler.config.comment.skin.button_red": "Schaltflächen Rot", + "gui.worldhandler.config.comment.skin.button_green": "Schaltflächen Grün", + "gui.worldhandler.config.comment.skin.button_blue": "Schaltflächen Blau", + "gui.worldhandler.config.comment.skin.textures": "Hintergrund Texturen", + "gui.worldhandler.config.comment.skin.sharp_tab_edges": "Scharfe Tab Kanten Aktiviert", + "gui.worldhandler.config.comment.skin.draw_background": "Hintergrund Aktiviert", + "gui.worldhandler.config.comment.skin.background_alpha": "Hintergrund Alpha", + "gui.worldhandler.config.comment.skin.button_alpha": "Schaltflächen Alpha", + + "gui.worldhandler.config.comment.butcher": "Metzeln von %s Aktiviert", + + "gui.worldhandler.config.key.sliders.max_potion_amplifier": "Max Trank Verstärker", + "gui.worldhandler.config.key.sliders.max_item_enchantment": "Max Item Verzauberung", + "gui.worldhandler.config.key.sliders.max_item_attributes": "Max Item Attribute", + "gui.worldhandler.config.key.sliders.max_summon_potion_amplifier": "Max Trank Verstärker (Beschwören)", + "gui.worldhandler.config.key.sliders.max_summon_potion_minutes": "Max Trank Minuten (Beschwören)", + "gui.worldhandler.config.key.sliders.max_summon_attributes": "Max Attribute (Beschwören)", + "gui.worldhandler.config.key.sliders.max_experience": "Max Erfahrungspunkte", + "gui.worldhandler.config.key.sliders.max_player_points": "Max Spielerpunkte", + + "gui.worldhandler.config.comment.sliders.max_potion_amplifier": "Max Trank Verstärker", + "gui.worldhandler.config.comment.sliders.max_item_enchantment": "Max Item Verzauberung", + "gui.worldhandler.config.comment.sliders.max_item_attributes": "Max Item Attribute", + "gui.worldhandler.config.comment.sliders.max_summon_potion_amplifier": "Max Trank Verstärker (Beschwören)", + "gui.worldhandler.config.comment.sliders.max_summon_potion_minutes": "Max Trank Minuten (Beschwören)", + "gui.worldhandler.config.comment.sliders.max_summon_attributes": "Max Attribute (Beschwören)", + "gui.worldhandler.config.comment.sliders.max_experience": "Max Erfahrungspunkte", + "gui.worldhandler.config.comment.sliders.max_player_points": "Max Spielerpunkte", + + "gui.worldhandler.tab.scoreboard.objectives": "Objekte", + "gui.worldhandler.tab.scoreboard.teams": "Teams", + "gui.worldhandler.tab.scoreboard.players": "Spieler", + + "gui.worldhandler.tab.player.player": "Player", + "gui.worldhandler.tab.player.experience": "Experience", + "gui.worldhandler.tab.player.advancements": "Fortschritt", + + "gui.worldhandler.tab.entities.summon": "Beschwören", + + "gui.worldhandler.tab.world.world": "Welt", + "gui.worldhandler.tab.world.gamerules": "Spielregeln", + + "gui.worldhandler.tab.blocks.edit_blocks": "Blöcke Ändern", + "gui.worldhandler.tab.blocks.sign_editor": "Schilder Ändern", + "gui.worldhandler.tab.blocks.note_block_editor": "Noten Ändern", + + "gui.worldhandler.tab.items.custom_item": "Item Erstellen", + "gui.worldhandler.tab.items.enchantment": "Verzaubern", + "gui.worldhandler.tab.items.recipes": "Rezepte", + + "gui.worldhandler.tab.containers": "Container", + "gui.worldhandler.tab.multiplayer": "Mehrspieler", + + "gui.worldhandler.title.entities.summon": "Beschwören", + + "gui.worldhandler.title.items.custom_item": "Item Erstellen", + "gui.worldhandler.title.items.enchantment": "Verzaubern", + "gui.worldhandler.title.items.recipes": "Rezepte", + + "gui.worldhandler.title.blocks.edit_blocks": "Blöcke Ändern", + "gui.worldhandler.title.blocks.sign_editor": "Schilder Ändern", + "gui.worldhandler.title.blocks.note_block_editor": "Noten Ändern", + + "gui.worldhandler.title.scoreboard": "Anzeigetafel", + + "gui.worldhandler.title.world.world": "Welt", + "gui.worldhandler.title.world.gamerules": "Gamerules", + + "gui.worldhandler.title.player.player": "Spieler", + "gui.worldhandler.title.player.experience": "Erfahrung", + "gui.worldhandler.title.player.advancements": "Fortschritt", + + "gui.worldhandler.title.butcher": "Metzler", + "gui.worldhandler.title.change_world": "Welt Wechseln", + "gui.worldhandler.title.potions": "Tränke", + + "gui.worldhandler.title.containers": "Container", + "gui.worldhandler.title.multiplayer": "Mehrspieler", + + "gui.worldhandler.advancements.grant": "Vergeben", + "gui.worldhandler.advancements.revoke": "Wiederrufen", + "gui.worldhandler.advancements.only": "Nur", + "gui.worldhandler.advancements.until": "Bis", + "gui.worldhandler.advancements.from": "Von", + "gui.worldhandler.advancements.through": "Durch", + "gui.worldhandler.advancements.everything": "Alles", + + "gui.worldhandler.change_world.singleplayer": "Einzelspieler Welt", + "gui.worldhandler.change_world.multiplayer": "Mehrspieler Server", + + "gui.worldhandler.butcher.radius": "Radius", + "gui.worldhandler.butcher.configure": "Konfigurieren", + "gui.worldhandler.butcher.slaughter": "Metzeln", + + "gui.worldhandler.multiplayer.kick": "Kicken", + "gui.worldhandler.multiplayer.ban": "Bannen", + "gui.worldhandler.multiplayer.pardon": "Pardon", + "gui.worldhandler.multiplayer.permissions": "Berechtigung", + "gui.worldhandler.multiplayer.runtime": "Laufzeit", + "gui.worldhandler.multiplayer.whitelist": "Weiße Liste", + "gui.worldhandler.multiplayer.username": "Benutzername", + + "gui.worldhandler.multiplayer.kick_ban.reason": "Grund", + + "gui.worldhandler.multiplayer.permissions.give": "Berechtigung Geben", + "gui.worldhandler.multiplayer.permissions.take": "Berechtigung Nehmen", + + "gui.worldhandler.multiplayer.runtime.save_world": "Welt Speichern", + "gui.worldhandler.multiplayer.runtime.autosave": "Autom. Speichern: %s", + "gui.worldhandler.multiplayer.runtime.stop_server": "Server Stoppen", + + "gui.worldhandler.multiplayer.whitelist.reload": "Weiße Liste Neu Laden", + "gui.worldhandler.multiplayer.whitelist.whitelist": "Weiße Liste: %s", + "gui.worldhandler.multiplayer.whitelist.add": "Hinzuf", + "gui.worldhandler.multiplayer.whitelist.remove": "Entf", + + "gui.worldhandler.potions.effect": "Effekt", + "gui.worldhandler.potions.effect.give": "Geben", + "gui.worldhandler.potions.effect.remove": "Entfernen", + "gui.worldhandler.potions.effect.remove_all": "Alle Entfernen", + "gui.worldhandler.potions.effect.amplifier": "Verstärker", + "gui.worldhandler.potions.effect.ambient": "Umgebung: %s", + "gui.worldhandler.potions.effect.particles": "Partikel: %s", + "gui.worldhandler.potions.effect.bottle": "Trank", + "gui.worldhandler.potions.effect.splash": "Wurftrank", + "gui.worldhandler.potions.effect.lingering": "Verweil", + "gui.worldhandler.potions.effect.tipped_arrow": "Pfeil", + + "gui.worldhandler.entities": "Lebewesen", + "gui.worldhandler.items": "Items", + "gui.worldhandler.scoreboard": "Anzeigetafel", + "gui.worldhandler.resourcepack": "Ressourcen", + "gui.worldhandler.change_world": "Welt Wechseln", + "gui.worldhandler.world": "Welt", + "gui.worldhandler.blocks": "Blöcke", + "gui.worldhandler.player": "Spieler", + + "gui.worldhandler.items.custom_item.start": "Start", + "gui.worldhandler.items.custom_item.enchantment": "Verzauberung", + "gui.worldhandler.items.custom_item.attributes": "Attribute", + "gui.worldhandler.items.custom_item.custom_item": "Erstellen", + + "gui.worldhandler.items.custom_item.start.item_id": "Item", + "gui.worldhandler.items.custom_item.start.lore_1": "Sage I", + "gui.worldhandler.items.custom_item.start.lore_2": "Sage II", + "gui.worldhandler.items.custom_item.start.custom_name": "Eigener Name", + + "gui.worldhandler.items.enchantment.level": "Level", + "gui.worldhandler.items.enchantment.enchant": "Verzaubern", + + "gui.worldhandler.blocks.sign_editor.look_at_sign": "Gucke auf ein Schild und drücke '%s'", + "gui.worldhandler.blocks.sign_editor.text_line_1": "Textzeile I", + "gui.worldhandler.blocks.sign_editor.text_line_2": "Textzeile II", + "gui.worldhandler.blocks.sign_editor.text_line_3": "Textzeile III", + "gui.worldhandler.blocks.sign_editor.text_line_4": "Textzeile IV", + "gui.worldhandler.blocks.sign_editor.commmand": "Befehl", + "gui.worldhandler.blocks.sign_editor.done": "Fertig", + "gui.worldhandler.blocks.sign_editor.format_text_line": "Textzeile formatieren", + + "gui.worldhandler.blocks.note_block_editor.look_at_note_block": "Gucke auf einen Notenblock und drücke '%s'", + "gui.worldhandler.blocks.note_block_editor.c": "C", + "gui.worldhandler.blocks.note_block_editor.d": "D", + "gui.worldhandler.blocks.note_block_editor.e": "E", + "gui.worldhandler.blocks.note_block_editor.f": "F", + "gui.worldhandler.blocks.note_block_editor.g": "G", + "gui.worldhandler.blocks.note_block_editor.a": "A", + "gui.worldhandler.blocks.note_block_editor.b": "H", + + "gui.worldhandler.gamerules.rule.commandBlockOutput": "Befehlsblock Feedback", + "gui.worldhandler.gamerules.rule.disableElytraMovementCheck": "Deaktiviere Speed-Check", + "gui.worldhandler.gamerules.rule.doDaylightCycle": "Tageszyklus", + "gui.worldhandler.gamerules.rule.doEntityDrops": "Entity Drops", + "gui.worldhandler.gamerules.rule.doFireTick": "Feuerverbreitung", + "gui.worldhandler.gamerules.rule.doMobLoot": "Tierdrops", + "gui.worldhandler.gamerules.rule.doMobSpawning": "Tiere Spawnen", + "gui.worldhandler.gamerules.rule.doTileDrops": "Block Drops", + "gui.worldhandler.gamerules.rule.keepInventory": "Behalte Inventar", + "gui.worldhandler.gamerules.rule.logAdminCommands": "Adminbefehle Aufschreiben", + "gui.worldhandler.gamerules.rule.mobGriefing": "Griefing von Tieren", + "gui.worldhandler.gamerules.rule.naturalRegeneration": "Natürliche Regeneration", + "gui.worldhandler.gamerules.rule.randomTickSpeed": "Zufällige Tickgeschwindigkeit", + "gui.worldhandler.gamerules.rule.reducedDebugInfo": "Reduzierte Debug Info", + "gui.worldhandler.gamerules.rule.sendCommandFeedback": "Befehlsfeedback", + "gui.worldhandler.gamerules.rule.showDeathMessages": "Todesnachrichten", + "gui.worldhandler.gamerules.rule.spawnRadius": "Spawn Radius", + "gui.worldhandler.gamerules.rule.spectatorsGenerateChunks": "Zuschauer Generieren Chunks", + "gui.worldhandler.gamerules.rule.doWeatherCycle": "Wetterzyklus", + "gui.worldhandler.gamerules.rule.maxEntityCramming": "Max Entity Stapel", + "gui.worldhandler.gamerules.rule.announceAdvancements": "Fortschritte bekanntgeben", + "gui.worldhandler.gamerules.rule.doLimitedCrafting": "Limitertes Craften", + "gui.worldhandler.gamerules.rule.gameLoopFunction": "Game Loop Funktion", + "gui.worldhandler.gamerules.rule.maxCommandChainLength": "Kommandokettenlänge", + + "gui.worldhandler.world_info.start": "Start", + "gui.worldhandler.world_info.world": "Welt", + "gui.worldhandler.world_info.statistics": "Statistiken", + + "gui.worldhandler.world_info.n_a": "n/v", + + "gui.worldhandler.world_info.start.spawn": "Spawn", + + "gui.worldhandler.world_info.world.name": "Name", + "gui.worldhandler.world_info.world.world_type": "Welttyp", + "gui.worldhandler.world_info.world.seed": "Seed", + "gui.worldhandler.world_info.world.copy_seed": "Seed Kopieren", + + "gui.worldhandler.world_info.statistics.world_time": "Weltzeit", + "gui.worldhandler.world_info.statistics.played": "Played", + + "gui.worldhandler.edit_blocks.coordinates": "Koordinaten", + "gui.worldhandler.edit_blocks.fill": "Füllen", + "gui.worldhandler.edit_blocks.replace": "Ersetzen", + "gui.worldhandler.edit_blocks.clone": "Klonen", + + "gui.worldhandler.edit_blocks.replace.block_id_replace": "Block ID Ersetze", + "gui.worldhandler.edit_blocks.replace.block_id_place": "Block ID Platzier", + + "gui.worldhandler.edit_blocks.fill.block_id_to_fill": "Block ID Füllen", + + "gui.worldhandler.edit_blocks.clone.mode.replace": "Ersetzen", + "gui.worldhandler.edit_blocks.clone.mode.masked": "Maskiert", + "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", + "gui.worldhandler.scoreboard.slot.sidebar.team": "Seitentafel Team", + + "gui.worldhandler.scoreboard.objectives.objective": "Objekt", + "gui.worldhandler.scoreboard.objectives.create": "Erstellen", + "gui.worldhandler.scoreboard.objectives.display": "Anzeigen", + "gui.worldhandler.scoreboard.objectives.undisplay": "Verstecken", + "gui.worldhandler.scoreboard.objectives.remove": "Entfernen", + + "gui.worldhandler.scoreboard.objectives.stat.air": "Spieler Luft", + "gui.worldhandler.scoreboard.objectives.stat.armor": "Spieler Rüstung", + "gui.worldhandler.scoreboard.objectives.stat.deathCount": "Tode", + "gui.worldhandler.scoreboard.objectives.stat.dummy": "Dummy", + "gui.worldhandler.scoreboard.objectives.stat.food": "Spieler Hunger", + "gui.worldhandler.scoreboard.objectives.stat.health": "Spieler Leben", + "gui.worldhandler.scoreboard.objectives.stat.killedByTeam": "Von Team Getötet", + "gui.worldhandler.scoreboard.objectives.stat.level": "Erfahrungslevel", + "gui.worldhandler.scoreboard.objectives.stat.custom": "Statistik", + "gui.worldhandler.scoreboard.objectives.stat.killed": "Tötungen", + "gui.worldhandler.scoreboard.objectives.stat.killed_by": "Getötet Von", + "gui.worldhandler.scoreboard.objectives.stat.playerKillCount": "Spieler Getötet", + "gui.worldhandler.scoreboard.objectives.stat.teamkill": "Teamtötungen", + "gui.worldhandler.scoreboard.objectives.stat.totalKillCount": "Tötungen", + "gui.worldhandler.scoreboard.objectives.stat.trigger": "Auslöser", + "gui.worldhandler.scoreboard.objectives.stat.xp": "Erfahrung", + + "gui.worldhandler.scoreboard.team.options.friendlyFire": "Freundliches Feuer", + "gui.worldhandler.scoreboard.team.options.seeFriendlyInvisibles": "Unsichtbare Freunde", + "gui.worldhandler.scoreboard.team.options.nametagVisibility": "Namensschild Sichtbarkeit", + "gui.worldhandler.scoreboard.team.options.deathMessageVisibility": "Todesnachrichten", + "gui.worldhandler.scoreboard.team.options.collisionRule": "Teamkollision", + "gui.worldhandler.scoreboard.team.options.color": "Farbe", + + "gui.worldhandler.scoreboard.team.suboption.always": "Immer", + "gui.worldhandler.scoreboard.team.suboption.never": "Niemals", + "gui.worldhandler.scoreboard.team.suboption.hideForOtherTeams": "Für Andere Unsichtbar", + "gui.worldhandler.scoreboard.team.suboption.hideForOwnTeam": "Für Eigene Unsichtbar", + "gui.worldhandler.scoreboard.team.suboption.pushOwnTeam": "Bewege Eigenes Team", + "gui.worldhandler.scoreboard.team.suboption.pushOtherTeams": "Bewege Andere Teams", + "gui.worldhandler.scoreboard.team.suboption.true": "Ein", + "gui.worldhandler.scoreboard.team.suboption.false": "Aus", + + "gui.worldhandler.scoreboard.team.team": "Team", + "gui.worldhandler.scoreboard.team.create": "Erstellen", + "gui.worldhandler.scoreboard.team.join": "Beitreten", + "gui.worldhandler.scoreboard.team.leave": "Verlassen", + "gui.worldhandler.scoreboard.team.remove": "Entfernen", + "gui.worldhandler.scoreboard.team.empty": "Leeren", + "gui.worldhandler.scoreboard.team.options": "Team Optionen", + + "gui.worldhandler.scoreboard.players.points": "Punkte", + "gui.worldhandler.scoreboard.players.tag": "Etikett", + "gui.worldhandler.scoreboard.players.trigger": "Auslöser", + + "gui.worldhandler.entities.player.start": "Start", + "gui.worldhandler.entities.player.score": "Wertung", + "gui.worldhandler.entities.player.position": "Position", + "gui.worldhandler.entities.player.miscellaneous": "Sonstige", + + "gui.worldhandler.entities.player.score.experience": "Erfahrung", + "gui.worldhandler.entities.player.score.experience_coins": "Erf-Punkte", + + "gui.worldhandler.entities.player.position.copy_position": "Kopiere Position", + + "gui.worldhandler.entities.player.miscellaneous.set_spawn": "Setze Spawn", + "gui.worldhandler.entities.player.miscellaneous.set_global_spawn": "Setze Globalen Spawn", + "gui.worldhandler.entities.player.miscellaneous.kill": "Töten", + "gui.worldhandler.entities.player.miscellaneous.clear_inventory": "Leere Inventar", + + "gui.worldhandler.entities.summon.start": "Start", + "gui.worldhandler.entities.summon.potion_effects": "Statuseffekte", + "gui.worldhandler.entities.summon.attributes": "Attribute", + "gui.worldhandler.entities.summon.equipment": "Ausrüstung", + + "gui.worldhandler.entities.summon.start.mob_id": "Tier ID", + "gui.worldhandler.entities.summon.start.custom_name": "Eigener Name", + "gui.worldhandler.entities.summon.start.passenger_mob_id": "Passagier Tier ID", + + "gui.worldhandler.potion.time.hours": "Stunden", + "gui.worldhandler.potion.time.minutes": "Minuten", + "gui.worldhandler.potion.time.seconds": "Sekunden", + + "gui.worldhandler.shortcuts.tooltip.home": "Home", + "gui.worldhandler.shortcuts.tooltip.butcher": "Metzeln", + "gui.worldhandler.shortcuts.tooltip.settings": "Einstellungen", + "gui.worldhandler.shortcuts.tooltip.potions": "Tränke", + + "gui.worldhandler.shortcuts.tooltip.gamemode": "Spielmodus: %s", + "gui.worldhandler.shortcuts.tooltip.gamemode.survival": "Überleben", + "gui.worldhandler.shortcuts.tooltip.gamemode.creative": "Kreativ", + "gui.worldhandler.shortcuts.tooltip.gamemode.adventure": "Abenteuer", + "gui.worldhandler.shortcuts.tooltip.gamemode.spectator": "Zuschauer", + + "gui.worldhandler.shortcuts.tooltip.difficulty": "Schwierigkeit: %s", + "gui.worldhandler.shortcuts.tooltip.difficulty.peaceful": "Friedlich", + "gui.worldhandler.shortcuts.tooltip.difficulty.easy": "Einfach", + "gui.worldhandler.shortcuts.tooltip.difficulty.normal": "Normal", + "gui.worldhandler.shortcuts.tooltip.difficulty.hard": "Schwer", + + "gui.worldhandler.shortcuts.tooltip.weather": "Wetter: %s", + "gui.worldhandler.shortcuts.tooltip.weather.thunder": "Unwetter", + "gui.worldhandler.shortcuts.tooltip.weather.rainy": "Regen", + "gui.worldhandler.shortcuts.tooltip.weather.clear": "Sonnig", + + "gui.worldhandler.shortcuts.tooltip.time": "Zeit: %s", + "gui.worldhandler.shortcuts.tooltip.time.midnight": "Mitternacht (%s)", + "gui.worldhandler.shortcuts.tooltip.time.sunset": "Sonnenuntergang (%s)", + "gui.worldhandler.shortcuts.tooltip.time.noon": "Mittag (%s)", + "gui.worldhandler.shortcuts.tooltip.time.dawn": "Sonnenaufgang (%s)", + + "gui.worldhandler.generic.back": "Zurück", + "gui.worldhandler.generic.backToGame": "Schließen", + "gui.worldhandler.generic.on": "An", + "gui.worldhandler.generic.off": "Aus", + "gui.worldhandler.generic.yes": "Ja", + "gui.worldhandler.generic.no": "Nein", + "gui.worldhandler.generic.value": "Wert", + "gui.worldhandler.generic.name": "Name", + "gui.worldhandler.generic.enable": "Ein", + "gui.worldhandler.generic.disable": "Aus", + "gui.worldhandler.generic.edit_username": "Benutzername", + + "gui.worldhandler.actions.add": "Hinzufügen", + "gui.worldhandler.actions.remove": "Entfernen", + "gui.worldhandler.actions.set": "Setzen", + "gui.worldhandler.actions.reset": "Zurücksetzen", + "gui.worldhandler.actions.set_to_0": "Auf 0 setzen", + "gui.worldhandler.actions.perform": "Ausführen", + "gui.worldhandler.actions.send": "Senden", + "gui.worldhandler.actions.copy": "Kopieren", + "gui.worldhandler.actions.place_command_block": "Platziere Befehlsblock", + + "gui.worldhandler.color": "Farbe", + "gui.worldhandler.color.black": "Schwarz", + "gui.worldhandler.color.dark_blue": "Dunkel Blau", + "gui.worldhandler.color.dark_green": "Dunkel Grün", + "gui.worldhandler.color.dark_aqua": "Dunkel Türkis", + "gui.worldhandler.color.dark_red": "Dunkel Rot", + "gui.worldhandler.color.dark_purple": "Dunkel Lila", + "gui.worldhandler.color.gold": "Gold", + "gui.worldhandler.color.gray": "Grau", + "gui.worldhandler.color.dark_gray": "Dunkel Grau", + "gui.worldhandler.color.blue": "Blau", + "gui.worldhandler.color.green": "Grün", + "gui.worldhandler.color.aqua": "Türkis", + "gui.worldhandler.color.red": "Rot", + "gui.worldhandler.color.light_purple": "Pink", + "gui.worldhandler.color.yellow": "Gelb", + "gui.worldhandler.color.white": "Weiss", + "gui.worldhandler.color.reset": "Normal", + + "worldhandler.permission.refused": "Du hast nicht die benötigte Berechtigung, um den World Handler zu benutzen", + "worldhandler.permission.refused.change": "Ändere \"%s\" um diese Nachricht zu umgehen", + + "worldhandler.error.gui": "Ein unerwarteter Fehler ist aufgetreten. Bitte sende einen Unfallbericht mit deinen Protokolldateien an das %s Forum" +} \ No newline at end of file diff --git a/src/main/resources/assets/worldhandler/lang/de_de.lang b/src/main/resources/assets/worldhandler/lang/de_de.lang deleted file mode 100644 index 265ba61..0000000 --- a/src/main/resources/assets/worldhandler/lang/de_de.lang +++ /dev/null @@ -1,453 +0,0 @@ -gui.worldhandler.config.tooltip=World Handler Einstellungen - -gui.worldhandler.config.category.settings=Einstellungen -gui.worldhandler.config.category.skin=Skin -gui.worldhandler.config.category.butcher=Metzler -gui.worldhandler.config.category.sliders=Regler - -gui.worldhandler.config.key.settings.biome_indicator=Biome Indikator -gui.worldhandler.config.key.settings.command_syntax=Befehlssyntax -gui.worldhandler.config.key.settings.shortcuts=Schnellsteuerleiste -gui.worldhandler.config.key.settings.key_shortcuts=Tasten Abkürzungen -gui.worldhandler.config.key.settings.tooltips=Tooltips -gui.worldhandler.config.key.settings.watch=Uhr -gui.worldhandler.config.key.settings.smooth_watch=Geschmeidige Uhr -gui.worldhandler.config.key.settings.pause_game=Spiel Pausieren -gui.worldhandler.config.key.settings.custom_times=Benutzerdefinierte Zeiten -gui.worldhandler.config.key.settings.permission_query=Berechtigungsabfrage -gui.worldhandler.config.key.settings.highlight_blocks=Blöcke Hervorheben -gui.worldhandler.config.key.settings.custom_time_dawn=Sonnenaufgangszeit -gui.worldhandler.config.key.settings.custom_time_noon=Mittagszeit -gui.worldhandler.config.key.settings.custom_time_sunset=Sonnenuntergangszeit -gui.worldhandler.config.key.settings.custom_time_midnight=Mitternachtszeit -gui.worldhandler.config.key.settings.block_placing_mode=Platziermodus für Blöcke - -gui.worldhandler.config.comment.settings.custom_time_dawn=Aktiviert Biome Indikator -gui.worldhandler.config.comment.settings.command_syntax=Aktiviert Befehlssyntax -gui.worldhandler.config.comment.settings.shortcuts=Aktiviert Schnellsteuerleiste -gui.worldhandler.config.comment.settings.key_shortcuts=Aktiviert Tasten Abkürzungen -gui.worldhandler.config.comment.settings.tooltips=Aktiviert Tooltips -gui.worldhandler.config.comment.settings.watch=Aktiviert Uhr -gui.worldhandler.config.comment.settings.smooth_watch=Aktiviert Geschmeidige Uhr -gui.worldhandler.config.comment.settings.pause_game=Spiel Pausieren -gui.worldhandler.config.comment.settings.custom_times=Aktiviert Benutzerdefinierte Zeiten -gui.worldhandler.config.comment.settings.permission_query=Aktiviert Berechtigungsabfrage -gui.worldhandler.config.comment.settings.highlight_blocks=Hebt ausgewählte Blöcke hervor -gui.worldhandler.config.comment.settings.custom_time_dawn=Sonnenaufgangszeit in Ticks -gui.worldhandler.config.comment.settings.custom_time_noon=Mittagszeit in Ticks -gui.worldhandler.config.comment.settings.custom_time_sunset=Sonnenuntergangszeit in Ticks -gui.worldhandler.config.comment.settings.custom_time_midnight=Mitternachtszeit in Ticks -gui.worldhandler.config.comment.settings.block_placing_mode=Platziermodus für Blöcke - -gui.worldhandler.config.key.skin.icons=Ikon Größe -gui.worldhandler.config.key.skin.label_color=Label Farbe -gui.worldhandler.config.key.skin.headline_color=Farbe der Überschrift -gui.worldhandler.config.key.skin.background_red=Hintergrund Rot -gui.worldhandler.config.key.skin.background_green=Hintergrund Grün -gui.worldhandler.config.key.skin.background_blue=Hintergrund Blau -gui.worldhandler.config.key.skin.button_red=Schaltflächen Rot -gui.worldhandler.config.key.skin.button_green=Schaltflächen Grün -gui.worldhandler.config.key.skin.button_blue=Schaltflächen Blau -gui.worldhandler.config.key.skin.textures=Texturen -gui.worldhandler.config.key.skin.sharp_tab_edges=Scharfe Tab Kanten -gui.worldhandler.config.key.skin.draw_background=Zeichne Hintergrund -gui.worldhandler.config.key.skin.background_alpha=Hintergrund Alpha -gui.worldhandler.config.key.skin.button_alpha=Hintergrund Alpha - -gui.worldhandler.config.comment.skin.icons=Größe der Ikons -gui.worldhandler.config.comment.skin.label_color=Label Farbe -gui.worldhandler.config.comment.skin.headline_color=Farbe der Überschrift -gui.worldhandler.config.comment.skin.background_red=Hintergrund Rot -gui.worldhandler.config.comment.skin.background_green=Hintergrund Grün -gui.worldhandler.config.comment.skin.background_blue=Hintergrund Blau -gui.worldhandler.config.comment.skin.button_red=Schaltflächen Rot -gui.worldhandler.config.comment.skin.button_green=Schaltflächen Grün -gui.worldhandler.config.comment.skin.button_blue=Schaltflächen Blau -gui.worldhandler.config.comment.skin.textures=Hintergrund Texturen -gui.worldhandler.config.comment.skin.sharp_tab_edges=Scharfe Tab Kanten Aktiviert -gui.worldhandler.config.comment.skin.draw_background=Hintergrund Aktiviert -gui.worldhandler.config.comment.skin.background_alpha=Hintergrund Alpha -gui.worldhandler.config.comment.skin.button_alpha=Schaltflächen Alpha - -gui.worldhandler.config.comment.butcher=Metzeln von %s Aktiviert - -gui.worldhandler.config.key.sliders.max_potion_amplifier=Max Trank Verstärker -gui.worldhandler.config.key.sliders.max_item_enchantment=Max Item Verzauberung -gui.worldhandler.config.key.sliders.max_item_attributes=Max Item Attribute -gui.worldhandler.config.key.sliders.max_summon_potion_amplifier=Max Trank Verstärker (Beschwören) -gui.worldhandler.config.key.sliders.max_summon_potion_minutes=Max Trank Minuten (Beschwören) -gui.worldhandler.config.key.sliders.max_summon_attributes=Max Attribute (Beschwören) -gui.worldhandler.config.key.sliders.max_experience=Max Erfahrungspunkte -gui.worldhandler.config.key.sliders.max_player_points=Max Spielerpunkte - -gui.worldhandler.config.comment.sliders.max_potion_amplifier=Max Trank Verstärker -gui.worldhandler.config.comment.sliders.max_item_enchantment=Max Item Verzauberung -gui.worldhandler.config.comment.sliders.max_item_attributes=Max Item Attribute -gui.worldhandler.config.comment.sliders.max_summon_potion_amplifier=Max Trank Verstärker (Beschwören) -gui.worldhandler.config.comment.sliders.max_summon_potion_minutes=Max Trank Minuten (Beschwören) -gui.worldhandler.config.comment.sliders.max_summon_attributes=Max Attribute (Beschwören) -gui.worldhandler.config.comment.sliders.max_experience=Max Erfahrungspunkte -gui.worldhandler.config.comment.sliders.max_player_points=Max Spielerpunkte - -gui.worldhandler.tab.scoreboard.objectives=Objekte -gui.worldhandler.tab.scoreboard.teams=Teams -gui.worldhandler.tab.scoreboard.players=Spieler - -gui.worldhandler.tab.player.player=Player -gui.worldhandler.tab.player.experience=Experience -gui.worldhandler.tab.player.advancements=Fortschritt - -gui.worldhandler.tab.entities.summon=Beschwören - -gui.worldhandler.tab.world.world=Welt -gui.worldhandler.tab.world.gamerules=Spielregeln - -gui.worldhandler.tab.blocks.edit_blocks=Blöcke Ändern -gui.worldhandler.tab.blocks.sign_editor=Schilder Ändern -gui.worldhandler.tab.blocks.note_block_editor=Noten Ändern - -gui.worldhandler.tab.items.custom_item=Item Erstellen -gui.worldhandler.tab.items.enchantment=Verzaubern -gui.worldhandler.tab.items.recipes=Rezepte - -gui.worldhandler.tab.containers=Container -gui.worldhandler.tab.multiplayer=Mehrspieler - -gui.worldhandler.title.entities.summon=Beschwören - -gui.worldhandler.title.items.custom_item=Item Erstellen -gui.worldhandler.title.items.enchantment=Verzaubern -gui.worldhandler.title.items.recipes=Rezepte - -gui.worldhandler.title.blocks.edit_blocks=Blöcke Ändern -gui.worldhandler.title.blocks.sign_editor=Schilder Ändern -gui.worldhandler.title.blocks.note_block_editor=Noten Ändern - -gui.worldhandler.title.scoreboard=Anzeigetafel - -gui.worldhandler.title.world.world=Welt -gui.worldhandler.title.world.gamerules=Gamerules - -gui.worldhandler.title.player.player=Spieler -gui.worldhandler.title.player.experience=Erfahrung -gui.worldhandler.title.player.advancements=Fortschritt - -gui.worldhandler.title.butcher=Metzler -gui.worldhandler.title.change_world=Welt Wechseln -gui.worldhandler.title.potions=Tränke - -gui.worldhandler.title.containers=Container -gui.worldhandler.title.multiplayer=Mehrspieler - -gui.worldhandler.advancements.grant=Vergeben -gui.worldhandler.advancements.revoke=Wiederrufen -gui.worldhandler.advancements.only=Nur -gui.worldhandler.advancements.until=Bis -gui.worldhandler.advancements.from=Von -gui.worldhandler.advancements.through=Durch -gui.worldhandler.advancements.everything=Alles - -gui.worldhandler.change_world.singleplayer=Einzelspieler Welt -gui.worldhandler.change_world.multiplayer=Mehrspieler Server - -gui.worldhandler.butcher.radius=Radius -gui.worldhandler.butcher.configure=Konfigurieren -gui.worldhandler.butcher.slaughter=Metzeln - -gui.worldhandler.multiplayer.kick=Kicken -gui.worldhandler.multiplayer.ban=Bannen -gui.worldhandler.multiplayer.pardon=Pardon -gui.worldhandler.multiplayer.permissions=Berechtigung -gui.worldhandler.multiplayer.runtime=Laufzeit -gui.worldhandler.multiplayer.whitelist=Weiße Liste -gui.worldhandler.multiplayer.username=Benutzername - -gui.worldhandler.multiplayer.kick_ban.reason=Grund - -gui.worldhandler.multiplayer.permissions.give=Berechtigung Geben -gui.worldhandler.multiplayer.permissions.take=Berechtigung Nehmen - -gui.worldhandler.multiplayer.runtime.save_world=Welt Speichern -gui.worldhandler.multiplayer.runtime.autosave=Autom. Speichern: %s -gui.worldhandler.multiplayer.runtime.stop_server=Server Stoppen - -gui.worldhandler.multiplayer.whitelist.reload=Weiße Liste Neu Laden -gui.worldhandler.multiplayer.whitelist.whitelist=Weiße Liste: %s -gui.worldhandler.multiplayer.whitelist.add=Hinzuf -gui.worldhandler.multiplayer.whitelist.remove=Entf - -gui.worldhandler.potions.effect=Effekt -gui.worldhandler.potions.effect.give=Geben -gui.worldhandler.potions.effect.remove=Entfernen -gui.worldhandler.potions.effect.remove_all=Alle Entfernen -gui.worldhandler.potions.effect.amplifier=Verstärker -gui.worldhandler.potions.effect.ambient=Umgebung: %s -gui.worldhandler.potions.effect.particles=Partikel: %s -gui.worldhandler.potions.effect.bottle=Trank -gui.worldhandler.potions.effect.splash=Wurftrank -gui.worldhandler.potions.effect.lingering=Verweil -gui.worldhandler.potions.effect.tipped_arrow=Pfeil - -gui.worldhandler.entities=Lebewesen -gui.worldhandler.items=Items -gui.worldhandler.scoreboard=Anzeigetafel -gui.worldhandler.resourcepack=Ressourcen -gui.worldhandler.change_world=Welt Wechseln -gui.worldhandler.world=Welt -gui.worldhandler.blocks=Blöcke -gui.worldhandler.player=Spieler - -gui.worldhandler.items.custom_item.start=Start -gui.worldhandler.items.custom_item.enchantment=Verzauberung -gui.worldhandler.items.custom_item.attributes=Attribute -gui.worldhandler.items.custom_item.custom_item=Erstellen - -gui.worldhandler.items.custom_item.start.item_id=Item -gui.worldhandler.items.custom_item.start.lore_1=Sage I -gui.worldhandler.items.custom_item.start.lore_2=Sage II -gui.worldhandler.items.custom_item.start.custom_name=Eigener Name - -gui.worldhandler.items.enchantment.level=Level -gui.worldhandler.items.enchantment.enchant=Verzaubern - -gui.worldhandler.blocks.sign_editor.look_at_sign=Gucke auf ein Schild und drücke '%s' -gui.worldhandler.blocks.sign_editor.text_line_1=Textzeile I -gui.worldhandler.blocks.sign_editor.text_line_2=Textzeile II -gui.worldhandler.blocks.sign_editor.text_line_3=Textzeile III -gui.worldhandler.blocks.sign_editor.text_line_4=Textzeile IV -gui.worldhandler.blocks.sign_editor.commmand=Befehl -gui.worldhandler.blocks.sign_editor.done=Fertig -gui.worldhandler.blocks.sign_editor.format_text_line=Textzeile formatieren - -gui.worldhandler.blocks.note_block_editor.look_at_note_block=Gucke auf einen Notenblock und drücke '%s' -gui.worldhandler.blocks.note_block_editor.c=C -gui.worldhandler.blocks.note_block_editor.d=D -gui.worldhandler.blocks.note_block_editor.e=E -gui.worldhandler.blocks.note_block_editor.f=F -gui.worldhandler.blocks.note_block_editor.g=G -gui.worldhandler.blocks.note_block_editor.a=A -gui.worldhandler.blocks.note_block_editor.b=H - -gui.worldhandler.gamerules.rule.commandBlockOutput=Befehlsblock Feedback -gui.worldhandler.gamerules.rule.disableElytraMovementCheck=Deaktiviere Speed-Check -gui.worldhandler.gamerules.rule.doDaylightCycle=Tageszyklus -gui.worldhandler.gamerules.rule.doEntityDrops=Entity Drops -gui.worldhandler.gamerules.rule.doFireTick=Feuerverbreitung -gui.worldhandler.gamerules.rule.doMobLoot=Tierdrops -gui.worldhandler.gamerules.rule.doMobSpawning=Tiere Spawnen -gui.worldhandler.gamerules.rule.doTileDrops=Block Drops -gui.worldhandler.gamerules.rule.keepInventory=Behalte Inventar -gui.worldhandler.gamerules.rule.logAdminCommands=Adminbefehle Aufschreiben -gui.worldhandler.gamerules.rule.mobGriefing=Griefing von Tieren -gui.worldhandler.gamerules.rule.naturalRegeneration=Natürliche Regeneration -gui.worldhandler.gamerules.rule.randomTickSpeed=Zufällige Tickgeschwindigkeit -gui.worldhandler.gamerules.rule.reducedDebugInfo=Reduzierte Debug Info -gui.worldhandler.gamerules.rule.sendCommandFeedback=Befehlsfeedback -gui.worldhandler.gamerules.rule.showDeathMessages=Todesnachrichten -gui.worldhandler.gamerules.rule.spawnRadius=Spawn Radius -gui.worldhandler.gamerules.rule.spectatorsGenerateChunks=Zuschauer Generieren Chunks -gui.worldhandler.gamerules.rule.doWeatherCycle=Wetterzyklus -gui.worldhandler.gamerules.rule.maxEntityCramming=Max Entity Stapel -gui.worldhandler.gamerules.rule.announceAdvancements=Fortschritte bekanntgeben -gui.worldhandler.gamerules.rule.doLimitedCrafting=Limitertes Craften -gui.worldhandler.gamerules.rule.gameLoopFunction=Game Loop Funktion -gui.worldhandler.gamerules.rule.maxCommandChainLength=Kommandokettenlänge - -gui.worldhandler.world_info.start=Start -gui.worldhandler.world_info.world=Welt -gui.worldhandler.world_info.statistics=Statistiken - -gui.worldhandler.world_info.n_a=n/v - -gui.worldhandler.world_info.start.spawn=Spawn - -gui.worldhandler.world_info.world.name=Name -gui.worldhandler.world_info.world.world_type=Welttyp -gui.worldhandler.world_info.world.seed=Seed - -gui.worldhandler.world_info.statistics.world_time=Weltzeit -gui.worldhandler.world_info.statistics.played=Played - -gui.worldhandler.edit_blocks.coordinates=Koordinaten -gui.worldhandler.edit_blocks.fill=Füllen -gui.worldhandler.edit_blocks.replace=Ersetzen -gui.worldhandler.edit_blocks.clone=Klonen - -gui.worldhandler.edit_blocks.replace.block_id_replace=Block ID Ersetze -gui.worldhandler.edit_blocks.replace.block_id_place=Block ID Platzier - -gui.worldhandler.edit_blocks.fill.block_id_to_fill=Block ID Füllen - -gui.worldhandler.edit_blocks.clone.mode.replace=Ersetzen -gui.worldhandler.edit_blocks.clone.mode.masked=Maskiert -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 -gui.worldhandler.scoreboard.slot.sidebar.team=Seitentafel Team - -gui.worldhandler.scoreboard.objectives.objective=Objekt -gui.worldhandler.scoreboard.objectives.create=Erstellen -gui.worldhandler.scoreboard.objectives.display=Anzeigen -gui.worldhandler.scoreboard.objectives.undisplay=Verstecken -gui.worldhandler.scoreboard.objectives.remove=Entfernen - -gui.worldhandler.scoreboard.objectives.criteria.air=Spieler Luft -gui.worldhandler.scoreboard.objectives.criteria.armor=Spieler Rüstung -gui.worldhandler.scoreboard.objectives.criteria.deathCount=Tode -gui.worldhandler.scoreboard.objectives.criteria.dummy=Dummy -gui.worldhandler.scoreboard.objectives.criteria.food=Spieler Hunger -gui.worldhandler.scoreboard.objectives.criteria.health=Spieler Leben -gui.worldhandler.scoreboard.objectives.criteria.killedByTeam=Von Team Getötet -gui.worldhandler.scoreboard.objectives.criteria.level=Erfahrungslevel -gui.worldhandler.scoreboard.objectives.criteria.playerKillCount=Spieler Getötet -gui.worldhandler.scoreboard.objectives.criteria.stat=Statistik -gui.worldhandler.scoreboard.objectives.criteria.stat.craftingTableInteraction=Werkbank Interaktionen -gui.worldhandler.scoreboard.objectives.criteria.stat.breakItem=Items Verbraucht -gui.worldhandler.scoreboard.objectives.criteria.stat.craftItem=Items Hergestellt -gui.worldhandler.scoreboard.objectives.criteria.stat.drop=Items Fallen Gelassen -gui.worldhandler.scoreboard.objectives.criteria.stat.entityKilledBy=Getötet Von Zähler -gui.worldhandler.scoreboard.objectives.criteria.stat.killEntity=Tötungen Von Lebewesen -gui.worldhandler.scoreboard.objectives.criteria.stat.mineBlock=Blöcke Abgebaut -gui.worldhandler.scoreboard.objectives.criteria.stat.pickup=Items Aufgenommen -gui.worldhandler.scoreboard.objectives.criteria.stat.useItem=Items Benutzt -gui.worldhandler.scoreboard.objectives.criteria.teamkill=Teamtötungen -gui.worldhandler.scoreboard.objectives.criteria.totalKillCount=Tötungen -gui.worldhandler.scoreboard.objectives.criteria.trigger=Auslöser -gui.worldhandler.scoreboard.objectives.criteria.xp=Erfahrung - -gui.worldhandler.scoreboard.team.options.friendlyfire=Freundliches Feuer -gui.worldhandler.scoreboard.team.options.seeFriendlyInvisibles=Unsichtbare Freunde -gui.worldhandler.scoreboard.team.options.nametagVisibility=Namensschild Sichtbarkeit -gui.worldhandler.scoreboard.team.options.deathMessageVisibility=Todesnachrichten -gui.worldhandler.scoreboard.team.options.collisionRule=Teamkollision -gui.worldhandler.scoreboard.team.options.color=Farbe - -gui.worldhandler.scoreboard.team.suboption.always=Immer -gui.worldhandler.scoreboard.team.suboption.never=Niemals -gui.worldhandler.scoreboard.team.suboption.hideForOtherTeams=Für Andere Unsichtbar -gui.worldhandler.scoreboard.team.suboption.hideForOwnTeam=Für Eigene Unsichtbar -gui.worldhandler.scoreboard.team.suboption.pushOwnTeam=Bewege Eigenes Team -gui.worldhandler.scoreboard.team.suboption.pushOtherTeams=Bewege Andere Teams -gui.worldhandler.scoreboard.team.suboption.true=Ein -gui.worldhandler.scoreboard.team.suboption.false=Aus - -gui.worldhandler.scoreboard.team.team=Team -gui.worldhandler.scoreboard.team.create=Erstellen -gui.worldhandler.scoreboard.team.join=Beitreten -gui.worldhandler.scoreboard.team.leave=Verlassen -gui.worldhandler.scoreboard.team.remove=Entfernen -gui.worldhandler.scoreboard.team.empty=Leeren -gui.worldhandler.scoreboard.team.options=Team Optionen - -gui.worldhandler.scoreboard.players.points=Punkte -gui.worldhandler.scoreboard.players.tag=Etikett -gui.worldhandler.scoreboard.players.trigger=Auslöser - -gui.worldhandler.entities.player.start=Start -gui.worldhandler.entities.player.score=Wertung -gui.worldhandler.entities.player.position=Position -gui.worldhandler.entities.player.miscellaneous=Sonstige - -gui.worldhandler.entities.player.score.experience=Erfahrung -gui.worldhandler.entities.player.score.experience_coins=Erf-Punkte - -gui.worldhandler.entities.player.position.copy_position=Kopiere Position - -gui.worldhandler.entities.player.miscellaneous.set_spawn=Setze Spawn -gui.worldhandler.entities.player.miscellaneous.set_global_spawn=Setze Globalen Spawn -gui.worldhandler.entities.player.miscellaneous.kill=Töten -gui.worldhandler.entities.player.miscellaneous.clear_inventory=Leere Inventar - -gui.worldhandler.entities.summon.start=Start -gui.worldhandler.entities.summon.potion_effects=Statuseffekte -gui.worldhandler.entities.summon.attributes=Attribute -gui.worldhandler.entities.summon.equipment=Ausrüstung - -gui.worldhandler.entities.summon.start.mob_id=Tier ID -gui.worldhandler.entities.summon.start.custom_name=Eigener Name -gui.worldhandler.entities.summon.start.passenger_mob_id=Passagier Tier ID - -gui.worldhandler.potion.time.hours=Stunden -gui.worldhandler.potion.time.minutes=Minuten -gui.worldhandler.potion.time.seconds=Sekunden - -gui.worldhandler.shortcuts.tooltip.home=Home -gui.worldhandler.shortcuts.tooltip.butcher=Metzeln -gui.worldhandler.shortcuts.tooltip.settings=Einstellungen -gui.worldhandler.shortcuts.tooltip.potions=Tränke - -gui.worldhandler.shortcuts.tooltip.gamemode=Spielmodus: %s -gui.worldhandler.shortcuts.tooltip.gamemode.survival=Überleben -gui.worldhandler.shortcuts.tooltip.gamemode.creative=Kreativ -gui.worldhandler.shortcuts.tooltip.gamemode.adventure=Abenteuer -gui.worldhandler.shortcuts.tooltip.gamemode.spectator=Zuschauer - -gui.worldhandler.shortcuts.tooltip.difficulty=Schwierigkeit: %s -gui.worldhandler.shortcuts.tooltip.difficulty.peaceful=Friedlich -gui.worldhandler.shortcuts.tooltip.difficulty.easy=Einfach -gui.worldhandler.shortcuts.tooltip.difficulty.normal=Normal -gui.worldhandler.shortcuts.tooltip.difficulty.hard=Schwer - -gui.worldhandler.shortcuts.tooltip.weather=Wetter: %s -gui.worldhandler.shortcuts.tooltip.weather.thunder=Unwetter -gui.worldhandler.shortcuts.tooltip.weather.rainy=Regen -gui.worldhandler.shortcuts.tooltip.weather.clear=Sonnig - -gui.worldhandler.shortcuts.tooltip.time=Zeit: %s -gui.worldhandler.shortcuts.tooltip.time.midnight=Mitternacht (%s) -gui.worldhandler.shortcuts.tooltip.time.sunset=Sonnenuntergang (%s) -gui.worldhandler.shortcuts.tooltip.time.noon=Mittag (%s) -gui.worldhandler.shortcuts.tooltip.time.dawn=Sonnenaufgang (%s) - -gui.worldhandler.generic.back=Zurück -gui.worldhandler.generic.backToGame=Schließen -gui.worldhandler.generic.on=An -gui.worldhandler.generic.off=Aus -gui.worldhandler.generic.yes=Ja -gui.worldhandler.generic.no=Nein -gui.worldhandler.generic.value=Wert -gui.worldhandler.generic.name=Name -gui.worldhandler.generic.enable=Ein -gui.worldhandler.generic.disable=Aus -gui.worldhandler.generic.edit_username=Benutzername - -gui.worldhandler.actions.add=Hinzufügen -gui.worldhandler.actions.remove=Entfernen -gui.worldhandler.actions.reset=Zurücksetzen -gui.worldhandler.actions.set_to_0=Auf 0 setzen -gui.worldhandler.actions.perform=Ausführen -gui.worldhandler.actions.send=Senden -gui.worldhandler.actions.copy=Kopieren -gui.worldhandler.actions.place_command_block=Platziere Befehlsblock - -gui.worldhandler.color=Farbe -gui.worldhandler.color.black=Schwarz -gui.worldhandler.color.dark_blue=Dunkel Blau -gui.worldhandler.color.dark_green=Dunkel Grün -gui.worldhandler.color.dark_aqua=Dunkel Türkis -gui.worldhandler.color.dark_red=Dunkel Rot -gui.worldhandler.color.dark_purple=Dunkel Lila -gui.worldhandler.color.gold=Gold -gui.worldhandler.color.gray=Grau -gui.worldhandler.color.dark_gray=Dunkel Grau -gui.worldhandler.color.blue=Blau -gui.worldhandler.color.green=Grün -gui.worldhandler.color.aqua=Türkis -gui.worldhandler.color.red=Rot -gui.worldhandler.color.light_purple=Pink -gui.worldhandler.color.yellow=Gelb -gui.worldhandler.color.white=Weiss -gui.worldhandler.color.reset=Normal - -worldhandler.permission.refused=Du hast nicht die benötigte Berechtigung, um den World Handler zu benutzen -worldhandler.permission.refused.change=Ändere "%s" um diese Nachricht zu umgehen - -worldhandler.error.gui=Ein unerwarteter Fehler ist aufgetreten. Bitte sende einen Unfallbericht mit deinen Protokolldateien an das %s Forum \ No newline at end of file diff --git a/src/main/resources/assets/worldhandler/lang/en_us.json b/src/main/resources/assets/worldhandler/lang/en_us.json new file mode 100644 index 0000000..ce1793c --- /dev/null +++ b/src/main/resources/assets/worldhandler/lang/en_us.json @@ -0,0 +1,450 @@ +{ + "gui.worldhandler.config.tooltip": "World Handler Settings", + + "gui.worldhandler.config.category.settings": "Settings", + "gui.worldhandler.config.category.skin": "Skin", + "gui.worldhandler.config.category.butcher": "Butcher", + "gui.worldhandler.config.category.sliders": "Sliders", + + "gui.worldhandler.config.key.settings.biome_indicator": "Biome Indicator", + "gui.worldhandler.config.key.settings.command_syntax": "Command Syntax", + "gui.worldhandler.config.key.settings.shortcuts": "Shortcuts", + "gui.worldhandler.config.key.settings.key_shortcuts": "Key Shortcuts", + "gui.worldhandler.config.key.settings.tooltips": "Tooltips", + "gui.worldhandler.config.key.settings.watch": "Watch", + "gui.worldhandler.config.key.settings.smooth_watch": "Smooth Watch", + "gui.worldhandler.config.key.settings.pause_game": "Pause Game", + "gui.worldhandler.config.key.settings.custom_times": "Custom Times", + "gui.worldhandler.config.key.settings.permission_query": "Permission Query", + "gui.worldhandler.config.key.settings.highlight_blocks": "Highlight Blocks", + "gui.worldhandler.config.key.settings.custom_time_dawn": "Custom Dawn Ticks", + "gui.worldhandler.config.key.settings.custom_time_noon": "Custom Noon Ticks", + "gui.worldhandler.config.key.settings.custom_time_sunset": "Custom Sunset Ticks", + "gui.worldhandler.config.key.settings.custom_time_midnight": "Custom Midnight Ticks", + "gui.worldhandler.config.key.settings.block_placing_mode": "Block Placing Mode", + + "gui.worldhandler.config.comment.settings.biome_indicator": "Displays a text when you walk into another biome", + "gui.worldhandler.config.comment.settings.command_syntax": "Displays the current command at the bottom", + "gui.worldhandler.config.comment.settings.shortcuts": "Adds a row of buttons at the top for quick access", + "gui.worldhandler.config.comment.settings.key_shortcuts": "Enables button keys for pos1 and pos2", + "gui.worldhandler.config.comment.settings.tooltips": "Whether or not to display tooltips", + "gui.worldhandler.config.comment.settings.watch": "Whether or not to display a watch", + "gui.worldhandler.config.comment.settings.smooth_watch": "Whether or not the watch pointers move smooth", + "gui.worldhandler.config.comment.settings.pause_game": "Whether or not to pause the game when the gui is opened", + "gui.worldhandler.config.comment.settings.custom_times": "Whether or not to use the custom times", + "gui.worldhandler.config.comment.settings.permission_query": "Whether or not the permission query is enabled", + "gui.worldhandler.config.comment.settings.highlight_blocks": "Whether or not selected blocks will be highlighted", + "gui.worldhandler.config.comment.settings.custom_time_dawn": "Ticks upon dawn", + "gui.worldhandler.config.comment.settings.custom_time_noon": "Ticks upon noon", + "gui.worldhandler.config.comment.settings.custom_time_sunset": "Ticks upon sunset", + "gui.worldhandler.config.comment.settings.custom_time_midnight": "Ticks upon midnight", + "gui.worldhandler.config.comment.settings.block_placing_mode": "Block placing mode", + + "gui.worldhandler.config.key.skin.icons": "Icon Size", + "gui.worldhandler.config.key.skin.label_color": "Label Color", + "gui.worldhandler.config.key.skin.headline_color": "Headline Color", + "gui.worldhandler.config.key.skin.background_red": "Background Red", + "gui.worldhandler.config.key.skin.background_green": "Background Green", + "gui.worldhandler.config.key.skin.background_blue": "Background Blue", + "gui.worldhandler.config.key.skin.button_red": "Button Red", + "gui.worldhandler.config.key.skin.button_green": "Button Green", + "gui.worldhandler.config.key.skin.button_blue": "Button Blue", + "gui.worldhandler.config.key.skin.textures": "Textures", + "gui.worldhandler.config.key.skin.sharp_tab_edges": "Sharp Tab Edges", + "gui.worldhandler.config.key.skin.draw_background": "Draw Background", + "gui.worldhandler.config.key.skin.background_alpha": "Background Alpha", + "gui.worldhandler.config.key.skin.button_alpha": "Button Alpha", + + "gui.worldhandler.config.comment.skin.icons": "Size of the icons", + "gui.worldhandler.config.comment.skin.label_color": "Label color", + "gui.worldhandler.config.comment.skin.headline_color": "Headline color", + "gui.worldhandler.config.comment.skin.background_red": "Background red", + "gui.worldhandler.config.comment.skin.background_green": "Background green", + "gui.worldhandler.config.comment.skin.background_blue": "Background blue", + "gui.worldhandler.config.comment.skin.button_red": "Button red", + "gui.worldhandler.config.comment.skin.button_green": "Button green", + "gui.worldhandler.config.comment.skin.button_blue": "Button blue", + "gui.worldhandler.config.comment.skin.textures": "Background texture", + "gui.worldhandler.config.comment.skin.sharp_tab_edges": "Disables the background blending", + "gui.worldhandler.config.comment.skin.draw_background": "Background drawing enabled", + "gui.worldhandler.config.comment.skin.background_alpha": "Background alpha", + "gui.worldhandler.config.comment.skin.button_alpha": "Button alpha", + + "gui.worldhandler.config.comment.butcher": "Butcher %s Enabled", + + "gui.worldhandler.config.key.sliders.max_potion_amplifier": "Max Potion Amplifier", + "gui.worldhandler.config.key.sliders.max_item_enchantment": "Max Item Enchantment", + "gui.worldhandler.config.key.sliders.max_item_attributes": "Max Item Attribute", + "gui.worldhandler.config.key.sliders.max_summon_potion_amplifier": "Max Summon Potion Amplifier", + "gui.worldhandler.config.key.sliders.max_summon_potion_minutes": "Max Summon Potion Minutes", + "gui.worldhandler.config.key.sliders.max_summon_attributes": "Max Summon Attributes", + "gui.worldhandler.config.key.sliders.max_experience": "Max Experience", + "gui.worldhandler.config.key.sliders.max_player_points": "Max Player Points", + + "gui.worldhandler.config.comment.sliders.max_potion_amplifier": "Maximum value for the potion amplifier", + "gui.worldhandler.config.comment.sliders.max_item_enchantment": "Maximum value for an item enchantment", + "gui.worldhandler.config.comment.sliders.max_item_attributes": "Maximum value for an item attribute", + "gui.worldhandler.config.comment.sliders.max_summon_potion_amplifier": "Maximum value for the potion amplifier for summon", + "gui.worldhandler.config.comment.sliders.max_summon_potion_minutes": "Maximum value for the potion duration in minutes for summon", + "gui.worldhandler.config.comment.sliders.max_summon_attributes": "Maximum value for attributes", + "gui.worldhandler.config.comment.sliders.max_experience": "Maximum value for experience", + "gui.worldhandler.config.comment.sliders.max_player_points": "Maximum value for player points", + + "gui.worldhandler.tab.scoreboard.objectives": "Objectives", + "gui.worldhandler.tab.scoreboard.teams": "Teams", + "gui.worldhandler.tab.scoreboard.players": "Players", + + "gui.worldhandler.tab.player.player": "Player", + "gui.worldhandler.tab.player.experience": "Experience", + "gui.worldhandler.tab.player.advancements": "Advancements", + + "gui.worldhandler.tab.entities.summon": "Summon", + + "gui.worldhandler.tab.world.world": "World", + "gui.worldhandler.tab.world.gamerules": "Gamerules", + + "gui.worldhandler.tab.blocks.edit_blocks": "Edit Blocks", + "gui.worldhandler.tab.blocks.sign_editor": "Sign Editor", + "gui.worldhandler.tab.blocks.note_block_editor": "Note Editor", + + "gui.worldhandler.tab.items.custom_item": "Custom Item", + "gui.worldhandler.tab.items.enchantment": "Enchantment", + "gui.worldhandler.tab.items.recipes": "Recipes", + + "gui.worldhandler.tab.containers": "Containers", + "gui.worldhandler.tab.multiplayer": "Multiplayer", + + "gui.worldhandler.title.entities.summon": "Summon", + + "gui.worldhandler.title.items.custom_item": "Custom Item", + "gui.worldhandler.title.items.enchantment": "Enchantment", + "gui.worldhandler.title.items.recipes": "Recipes", + + "gui.worldhandler.title.blocks.edit_blocks": "Edit Blocks", + "gui.worldhandler.title.blocks.sign_editor": "Sign Editor", + "gui.worldhandler.title.blocks.note_block_editor": "Note Block Editor", + + "gui.worldhandler.title.scoreboard": "Scoreboard", + + "gui.worldhandler.title.world.world": "World", + "gui.worldhandler.title.world.gamerules": "Gamerules", + + "gui.worldhandler.title.player.player": "Player", + "gui.worldhandler.title.player.experience": "Experience", + "gui.worldhandler.title.player.advancements": "Advancements", + + "gui.worldhandler.title.butcher": "Butcher", + "gui.worldhandler.title.change_world": "Change World", + "gui.worldhandler.title.potions": "Potions", + + "gui.worldhandler.title.containers": "Containers", + "gui.worldhandler.title.multiplayer": "Multiplayer", + + "gui.worldhandler.advancements.grant": "Grant", + "gui.worldhandler.advancements.revoke": "Revoke", + "gui.worldhandler.advancements.only": "Only", + "gui.worldhandler.advancements.until": "Until", + "gui.worldhandler.advancements.from": "From", + "gui.worldhandler.advancements.through": "Through", + "gui.worldhandler.advancements.everything": "Everything", + + "gui.worldhandler.change_world.singleplayer": "Singleplayer World", + "gui.worldhandler.change_world.multiplayer": "Multiplayer Server", + + "gui.worldhandler.butcher.radius": "Radius", + "gui.worldhandler.butcher.configure": "Configure", + "gui.worldhandler.butcher.slaughter": "Slaughter", + + "gui.worldhandler.multiplayer.kick": "Kick", + "gui.worldhandler.multiplayer.ban": "Ban", + "gui.worldhandler.multiplayer.pardon": "Pardon", + "gui.worldhandler.multiplayer.permissions": "Permissions", + "gui.worldhandler.multiplayer.runtime": "Runtime", + "gui.worldhandler.multiplayer.whitelist": "Whitelist", + "gui.worldhandler.multiplayer.username": "Username", + + "gui.worldhandler.multiplayer.kick_ban.reason": "Reason", + + "gui.worldhandler.multiplayer.permissions.give": "Give Permissions", + "gui.worldhandler.multiplayer.permissions.take": "Take Permissions", + + "gui.worldhandler.multiplayer.runtime.save_world": "Save World", + "gui.worldhandler.multiplayer.runtime.autosave": "Autosave: %s", + "gui.worldhandler.multiplayer.runtime.stop_server": "Stop Server", + + "gui.worldhandler.multiplayer.whitelist.reload": "Reload Whitelist", + "gui.worldhandler.multiplayer.whitelist.whitelist": "Whitelist: %s", + "gui.worldhandler.multiplayer.whitelist.add": "Add", + "gui.worldhandler.multiplayer.whitelist.remove": "Remove", + + "gui.worldhandler.potions.effect": "Effect", + "gui.worldhandler.potions.effect.give": "Give", + "gui.worldhandler.potions.effect.remove": "Remove", + "gui.worldhandler.potions.effect.remove_all": "Remove All", + "gui.worldhandler.potions.effect.amplifier": "Amplifier", + "gui.worldhandler.potions.effect.ambient": "Ambient: %s", + "gui.worldhandler.potions.effect.particles": "Particles: %s", + "gui.worldhandler.potions.effect.bottle": "Bottle", + "gui.worldhandler.potions.effect.splash": "Splash", + "gui.worldhandler.potions.effect.lingering": "Lingering", + "gui.worldhandler.potions.effect.tipped_arrow": "Arrow", + + "gui.worldhandler.entities": "Entities", + "gui.worldhandler.items": "Items", + "gui.worldhandler.scoreboard": "Scoreboard", + "gui.worldhandler.resourcepack": "Resourcepack", + "gui.worldhandler.change_world": "Change World", + "gui.worldhandler.world": "World", + "gui.worldhandler.blocks": "Blocks", + "gui.worldhandler.player": "Player", + + "gui.worldhandler.items.custom_item.start": "Start", + "gui.worldhandler.items.custom_item.enchantment": "Enchantment", + "gui.worldhandler.items.custom_item.attributes": "Attributes", + "gui.worldhandler.items.custom_item.custom_item": "Give", + + "gui.worldhandler.items.custom_item.start.item_id": "Item", + "gui.worldhandler.items.custom_item.start.lore_1": "Lore I", + "gui.worldhandler.items.custom_item.start.lore_2": "Lore II", + "gui.worldhandler.items.custom_item.start.custom_name": "Custom Name", + + "gui.worldhandler.items.enchantment.level": "Level", + "gui.worldhandler.items.enchantment.enchant": "Enchant", + + "gui.worldhandler.blocks.sign_editor.look_at_sign": "Look at a Sign and press '%s'", + "gui.worldhandler.blocks.sign_editor.text_line_1": "Text Line I", + "gui.worldhandler.blocks.sign_editor.text_line_2": "Text Line II", + "gui.worldhandler.blocks.sign_editor.text_line_3": "Text Line III", + "gui.worldhandler.blocks.sign_editor.text_line_4": "Text Line IV", + "gui.worldhandler.blocks.sign_editor.commmand": "Command", + "gui.worldhandler.blocks.sign_editor.done": "Done", + "gui.worldhandler.blocks.sign_editor.format_text_line": "Format Text Line", + + "gui.worldhandler.blocks.note_block_editor.look_at_note_block": "Look at a Note Block and press '%s'", + "gui.worldhandler.blocks.note_block_editor.c": "C", + "gui.worldhandler.blocks.note_block_editor.d": "D", + "gui.worldhandler.blocks.note_block_editor.e": "E", + "gui.worldhandler.blocks.note_block_editor.f": "F", + "gui.worldhandler.blocks.note_block_editor.g": "G", + "gui.worldhandler.blocks.note_block_editor.a": "A", + "gui.worldhandler.blocks.note_block_editor.b": "B", + + "gui.worldhandler.gamerules.rule.commandBlockOutput": "Commandblock Messages", + "gui.worldhandler.gamerules.rule.disableElytraMovementCheck": "Disable Speed Check", + "gui.worldhandler.gamerules.rule.doDaylightCycle": "Daylight Cycle", + "gui.worldhandler.gamerules.rule.doEntityDrops": "Entity Drops", + "gui.worldhandler.gamerules.rule.doFireTick": "Fire Spread", + "gui.worldhandler.gamerules.rule.doMobLoot": "Mob Drops", + "gui.worldhandler.gamerules.rule.doMobSpawning": "Mob Spawning", + "gui.worldhandler.gamerules.rule.doTileDrops": "Block Drops", + "gui.worldhandler.gamerules.rule.keepInventory": "Keep Inventory", + "gui.worldhandler.gamerules.rule.logAdminCommands": "Log Admin Commands", + "gui.worldhandler.gamerules.rule.mobGriefing": "Mob Griefing", + "gui.worldhandler.gamerules.rule.naturalRegeneration": "Natural Regeneration", + "gui.worldhandler.gamerules.rule.randomTickSpeed": "Random Tick Speed", + "gui.worldhandler.gamerules.rule.reducedDebugInfo": "Reduced Debug Info", + "gui.worldhandler.gamerules.rule.sendCommandFeedback": "Command Feedback", + "gui.worldhandler.gamerules.rule.showDeathMessages": "Death Messages", + "gui.worldhandler.gamerules.rule.spawnRadius": "Spawn Radius", + "gui.worldhandler.gamerules.rule.spectatorsGenerateChunks": "Spectators Generate Chunks", + "gui.worldhandler.gamerules.rule.doWeatherCycle": "Weather Cycle", + "gui.worldhandler.gamerules.rule.maxEntityCramming": "Max Entitiy Cramming", + "gui.worldhandler.gamerules.rule.announceAdvancements": "Anncounce Advancements", + "gui.worldhandler.gamerules.rule.doLimitedCrafting": "Limited Crafting", + "gui.worldhandler.gamerules.rule.gameLoopFunction": "Game Loop Function", + "gui.worldhandler.gamerules.rule.maxCommandChainLength": "Command Chain Length", + + "gui.worldhandler.world_info.start": "Start", + "gui.worldhandler.world_info.world": "World", + "gui.worldhandler.world_info.statistics": "Statistics", + + "gui.worldhandler.world_info.n_a": "n/a", + + "gui.worldhandler.world_info.start.spawn": "Spawn", + + "gui.worldhandler.world_info.world.name": "Name", + "gui.worldhandler.world_info.world.world_type": "World Type", + "gui.worldhandler.world_info.world.seed": "Seed", + "gui.worldhandler.world_info.world.copy_seed": "Copy Seed", + + "gui.worldhandler.world_info.statistics.world_time": "World Time", + "gui.worldhandler.world_info.statistics.played": "Played", + + "gui.worldhandler.edit_blocks.coordinates": "Coordinates", + "gui.worldhandler.edit_blocks.fill": "Fill", + "gui.worldhandler.edit_blocks.replace": "Replace", + "gui.worldhandler.edit_blocks.clone": "Clone", + + "gui.worldhandler.edit_blocks.replace.block_id_replace": "Block ID Replace", + "gui.worldhandler.edit_blocks.replace.block_id_place": "Block ID Place", + + "gui.worldhandler.edit_blocks.fill.block_id_to_fill": "Block ID To Fill", + + "gui.worldhandler.edit_blocks.clone.mode.replace": "Replace", + "gui.worldhandler.edit_blocks.clone.mode.masked": "Masked", + "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", + "gui.worldhandler.scoreboard.slot.sidebar.team": "Sidebar Team", + + "gui.worldhandler.scoreboard.objectives.objective": "Objective", + "gui.worldhandler.scoreboard.objectives.create": "Create", + "gui.worldhandler.scoreboard.objectives.display": "Display", + "gui.worldhandler.scoreboard.objectives.undisplay": "Undisplay", + "gui.worldhandler.scoreboard.objectives.remove": "Remove", + + "gui.worldhandler.scoreboard.objectives.stat.air": "Player Air", + "gui.worldhandler.scoreboard.objectives.stat.armor": "Player Armor", + "gui.worldhandler.scoreboard.objectives.stat.deathCount": "Death Count", + "gui.worldhandler.scoreboard.objectives.stat.dummy": "Dummy", + "gui.worldhandler.scoreboard.objectives.stat.food": "Player Food", + "gui.worldhandler.scoreboard.objectives.stat.health": "Player Health", + "gui.worldhandler.scoreboard.objectives.stat.killedByTeam": "Killed By Team", + "gui.worldhandler.scoreboard.objectives.stat.level": "Experience Level", + "gui.worldhandler.scoreboard.objectives.stat.custom": "Statistics", + "gui.worldhandler.scoreboard.objectives.stat.killed": "Killed", + "gui.worldhandler.scoreboard.objectives.stat.killed_by": "Killed By", + "gui.worldhandler.scoreboard.objectives.stat.playerKillCount": "Players Killed", + "gui.worldhandler.scoreboard.objectives.stat.teamkill": "Teamkills", + "gui.worldhandler.scoreboard.objectives.stat.totalKillCount": "Total Kill Count", + "gui.worldhandler.scoreboard.objectives.stat.trigger": "Trigger", + "gui.worldhandler.scoreboard.objectives.stat.xp": "Total Experience", + + "gui.worldhandler.scoreboard.team.options.friendlyFire": "Friendly Fire", + "gui.worldhandler.scoreboard.team.options.seeFriendlyInvisibles": "Friendly Invisibles", + "gui.worldhandler.scoreboard.team.options.nametagVisibility": "Name Tag Visibility", + "gui.worldhandler.scoreboard.team.options.deathMessageVisibility": "Death Messages", + "gui.worldhandler.scoreboard.team.options.collisionRule": "Team Collision", + "gui.worldhandler.scoreboard.team.options.color": "Color", + + "gui.worldhandler.scoreboard.team.suboption.always": "Always", + "gui.worldhandler.scoreboard.team.suboption.never": "Never", + "gui.worldhandler.scoreboard.team.suboption.hideForOtherTeams": "Hide For Others", + "gui.worldhandler.scoreboard.team.suboption.hideForOwnTeam": "Hide For Own", + "gui.worldhandler.scoreboard.team.suboption.pushOwnTeam": "Push Own Team", + "gui.worldhandler.scoreboard.team.suboption.pushOtherTeams": "Push Other Team", + "gui.worldhandler.scoreboard.team.suboption.true": "Enable", + "gui.worldhandler.scoreboard.team.suboption.false": "Disable", + + "gui.worldhandler.scoreboard.team.team": "Team", + "gui.worldhandler.scoreboard.team.create": "Create", + "gui.worldhandler.scoreboard.team.join": "Join", + "gui.worldhandler.scoreboard.team.leave": "Leave", + "gui.worldhandler.scoreboard.team.remove": "Remove", + "gui.worldhandler.scoreboard.team.empty": "Empty", + "gui.worldhandler.scoreboard.team.options": "Team Options", + + "gui.worldhandler.scoreboard.players.points": "Points", + "gui.worldhandler.scoreboard.players.tag": "Tag", + "gui.worldhandler.scoreboard.players.trigger": "Trigger", + + "gui.worldhandler.entities.player.start": "Start", + "gui.worldhandler.entities.player.score": "Score", + "gui.worldhandler.entities.player.position": "Position", + "gui.worldhandler.entities.player.miscellaneous": "Miscellaneous", + + "gui.worldhandler.entities.player.score.experience": "Experience", + "gui.worldhandler.entities.player.score.experience_coins": "XP Coins", + + "gui.worldhandler.entities.player.position.copy_position": "Copy Position", + + "gui.worldhandler.entities.player.miscellaneous.set_spawn": "Set Spawn", + "gui.worldhandler.entities.player.miscellaneous.set_global_spawn": "Set Global Spawn", + "gui.worldhandler.entities.player.miscellaneous.kill": "Kill", + "gui.worldhandler.entities.player.miscellaneous.clear_inventory": "Clear Inventory", + + "gui.worldhandler.entities.summon.start": "Start", + "gui.worldhandler.entities.summon.potion_effects": "Potion Effects", + "gui.worldhandler.entities.summon.attributes": "Attributes", + "gui.worldhandler.entities.summon.equipment": "Equipment", + + "gui.worldhandler.entities.summon.start.mob_id": "Mob ID", + "gui.worldhandler.entities.summon.start.custom_name": "Custom Name", + "gui.worldhandler.entities.summon.start.passenger_mob_id": "Passenger Mob ID", + + "gui.worldhandler.potion.time.hours": "Hours", + "gui.worldhandler.potion.time.minutes": "Minutes", + "gui.worldhandler.potion.time.seconds": "Seconds", + + "gui.worldhandler.shortcuts.tooltip.home": "Home", + "gui.worldhandler.shortcuts.tooltip.butcher": "Butcher", + "gui.worldhandler.shortcuts.tooltip.settings": "Settings", + "gui.worldhandler.shortcuts.tooltip.potions": "Potions", + + "gui.worldhandler.shortcuts.tooltip.gamemode": "Gamemode: %s", + "gui.worldhandler.shortcuts.tooltip.gamemode.survival": "Survival", + "gui.worldhandler.shortcuts.tooltip.gamemode.creative": "Creative", + "gui.worldhandler.shortcuts.tooltip.gamemode.adventure": "Adventure", + "gui.worldhandler.shortcuts.tooltip.gamemode.spectator": "Spectator", + + "gui.worldhandler.shortcuts.tooltip.difficulty": "Difficulty: %s", + "gui.worldhandler.shortcuts.tooltip.difficulty.peaceful": "Peaceful", + "gui.worldhandler.shortcuts.tooltip.difficulty.easy": "Easy", + "gui.worldhandler.shortcuts.tooltip.difficulty.normal": "Normal", + "gui.worldhandler.shortcuts.tooltip.difficulty.hard": "Hard", + + "gui.worldhandler.shortcuts.tooltip.weather": "Weather: %s", + "gui.worldhandler.shortcuts.tooltip.weather.thunder": "Thunderstorm", + "gui.worldhandler.shortcuts.tooltip.weather.rainy": "Rain", + "gui.worldhandler.shortcuts.tooltip.weather.clear": "Clear", + + "gui.worldhandler.shortcuts.tooltip.time": "Time: %s", + "gui.worldhandler.shortcuts.tooltip.time.midnight": "Midnight (%s)", + "gui.worldhandler.shortcuts.tooltip.time.sunset": "Sunset (%s)", + "gui.worldhandler.shortcuts.tooltip.time.noon": "Noon (%s)", + "gui.worldhandler.shortcuts.tooltip.time.dawn": "Dawn (%s)", + + "gui.worldhandler.generic.back": "Back", + "gui.worldhandler.generic.backToGame": "Back to Game", + "gui.worldhandler.generic.on": "On", + "gui.worldhandler.generic.off": "Off", + "gui.worldhandler.generic.yes": "Yes", + "gui.worldhandler.generic.no": "No", + "gui.worldhandler.generic.value": "Value", + "gui.worldhandler.generic.name": "Name", + "gui.worldhandler.generic.enable": "Enable", + "gui.worldhandler.generic.disable": "Disable", + "gui.worldhandler.generic.edit_username": "Edit Username", + + "gui.worldhandler.actions.add": "Add", + "gui.worldhandler.actions.remove": "Remove", + "gui.worldhandler.actions.set": "Set", + "gui.worldhandler.actions.reset": "Reset", + "gui.worldhandler.actions.set_to_0": "Set To 0", + "gui.worldhandler.actions.perform": "Perform", + "gui.worldhandler.actions.send": "Send", + "gui.worldhandler.actions.copy": "Copy", + "gui.worldhandler.actions.place_command_block": "Place Command Block", + + "gui.worldhandler.color": "Color", + "gui.worldhandler.color.black": "Black", + "gui.worldhandler.color.dark_blue": "Dark Blue", + "gui.worldhandler.color.dark_green": "Dark Green", + "gui.worldhandler.color.dark_aqua": "Dark Aqua", + "gui.worldhandler.color.dark_red": "Dark Red", + "gui.worldhandler.color.dark_purple": "Dark Purple", + "gui.worldhandler.color.gold": "Gold", + "gui.worldhandler.color.gray": "Gray", + "gui.worldhandler.color.dark_gray": "Dark Gray", + "gui.worldhandler.color.blue": "Blue", + "gui.worldhandler.color.green": "Green", + "gui.worldhandler.color.aqua": "Aqua", + "gui.worldhandler.color.red": "Red", + "gui.worldhandler.color.light_purple": "Light Purple", + "gui.worldhandler.color.yellow": "Yellow", + "gui.worldhandler.color.white": "White", + "gui.worldhandler.color.reset": "Default", + + "worldhandler.permission.refused": "You do not have permission to use the World Handler", + "worldhandler.permission.refused.change": "Change \"%s\" to disable this message", + + "worldhandler.error.gui": "An unexpected error occured. Please send a crash report with your log files to the %s forum" +} \ No newline at end of file diff --git a/src/main/resources/assets/worldhandler/lang/en_us.lang b/src/main/resources/assets/worldhandler/lang/en_us.lang deleted file mode 100644 index 9c0f85c..0000000 --- a/src/main/resources/assets/worldhandler/lang/en_us.lang +++ /dev/null @@ -1,453 +0,0 @@ -gui.worldhandler.config.tooltip=World Handler Settings - -gui.worldhandler.config.category.settings=Settings -gui.worldhandler.config.category.skin=Skin -gui.worldhandler.config.category.butcher=Butcher -gui.worldhandler.config.category.sliders=Sliders - -gui.worldhandler.config.key.settings.biome_indicator=Biome Indicator -gui.worldhandler.config.key.settings.command_syntax=Command Syntax -gui.worldhandler.config.key.settings.shortcuts=Shortcuts -gui.worldhandler.config.key.settings.key_shortcuts=Key Shortcuts -gui.worldhandler.config.key.settings.tooltips=Tooltips -gui.worldhandler.config.key.settings.watch=Watch -gui.worldhandler.config.key.settings.smooth_watch=Smooth Watch -gui.worldhandler.config.key.settings.pause_game=Pause Game -gui.worldhandler.config.key.settings.custom_times=Custom Times -gui.worldhandler.config.key.settings.permission_query=Permission Query -gui.worldhandler.config.key.settings.highlight_blocks=Highlight Blocks -gui.worldhandler.config.key.settings.custom_time_dawn=Custom Dawn Ticks -gui.worldhandler.config.key.settings.custom_time_noon=Custom Noon Ticks -gui.worldhandler.config.key.settings.custom_time_sunset=Custom Sunset Ticks -gui.worldhandler.config.key.settings.custom_time_midnight=Custom Midnight Ticks -gui.worldhandler.config.key.settings.block_placing_mode=Block Placing Mode - -gui.worldhandler.config.comment.settings.biome_indicator=Displays a text when you walk into another biome -gui.worldhandler.config.comment.settings.command_syntax=Displays the current command at the bottom -gui.worldhandler.config.comment.settings.shortcuts=Adds a row of buttons at the top for quick access -gui.worldhandler.config.comment.settings.key_shortcuts=Enables button keys for pos1 and pos2 -gui.worldhandler.config.comment.settings.tooltips=Whether or not to display tooltips -gui.worldhandler.config.comment.settings.watch=Whether or not to display a watch -gui.worldhandler.config.comment.settings.smooth_watch=Whether or not the watch pointers move smooth -gui.worldhandler.config.comment.settings.pause_game=Whether or not to pause the game when the gui is opened -gui.worldhandler.config.comment.settings.custom_times=Whether or not to use the custom times -gui.worldhandler.config.comment.settings.permission_query=Whether or not the permission query is enabled -gui.worldhandler.config.comment.settings.highlight_blocks=Whether or not selected blocks will be highlighted -gui.worldhandler.config.comment.settings.custom_time_dawn=Ticks upon dawn -gui.worldhandler.config.comment.settings.custom_time_noon=Ticks upon noon -gui.worldhandler.config.comment.settings.custom_time_sunset=Ticks upon sunset -gui.worldhandler.config.comment.settings.custom_time_midnight=Ticks upon midnight -gui.worldhandler.config.comment.settings.block_placing_mode=Block placing mode - -gui.worldhandler.config.key.skin.icons=Icon Size -gui.worldhandler.config.key.skin.label_color=Label Color -gui.worldhandler.config.key.skin.headline_color=Headline Color -gui.worldhandler.config.key.skin.background_red=Background Red -gui.worldhandler.config.key.skin.background_green=Background Green -gui.worldhandler.config.key.skin.background_blue=Background Blue -gui.worldhandler.config.key.skin.button_red=Button Red -gui.worldhandler.config.key.skin.button_green=Button Green -gui.worldhandler.config.key.skin.button_blue=Button Blue -gui.worldhandler.config.key.skin.textures=Textures -gui.worldhandler.config.key.skin.sharp_tab_edges=Sharp Tab Edges -gui.worldhandler.config.key.skin.draw_background=Draw Background -gui.worldhandler.config.key.skin.background_alpha=Background Alpha -gui.worldhandler.config.key.skin.button_alpha=Button Alpha - -gui.worldhandler.config.comment.skin.icons=Size of the icons -gui.worldhandler.config.comment.skin.label_color=Label color -gui.worldhandler.config.comment.skin.headline_color=Headline color -gui.worldhandler.config.comment.skin.background_red=Background red -gui.worldhandler.config.comment.skin.background_green=Background green -gui.worldhandler.config.comment.skin.background_blue=Background blue -gui.worldhandler.config.comment.skin.button_red=Button red -gui.worldhandler.config.comment.skin.button_green=Button green -gui.worldhandler.config.comment.skin.button_blue=Button blue -gui.worldhandler.config.comment.skin.textures=Background texture -gui.worldhandler.config.comment.skin.sharp_tab_edges=Disables the background blending -gui.worldhandler.config.comment.skin.draw_background=Background drawing enabled -gui.worldhandler.config.comment.skin.background_alpha=Background alpha -gui.worldhandler.config.comment.skin.button_alpha=Button alpha - -gui.worldhandler.config.comment.butcher=Butcher %s Enabled - -gui.worldhandler.config.key.sliders.max_potion_amplifier=Max Potion Amplifier -gui.worldhandler.config.key.sliders.max_item_enchantment=Max Item Enchantment -gui.worldhandler.config.key.sliders.max_item_attributes=Max Item Attribute -gui.worldhandler.config.key.sliders.max_summon_potion_amplifier=Max Summon Potion Amplifier -gui.worldhandler.config.key.sliders.max_summon_potion_minutes=Max Summon Potion Minutes -gui.worldhandler.config.key.sliders.max_summon_attributes=Max Summon Attributes -gui.worldhandler.config.key.sliders.max_experience=Max Experience -gui.worldhandler.config.key.sliders.max_player_points=Max Player Points - -gui.worldhandler.config.comment.sliders.max_potion_amplifier=Maximum value for the potion amplifier -gui.worldhandler.config.comment.sliders.max_item_enchantment=Maximum value for an item enchantment -gui.worldhandler.config.comment.sliders.max_item_attributes=Maximum value for an item attribute -gui.worldhandler.config.comment.sliders.max_summon_potion_amplifier=Maximum value for the potion amplifier for summon -gui.worldhandler.config.comment.sliders.max_summon_potion_minutes=Maximum value for the potion duration in minutes for summon -gui.worldhandler.config.comment.sliders.max_summon_attributes=Maximum value for attributes -gui.worldhandler.config.comment.sliders.max_experience=Maximum value for experience -gui.worldhandler.config.comment.sliders.max_player_points=Maximum value for player points - -gui.worldhandler.tab.scoreboard.objectives=Objectives -gui.worldhandler.tab.scoreboard.teams=Teams -gui.worldhandler.tab.scoreboard.players=Players - -gui.worldhandler.tab.player.player=Player -gui.worldhandler.tab.player.experience=Experience -gui.worldhandler.tab.player.advancements=Advancements - -gui.worldhandler.tab.entities.summon=Summon - -gui.worldhandler.tab.world.world=World -gui.worldhandler.tab.world.gamerules=Gamerules - -gui.worldhandler.tab.blocks.edit_blocks=Edit Blocks -gui.worldhandler.tab.blocks.sign_editor=Sign Editor -gui.worldhandler.tab.blocks.note_block_editor=Note Editor - -gui.worldhandler.tab.items.custom_item=Custom Item -gui.worldhandler.tab.items.enchantment=Enchantment -gui.worldhandler.tab.items.recipes=Recipes - -gui.worldhandler.tab.containers=Containers -gui.worldhandler.tab.multiplayer=Multiplayer - -gui.worldhandler.title.entities.summon=Summon - -gui.worldhandler.title.items.custom_item=Custom Item -gui.worldhandler.title.items.enchantment=Enchantment -gui.worldhandler.title.items.recipes=Recipes - -gui.worldhandler.title.blocks.edit_blocks=Edit Blocks -gui.worldhandler.title.blocks.sign_editor=Sign Editor -gui.worldhandler.title.blocks.note_block_editor=Note Block Editor - -gui.worldhandler.title.scoreboard=Scoreboard - -gui.worldhandler.title.world.world=World -gui.worldhandler.title.world.gamerules=Gamerules - -gui.worldhandler.title.player.player=Player -gui.worldhandler.title.player.experience=Experience -gui.worldhandler.title.player.advancements=Advancements - -gui.worldhandler.title.butcher=Butcher -gui.worldhandler.title.change_world=Change World -gui.worldhandler.title.potions=Potions - -gui.worldhandler.title.containers=Containers -gui.worldhandler.title.multiplayer=Multiplayer - -gui.worldhandler.advancements.grant=Grant -gui.worldhandler.advancements.revoke=Revoke -gui.worldhandler.advancements.only=Only -gui.worldhandler.advancements.until=Until -gui.worldhandler.advancements.from=From -gui.worldhandler.advancements.through=Through -gui.worldhandler.advancements.everything=Everything - -gui.worldhandler.change_world.singleplayer=Singleplayer World -gui.worldhandler.change_world.multiplayer=Multiplayer Server - -gui.worldhandler.butcher.radius=Radius -gui.worldhandler.butcher.configure=Configure -gui.worldhandler.butcher.slaughter=Slaughter - -gui.worldhandler.multiplayer.kick=Kick -gui.worldhandler.multiplayer.ban=Ban -gui.worldhandler.multiplayer.pardon=Pardon -gui.worldhandler.multiplayer.permissions=Permissions -gui.worldhandler.multiplayer.runtime=Runtime -gui.worldhandler.multiplayer.whitelist=Whitelist -gui.worldhandler.multiplayer.username=Username - -gui.worldhandler.multiplayer.kick_ban.reason=Reason - -gui.worldhandler.multiplayer.permissions.give=Give Permissions -gui.worldhandler.multiplayer.permissions.take=Take Permissions - -gui.worldhandler.multiplayer.runtime.save_world=Save World -gui.worldhandler.multiplayer.runtime.autosave=Autosave: %s -gui.worldhandler.multiplayer.runtime.stop_server=Stop Server - -gui.worldhandler.multiplayer.whitelist.reload=Reload Whitelist -gui.worldhandler.multiplayer.whitelist.whitelist=Whitelist: %s -gui.worldhandler.multiplayer.whitelist.add=Add -gui.worldhandler.multiplayer.whitelist.remove=Remove - -gui.worldhandler.potions.effect=Effect -gui.worldhandler.potions.effect.give=Give -gui.worldhandler.potions.effect.remove=Remove -gui.worldhandler.potions.effect.remove_all=Remove All -gui.worldhandler.potions.effect.amplifier=Amplifier -gui.worldhandler.potions.effect.ambient=Ambient: %s -gui.worldhandler.potions.effect.particles=Particles: %s -gui.worldhandler.potions.effect.bottle=Bottle -gui.worldhandler.potions.effect.splash=Splash -gui.worldhandler.potions.effect.lingering=Lingering -gui.worldhandler.potions.effect.tipped_arrow=Arrow - -gui.worldhandler.entities=Entities -gui.worldhandler.items=Items -gui.worldhandler.scoreboard=Scoreboard -gui.worldhandler.resourcepack=Resourcepack -gui.worldhandler.change_world=Change World -gui.worldhandler.world=World -gui.worldhandler.blocks=Blocks -gui.worldhandler.player=Player - -gui.worldhandler.items.custom_item.start=Start -gui.worldhandler.items.custom_item.enchantment=Enchantment -gui.worldhandler.items.custom_item.attributes=Attributes -gui.worldhandler.items.custom_item.custom_item=Give - -gui.worldhandler.items.custom_item.start.item_id=Item -gui.worldhandler.items.custom_item.start.lore_1=Lore I -gui.worldhandler.items.custom_item.start.lore_2=Lore II -gui.worldhandler.items.custom_item.start.custom_name=Custom Name - -gui.worldhandler.items.enchantment.level=Level -gui.worldhandler.items.enchantment.enchant=Enchant - -gui.worldhandler.blocks.sign_editor.look_at_sign=Look at a Sign and press '%s' -gui.worldhandler.blocks.sign_editor.text_line_1=Text Line I -gui.worldhandler.blocks.sign_editor.text_line_2=Text Line II -gui.worldhandler.blocks.sign_editor.text_line_3=Text Line III -gui.worldhandler.blocks.sign_editor.text_line_4=Text Line IV -gui.worldhandler.blocks.sign_editor.commmand=Command -gui.worldhandler.blocks.sign_editor.done=Done -gui.worldhandler.blocks.sign_editor.format_text_line=Format Text Line - -gui.worldhandler.blocks.note_block_editor.look_at_note_block=Look at a Note Block and press '%s' -gui.worldhandler.blocks.note_block_editor.c=C -gui.worldhandler.blocks.note_block_editor.d=D -gui.worldhandler.blocks.note_block_editor.e=E -gui.worldhandler.blocks.note_block_editor.f=F -gui.worldhandler.blocks.note_block_editor.g=G -gui.worldhandler.blocks.note_block_editor.a=A -gui.worldhandler.blocks.note_block_editor.b=B - -gui.worldhandler.gamerules.rule.commandBlockOutput=Commandblock Messages -gui.worldhandler.gamerules.rule.disableElytraMovementCheck=Disable Speed Check -gui.worldhandler.gamerules.rule.doDaylightCycle=Daylight Cycle -gui.worldhandler.gamerules.rule.doEntityDrops=Entity Drops -gui.worldhandler.gamerules.rule.doFireTick=Fire Spread -gui.worldhandler.gamerules.rule.doMobLoot=Mob Drops -gui.worldhandler.gamerules.rule.doMobSpawning=Mob Spawning -gui.worldhandler.gamerules.rule.doTileDrops=Block Drops -gui.worldhandler.gamerules.rule.keepInventory=Keep Inventory -gui.worldhandler.gamerules.rule.logAdminCommands=Log Admin Commands -gui.worldhandler.gamerules.rule.mobGriefing=Mob Griefing -gui.worldhandler.gamerules.rule.naturalRegeneration=Natural Regeneration -gui.worldhandler.gamerules.rule.randomTickSpeed=Random Tick Speed -gui.worldhandler.gamerules.rule.reducedDebugInfo=Reduced Debug Info -gui.worldhandler.gamerules.rule.sendCommandFeedback=Command Feedback -gui.worldhandler.gamerules.rule.showDeathMessages=Death Messages -gui.worldhandler.gamerules.rule.spawnRadius=Spawn Radius -gui.worldhandler.gamerules.rule.spectatorsGenerateChunks=Spectators Generate Chunks -gui.worldhandler.gamerules.rule.doWeatherCycle=Weather Cycle -gui.worldhandler.gamerules.rule.maxEntityCramming=Max Entitiy Cramming -gui.worldhandler.gamerules.rule.announceAdvancements=Anncounce Advancements -gui.worldhandler.gamerules.rule.doLimitedCrafting=Limited Crafting -gui.worldhandler.gamerules.rule.gameLoopFunction=Game Loop Function -gui.worldhandler.gamerules.rule.maxCommandChainLength=Command Chain Length - -gui.worldhandler.world_info.start=Start -gui.worldhandler.world_info.world=World -gui.worldhandler.world_info.statistics=Statistics - -gui.worldhandler.world_info.n_a=n/a - -gui.worldhandler.world_info.start.spawn=Spawn - -gui.worldhandler.world_info.world.name=Name -gui.worldhandler.world_info.world.world_type=World Type -gui.worldhandler.world_info.world.seed=Seed - -gui.worldhandler.world_info.statistics.world_time=World Time -gui.worldhandler.world_info.statistics.played=Played - -gui.worldhandler.edit_blocks.coordinates=Coordinates -gui.worldhandler.edit_blocks.fill=Fill -gui.worldhandler.edit_blocks.replace=Replace -gui.worldhandler.edit_blocks.clone=Clone - -gui.worldhandler.edit_blocks.replace.block_id_replace=Block ID Replace -gui.worldhandler.edit_blocks.replace.block_id_place=Block ID Place - -gui.worldhandler.edit_blocks.fill.block_id_to_fill=Block ID To Fill - -gui.worldhandler.edit_blocks.clone.mode.replace=Replace -gui.worldhandler.edit_blocks.clone.mode.masked=Masked -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 -gui.worldhandler.scoreboard.slot.sidebar.team=Sidebar Team - -gui.worldhandler.scoreboard.objectives.objective=Objective -gui.worldhandler.scoreboard.objectives.create=Create -gui.worldhandler.scoreboard.objectives.display=Display -gui.worldhandler.scoreboard.objectives.undisplay=Undisplay -gui.worldhandler.scoreboard.objectives.remove=Remove - -gui.worldhandler.scoreboard.objectives.criteria.air=Player Air -gui.worldhandler.scoreboard.objectives.criteria.armor=Player Armor -gui.worldhandler.scoreboard.objectives.criteria.deathCount=Death Count -gui.worldhandler.scoreboard.objectives.criteria.dummy=Dummy -gui.worldhandler.scoreboard.objectives.criteria.food=Player Food -gui.worldhandler.scoreboard.objectives.criteria.health=Player Health -gui.worldhandler.scoreboard.objectives.criteria.killedByTeam=Killed By Team -gui.worldhandler.scoreboard.objectives.criteria.level=Experience Level -gui.worldhandler.scoreboard.objectives.criteria.playerKillCount=Players Killed -gui.worldhandler.scoreboard.objectives.criteria.stat=Stat -gui.worldhandler.scoreboard.objectives.criteria.stat.craftingTableInteraction=Crafting Table Interaction -gui.worldhandler.scoreboard.objectives.criteria.stat.breakItem=Break Item -gui.worldhandler.scoreboard.objectives.criteria.stat.craftItem=Craft Item -gui.worldhandler.scoreboard.objectives.criteria.stat.drop=Drop Item -gui.worldhandler.scoreboard.objectives.criteria.stat.entityKilledBy=Killed By Count -gui.worldhandler.scoreboard.objectives.criteria.stat.killEntity=Kill Count -gui.worldhandler.scoreboard.objectives.criteria.stat.mineBlock=Block Mined Count -gui.worldhandler.scoreboard.objectives.criteria.stat.pickup=Item Pickup Count -gui.worldhandler.scoreboard.objectives.criteria.stat.useItem=Item Used Count -gui.worldhandler.scoreboard.objectives.criteria.teamkill=Teamkills -gui.worldhandler.scoreboard.objectives.criteria.totalKillCount=Total Kill Count -gui.worldhandler.scoreboard.objectives.criteria.trigger=Trigger -gui.worldhandler.scoreboard.objectives.criteria.xp=Total Experience - -gui.worldhandler.scoreboard.team.options.friendlyfire=Friendly Fire -gui.worldhandler.scoreboard.team.options.seeFriendlyInvisibles=Friendly Invisibles -gui.worldhandler.scoreboard.team.options.nametagVisibility=Name Tag Visibility -gui.worldhandler.scoreboard.team.options.deathMessageVisibility=Death Messages -gui.worldhandler.scoreboard.team.options.collisionRule=Team Collision -gui.worldhandler.scoreboard.team.options.color=Color - -gui.worldhandler.scoreboard.team.suboption.always=Always -gui.worldhandler.scoreboard.team.suboption.never=Never -gui.worldhandler.scoreboard.team.suboption.hideForOtherTeams=Hide For Others -gui.worldhandler.scoreboard.team.suboption.hideForOwnTeam=Hide For Own -gui.worldhandler.scoreboard.team.suboption.pushOwnTeam=Push Own Team -gui.worldhandler.scoreboard.team.suboption.pushOtherTeams=Push Other Team -gui.worldhandler.scoreboard.team.suboption.true=Enable -gui.worldhandler.scoreboard.team.suboption.false=Disable - -gui.worldhandler.scoreboard.team.team=Team -gui.worldhandler.scoreboard.team.create=Create -gui.worldhandler.scoreboard.team.join=Join -gui.worldhandler.scoreboard.team.leave=Leave -gui.worldhandler.scoreboard.team.remove=Remove -gui.worldhandler.scoreboard.team.empty=Empty -gui.worldhandler.scoreboard.team.options=Team Options - -gui.worldhandler.scoreboard.players.points=Points -gui.worldhandler.scoreboard.players.tag=Tag -gui.worldhandler.scoreboard.players.trigger=Trigger - -gui.worldhandler.entities.player.start=Start -gui.worldhandler.entities.player.score=Score -gui.worldhandler.entities.player.position=Position -gui.worldhandler.entities.player.miscellaneous=Miscellaneous - -gui.worldhandler.entities.player.score.experience=Experience -gui.worldhandler.entities.player.score.experience_coins=Exp Coins - -gui.worldhandler.entities.player.position.copy_position=Copy Position - -gui.worldhandler.entities.player.miscellaneous.set_spawn=Set Spawn -gui.worldhandler.entities.player.miscellaneous.set_global_spawn=Set Global Spawn -gui.worldhandler.entities.player.miscellaneous.kill=Kill -gui.worldhandler.entities.player.miscellaneous.clear_inventory=Clear Inventory - -gui.worldhandler.entities.summon.start=Start -gui.worldhandler.entities.summon.potion_effects=Potion Effects -gui.worldhandler.entities.summon.attributes=Attributes -gui.worldhandler.entities.summon.equipment=Equipment - -gui.worldhandler.entities.summon.start.mob_id=Mob ID -gui.worldhandler.entities.summon.start.custom_name=Custom Name -gui.worldhandler.entities.summon.start.passenger_mob_id=Passenger Mob ID - -gui.worldhandler.potion.time.hours=Hours -gui.worldhandler.potion.time.minutes=Minutes -gui.worldhandler.potion.time.seconds=Seconds - -gui.worldhandler.shortcuts.tooltip.home=Home -gui.worldhandler.shortcuts.tooltip.butcher=Butcher -gui.worldhandler.shortcuts.tooltip.settings=Settings -gui.worldhandler.shortcuts.tooltip.potions=Potions - -gui.worldhandler.shortcuts.tooltip.gamemode=Gamemode: %s -gui.worldhandler.shortcuts.tooltip.gamemode.survival=Survival -gui.worldhandler.shortcuts.tooltip.gamemode.creative=Creative -gui.worldhandler.shortcuts.tooltip.gamemode.adventure=Adventure -gui.worldhandler.shortcuts.tooltip.gamemode.spectator=Spectator - -gui.worldhandler.shortcuts.tooltip.difficulty=Difficulty: %s -gui.worldhandler.shortcuts.tooltip.difficulty.peaceful=Peaceful -gui.worldhandler.shortcuts.tooltip.difficulty.easy=Easy -gui.worldhandler.shortcuts.tooltip.difficulty.normal=Normal -gui.worldhandler.shortcuts.tooltip.difficulty.hard=Hard - -gui.worldhandler.shortcuts.tooltip.weather=Weather: %s -gui.worldhandler.shortcuts.tooltip.weather.thunder=Thunderstorm -gui.worldhandler.shortcuts.tooltip.weather.rainy=Rain -gui.worldhandler.shortcuts.tooltip.weather.clear=Clear - -gui.worldhandler.shortcuts.tooltip.time=Time: %s -gui.worldhandler.shortcuts.tooltip.time.midnight=Midnight (%s) -gui.worldhandler.shortcuts.tooltip.time.sunset=Sunset (%s) -gui.worldhandler.shortcuts.tooltip.time.noon=Noon (%s) -gui.worldhandler.shortcuts.tooltip.time.dawn=Dawn (%s) - -gui.worldhandler.generic.back=Back -gui.worldhandler.generic.backToGame=Back to Game -gui.worldhandler.generic.on=On -gui.worldhandler.generic.off=Off -gui.worldhandler.generic.yes=Yes -gui.worldhandler.generic.no=No -gui.worldhandler.generic.value=Value -gui.worldhandler.generic.name=Name -gui.worldhandler.generic.enable=Enable -gui.worldhandler.generic.disable=Disable -gui.worldhandler.generic.edit_username=Edit Username - -gui.worldhandler.actions.add=Add -gui.worldhandler.actions.remove=Remove -gui.worldhandler.actions.reset=Reset -gui.worldhandler.actions.set_to_0=Set To 0 -gui.worldhandler.actions.perform=Perform -gui.worldhandler.actions.send=Send -gui.worldhandler.actions.copy=Copy -gui.worldhandler.actions.place_command_block=Place Command Block - -gui.worldhandler.color=Color -gui.worldhandler.color.black=Black -gui.worldhandler.color.dark_blue=Dark Blue -gui.worldhandler.color.dark_green=Dark Green -gui.worldhandler.color.dark_aqua=Dark Aqua -gui.worldhandler.color.dark_red=Dark Red -gui.worldhandler.color.dark_purple=Dark Purple -gui.worldhandler.color.gold=Gold -gui.worldhandler.color.gray=Gray -gui.worldhandler.color.dark_gray=Dark Gray -gui.worldhandler.color.blue=Blue -gui.worldhandler.color.green=Green -gui.worldhandler.color.aqua=Aqua -gui.worldhandler.color.red=Red -gui.worldhandler.color.light_purple=Light Purple -gui.worldhandler.color.yellow=Yellow -gui.worldhandler.color.white=White -gui.worldhandler.color.reset=Default - -worldhandler.permission.refused=You do not have permission to use the World Handler -worldhandler.permission.refused.change=Change "%s" to disable this message - -worldhandler.error.gui=An unexpected error occured. Please send a crash report with your log files to the %s forum \ No newline at end of file diff --git a/src/main/resources/assets/worldhandler/lang/zh_cn.json b/src/main/resources/assets/worldhandler/lang/zh_cn.json new file mode 100644 index 0000000..6c93dfe --- /dev/null +++ b/src/main/resources/assets/worldhandler/lang/zh_cn.json @@ -0,0 +1,450 @@ +{ + "gui.worldhandler.config.tooltip": "World Handler 设置", + + "gui.worldhandler.config.category.settings": "设置", + "gui.worldhandler.config.category.skin": "皮肤样式", + "gui.worldhandler.config.category.butcher": "屠宰", + "gui.worldhandler.config.category.sliders": "滑块", + + "gui.worldhandler.config.key.settings.biome_indicator": "生物群系指示器", + "gui.worldhandler.config.key.settings.command_syntax": "命令句法", + "gui.worldhandler.config.key.settings.shortcuts": "快捷键", + "gui.worldhandler.config.key.settings.key_shortcuts": "键盘快捷键", + "gui.worldhandler.config.key.settings.tooltips": "浮动提示", + "gui.worldhandler.config.key.settings.watch": "时钟", + "gui.worldhandler.config.key.settings.smooth_watch": "时钟平滑效果", + "gui.worldhandler.config.key.settings.pause_game": "暂停游戏", + "gui.worldhandler.config.key.settings.custom_times": "自定义时间", + "gui.worldhandler.config.key.settings.permission_query": "权限队列", + "gui.worldhandler.config.key.settings.highlight_blocks": "高亮方块", + "gui.worldhandler.config.key.settings.custom_time_dawn": "自定义日出时间", + "gui.worldhandler.config.key.settings.custom_time_noon": "自定义正午时间", + "gui.worldhandler.config.key.settings.custom_time_sunset": "自定义日落时间", + "gui.worldhandler.config.key.settings.custom_time_midnight": "自定义午夜时间", + "gui.worldhandler.config.key.settings.block_placing_mode": "方块放置方式", + + "gui.worldhandler.config.comment.settings.custom_time_dawn": "生物群系指示器开启", + "gui.worldhandler.config.comment.settings.command_syntax": "命令句法开启", + "gui.worldhandler.config.comment.settings.shortcuts": "快捷键开启", + "gui.worldhandler.config.comment.settings.key_shortcuts": "键盘快捷键开启", + "gui.worldhandler.config.comment.settings.tooltips": "浮动提示开启", + "gui.worldhandler.config.comment.settings.watch": "时钟开启", + "gui.worldhandler.config.comment.settings.smooth_watch": "时钟平滑效果开启", + "gui.worldhandler.config.comment.settings.pause_game": "暂停游戏", + "gui.worldhandler.config.comment.settings.custom_times": "自定义时间开启", + "gui.worldhandler.config.comment.settings.permission_query": "权限队列开启", + "gui.worldhandler.config.comment.settings.highlight_blocks": "被选中的方块会不会高亮", + "gui.worldhandler.config.comment.settings.custom_time_dawn": "日出的时间", + "gui.worldhandler.config.comment.settings.custom_time_noon": "正午的时间", + "gui.worldhandler.config.comment.settings.custom_time_sunset": "日落的时间", + "gui.worldhandler.config.comment.settings.custom_time_midnight": "午夜的时间", + "gui.worldhandler.config.comment.settings.block_placing_mode": "方块放置方式", + + "gui.worldhandler.config.key.skin.icons": "图标尺寸", + "gui.worldhandler.config.key.skin.label_color": "标签颜色", + "gui.worldhandler.config.key.skin.headline_color": "标题颜色", + "gui.worldhandler.config.key.skin.background_red": "背景红色", + "gui.worldhandler.config.key.skin.background_green": "背景绿色", + "gui.worldhandler.config.key.skin.background_blue": "背景蓝色", + "gui.worldhandler.config.key.skin.button_red": "按钮红色", + "gui.worldhandler.config.key.skin.button_green": "按钮绿色", + "gui.worldhandler.config.key.skin.button_blue": "按钮蓝色", + "gui.worldhandler.config.key.skin.textures": "材质", + "gui.worldhandler.config.key.skin.sharp_tab_edges": "尖锐分栏边缘", + "gui.worldhandler.config.key.skin.draw_background": "绘制暗色背景", + "gui.worldhandler.config.key.skin.background_alpha": "背景透明度", + "gui.worldhandler.config.key.skin.button_alpha": "按钮透明度", + + "gui.worldhandler.config.comment.skin.icons": "图标的大小", + "gui.worldhandler.config.comment.skin.label_color": "标签的颜色", + "gui.worldhandler.config.comment.skin.headline_color": "标题颜色", + "gui.worldhandler.config.comment.skin.background_red": "背景 R", + "gui.worldhandler.config.comment.skin.background_green": "背景 G", + "gui.worldhandler.config.comment.skin.background_blue": "背景 B", + "gui.worldhandler.config.comment.skin.button_red": "按钮 R", + "gui.worldhandler.config.comment.skin.button_green": "按钮 G", + "gui.worldhandler.config.comment.skin.button_blue": "按钮 B", + "gui.worldhandler.config.comment.skin.textures": "背景材质", + "gui.worldhandler.config.comment.skin.sharp_tab_edges": "尖锐分栏边缘开启", + "gui.worldhandler.config.comment.skin.draw_background": "绘制暗色背景开启", + "gui.worldhandler.config.comment.skin.background_alpha": "背景 Alpha", + "gui.worldhandler.config.comment.skin.button_alpha": "按钮 Alpha", + + "gui.worldhandler.config.comment.butcher": "屠宰 %s 开启", + + "gui.worldhandler.config.key.sliders.max_potion_amplifier": "药水倍率最大值", + "gui.worldhandler.config.key.sliders.max_item_enchantment": "物品附魔最大值", + "gui.worldhandler.config.key.sliders.max_item_attributes": "物品属性最大值", + "gui.worldhandler.config.key.sliders.max_summon_potion_amplifier": "召唤药水倍率最大值", + "gui.worldhandler.config.key.sliders.max_summon_potion_minutes": "召唤药水持续时间最大值", + "gui.worldhandler.config.key.sliders.max_summon_attributes": "召唤属性最大值", + "gui.worldhandler.config.key.sliders.max_experience": "经验最大值", + "gui.worldhandler.config.key.sliders.max_player_points": "玩家分数最大值", + + "gui.worldhandler.config.comment.sliders.max_potion_amplifier": "药水倍率最大值", + "gui.worldhandler.config.comment.sliders.max_item_enchantment": "物品附魔最大值", + "gui.worldhandler.config.comment.sliders.max_item_attributes": "物品属性最大值", + "gui.worldhandler.config.comment.sliders.max_summon_potion_amplifier": "召唤药水倍率最大值", + "gui.worldhandler.config.comment.sliders.max_summon_potion_minutes": "召唤药水持续时间最大值", + "gui.worldhandler.config.comment.sliders.max_summon_attributes": "召唤属性最大值", + "gui.worldhandler.config.comment.sliders.max_experience": "经验最大值", + "gui.worldhandler.config.comment.sliders.max_player_points": "玩家分数最大值", + + "gui.worldhandler.tab.scoreboard.objectives": "变量", + "gui.worldhandler.tab.scoreboard.teams": "团队", + "gui.worldhandler.tab.scoreboard.players": "玩家", + + "gui.worldhandler.tab.player.player": "玩家", + "gui.worldhandler.tab.player.experience": "经验等级", + "gui.worldhandler.tab.player.advancements": "进度", + + "gui.worldhandler.tab.entities.summon": "召唤", + + "gui.worldhandler.tab.world.world": "世界", + "gui.worldhandler.tab.world.gamerules": "游戏规则", + + "gui.worldhandler.tab.blocks.edit_blocks": "编辑方块", + "gui.worldhandler.tab.blocks.sign_editor": "告示牌编辑器", + "gui.worldhandler.tab.blocks.note_block_editor": "音符编辑器", + + "gui.worldhandler.tab.items.custom_item": "给予自定义物品", + "gui.worldhandler.tab.items.enchantment": "附魔", + "gui.worldhandler.tab.items.recipes": "配方", + + "gui.worldhandler.tab.containers": "容器", + "gui.worldhandler.tab.multiplayer": "多人", + + "gui.worldhandler.title.entities.summon": "召唤", + + "gui.worldhandler.title.items.custom_item": "给予自定义物品", + "gui.worldhandler.title.items.enchantment": "附魔", + "gui.worldhandler.title.items.recipes": "配方", + + "gui.worldhandler.title.blocks.edit_blocks": "编辑方块", + "gui.worldhandler.title.blocks.sign_editor": "告示牌编辑器", + "gui.worldhandler.title.blocks.note_block_editor": "音符盒编辑器", + + "gui.worldhandler.title.scoreboard": "记分板", + + "gui.worldhandler.title.world.world": "世界", + "gui.worldhandler.title.world.gamerules": "游戏规则", + + "gui.worldhandler.title.player.player": "玩家", + "gui.worldhandler.title.player.experience": "经验等级", + "gui.worldhandler.title.player.advancements": "进度", + + "gui.worldhandler.title.butcher": "屠宰", + "gui.worldhandler.title.change_world": "更改世界", + "gui.worldhandler.title.potions": "药水", + + "gui.worldhandler.title.containers": "容器", + "gui.worldhandler.title.multiplayer": "多人", + + "gui.worldhandler.advancements.grant": "给予", + "gui.worldhandler.advancements.revoke": "移除", + "gui.worldhandler.advancements.only": "仅此", + "gui.worldhandler.advancements.until": "直到", + "gui.worldhandler.advancements.from": "自", + "gui.worldhandler.advancements.through": "经由", + "gui.worldhandler.advancements.everything": "全部", + + "gui.worldhandler.change_world.singleplayer": "单人世界", + "gui.worldhandler.change_world.multiplayer": "多人世界", + + "gui.worldhandler.butcher.radius": "范围", + "gui.worldhandler.butcher.configure": "配置", + "gui.worldhandler.butcher.slaughter": "屠杀", + + "gui.worldhandler.multiplayer.kick": "踢出", + "gui.worldhandler.multiplayer.ban": "封禁", + "gui.worldhandler.multiplayer.pardon": "解封", + "gui.worldhandler.multiplayer.permissions": "权限", + "gui.worldhandler.multiplayer.runtime": "运行时", + "gui.worldhandler.multiplayer.whitelist": "白名单", + "gui.worldhandler.multiplayer.username": "用户名", + + "gui.worldhandler.multiplayer.kick_ban.reason": "理由", + + "gui.worldhandler.multiplayer.permissions.give": "给予权限", + "gui.worldhandler.multiplayer.permissions.take": "收回权限", + + "gui.worldhandler.multiplayer.runtime.save_world": "保存世界", + "gui.worldhandler.multiplayer.runtime.autosave": "自动保存:%s", + "gui.worldhandler.multiplayer.runtime.stop_server": "停止服务器", + + "gui.worldhandler.multiplayer.whitelist.reload": "重新加载白名单", + "gui.worldhandler.multiplayer.whitelist.whitelist": "白名单:%s", + "gui.worldhandler.multiplayer.whitelist.add": "添加", + "gui.worldhandler.multiplayer.whitelist.remove": "删除", + + "gui.worldhandler.potions.effect": "效果", + "gui.worldhandler.potions.effect.give": "给予", + "gui.worldhandler.potions.effect.remove": "删除", + "gui.worldhandler.potions.effect.remove_all": "移除所有", + "gui.worldhandler.potions.effect.amplifier": "效果等级", + "gui.worldhandler.potions.effect.ambient": "减少粒子显示:%s", + "gui.worldhandler.potions.effect.particles": "粒子:%s", + "gui.worldhandler.potions.effect.bottle": "瓶装", + "gui.worldhandler.potions.effect.splash": "喷溅", + "gui.worldhandler.potions.effect.lingering": "滞留", + "gui.worldhandler.potions.effect.tipped_arrow": "箭", + + "gui.worldhandler.entities": "实体", + "gui.worldhandler.items": "物品", + "gui.worldhandler.scoreboard": "记分板", + "gui.worldhandler.resourcepack": "资源包", + "gui.worldhandler.change_world": "更改世界", + "gui.worldhandler.world": "世界", + "gui.worldhandler.blocks": "方块", + "gui.worldhandler.player": "玩家", + + "gui.worldhandler.items.custom_item.start": "首选项", + "gui.worldhandler.items.custom_item.enchantment": "附魔", + "gui.worldhandler.items.custom_item.attributes": "属性", + "gui.worldhandler.items.custom_item.custom_item": "给予自定义物品", + + "gui.worldhandler.items.custom_item.start.item_id": "物品 ID", + "gui.worldhandler.items.custom_item.start.lore_1": "描述 I", + "gui.worldhandler.items.custom_item.start.lore_2": "描述 II", + "gui.worldhandler.items.custom_item.start.custom_name": "自定义名称", + + "gui.worldhandler.items.enchantment.level": "等级", + "gui.worldhandler.items.enchantment.enchant": "附魔", + + "gui.worldhandler.blocks.sign_editor.look_at_sign": "看着一个告示牌并按 '%s'", + "gui.worldhandler.blocks.sign_editor.text_line_1": "文字行 I", + "gui.worldhandler.blocks.sign_editor.text_line_2": "文字行 II", + "gui.worldhandler.blocks.sign_editor.text_line_3": "文字行 III", + "gui.worldhandler.blocks.sign_editor.text_line_4": "文字行 IV", + "gui.worldhandler.blocks.sign_editor.commmand": "命令", + "gui.worldhandler.blocks.sign_editor.done": "完成", + "gui.worldhandler.blocks.sign_editor.format_text_line": "文本行格式", + + "gui.worldhandler.blocks.note_block_editor.look_at_note_block": "看着一个音符盒并按 '%s'", + "gui.worldhandler.blocks.note_block_editor.c": "C", + "gui.worldhandler.blocks.note_block_editor.d": "D", + "gui.worldhandler.blocks.note_block_editor.e": "E", + "gui.worldhandler.blocks.note_block_editor.f": "F", + "gui.worldhandler.blocks.note_block_editor.g": "G", + "gui.worldhandler.blocks.note_block_editor.a": "A", + "gui.worldhandler.blocks.note_block_editor.b": "B", + + "gui.worldhandler.gamerules.rule.commandBlockOutput": "命令方块输出信息", + "gui.worldhandler.gamerules.rule.disableElytraMovementCheck": "禁用鞘翅速度检查", + "gui.worldhandler.gamerules.rule.doDaylightCycle": "昼夜循环", + "gui.worldhandler.gamerules.rule.doEntityDrops": "实体掉落", + "gui.worldhandler.gamerules.rule.doFireTick": "火焰扩散", + "gui.worldhandler.gamerules.rule.doMobLoot": "生物掉落", + "gui.worldhandler.gamerules.rule.doMobSpawning": "生物出生", + "gui.worldhandler.gamerules.rule.doTileDrops": "方块掉落", + "gui.worldhandler.gamerules.rule.keepInventory": "死亡保留物品", + "gui.worldhandler.gamerules.rule.logAdminCommands": "存储命令输出到聊天记录", + "gui.worldhandler.gamerules.rule.mobGriefing": "生物对世界的破坏", + "gui.worldhandler.gamerules.rule.naturalRegeneration": "自然回血", + "gui.worldhandler.gamerules.rule.randomTickSpeed": "随机方块刻速度", + "gui.worldhandler.gamerules.rule.reducedDebugInfo": "简化调试信息", + "gui.worldhandler.gamerules.rule.sendCommandFeedback": "命令反馈", + "gui.worldhandler.gamerules.rule.showDeathMessages": "死亡信息", + "gui.worldhandler.gamerules.rule.spawnRadius": "出生范围", + "gui.worldhandler.gamerules.rule.spectatorsGenerateChunks": "旁观者生成区块", + "gui.worldhandler.gamerules.rule.doWeatherCycle": "天气循环", + "gui.worldhandler.gamerules.rule.maxEntityCramming": "最大实体堆叠", + "gui.worldhandler.gamerules.rule.announceAdvancements": "广播进度", + "gui.worldhandler.gamerules.rule.doLimitedCrafting": "限制合成配方", + "gui.worldhandler.gamerules.rule.gameLoopFunction": "每刻运行的函数", + "gui.worldhandler.gamerules.rule.maxCommandChainLength": "命令连锁长度", + + "gui.worldhandler.world_info.start": "首选项", + "gui.worldhandler.world_info.world": "世界", + "gui.worldhandler.world_info.statistics": "统计数据", + + "gui.worldhandler.world_info.n_a": "n/a", + + "gui.worldhandler.world_info.start.spawn": "出生", + + "gui.worldhandler.world_info.world.name": "名称", + "gui.worldhandler.world_info.world.world_type": "世界类型", + "gui.worldhandler.world_info.world.seed": "种子", + "gui.worldhandler.world_info.world.copy_seed": "复制种子", + + "gui.worldhandler.world_info.statistics.world_time": "世界时间", + "gui.worldhandler.world_info.statistics.played": "已游玩", + + "gui.worldhandler.edit_blocks.coordinates": "坐标", + "gui.worldhandler.edit_blocks.fill": "填充", + "gui.worldhandler.edit_blocks.replace": "替换", + "gui.worldhandler.edit_blocks.clone": "克隆", + + "gui.worldhandler.edit_blocks.replace.block_id_replace": "被替换方块 ID", + "gui.worldhandler.edit_blocks.replace.block_id_place": "放置方块 ID", + + "gui.worldhandler.edit_blocks.fill.block_id_to_fill": "填充方块 ID", + + "gui.worldhandler.edit_blocks.clone.mode.replace": "替换", + "gui.worldhandler.edit_blocks.clone.mode.masked": "叠加", + "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": "给予", + "gui.worldhandler.recipes.take": "拿取", + + "gui.worldhandler.scoreboard.slot.list": "列表", + "gui.worldhandler.scoreboard.slot.belowName": "名称下方", + "gui.worldhandler.scoreboard.slot.sidebar": "侧边栏", + "gui.worldhandler.scoreboard.slot.sidebar.team": "侧边栏队伍", + + "gui.worldhandler.scoreboard.objectives.objective": "变量", + "gui.worldhandler.scoreboard.objectives.create": "创建", + "gui.worldhandler.scoreboard.objectives.display": "显示", + "gui.worldhandler.scoreboard.objectives.undisplay": "取消显示", + "gui.worldhandler.scoreboard.objectives.remove": "删除", + + "gui.worldhandler.scoreboard.objectives.stat.air": "空气值", + "gui.worldhandler.scoreboard.objectives.stat.armor": "盔甲值", + "gui.worldhandler.scoreboard.objectives.stat.deathCount": "死亡次数", + "gui.worldhandler.scoreboard.objectives.stat.dummy": "虚拟型", + "gui.worldhandler.scoreboard.objectives.stat.food": "饱食度", + "gui.worldhandler.scoreboard.objectives.stat.health": "生命值", + "gui.worldhandler.scoreboard.objectives.stat.killedByTeam": "团队被击杀数", + "gui.worldhandler.scoreboard.objectives.stat.level": "经验等级", + "gui.worldhandler.scoreboard.objectives.stat.custom": "Statistics", + "gui.worldhandler.scoreboard.objectives.stat.killed": "击杀实体数", + "gui.worldhandler.scoreboard.objectives.stat.killed_by": "被实体击杀数", + "gui.worldhandler.scoreboard.objectives.stat.playerKillCount": "击杀玩家数", + "gui.worldhandler.scoreboard.objectives.stat.teamkill": "团队击杀数", + "gui.worldhandler.scoreboard.objectives.stat.totalKillCount": "击杀生物数", + "gui.worldhandler.scoreboard.objectives.stat.trigger": "触发器", + "gui.worldhandler.scoreboard.objectives.stat.xp": "经验值", + + "gui.worldhandler.scoreboard.team.options.friendlyFire": "误伤", + "gui.worldhandler.scoreboard.team.options.seeFriendlyInvisibles": "可看到隐身队友", + "gui.worldhandler.scoreboard.team.options.nametagVisibility": "成员名称牌可见性", + "gui.worldhandler.scoreboard.team.options.deathMessageVisibility": "死亡信息可见性", + "gui.worldhandler.scoreboard.team.options.collisionRule": "碰撞模式", + "gui.worldhandler.scoreboard.team.options.color": "颜色", + + "gui.worldhandler.scoreboard.team.suboption.always": "总是", + "gui.worldhandler.scoreboard.team.suboption.never": "从不", + "gui.worldhandler.scoreboard.team.suboption.hideForOtherTeams": "对其他队伍隐藏", + "gui.worldhandler.scoreboard.team.suboption.hideForOwnTeam": "对己方队伍隐藏", + "gui.worldhandler.scoreboard.team.suboption.pushOwnTeam": "推动己方队伍", + "gui.worldhandler.scoreboard.team.suboption.pushOtherTeams": "推动其它队伍", + "gui.worldhandler.scoreboard.team.suboption.true": "开启", + "gui.worldhandler.scoreboard.team.suboption.false": "关闭", + + "gui.worldhandler.scoreboard.team.team": "队伍", + "gui.worldhandler.scoreboard.team.create": "创建", + "gui.worldhandler.scoreboard.team.join": "加入", + "gui.worldhandler.scoreboard.team.leave": "离开", + "gui.worldhandler.scoreboard.team.remove": "删除", + "gui.worldhandler.scoreboard.team.empty": "空", + "gui.worldhandler.scoreboard.team.options": "队伍选项", + + "gui.worldhandler.scoreboard.players.points": "点数", + "gui.worldhandler.scoreboard.players.tag": "标签", + "gui.worldhandler.scoreboard.players.trigger": "触发器", + + "gui.worldhandler.entities.player.start": "首选项", + "gui.worldhandler.entities.player.score": "记分", + "gui.worldhandler.entities.player.position": "位置", + "gui.worldhandler.entities.player.miscellaneous": "杂项", + + "gui.worldhandler.entities.player.score.experience": "经验等级", + "gui.worldhandler.entities.player.score.experience_coins": "经验值", + + "gui.worldhandler.entities.player.position.copy_position": "复制位置", + + "gui.worldhandler.entities.player.miscellaneous.set_spawn": "设置出生点", + "gui.worldhandler.entities.player.miscellaneous.set_global_spawn": "设置全局出生点", + "gui.worldhandler.entities.player.miscellaneous.kill": "杀死", + "gui.worldhandler.entities.player.miscellaneous.clear_inventory": "清空物品栏", + + "gui.worldhandler.entities.summon.start": "首选项", + "gui.worldhandler.entities.summon.potion_effects": "药水效果", + "gui.worldhandler.entities.summon.attributes": "属性", + "gui.worldhandler.entities.summon.equipment": "装备", + + "gui.worldhandler.entities.summon.start.mob_id": "生物 ID", + "gui.worldhandler.entities.summon.start.custom_name": "自定义名称", + "gui.worldhandler.entities.summon.start.passenger_mob_id": "骑乘生物 ID", + + "gui.worldhandler.potion.time.hours": "小时", + "gui.worldhandler.potion.time.minutes": "分钟", + "gui.worldhandler.potion.time.seconds": "秒", + + "gui.worldhandler.shortcuts.tooltip.home": "主页", + "gui.worldhandler.shortcuts.tooltip.butcher": "屠宰", + "gui.worldhandler.shortcuts.tooltip.settings": "设置", + "gui.worldhandler.shortcuts.tooltip.potions": "药水", + + "gui.worldhandler.shortcuts.tooltip.gamemode": "游戏模式:%s", + "gui.worldhandler.shortcuts.tooltip.gamemode.survival": "生存", + "gui.worldhandler.shortcuts.tooltip.gamemode.creative": "创造", + "gui.worldhandler.shortcuts.tooltip.gamemode.adventure": "冒险", + "gui.worldhandler.shortcuts.tooltip.gamemode.spectator": "旁观", + + "gui.worldhandler.shortcuts.tooltip.difficulty": "难度:%s", + "gui.worldhandler.shortcuts.tooltip.difficulty.peaceful": "和平", + "gui.worldhandler.shortcuts.tooltip.difficulty.easy": "简单", + "gui.worldhandler.shortcuts.tooltip.difficulty.normal": "普通", + "gui.worldhandler.shortcuts.tooltip.difficulty.hard": "困难", + + "gui.worldhandler.shortcuts.tooltip.weather": "天气:%s", + "gui.worldhandler.shortcuts.tooltip.weather.thunder": "雷雨", + "gui.worldhandler.shortcuts.tooltip.weather.rainy": "雨天", + "gui.worldhandler.shortcuts.tooltip.weather.clear": "晴朗", + + "gui.worldhandler.shortcuts.tooltip.time": "时间:%s", + "gui.worldhandler.shortcuts.tooltip.time.midnight": "午夜(%s)", + "gui.worldhandler.shortcuts.tooltip.time.sunset": "日落(%s)", + "gui.worldhandler.shortcuts.tooltip.time.noon": "正午(%s)", + "gui.worldhandler.shortcuts.tooltip.time.dawn": "日出(%s)", + + "gui.worldhandler.generic.back": "返回", + "gui.worldhandler.generic.backToGame": "返回游戏", + "gui.worldhandler.generic.on": "开", + "gui.worldhandler.generic.off": "关", + "gui.worldhandler.generic.yes": "是", + "gui.worldhandler.generic.no": "否", + "gui.worldhandler.generic.value": "值", + "gui.worldhandler.generic.name": "名称", + "gui.worldhandler.generic.enable": "开启", + "gui.worldhandler.generic.disable": "关闭", + "gui.worldhandler.generic.edit_username": "编辑用户名", + + "gui.worldhandler.actions.add": "添加", + "gui.worldhandler.actions.remove": "删除", + "gui.worldhandler.actions.set": "固定", + "gui.worldhandler.actions.reset": "重置", + "gui.worldhandler.actions.set_to_0": "重置为 0", + "gui.worldhandler.actions.perform": "执行", + "gui.worldhandler.actions.send": "发送", + "gui.worldhandler.actions.copy": "复制", + "gui.worldhandler.actions.place_command_block": "放置命令方块", + + "gui.worldhandler.color": "颜色", + "gui.worldhandler.color.black": "黑色", + "gui.worldhandler.color.dark_blue": "深蓝色", + "gui.worldhandler.color.dark_green": "深绿色", + "gui.worldhandler.color.dark_aqua": "湖蓝色", + "gui.worldhandler.color.dark_red": "深红色", + "gui.worldhandler.color.dark_purple": "紫色", + "gui.worldhandler.color.gold": "金色", + "gui.worldhandler.color.gray": "灰色", + "gui.worldhandler.color.dark_gray": "深灰色", + "gui.worldhandler.color.blue": "蓝色", + "gui.worldhandler.color.green": "绿色", + "gui.worldhandler.color.aqua": "天蓝色", + "gui.worldhandler.color.red": "红色", + "gui.worldhandler.color.light_purple": "粉色", + "gui.worldhandler.color.yellow": "黄色", + "gui.worldhandler.color.white": "白色", + "gui.worldhandler.color.reset": "默认", + + "worldhandler.permission.refused": "您没有权限使用 World Handler", + "worldhandler.permission.refused.change": "更改 \"%s\" 来停止显示这条信息", + + "worldhandler.error.gui": "An unexpected error occured. Please send a crash report with your log files to the %s forum" +} \ No newline at end of file diff --git a/src/main/resources/assets/worldhandler/lang/zh_cn.lang b/src/main/resources/assets/worldhandler/lang/zh_cn.lang deleted file mode 100644 index b701372..0000000 --- a/src/main/resources/assets/worldhandler/lang/zh_cn.lang +++ /dev/null @@ -1,453 +0,0 @@ -gui.worldhandler.config.tooltip=World Handler 设置 - -gui.worldhandler.config.category.settings=设置 -gui.worldhandler.config.category.skin=皮肤样式 -gui.worldhandler.config.category.butcher=屠宰 -gui.worldhandler.config.category.sliders=滑块 - -gui.worldhandler.config.key.settings.biome_indicator=生物群系指示器 -gui.worldhandler.config.key.settings.command_syntax=命令句法 -gui.worldhandler.config.key.settings.shortcuts=快捷键 -gui.worldhandler.config.key.settings.key_shortcuts=键盘快捷键 -gui.worldhandler.config.key.settings.tooltips=浮动提示 -gui.worldhandler.config.key.settings.watch=时钟 -gui.worldhandler.config.key.settings.smooth_watch=时钟平滑效果 -gui.worldhandler.config.key.settings.pause_game=暂停游戏 -gui.worldhandler.config.key.settings.custom_times=自定义时间 -gui.worldhandler.config.key.settings.permission_query=权限队列 -gui.worldhandler.config.key.settings.highlight_blocks=高亮方块 -gui.worldhandler.config.key.settings.custom_time_dawn=自定义日出时间 -gui.worldhandler.config.key.settings.custom_time_noon=自定义正午时间 -gui.worldhandler.config.key.settings.custom_time_sunset=自定义日落时间 -gui.worldhandler.config.key.settings.custom_time_midnight=自定义午夜时间 -gui.worldhandler.config.key.settings.block_placing_mode=方块放置方式 - -gui.worldhandler.config.comment.settings.custom_time_dawn=生物群系指示器开启 -gui.worldhandler.config.comment.settings.command_syntax=命令句法开启 -gui.worldhandler.config.comment.settings.shortcuts=快捷键开启 -gui.worldhandler.config.comment.settings.key_shortcuts=键盘快捷键开启 -gui.worldhandler.config.comment.settings.tooltips=浮动提示开启 -gui.worldhandler.config.comment.settings.watch=时钟开启 -gui.worldhandler.config.comment.settings.smooth_watch=时钟平滑效果开启 -gui.worldhandler.config.comment.settings.pause_game=暂停游戏 -gui.worldhandler.config.comment.settings.custom_times=自定义时间开启 -gui.worldhandler.config.comment.settings.permission_query=权限队列开启 -gui.worldhandler.config.comment.settings.highlight_blocks=被选中的方块会不会高亮 -gui.worldhandler.config.comment.settings.custom_time_dawn=日出的时间 -gui.worldhandler.config.comment.settings.custom_time_noon=正午的时间 -gui.worldhandler.config.comment.settings.custom_time_sunset=日落的时间 -gui.worldhandler.config.comment.settings.custom_time_midnight=午夜的时间 -gui.worldhandler.config.comment.settings.block_placing_mode=方块放置方式 - -gui.worldhandler.config.key.skin.icons=图标尺寸 -gui.worldhandler.config.key.skin.label_color=标签颜色 -gui.worldhandler.config.key.skin.headline_color=标题颜色 -gui.worldhandler.config.key.skin.background_red=背景红色 -gui.worldhandler.config.key.skin.background_green=背景绿色 -gui.worldhandler.config.key.skin.background_blue=背景蓝色 -gui.worldhandler.config.key.skin.button_red=按钮红色 -gui.worldhandler.config.key.skin.button_green=按钮绿色 -gui.worldhandler.config.key.skin.button_blue=按钮蓝色 -gui.worldhandler.config.key.skin.textures=材质 -gui.worldhandler.config.key.skin.sharp_tab_edges=尖锐分栏边缘 -gui.worldhandler.config.key.skin.draw_background=绘制暗色背景 -gui.worldhandler.config.key.skin.background_alpha=背景透明度 -gui.worldhandler.config.key.skin.button_alpha=按钮透明度 - -gui.worldhandler.config.comment.skin.icons=图标的大小 -gui.worldhandler.config.comment.skin.label_color=标签的颜色 -gui.worldhandler.config.comment.skin.headline_color=标题颜色 -gui.worldhandler.config.comment.skin.background_red=背景 R -gui.worldhandler.config.comment.skin.background_green=背景 G -gui.worldhandler.config.comment.skin.background_blue=背景 B -gui.worldhandler.config.comment.skin.button_red=按钮 R -gui.worldhandler.config.comment.skin.button_green=按钮 G -gui.worldhandler.config.comment.skin.button_blue=按钮 B -gui.worldhandler.config.comment.skin.textures=背景材质 -gui.worldhandler.config.comment.skin.sharp_tab_edges=尖锐分栏边缘开启 -gui.worldhandler.config.comment.skin.draw_background=绘制暗色背景开启 -gui.worldhandler.config.comment.skin.background_alpha=背景 Alpha -gui.worldhandler.config.comment.skin.button_alpha=按钮 Alpha - -gui.worldhandler.config.comment.butcher=屠宰 %s 开启 - -gui.worldhandler.config.key.sliders.max_potion_amplifier=药水倍率最大值 -gui.worldhandler.config.key.sliders.max_item_enchantment=物品附魔最大值 -gui.worldhandler.config.key.sliders.max_item_attributes=物品属性最大值 -gui.worldhandler.config.key.sliders.max_summon_potion_amplifier=召唤药水倍率最大值 -gui.worldhandler.config.key.sliders.max_summon_potion_minutes=召唤药水持续时间最大值 -gui.worldhandler.config.key.sliders.max_summon_attributes=召唤属性最大值 -gui.worldhandler.config.key.sliders.max_experience=经验最大值 -gui.worldhandler.config.key.sliders.max_player_points=玩家分数最大值 - -gui.worldhandler.config.comment.sliders.max_potion_amplifier=药水倍率最大值 -gui.worldhandler.config.comment.sliders.max_item_enchantment=物品附魔最大值 -gui.worldhandler.config.comment.sliders.max_item_attributes=物品属性最大值 -gui.worldhandler.config.comment.sliders.max_summon_potion_amplifier=召唤药水倍率最大值 -gui.worldhandler.config.comment.sliders.max_summon_potion_minutes=召唤药水持续时间最大值 -gui.worldhandler.config.comment.sliders.max_summon_attributes=召唤属性最大值 -gui.worldhandler.config.comment.sliders.max_experience=经验最大值 -gui.worldhandler.config.comment.sliders.max_player_points=玩家分数最大值 - -gui.worldhandler.tab.scoreboard.objectives=变量 -gui.worldhandler.tab.scoreboard.teams=团队 -gui.worldhandler.tab.scoreboard.players=玩家 - -gui.worldhandler.tab.player.player=玩家 -gui.worldhandler.tab.player.experience=经验等级 -gui.worldhandler.tab.player.advancements=进度 - -gui.worldhandler.tab.entities.summon=召唤 - -gui.worldhandler.tab.world.world=世界 -gui.worldhandler.tab.world.gamerules=游戏规则 - -gui.worldhandler.tab.blocks.edit_blocks=编辑方块 -gui.worldhandler.tab.blocks.sign_editor=告示牌编辑器 -gui.worldhandler.tab.blocks.note_block_editor=音符编辑器 - -gui.worldhandler.tab.items.custom_item=给予自定义物品 -gui.worldhandler.tab.items.enchantment=附魔 -gui.worldhandler.tab.items.recipes=配方 - -gui.worldhandler.tab.containers=容器 -gui.worldhandler.tab.multiplayer=多人 - -gui.worldhandler.title.entities.summon=召唤 - -gui.worldhandler.title.items.custom_item=给予自定义物品 -gui.worldhandler.title.items.enchantment=附魔 -gui.worldhandler.title.items.recipes=配方 - -gui.worldhandler.title.blocks.edit_blocks=编辑方块 -gui.worldhandler.title.blocks.sign_editor=告示牌编辑器 -gui.worldhandler.title.blocks.note_block_editor=音符盒编辑器 - -gui.worldhandler.title.scoreboard=记分板 - -gui.worldhandler.title.world.world=世界 -gui.worldhandler.title.world.gamerules=游戏规则 - -gui.worldhandler.title.player.player=玩家 -gui.worldhandler.title.player.experience=经验等级 -gui.worldhandler.title.player.advancements=进度 - -gui.worldhandler.title.butcher=屠宰 -gui.worldhandler.title.change_world=更改世界 -gui.worldhandler.title.potions=药水 - -gui.worldhandler.title.containers=容器 -gui.worldhandler.title.multiplayer=多人 - -gui.worldhandler.advancements.grant=给予 -gui.worldhandler.advancements.revoke=移除 -gui.worldhandler.advancements.only=仅此 -gui.worldhandler.advancements.until=直到 -gui.worldhandler.advancements.from=自 -gui.worldhandler.advancements.through=经由 -gui.worldhandler.advancements.everything=全部 - -gui.worldhandler.change_world.singleplayer=单人世界 -gui.worldhandler.change_world.multiplayer=多人世界 - -gui.worldhandler.butcher.radius=范围 -gui.worldhandler.butcher.configure=配置 -gui.worldhandler.butcher.slaughter=屠杀 - -gui.worldhandler.multiplayer.kick=踢出 -gui.worldhandler.multiplayer.ban=封禁 -gui.worldhandler.multiplayer.pardon=解封 -gui.worldhandler.multiplayer.permissions=权限 -gui.worldhandler.multiplayer.runtime=运行时 -gui.worldhandler.multiplayer.whitelist=白名单 -gui.worldhandler.multiplayer.username=用户名 - -gui.worldhandler.multiplayer.kick_ban.reason=理由 - -gui.worldhandler.multiplayer.permissions.give=给予权限 -gui.worldhandler.multiplayer.permissions.take=收回权限 - -gui.worldhandler.multiplayer.runtime.save_world=保存世界 -gui.worldhandler.multiplayer.runtime.autosave=自动保存:%s -gui.worldhandler.multiplayer.runtime.stop_server=停止服务器 - -gui.worldhandler.multiplayer.whitelist.reload=重新加载白名单 -gui.worldhandler.multiplayer.whitelist.whitelist=白名单:%s -gui.worldhandler.multiplayer.whitelist.add=添加 -gui.worldhandler.multiplayer.whitelist.remove=删除 - -gui.worldhandler.potions.effect=效果 -gui.worldhandler.potions.effect.give=给予 -gui.worldhandler.potions.effect.remove=删除 -gui.worldhandler.potions.effect.remove_all=移除所有 -gui.worldhandler.potions.effect.amplifier=效果等级 -gui.worldhandler.potions.effect.ambient=减少粒子显示:%s -gui.worldhandler.potions.effect.particles=粒子:%s -gui.worldhandler.potions.effect.bottle=瓶装 -gui.worldhandler.potions.effect.splash=喷溅 -gui.worldhandler.potions.effect.lingering=滞留 -gui.worldhandler.potions.effect.tipped_arrow=箭 - -gui.worldhandler.entities=实体 -gui.worldhandler.items=物品 -gui.worldhandler.scoreboard=记分板 -gui.worldhandler.resourcepack=资源包 -gui.worldhandler.change_world=更改世界 -gui.worldhandler.world=世界 -gui.worldhandler.blocks=方块 -gui.worldhandler.player=玩家 - -gui.worldhandler.items.custom_item.start=首选项 -gui.worldhandler.items.custom_item.enchantment=附魔 -gui.worldhandler.items.custom_item.attributes=属性 -gui.worldhandler.items.custom_item.custom_item=给予自定义物品 - -gui.worldhandler.items.custom_item.start.item_id=物品 ID -gui.worldhandler.items.custom_item.start.lore_1=描述 I -gui.worldhandler.items.custom_item.start.lore_2=描述 II -gui.worldhandler.items.custom_item.start.custom_name=自定义名称 - -gui.worldhandler.items.enchantment.level=等级 -gui.worldhandler.items.enchantment.enchant=附魔 - -gui.worldhandler.blocks.sign_editor.look_at_sign=看着一个告示牌并按 '%s' -gui.worldhandler.blocks.sign_editor.text_line_1=文字行 I -gui.worldhandler.blocks.sign_editor.text_line_2=文字行 II -gui.worldhandler.blocks.sign_editor.text_line_3=文字行 III -gui.worldhandler.blocks.sign_editor.text_line_4=文字行 IV -gui.worldhandler.blocks.sign_editor.commmand=命令 -gui.worldhandler.blocks.sign_editor.done=完成 -gui.worldhandler.blocks.sign_editor.format_text_line=文本行格式 - -gui.worldhandler.blocks.note_block_editor.look_at_note_block=看着一个音符盒并按 '%s' -gui.worldhandler.blocks.note_block_editor.c=C -gui.worldhandler.blocks.note_block_editor.d=D -gui.worldhandler.blocks.note_block_editor.e=E -gui.worldhandler.blocks.note_block_editor.f=F -gui.worldhandler.blocks.note_block_editor.g=G -gui.worldhandler.blocks.note_block_editor.a=A -gui.worldhandler.blocks.note_block_editor.b=B - -gui.worldhandler.gamerules.rule.commandBlockOutput=命令方块输出信息 -gui.worldhandler.gamerules.rule.disableElytraMovementCheck=禁用鞘翅速度检查 -gui.worldhandler.gamerules.rule.doDaylightCycle=昼夜循环 -gui.worldhandler.gamerules.rule.doEntityDrops=实体掉落 -gui.worldhandler.gamerules.rule.doFireTick=火焰扩散 -gui.worldhandler.gamerules.rule.doMobLoot=生物掉落 -gui.worldhandler.gamerules.rule.doMobSpawning=生物出生 -gui.worldhandler.gamerules.rule.doTileDrops=方块掉落 -gui.worldhandler.gamerules.rule.keepInventory=死亡保留物品 -gui.worldhandler.gamerules.rule.logAdminCommands=存储命令输出到聊天记录 -gui.worldhandler.gamerules.rule.mobGriefing=生物对世界的破坏 -gui.worldhandler.gamerules.rule.naturalRegeneration=自然回血 -gui.worldhandler.gamerules.rule.randomTickSpeed=随机方块刻速度 -gui.worldhandler.gamerules.rule.reducedDebugInfo=简化调试信息 -gui.worldhandler.gamerules.rule.sendCommandFeedback=命令反馈 -gui.worldhandler.gamerules.rule.showDeathMessages=死亡信息 -gui.worldhandler.gamerules.rule.spawnRadius=出生范围 -gui.worldhandler.gamerules.rule.spectatorsGenerateChunks=旁观者生成区块 -gui.worldhandler.gamerules.rule.doWeatherCycle=天气循环 -gui.worldhandler.gamerules.rule.maxEntityCramming=最大实体堆叠 -gui.worldhandler.gamerules.rule.announceAdvancements=广播进度 -gui.worldhandler.gamerules.rule.doLimitedCrafting=限制合成配方 -gui.worldhandler.gamerules.rule.gameLoopFunction=每刻运行的函数 -gui.worldhandler.gamerules.rule.maxCommandChainLength=命令连锁长度 - -gui.worldhandler.world_info.start=首选项 -gui.worldhandler.world_info.world=世界 -gui.worldhandler.world_info.statistics=统计数据 - -gui.worldhandler.world_info.n_a=n/a - -gui.worldhandler.world_info.start.spawn=出生 - -gui.worldhandler.world_info.world.name=名称 -gui.worldhandler.world_info.world.world_type=世界类型 -gui.worldhandler.world_info.world.seed=种子 - -gui.worldhandler.world_info.statistics.world_time=世界时间 -gui.worldhandler.world_info.statistics.played=已游玩 - -gui.worldhandler.edit_blocks.coordinates=坐标 -gui.worldhandler.edit_blocks.fill=填充 -gui.worldhandler.edit_blocks.replace=替换 -gui.worldhandler.edit_blocks.clone=克隆 - -gui.worldhandler.edit_blocks.replace.block_id_replace=被替换方块 ID -gui.worldhandler.edit_blocks.replace.block_id_place=放置方块 ID - -gui.worldhandler.edit_blocks.fill.block_id_to_fill=填充方块 ID - -gui.worldhandler.edit_blocks.clone.mode.replace=替换 -gui.worldhandler.edit_blocks.clone.mode.masked=叠加 -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=给予 -gui.worldhandler.recipes.take=拿取 - -gui.worldhandler.scoreboard.slot.list=列表 -gui.worldhandler.scoreboard.slot.belowName=名称下方 -gui.worldhandler.scoreboard.slot.sidebar=侧边栏 -gui.worldhandler.scoreboard.slot.sidebar.team=侧边栏队伍 - -gui.worldhandler.scoreboard.objectives.objective=变量 -gui.worldhandler.scoreboard.objectives.create=创建 -gui.worldhandler.scoreboard.objectives.display=显示 -gui.worldhandler.scoreboard.objectives.undisplay=取消显示 -gui.worldhandler.scoreboard.objectives.remove=删除 - -gui.worldhandler.scoreboard.objectives.criteria.air=空气值 -gui.worldhandler.scoreboard.objectives.criteria.armor=盔甲值 -gui.worldhandler.scoreboard.objectives.criteria.deathCount=死亡次数 -gui.worldhandler.scoreboard.objectives.criteria.dummy=虚拟型 -gui.worldhandler.scoreboard.objectives.criteria.food=饱食度 -gui.worldhandler.scoreboard.objectives.criteria.health=生命值 -gui.worldhandler.scoreboard.objectives.criteria.killedByTeam=团队被击杀数 -gui.worldhandler.scoreboard.objectives.criteria.level=经验等级 -gui.worldhandler.scoreboard.objectives.criteria.playerKillCount=击杀玩家数 -gui.worldhandler.scoreboard.objectives.criteria.stat=统计 -gui.worldhandler.scoreboard.objectives.criteria.stat.craftingTableInteraction=与工作台互动 -gui.worldhandler.scoreboard.objectives.criteria.stat.breakItem=用坏物品 -gui.worldhandler.scoreboard.objectives.criteria.stat.craftItem=合成物品 -gui.worldhandler.scoreboard.objectives.criteria.stat.drop=掉落物品 -gui.worldhandler.scoreboard.objectives.criteria.stat.entityKilledBy=被实体击杀数 -gui.worldhandler.scoreboard.objectives.criteria.stat.killEntity=击杀实体数 -gui.worldhandler.scoreboard.objectives.criteria.stat.mineBlock=挖掘方块数 -gui.worldhandler.scoreboard.objectives.criteria.stat.pickup=物品拾起数 -gui.worldhandler.scoreboard.objectives.criteria.stat.useItem=物品使用数 -gui.worldhandler.scoreboard.objectives.criteria.teamkill=团队击杀数 -gui.worldhandler.scoreboard.objectives.criteria.totalKillCount=击杀生物数 -gui.worldhandler.scoreboard.objectives.criteria.trigger=触发器 -gui.worldhandler.scoreboard.objectives.criteria.xp=经验值 - -gui.worldhandler.scoreboard.team.options.friendlyfire=误伤 -gui.worldhandler.scoreboard.team.options.seeFriendlyInvisibles=可看到隐身队友 -gui.worldhandler.scoreboard.team.options.nametagVisibility=成员名称牌可见性 -gui.worldhandler.scoreboard.team.options.deathMessageVisibility=死亡信息可见性 -gui.worldhandler.scoreboard.team.options.collisionRule=碰撞模式 -gui.worldhandler.scoreboard.team.options.color=颜色 - -gui.worldhandler.scoreboard.team.suboption.always=总是 -gui.worldhandler.scoreboard.team.suboption.never=从不 -gui.worldhandler.scoreboard.team.suboption.hideForOtherTeams=对其他队伍隐藏 -gui.worldhandler.scoreboard.team.suboption.hideForOwnTeam=对己方队伍隐藏 -gui.worldhandler.scoreboard.team.suboption.pushOwnTeam=推动己方队伍 -gui.worldhandler.scoreboard.team.suboption.pushOtherTeams=推动其它队伍 -gui.worldhandler.scoreboard.team.suboption.true=开启 -gui.worldhandler.scoreboard.team.suboption.false=关闭 - -gui.worldhandler.scoreboard.team.team=队伍 -gui.worldhandler.scoreboard.team.create=创建 -gui.worldhandler.scoreboard.team.join=加入 -gui.worldhandler.scoreboard.team.leave=离开 -gui.worldhandler.scoreboard.team.remove=删除 -gui.worldhandler.scoreboard.team.empty=空 -gui.worldhandler.scoreboard.team.options=队伍选项 - -gui.worldhandler.scoreboard.players.points=点数 -gui.worldhandler.scoreboard.players.tag=标签 -gui.worldhandler.scoreboard.players.trigger=触发器 - -gui.worldhandler.entities.player.start=首选项 -gui.worldhandler.entities.player.score=记分 -gui.worldhandler.entities.player.position=位置 -gui.worldhandler.entities.player.miscellaneous=杂项 - -gui.worldhandler.entities.player.score.experience=经验等级 -gui.worldhandler.entities.player.score.experience_coins=经验值 - -gui.worldhandler.entities.player.position.copy_position=复制位置 - -gui.worldhandler.entities.player.miscellaneous.set_spawn=设置出生点 -gui.worldhandler.entities.player.miscellaneous.set_global_spawn=设置全局出生点 -gui.worldhandler.entities.player.miscellaneous.kill=杀死 -gui.worldhandler.entities.player.miscellaneous.clear_inventory=清空物品栏 - -gui.worldhandler.entities.summon.start=首选项 -gui.worldhandler.entities.summon.potion_effects=药水效果 -gui.worldhandler.entities.summon.attributes=属性 -gui.worldhandler.entities.summon.equipment=装备 - -gui.worldhandler.entities.summon.start.mob_id=生物 ID -gui.worldhandler.entities.summon.start.custom_name=自定义名称 -gui.worldhandler.entities.summon.start.passenger_mob_id=骑乘生物 ID - -gui.worldhandler.potion.time.hours=小时 -gui.worldhandler.potion.time.minutes=分钟 -gui.worldhandler.potion.time.seconds=秒 - -gui.worldhandler.shortcuts.tooltip.home=主页 -gui.worldhandler.shortcuts.tooltip.butcher=屠宰 -gui.worldhandler.shortcuts.tooltip.settings=设置 -gui.worldhandler.shortcuts.tooltip.potions=药水 - -gui.worldhandler.shortcuts.tooltip.gamemode=游戏模式:%s -gui.worldhandler.shortcuts.tooltip.gamemode.survival=生存 -gui.worldhandler.shortcuts.tooltip.gamemode.creative=创造 -gui.worldhandler.shortcuts.tooltip.gamemode.adventure=冒险 -gui.worldhandler.shortcuts.tooltip.gamemode.spectator=旁观 - -gui.worldhandler.shortcuts.tooltip.difficulty=难度:%s -gui.worldhandler.shortcuts.tooltip.difficulty.peaceful=和平 -gui.worldhandler.shortcuts.tooltip.difficulty.easy=简单 -gui.worldhandler.shortcuts.tooltip.difficulty.normal=普通 -gui.worldhandler.shortcuts.tooltip.difficulty.hard=困难 - -gui.worldhandler.shortcuts.tooltip.weather=天气:%s -gui.worldhandler.shortcuts.tooltip.weather.thunder=雷雨 -gui.worldhandler.shortcuts.tooltip.weather.rainy=雨天 -gui.worldhandler.shortcuts.tooltip.weather.clear=晴朗 - -gui.worldhandler.shortcuts.tooltip.time=时间:%s -gui.worldhandler.shortcuts.tooltip.time.midnight=午夜(%s) -gui.worldhandler.shortcuts.tooltip.time.sunset=日落(%s) -gui.worldhandler.shortcuts.tooltip.time.noon=正午(%s) -gui.worldhandler.shortcuts.tooltip.time.dawn=日出(%s) - -gui.worldhandler.generic.back=返回 -gui.worldhandler.generic.backToGame=返回游戏 -gui.worldhandler.generic.on=开 -gui.worldhandler.generic.off=关 -gui.worldhandler.generic.yes=是 -gui.worldhandler.generic.no=否 -gui.worldhandler.generic.value=值 -gui.worldhandler.generic.name=名称 -gui.worldhandler.generic.enable=开启 -gui.worldhandler.generic.disable=关闭 -gui.worldhandler.generic.edit_username=编辑用户名 - -gui.worldhandler.actions.add=添加 -gui.worldhandler.actions.remove=删除 -gui.worldhandler.actions.reset=重置 -gui.worldhandler.actions.set_to_0=重置为 0 -gui.worldhandler.actions.perform=执行 -gui.worldhandler.actions.send=发送 -gui.worldhandler.actions.copy=复制 -gui.worldhandler.actions.place_command_block=放置命令方块 - -gui.worldhandler.color=颜色 -gui.worldhandler.color.black=黑色 -gui.worldhandler.color.dark_blue=深蓝色 -gui.worldhandler.color.dark_green=深绿色 -gui.worldhandler.color.dark_aqua=湖蓝色 -gui.worldhandler.color.dark_red=深红色 -gui.worldhandler.color.dark_purple=紫色 -gui.worldhandler.color.gold=金色 -gui.worldhandler.color.gray=灰色 -gui.worldhandler.color.dark_gray=深灰色 -gui.worldhandler.color.blue=蓝色 -gui.worldhandler.color.green=绿色 -gui.worldhandler.color.aqua=天蓝色 -gui.worldhandler.color.red=红色 -gui.worldhandler.color.light_purple=粉色 -gui.worldhandler.color.yellow=黄色 -gui.worldhandler.color.white=白色 -gui.worldhandler.color.reset=默认 - -worldhandler.permission.refused=您没有权限使用 World Handler -worldhandler.permission.refused.change=更改 "%s" 来停止显示这条信息 - -worldhandler.error.gui=An unexpected error occured. Please send a crash report with your log files to the %s forum \ No newline at end of file diff --git a/src/main/resources/assets/worldhandler/textures/logo.png b/src/main/resources/logo.png similarity index 100% rename from src/main/resources/assets/worldhandler/textures/logo.png rename to src/main/resources/logo.png diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info deleted file mode 100644 index 0d6dc4c..0000000 --- a/src/main/resources/mcmod.info +++ /dev/null @@ -1,40 +0,0 @@ -{ - "modListVersion": 2, - "modList": - [ - { - "modid": "worldhandler", - "name": "World Handler", - "description": "The World Handler provides a smart Gui for people without having to know any complex commands and gives them a look inside the art of Minecraft map and world making. Now anyone can easily create maps or just save a few ammount of time and provides an easy to use interface.", - "mcversion": "$mcversion", - "version": "$version", - "authorList": - [ - "Exopandora" - ], - "credits": "Exopandora: Author, fhfuih (samhzy): Simplified Chinese Translation", - "dependants": - [ - - ], - "dependencies": - [ - - ], - "parent": "", - "requiredMods": - [ - "forge", - "FML" - ], - "logoFile": "assets/worldhandler/textures/logo.png", - "screenshots": - [ - - ], - "updateUrl": "https://minecraft.curseforge.com/projects/world-handler-command-gui/files", - "url": "https://minecraft.curseforge.com/projects/world-handler-command-gui", - "useDependencyInformation": true - } - ] -} diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta index c1a03f5..5a745ef 100644 --- a/src/main/resources/pack.mcmeta +++ b/src/main/resources/pack.mcmeta @@ -1,7 +1,7 @@ { "pack": { - "description": "World Handler Resources", - "pack_format": 3 + "description": "World Handler", + "pack_format": 4 } } diff --git a/version.json b/version.json index ab0f367..00f2a42 100644 --- a/version.json +++ b/version.json @@ -2,12 +2,16 @@ "homepage": "https://minecraft.curseforge.com/projects/world-handler-command-gui", "promos": { - "1.12.2-latest": "2.2.1", - "1.12.2-recommended": "2.2.1", - "1.12.1-latest": "2.2.0", - "1.12.1-recommended": "2.2.0", - "1.12-latest": "2.2.0", - "1.12-recommended": "2.2.0", + "1.13.2-latest": "2.3", + "1.13.2-recommended": "2.3", + "1.13-latest": "2.3", + "1.13-recommended": "2.3", + "1.12.2-latest": "2.2.2", + "1.12.2-recommended": "2.2.2", + "1.12.1-latest": "2.2.2", + "1.12.1-recommended": "2.2.2", + "1.12-latest": "2.2.2", + "1.12-recommended": "2.2.2", "1.11.2-latest": "1.46", "1.11.2-recommended": "1.46", "1.11-latest": "1.42", @@ -39,6 +43,14 @@ "1.5-latest": "1.0", "1.5-recommended": "1.0" }, + "1.13.2": + { + "2.3": "- Added 1.13.2 compatibility\n- Added new command block execution\n- Added /trigger command\n- Added \"Copy Seed\" button\n- Unified block highlighting\n- Removed \"Biome Indicator\"" + }, + "1.13": + { + "2.3": "- Added 1.13.2 compatibility\n- Added new command block execution\n- Added /trigger command\n- Added \"Copy Seed\" button\n- Unified block highlighting\n- Removed \"Biome Indicator\"" + }, "1.12.2": { "2.2.1": "- Added crash recovery\n- Fixed crash when starting the game with certain mods",