From 595795a54af2e0ce6ae8acc367b5018b48fcfda2 Mon Sep 17 00:00:00 2001 From: direwolf20 <39863894+Direwolf20-MC@users.noreply.github.com> Date: Wed, 14 Feb 2024 22:44:11 -0500 Subject: [PATCH 1/8] Updated everything except packets, or so I think! --- build.gradle | 331 ++++++------ gradle.properties | 38 +- gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 63375 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 300 +++++++---- gradlew.bat | 56 +- settings.gradle | 9 +- .../mininggadgets/client/ClientEvents.java | 14 +- .../mininggadgets/client/ClientSetup.java | 36 -- .../client/MiningGadgetsJEI.java | 10 +- .../mininggadgets/client/OurKeys.java | 11 +- .../client/events/EventRenderGadget.java | 18 +- .../client/particles/ModParticles.java | 22 +- .../particles/ParticleRenderDispatcher.java | 9 +- .../laserparticle/LaserParticleData.java | 3 +- .../lightparticle/LightParticleType.java | 11 +- .../playerparticle/PlayerParticleData.java | 3 +- .../client/renderer/BlockOverlayRender.java | 6 +- .../renderer/ModificationShiftOverlay.java | 9 +- .../client/renderer/ModificationTableTER.java | 13 +- .../client/renderer/RenderBlockTER.java | 2 +- .../client/renderer/RenderMiningLaser.java | 10 +- .../client/screens/FilterScreen.java | 11 +- .../client/screens/MiningSettingScreen.java | 30 +- .../client/screens/MiningVisualsScreen.java | 41 +- .../screens/ModificationTableScreen.java | 16 +- .../client/screens/widget/DireButton.java | 17 +- .../mininggadgets/common/MiningGadgets.java | 124 ++--- .../common/blocks/ModBlocks.java | 34 -- .../common/blocks/ModificationTable.java | 28 +- .../common/blocks/RenderBlock.java | 7 +- .../CapabilityEnergyProvider.java | 30 -- .../EnergisedItem.java | 5 +- .../common/collectors/ShapelessWalker.java | 8 +- .../common/containers/FilterContainer.java | 21 +- .../common/containers/GhostSlot.java | 4 +- .../common/containers/ModContainers.java | 23 - .../containers/ModificationTableCommands.java | 20 +- .../ModificationTableContainer.java | 23 +- .../containers/ModificationTableHandler.java | 32 ++ .../common/containers/WatchedSlot.java | 4 +- .../mininggadgets/common/data/Generator.java | 20 +- .../common/data/GeneratorBlockStates.java | 17 +- .../common/data/GeneratorBlockTags.java | 8 +- .../common/data/GeneratorItemModels.java | 20 +- .../common/data/GeneratorLanguage.java | 66 +-- .../common/data/GeneratorLoot.java | 6 +- .../common/data/GeneratorRecipes.java | 478 +++++++++--------- .../common/events/ServerTickHandler.java | 6 +- .../common/items/MiningGadget.java | 86 ++-- .../mininggadgets/common/items/ModItems.java | 59 --- .../common/items/UpgradeCard.java | 2 +- .../common/items/upgrade/Upgrade.java | 67 +-- .../items/upgrade/UpgradeBatteryLevels.java | 2 +- .../common/items/upgrade/UpgradeTools.java | 4 +- .../common/network/PacketHandler.java | 14 +- .../common/sounds/OurSounds.java | 16 +- .../tiles/ModificationTableTileEntity.java | 61 +-- .../common/tiles/RenderBlockTileEntity.java | 38 +- .../mininggadgets/setup/ClientSetup.java | 42 ++ .../{common => setup}/Config.java | 84 +-- .../mininggadgets/setup/ModSetup.java | 45 ++ .../mininggadgets/setup/Registration.java | 110 ++++ src/main/resources/META-INF/mods.toml | 23 +- 64 files changed, 1359 insertions(+), 1308 deletions(-) delete mode 100644 src/main/java/com/direwolf20/mininggadgets/client/ClientSetup.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/blocks/ModBlocks.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/capabilities/CapabilityEnergyProvider.java rename src/main/java/com/direwolf20/mininggadgets/common/{items => capabilities}/EnergisedItem.java (92%) delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/containers/ModContainers.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/containers/ModificationTableHandler.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/items/ModItems.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/setup/ClientSetup.java rename src/main/java/com/direwolf20/mininggadgets/{common => setup}/Config.java (66%) create mode 100644 src/main/java/com/direwolf20/mininggadgets/setup/ModSetup.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/setup/Registration.java diff --git a/build.gradle b/build.gradle index ff47d188..23db325b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,103 +1,137 @@ -import groovy.json.JsonSlurper -import groovy.json.JsonOutput - plugins { + id 'java-library' id 'eclipse' + id 'idea' id 'maven-publish' - id 'net.neoforged.gradle' version '[6.0.18,6.2)' - id "me.modmuss50.mod-publish-plugin" version "0.3.5" -} - -apply { - // Fixes m1 macs having build time errors (#forgeplzfix) -// from "https://raw.githubusercontent.com/mezz/JustEnoughItems/1.18/Forge/buildtools/AppleSiliconSupport.gradle" + id 'net.neoforged.gradle.userdev' version '7.0.80' } version = "${mod_version}" -group = 'com.direwolf20.mininggadgets' // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = 'mininggadgets' +group = mod_group_id -java.toolchain.languageVersion = JavaLanguageVersion.of(17) +// All jar files from this folder will be added automatically as runtime mod dependencies +def extraModsDir = "extra-mods" +def extraAPIDir = "extra-api" -minecraft { - mappings channel: 'official', version: "${mc_version}" - // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. - // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') +repositories { + mavenLocal() - runs { - client { - workingDirectory project.file('run') + flatDir { + name "extra-mods" + dir file(extraModsDir) + } - property 'forge.logging.markers', 'SCAN,REGISTRIES' - property 'forge.logging.console.level', 'debug' + flatDir { + name "extra-api" + dir file(extraAPIDir) + } - mods { - mininggadgets { - source sourceSets.main - } - } + maven { //Patchouli && JEI + url 'https://maven.blamejared.com' + content { + includeGroup "vazkii.patchouli" + includeGroup "mezz.jei" } + } - server { - workingDirectory project.file('run') - - property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' - property 'forge.logging.console.level', 'debug' - - mods { - mininggadgets { - source sourceSets.main - } - } + maven { //Curios + url = "https://maven.theillusivec4.top/" + content { + includeGroup "top.theillusivec4.curios" } + } - data { - workingDirectory project.file('run') - - property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' - property 'forge.logging.console.level', 'debug' - - args '--mod', 'mininggadgets', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') - mods { - mininggadgets { - source sourceSets.main - } - } + maven { // mek + url = 'https://modmaven.dev/' + content { + includeGroup "mekanism" + includeGroup "appeng" } } + + maven { url = "https://www.cursemaven.com" } // curse mods } -sourceSets.main.resources { srcDir 'src/generated/resources' } +base { + archivesName = mod_id +} -// All jar files from this folder will be added automatically as runtime mod dependencies -def extraModsDir = "extra-mods" +// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. +java.toolchain.languageVersion = JavaLanguageVersion.of(17) -repositories { - flatDir { - name "extra-mods" - dir file(extraModsDir) +//minecraft.accessTransformers.entry public net.minecraft.client.Minecraft textureManager # textureManager + +// Default run configurations. +// These can be tweaked, removed, or duplicated as needed. +runs { + // applies to all the run configs below + configureEach { + // Recommended logging data for a userdev environment + // The markers can be added/remove as needed separated by commas. + // "SCAN": For mods scan. + // "REGISTRIES": For firing of registry events. + // "REGISTRYDUMP": For getting the contents of all registries. + systemProperty 'forge.logging.markers', 'REGISTRIES' + + // Recommended logging level for the console + // You can set various levels here. + // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels + systemProperty 'forge.logging.console.level', 'debug' + + modSource project.sourceSets.main } - maven { - name "ModMaven" - url "https://modmaven.k-4u.nl" - content { - includeGroup("mezz.jei") - } + client { + // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. + systemProperty 'forge.enabledGameTestNamespaces', project.mod_id } - maven { url = "https://maven.architectury.dev" } + server { + systemProperty 'forge.enabledGameTestNamespaces', project.mod_id + programArgument '--nogui' + } - maven { - url "https://www.cursemaven.com" - content { - includeGroup "curse.maven" - } + // This run config launches GameTestServer and runs all registered gametests, then exits. + // By default, the server will crash when no gametests are provided. + // The gametest system is also enabled by default for other run configs under the /test command. + gameTestServer { + systemProperty 'forge.enabledGameTestNamespaces', project.mod_id + } + + data { + // example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it + // workingDirectory project.file('run-data') + + // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. + programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() } } +// Include resources generated by data generators. +sourceSets.main.resources { srcDir 'src/generated/resources' } + dependencies { - minecraft "net.neoforged:forge:${mc_version}-${forge_version}" + // Specify the version of Minecraft to use. + // Depending on the plugin applied there are several options. We will assume you applied the userdev plugin as shown above. + // The group for userdev is net.neoforged, the module name is neoforge, and the version is the same as the neoforge version. + // You can however also use the vanilla plugin (net.neoforged.gradle.vanilla) to use a version of Minecraft without the neoforge loader. + // And its provides the option to then use net.minecraft as the group, and one of; client, server or joined as the module name, plus the game version as version. + // For all intends and purposes: You can treat this dependency as if it is a normal library you would use. + implementation "net.neoforged:neoforge:${neo_version}" + + //AE2 + //compileOnly "appeng:appliedenergistics2-neoforge:${ae2_version}:api" + //runtimeOnly "appeng:appliedenergistics2-neoforge:${ae2_version}" + + //Curios + //runtimeOnly "top.theillusivec4.curios:curios-neoforge:${curios_version}" + //compileOnly "top.theillusivec4.curios:curios-neoforge:${curios_version}:api" + + // Example mod dependency with JEI + // The JEI API is declared for compile time use, while the full JEI artifact is used at runtime + compileOnly "mezz.jei:jei-${minecraft_version}-common-api:${jei_version}" + compileOnly "mezz.jei:jei-${minecraft_version}-forge-api:${jei_version}" + runtimeOnly "mezz.jei:jei-${minecraft_version}-neoforge:${jei_version}" // Locally sourced extra mods for runtime (i.e. testing) for (extraModJar in fileTree(dir: extraModsDir, include: '*.jar')) { @@ -106,139 +140,66 @@ dependencies { assert versionSep != -1 def artifactId = basename.substring(0, versionSep) def version = basename.substring(versionSep + 1) - runtimeOnly fg.deobf("extra-mods:$artifactId:$version") + runtimeOnly "extra-mods:$artifactId:$version" } - //JEI - // compile against the JEI API but do not include it at runtime - compileOnly fg.deobf("mezz.jei:jei-${mc_version}-common-api:${jei_version}") - compileOnly fg.deobf("mezz.jei:jei-${mc_version}-forge-api:${jei_version}") - // at runtime, use the full JEI jar - runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}-forge:${jei_version}") - -// runtimeOnly fg.deobf("curse.maven:inventory-tweaks-renewed:3102237") -// runtimeOnly fg.deobf("curse.maven:lollipop-347954:3232534") -// runtimeOnly fg.deobf("curse.maven:mekanism-268560:268560") - - runtimeOnly fg.deobf("curse.maven:charging-gadgets-399757:4617304") -} + // Locally sourced extra mods for compiling (i.e. API) + for (extraModJar in fileTree(dir: extraAPIDir, include: '*.jar')) { + def basename = extraModJar.name.substring(0, extraModJar.name.length() - ".jar".length()) + def versionSep = basename.lastIndexOf('-') + assert versionSep != -1 + def artifactId = basename.substring(0, versionSep) + def version = basename.substring(versionSep + 1) + compileOnly "extra-api:$artifactId:$version" + } -processResources { - duplicatesStrategy = DuplicatesStrategy.INHERIT + // Example mod dependency using a mod jar from ./libs with a flat dir repository + // This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar + // The group id is ignored when searching -- in this case, it is "blank" + // implementation "blank:coolmod-${mc_version}:${coolmod_version}" - inputs.property "version", project.version + // Example mod dependency using a file as dependency + // implementation files("libs/coolmod-${mc_version}-${coolmod_version}.jar") - filesMatching("META-INF/mods.toml") { - expand "version": project.version, - "mcversion": project.mc_version, - "forgeversion": project.forge_version, - "forgeshortversion": project.forge_version.split('\\.')[0], - "forge_acceptable_range": project.forge_acceptable_range - } + // Example project dependency using a sister or child project: + // implementation project(":myproject") - doLast { - def jsonMinifyStart = System.currentTimeMillis() - def jsonMinified = 0 - def jsonBytesSaved = 0 - - fileTree(dir: outputs.files.asPath, include: '**/*.json').each { - File file = it - jsonMinified++ - def oldLength = file.length() - try { - file.text = JsonOutput.toJson(new JsonSlurper().parse(file)) - jsonBytesSaved += oldLength - file.length() - } catch (Exception e) { - println('Failed to minify ' + it + ' ' + e) - } - } - - println('Minified ' + jsonMinified + ' json files. Saved ' + jsonBytesSaved + ' bytes. Took ' + (System.currentTimeMillis() - jsonMinifyStart) + 'ms.') - } + // For more info: + // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html + // http://www.gradle.org/docs/current/userguide/dependency_management.html } -jar { - manifest { - attributes([ - "Specification-Title": "mininggadgets", - "Specification-Vendor": "direwolf20", - "Specification-Version": "1", // We are version 1 of ourselves - "Implementation-Title": project.name, - "Implementation-Version": "${version}", - "Implementation-Vendor" :"direwolf20", - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") - ]) +// This block of code expands all declared replace properties in the specified resource targets. +// A missing property will result in an error. Properties are expanded using ${} Groovy notation. +// When "copyIdeResources" is enabled, this will also run before the game launches in IDE environments. +// See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html +tasks.withType(ProcessResources).configureEach { + var replaceProperties = [ + minecraft_version : minecraft_version, minecraft_version_range: minecraft_version_range, + neo_version : neo_version, neo_version_range: neo_version_range, + loader_version_range: loader_version_range, + mod_id : mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: mod_version, + mod_authors : mod_authors, mod_description: mod_description, + ] + inputs.properties replaceProperties + + filesMatching(['META-INF/mods.toml']) { + expand replaceProperties + [project: project] } } -jar.finalizedBy('reobfJar') - +// Example configuration to allow publishing using the maven-publish plugin publishing { publications { - maven(MavenPublication) { + register('mavenJava', MavenPublication) { from components.java - artifactId = project.archivesBaseName.toLowerCase() - } - } -} - -def makeChangelog() { - def changelogText = file("./CHANGELOG.md").text; - - def output = ""; - def readLines = false - for (line in changelogText.lines()) { - if (line.startsWith("### ") || line.startsWith("## ")) { - if (readLines) { - break; - } - - if (line.contains("${mod_version}") && line.startsWith("### ")) { - readLines = true; - } - } - if (readLines) { - output += line + "\n"; } } - - return output.trim(); -} - - -tasks.register("testChangelog") { - group = "tests" - - doLast { - println makeChangelog() - } -} - -publishMods { - dryRun = providers.environmentVariable("CURSE_TOKEN").getOrNull() == null - file = jar.archiveFile - changelog = makeChangelog() - type = STABLE - - modLoaders.add("neoforge") - modLoaders.add("forge") - - curseforge { - projectId = "351748" - accessToken = providers.environmentVariable("CURSE_TOKEN") - minecraftVersions.add(project.mc_version) - - optional { - slug = "charging-gadgets" + repositories { + maven { + url "file://${project.projectDir}/repo" } } - - github { - repository = "direwolf20-mc/MiningGadgets" - accessToken = providers.environmentVariable("GITHUB_TOKEN") - commitish = providers.environmentVariable("GITHUB_SHA").orElse("dryRun") - tagName = providers.environmentVariable("GITHUB_REF_NAME").orElse("dryRun") - } } tasks.withType(JavaCompile).configureEach { diff --git a/gradle.properties b/gradle.properties index bcd93126..050448f1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,34 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false +#read more on this at https://github.com/neoforged/NeoGradle/blob/NG_7.0/README.md#apply-parchment-mappings +# you can also find the latest versions at: https://parchmentmc.org/docs/getting-started +neogradle.subsystems.parchment.minecraftVersion=1.20.3 +neogradle.subsystems.parchment.mappingsVersion=2023.12.31 +# Environment Properties +# You can find the latest versions here: https://projects.neoforged.net/neoforged/neoforge +# The Minecraft version must agree with the Neo version to get a valid artifact +minecraft_version=1.20.4 +# The Minecraft version range can use any release version of Minecraft as bounds. +# Snapshots, pre-releases, and release candidates are not guaranteed to sort properly +# as they do not follow standard versioning conventions. +minecraft_version_range=[1.20.4,1.21) +# The Neo version must agree with the Minecraft version to get a valid artifact +neo_version=20.4.158-beta +# The Neo version range can use any version of Neo as bounds +neo_version_range=[20.4,) +# The loader version range can only use the major version of FML as bounds +loader_version_range=[2,) #Mod Info -mod_version=1.15.7 +mod_id=laserio +mod_name=LaserIO +mod_version=1.16.0 +mod_license=MIT +mod_authors=direwolf20 +mod_group_id=com.direwolf20.mininggadgets +mod_description=Mining is better with lasers! #Dependencies -mc_version=1.20.1 - -# This is actually neoforge now -forge_version=47.1.70 -forge_acceptable_range=[47.1.0,48) - -jei_version=15.2.0.27 +jei_version=17.3.0.48 +curios_version=7.2.0+1.20.4 +mekanism_version=1.19.2-10.3.8.477 +ae2_version=17.0.6-beta +patchouli_version=1.20.1-81-FORGE \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..033e24c4cdf41af1ab109bc7f253b2b887023340 100644 GIT binary patch delta 41451 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 delta 37613 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�aus#JUD;nS;yy5u_yvon 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 F@Bb2_FB|{> diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 15de9024..1af9e093 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index cccdd3d5..fcb6fca1 100755 --- a/gradlew +++ b/gradlew @@ -1,78 +1,126 @@ -#!/usr/bin/env sh +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -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="" +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # 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 - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -81,92 +129,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -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 - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) -# For Cygwin, switch paths to Windows format before running java -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` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=$((i+1)) + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# 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")" +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" fi +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index f9553162..93e3f59f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,4 +1,20 @@ -@if "%DEBUG%" == "" @echo off +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -9,19 +25,23 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @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 DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +55,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,38 +65,26 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/settings.gradle b/settings.gradle index 439cfc84..83ffc02f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,7 +1,12 @@ pluginManagement { repositories { gradlePluginPortal() - maven { url = 'https://maven.creeperhost.net/' } - maven { url = 'https://maven.neoforged.net/' } + maven { url = 'https://maven.minecraftforge.net/' } + maven { url = 'https://maven.parchmentmc.org' } // Add this line + maven { url = 'https://maven.neoforged.net/releases' } } } + +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0' +} diff --git a/src/main/java/com/direwolf20/mininggadgets/client/ClientEvents.java b/src/main/java/com/direwolf20/mininggadgets/client/ClientEvents.java index cef7d1b4..177bfd67 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/ClientEvents.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/ClientEvents.java @@ -9,20 +9,20 @@ import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.event.InputEvent; -import net.minecraftforge.client.event.RenderHighlightEvent; -import net.minecraftforge.client.event.RenderLevelStageEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.neoforge.client.event.InputEvent; +import net.neoforged.neoforge.client.event.RenderHighlightEvent; +import net.neoforged.neoforge.client.event.RenderLevelStageEvent; import java.util.List; public class ClientEvents { @SubscribeEvent - static void drawBlockHighlightEvent(RenderHighlightEvent evt) { - if( Minecraft.getInstance().player == null ) + static void drawBlockHighlightEvent(RenderHighlightEvent.Block evt) { + if (Minecraft.getInstance().player == null) return; - if(MiningGadget.isHolding(Minecraft.getInstance().player)) + if (MiningGadget.isHolding(Minecraft.getInstance().player)) evt.setCanceled(true); } diff --git a/src/main/java/com/direwolf20/mininggadgets/client/ClientSetup.java b/src/main/java/com/direwolf20/mininggadgets/client/ClientSetup.java deleted file mode 100644 index 5ea6fb9a..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/client/ClientSetup.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.direwolf20.mininggadgets.client; - -import com.direwolf20.mininggadgets.client.renderer.ModificationTableTER; -import com.direwolf20.mininggadgets.client.renderer.RenderBlockTER; -import com.direwolf20.mininggadgets.client.screens.FilterScreen; -import com.direwolf20.mininggadgets.client.screens.ModificationTableScreen; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; -import com.direwolf20.mininggadgets.common.containers.ModContainers; -import net.minecraft.client.gui.screens.MenuScreens; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; - -/** - * Only put client code here plz. - */ -public final class ClientSetup { - public static void setup() { - registerRenderers(); - registerContainerScreens(); - } - - /** - * Called from some Client Dist runner in the main class - */ - private static void registerContainerScreens() { - MenuScreens.register(ModContainers.MODIFICATIONTABLE_CONTAINER.get(), ModificationTableScreen::new); - MenuScreens.register(ModContainers.FILTER_CONTAINER.get(), FilterScreen::new); - } - - /** - * Client Registry for renders - */ - private static void registerRenderers() { - BlockEntityRenderers.register(ModBlocks.RENDERBLOCK_TILE.get(), RenderBlockTER::new); - BlockEntityRenderers.register(ModBlocks.MODIFICATIONTABLE_TILE.get(), ModificationTableTER::new); - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/client/MiningGadgetsJEI.java b/src/main/java/com/direwolf20/mininggadgets/client/MiningGadgetsJEI.java index a3767772..825b0b42 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/MiningGadgetsJEI.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/MiningGadgetsJEI.java @@ -1,10 +1,10 @@ package com.direwolf20.mininggadgets.client; import com.direwolf20.mininggadgets.client.screens.ModificationTableScreen; -import com.direwolf20.mininggadgets.common.Config; import com.direwolf20.mininggadgets.common.MiningGadgets; import com.direwolf20.mininggadgets.common.items.MiningGadget; -import com.direwolf20.mininggadgets.common.items.ModItems; +import com.direwolf20.mininggadgets.setup.Config; +import com.direwolf20.mininggadgets.setup.Registration; import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; import mezz.jei.api.gui.handlers.IGuiContainerHandler; @@ -46,9 +46,9 @@ public void registerItemSubtypes(ISubtypeRegistration registration) { return IIngredientSubtypeInterpreter.NONE; }; - registration.registerSubtypeInterpreter(ModItems.MININGGADGET.get(), chargedProvider); - registration.registerSubtypeInterpreter(ModItems.MININGGADGET_SIMPLE.get(), chargedProvider); - registration.registerSubtypeInterpreter(ModItems.MININGGADGET_FANCY.get(), chargedProvider); + registration.registerSubtypeInterpreter(Registration.MININGGADGET.get(), chargedProvider); + registration.registerSubtypeInterpreter(Registration.MININGGADGET_SIMPLE.get(), chargedProvider); + registration.registerSubtypeInterpreter(Registration.MININGGADGET_FANCY.get(), chargedProvider); } @Override diff --git a/src/main/java/com/direwolf20/mininggadgets/client/OurKeys.java b/src/main/java/com/direwolf20/mininggadgets/client/OurKeys.java index 8f3542b3..83430a83 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/OurKeys.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/OurKeys.java @@ -1,11 +1,12 @@ package com.direwolf20.mininggadgets.client; -import net.minecraft.client.KeyMapping; import com.mojang.blaze3d.platform.InputConstants; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RegisterKeyMappingsEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.minecraft.client.KeyMapping; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; + @Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public class OurKeys { diff --git a/src/main/java/com/direwolf20/mininggadgets/client/events/EventRenderGadget.java b/src/main/java/com/direwolf20/mininggadgets/client/events/EventRenderGadget.java index e0ebb82f..e4b7217e 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/events/EventRenderGadget.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/events/EventRenderGadget.java @@ -2,7 +2,7 @@ import com.direwolf20.mininggadgets.common.MiningGadgets; import com.direwolf20.mininggadgets.common.items.MiningGadget; -import com.direwolf20.mininggadgets.common.items.ModItems; +import com.direwolf20.mininggadgets.setup.Registration; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; @@ -11,15 +11,15 @@ import net.minecraft.client.renderer.ItemInHandRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.player.PlayerRenderer; -import net.minecraft.client.renderer.block.model.ItemTransforms; +import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.HumanoidArm; -import net.minecraft.util.Mth; import net.minecraft.world.item.ItemDisplayContext; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RenderHandEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; +import net.neoforged.neoforge.client.event.RenderHandEvent; + @Mod.EventBusSubscriber(modid = MiningGadgets.MOD_ID, value = Dist.CLIENT) public class EventRenderGadget { @@ -30,7 +30,7 @@ public static void renderGadget(RenderHandEvent event) { return; } - boolean isFancyGadget = ModItems.MININGGADGET_FANCY.get().equals(event.getItemStack().getItem()); + boolean isFancyGadget = Registration.MININGGADGET_FANCY.get().equals(event.getItemStack().getItem()); Minecraft mc = Minecraft.getInstance(); PoseStack matrixStackIn = event.getPoseStack(); @@ -59,7 +59,7 @@ public static void renderGadget(RenderHandEvent event) { matrixStackIn.mulPose(Axis.ZP.rotationDegrees(f * f5 * -20.0F)); AbstractClientPlayer abstractclientplayerentity = mc.player; - RenderSystem.setShaderTexture(0, abstractclientplayerentity.getSkinTextureLocation()); + RenderSystem.setShaderTexture(0, abstractclientplayerentity.getSkin().texture()); matrixStackIn.translate(f * -1.0F, 3.6F, 3.5D); matrixStackIn.mulPose(Axis.ZP.rotationDegrees(f * 120.0F)); diff --git a/src/main/java/com/direwolf20/mininggadgets/client/particles/ModParticles.java b/src/main/java/com/direwolf20/mininggadgets/client/particles/ModParticles.java index 7c5baf47..749d5d9f 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/particles/ModParticles.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/particles/ModParticles.java @@ -1,25 +1,23 @@ package com.direwolf20.mininggadgets.client.particles; -import com.direwolf20.mininggadgets.common.MiningGadgets; import com.direwolf20.mininggadgets.client.particles.laserparticle.LaserParticleData; import com.direwolf20.mininggadgets.client.particles.laserparticle.LaserParticleType; import com.direwolf20.mininggadgets.client.particles.lightparticle.LightParticleType; import com.direwolf20.mininggadgets.client.particles.playerparticle.PlayerParticleData; import com.direwolf20.mininggadgets.client.particles.playerparticle.PlayerParticleType; -import net.minecraft.core.DefaultedRegistry; +import com.direwolf20.mininggadgets.common.MiningGadgets; import net.minecraft.core.particles.ParticleType; import net.minecraft.core.particles.SimpleParticleType; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.ObjectHolder; -import net.minecraftforge.registries.RegistryObject; +import net.minecraft.core.registries.Registries; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.function.Supplier; + public class ModParticles { - public static final DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(ForgeRegistries.PARTICLE_TYPES, MiningGadgets.MOD_ID); + public static final DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(Registries.PARTICLE_TYPE, MiningGadgets.MOD_ID); - public static final RegistryObject> LASERPARTICLE = PARTICLE_TYPES.register("laserparticle", LaserParticleType::new); - public static final RegistryObject> PLAYERPARTICLE = PARTICLE_TYPES.register("playerparticle", PlayerParticleType::new); - public static final RegistryObject> LIGHT_PARTICLE = PARTICLE_TYPES.register("light_particle", LightParticleType::new); + public static final Supplier> LASERPARTICLE = PARTICLE_TYPES.register("laserparticle", LaserParticleType::new); + public static final Supplier> PLAYERPARTICLE = PARTICLE_TYPES.register("playerparticle", PlayerParticleType::new); + public static final Supplier> LIGHT_PARTICLE = PARTICLE_TYPES.register("light_particle", LightParticleType::new); } diff --git a/src/main/java/com/direwolf20/mininggadgets/client/particles/ParticleRenderDispatcher.java b/src/main/java/com/direwolf20/mininggadgets/client/particles/ParticleRenderDispatcher.java index 39b809a6..c17fd717 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/particles/ParticleRenderDispatcher.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/particles/ParticleRenderDispatcher.java @@ -4,10 +4,11 @@ import com.direwolf20.mininggadgets.client.particles.lightparticle.LightParticleType; import com.direwolf20.mininggadgets.client.particles.playerparticle.PlayerParticleType; import com.direwolf20.mininggadgets.common.MiningGadgets; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RegisterParticleProvidersEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; +import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent; + @Mod.EventBusSubscriber(modid = MiningGadgets.MOD_ID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public class ParticleRenderDispatcher { diff --git a/src/main/java/com/direwolf20/mininggadgets/client/particles/laserparticle/LaserParticleData.java b/src/main/java/com/direwolf20/mininggadgets/client/particles/laserparticle/LaserParticleData.java index 86878573..3de1f4a4 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/particles/laserparticle/LaserParticleData.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/particles/laserparticle/LaserParticleData.java @@ -10,7 +10,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.registries.ForgeRegistries; import javax.annotation.Nonnull; import java.util.Locale; @@ -55,7 +54,7 @@ public void writeToNetwork(FriendlyByteBuf buf) { @Override public String writeToString() { return String.format(Locale.ROOT, "%s %.2f %.2f %s", - ForgeRegistries.PARTICLE_TYPES.getKey(this.getType()), this.size, this.maxAgeMul, this.depthTest); + this.getType(), this.size, this.maxAgeMul, this.depthTest); } public static final Deserializer DESERIALIZER = new Deserializer<>() { diff --git a/src/main/java/com/direwolf20/mininggadgets/client/particles/lightparticle/LightParticleType.java b/src/main/java/com/direwolf20/mininggadgets/client/particles/lightparticle/LightParticleType.java index df97d84c..8fcd96c6 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/particles/lightparticle/LightParticleType.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/particles/lightparticle/LightParticleType.java @@ -1,12 +1,13 @@ package com.direwolf20.mininggadgets.client.particles.lightparticle; -import net.minecraft.client.particle.SpriteSet; -import net.minecraft.client.particle.ParticleProvider; -import net.minecraft.client.particle.Particle; import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleProvider; +import net.minecraft.client.particle.SpriteSet; import net.minecraft.core.particles.SimpleParticleType; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; + public class LightParticleType extends SimpleParticleType { public LightParticleType() { diff --git a/src/main/java/com/direwolf20/mininggadgets/client/particles/playerparticle/PlayerParticleData.java b/src/main/java/com/direwolf20/mininggadgets/client/particles/playerparticle/PlayerParticleData.java index 0175fb68..0a579971 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/particles/playerparticle/PlayerParticleData.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/particles/playerparticle/PlayerParticleData.java @@ -6,7 +6,6 @@ import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.registries.ForgeRegistries; import javax.annotation.Nonnull; import java.util.Locale; @@ -75,7 +74,7 @@ public void writeToNetwork(FriendlyByteBuf buf) { @Override public String writeToString() { return String.format(Locale.ROOT, "%s %.2f %.2f %.2f %.2f %.2f %s", - ForgeRegistries.PARTICLE_TYPES.getKey(this.getType()), this.size, this.r, this.g, this.b, this.maxAgeMul, this.depthTest); + this.getType(), this.size, this.r, this.g, this.b, this.maxAgeMul, this.depthTest); } public static final ParticleOptions.Deserializer DESERIALIZER = new ParticleOptions.Deserializer<>() { diff --git a/src/main/java/com/direwolf20/mininggadgets/client/renderer/BlockOverlayRender.java b/src/main/java/com/direwolf20/mininggadgets/client/renderer/BlockOverlayRender.java index 9280c3a7..0783ba36 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/renderer/BlockOverlayRender.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/renderer/BlockOverlayRender.java @@ -1,9 +1,9 @@ package com.direwolf20.mininggadgets.client.renderer; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; import com.direwolf20.mininggadgets.common.items.gadget.MiningCollect; import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; import com.direwolf20.mininggadgets.common.util.VectorHelper; +import com.direwolf20.mininggadgets.setup.Registration; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -16,7 +16,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.client.event.RenderLevelStageEvent; +import net.neoforged.neoforge.client.event.RenderLevelStageEvent; import org.joml.Matrix4f; import java.awt.*; @@ -45,7 +45,7 @@ public static void render(RenderLevelStageEvent event, ItemStack item) { VertexConsumer builder; builder = buffer.getBuffer(MyRenderType.BlockOverlay); coords.forEach(e -> { - if (mc.level.getBlockState(e).getBlock() != ModBlocks.RENDER_BLOCK.get()) { + if (mc.level.getBlockState(e).getBlock() != Registration.RENDER_BLOCK.get()) { matrix.pushPose(); matrix.translate(e.getX(), e.getY(), e.getZ()); diff --git a/src/main/java/com/direwolf20/mininggadgets/client/renderer/ModificationShiftOverlay.java b/src/main/java/com/direwolf20/mininggadgets/client/renderer/ModificationShiftOverlay.java index 3f02cb06..08357dad 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/renderer/ModificationShiftOverlay.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/renderer/ModificationShiftOverlay.java @@ -1,15 +1,14 @@ package com.direwolf20.mininggadgets.client.renderer; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; import com.direwolf20.mininggadgets.common.items.MiningGadget; import com.direwolf20.mininggadgets.common.items.upgrade.Upgrade; import com.direwolf20.mininggadgets.common.items.upgrade.UpgradeTools; import com.direwolf20.mininggadgets.common.tiles.ModificationTableTileEntity; +import com.direwolf20.mininggadgets.setup.Registration; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.BlockPos; @@ -20,7 +19,7 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.client.event.RenderLevelStageEvent; +import net.neoforged.neoforge.client.event.RenderLevelStageEvent; import java.util.List; @@ -33,7 +32,7 @@ public static void render(RenderLevelStageEvent evt, Player player) { } BlockHitResult trace = (BlockHitResult) pick; - if (player.level().getBlockState(trace.getBlockPos()).getBlock() != ModBlocks.MODIFICATION_TABLE.get()) { + if (player.level().getBlockState(trace.getBlockPos()).getBlock() != Registration.MODIFICATION_TABLE.get()) { return; } @@ -43,7 +42,7 @@ public static void render(RenderLevelStageEvent evt, Player player) { } // Finally, lets try and render something if we have a gadget in the main slot - ItemStack stack = ((ModificationTableTileEntity) blockEntity).handler.map(e -> e.getStackInSlot(0)).orElse(ItemStack.EMPTY); + ItemStack stack = ((ModificationTableTileEntity) blockEntity).handler.getStackInSlot(0); if (stack.isEmpty() || !(stack.getItem() instanceof MiningGadget)) { return; } diff --git a/src/main/java/com/direwolf20/mininggadgets/client/renderer/ModificationTableTER.java b/src/main/java/com/direwolf20/mininggadgets/client/renderer/ModificationTableTER.java index c8c7ec0b..ff0dd21e 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/renderer/ModificationTableTER.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/renderer/ModificationTableTER.java @@ -1,12 +1,11 @@ package com.direwolf20.mininggadgets.client.renderer; -import com.direwolf20.mininggadgets.common.items.ModItems; import com.direwolf20.mininggadgets.common.tiles.ModificationTableTileEntity; +import com.direwolf20.mininggadgets.setup.Registration; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.resources.model.BakedModel; @@ -14,7 +13,7 @@ import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.neoforged.neoforge.capabilities.Capabilities; public class ModificationTableTER implements BlockEntityRenderer { public ModificationTableTER(BlockEntityRendererProvider.Context p_173636_) { @@ -23,13 +22,15 @@ public ModificationTableTER(BlockEntityRendererProvider.Context p_173636_) { @Override public void render(ModificationTableTileEntity tile, float partialTicks, PoseStack matrix, MultiBufferSource buffer, int combinedLights, int combinedOverlay) { - ItemStack stack = tile.getCapability(ForgeCapabilities.ITEM_HANDLER).map(e -> e.getStackInSlot(0)).orElse(ItemStack.EMPTY); + var cap = tile.getLevel().getCapability(Capabilities.ItemHandler.BLOCK, tile.getBlockPos(), tile.getBlockState(), tile, null); + if (cap == null) return; + ItemStack stack = cap.getStackInSlot(0); if (stack.isEmpty()) { return; } - boolean isSimple = stack.getItem().equals(ModItems.MININGGADGET_SIMPLE.get()); - boolean isFancy = stack.getItem().equals(ModItems.MININGGADGET_FANCY.get()); + boolean isSimple = stack.getItem().equals(Registration.MININGGADGET_SIMPLE.get()); + boolean isFancy = stack.getItem().equals(Registration.MININGGADGET_FANCY.get()); boolean isCool = !isSimple && !isFancy; Direction facing = tile.getBlockState().getValue(BlockStateProperties.HORIZONTAL_FACING); diff --git a/src/main/java/com/direwolf20/mininggadgets/client/renderer/RenderBlockTER.java b/src/main/java/com/direwolf20/mininggadgets/client/renderer/RenderBlockTER.java index ab7c3520..858a29b7 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/renderer/RenderBlockTER.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/renderer/RenderBlockTER.java @@ -20,7 +20,7 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.client.model.data.ModelData; +import net.neoforged.neoforge.client.model.data.ModelData; import java.util.List; diff --git a/src/main/java/com/direwolf20/mininggadgets/client/renderer/RenderMiningLaser.java b/src/main/java/com/direwolf20/mininggadgets/client/renderer/RenderMiningLaser.java index 93536c4e..64680e50 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/renderer/RenderMiningLaser.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/renderer/RenderMiningLaser.java @@ -2,10 +2,10 @@ import com.direwolf20.mininggadgets.common.MiningGadgets; import com.direwolf20.mininggadgets.common.items.MiningGadget; -import com.direwolf20.mininggadgets.common.items.ModItems; import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; import com.direwolf20.mininggadgets.common.items.upgrade.Upgrade; import com.direwolf20.mininggadgets.common.items.upgrade.UpgradeTools; +import com.direwolf20.mininggadgets.setup.Registration; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; @@ -21,7 +21,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.client.event.RenderLevelStageEvent; +import net.neoforged.neoforge.client.event.RenderLevelStageEvent; import org.joml.Matrix3f; import org.joml.Matrix4f; import org.joml.Vector3f; @@ -117,14 +117,14 @@ private static float calculateLaserFlickerModifier(long gameTime) { } private static void drawBeam(ItemStack stack, double xOffset, double yOffset, double zOffset, VertexConsumer builder, Matrix4f positionMatrix, Matrix3f matrixNormalIn, float thickness, InteractionHand hand, double distance, double v1, double v2, float ticks, float r, float g, float b, float alpha) { - boolean isFancy = stack.getItem().equals(ModItems.MININGGADGET_FANCY.get()); - boolean isSimple = stack.getItem().equals(ModItems.MININGGADGET_SIMPLE.get()); + boolean isFancy = stack.getItem().equals(Registration.MININGGADGET_FANCY.get()); + boolean isSimple = stack.getItem().equals(Registration.MININGGADGET_SIMPLE.get()); Vector3f vector3f = new Vector3f(0.0f, 1.0f, 0.0f); vector3f.mul(matrixNormalIn);//TODO: validate //.transform(matrixNormalIn); LocalPlayer player = Minecraft.getInstance().player; // Support for hand sides remembering to take into account of Skin options - if( Minecraft.getInstance().options.mainHand().get() != HumanoidArm.RIGHT ) + if (Minecraft.getInstance().options.mainHand().get() != HumanoidArm.RIGHT) hand = hand == InteractionHand.MAIN_HAND ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND; float startXOffset = -0.20f; float startYOffset = -.108f; diff --git a/src/main/java/com/direwolf20/mininggadgets/client/screens/FilterScreen.java b/src/main/java/com/direwolf20/mininggadgets/client/screens/FilterScreen.java index c39b2b07..a4295e5b 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/screens/FilterScreen.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/screens/FilterScreen.java @@ -4,14 +4,13 @@ import com.direwolf20.mininggadgets.common.containers.GhostSlot; import com.direwolf20.mininggadgets.common.network.PacketHandler; import com.direwolf20.mininggadgets.common.network.packets.PacketGhostSlot; -import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.item.ItemStack; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.network.chat.Component; /** * Complete props and thanks to @amadones for their awesome implementation of this system @@ -27,7 +26,7 @@ public FilterScreen(FilterContainer container, Inventory inv, Component name) { @Override public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(guiGraphics); + //this.renderBackground(guiGraphics); super.render(guiGraphics, mouseX, mouseY, partialTicks); this.renderTooltip(guiGraphics, mouseX, mouseY); // @mcp: renderTooltip = renderHoveredToolTip @@ -73,9 +72,9 @@ public boolean mouseReleased(double x, double y, int btn) { } @Override - public boolean mouseScrolled(double x, double y, double amt) { + public boolean mouseScrolled(double x, double y, double amt, double amtY) { if (hoveredSlot == null || !(hoveredSlot instanceof GhostSlot)) - return super.mouseScrolled(x, y, amt); + return super.mouseScrolled(x, y, amt, amtY); return true; } diff --git a/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningSettingScreen.java b/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningSettingScreen.java index a8435cc6..e110fb67 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningSettingScreen.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningSettingScreen.java @@ -8,12 +8,10 @@ import com.direwolf20.mininggadgets.common.network.PacketHandler; import com.direwolf20.mininggadgets.common.network.packets.*; import com.mojang.blaze3d.platform.InputConstants; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipPositioner; import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner; import net.minecraft.locale.Language; import net.minecraft.network.chat.Component; @@ -21,7 +19,7 @@ import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.gui.widget.ForgeSlider; +import net.neoforged.neoforge.client.gui.widget.ExtendedSlider; import java.awt.*; import java.util.List; @@ -37,9 +35,9 @@ public class MiningSettingScreen extends Screen { private int currentSize = 1; private boolean isWhitelist = true; private boolean isPrecision = true; - private ForgeSlider rangeSlider; - private ForgeSlider volumeSlider; - private ForgeSlider freezeDelaySlider; + private ExtendedSlider rangeSlider; + private ExtendedSlider volumeSlider; + private ExtendedSlider freezeDelaySlider; private List toggleableList = new ArrayList<>(); private HashMap upgradeButtons = new HashMap<>(); private boolean containsFreeze = false; @@ -128,7 +126,7 @@ protected void init() { } ///ForgeSlider(int x, int y, int width, int height, Component prefix, Component suffix, double minValue, double maxValue, double currentValue, double stepSize, int precision, boolean drawString) - leftWidgets.add(rangeSlider = new ForgeSlider(baseX - 135, 0, 125, 20, getTrans("tooltip.screen.range").append(": "), Component.empty(), 1, MiningProperties.getBeamMaxRange(gadget), this.beamRange, true) { + leftWidgets.add(rangeSlider = new ExtendedSlider(baseX - 135, 0, 125, 20, getTrans("tooltip.screen.range").append(": "), Component.empty(), 1, MiningProperties.getBeamMaxRange(gadget), this.beamRange, true) { @Override protected void applyValue() { beamRange = this.getValueInt(); @@ -147,7 +145,7 @@ protected void applyValue() { }).pos(baseX - 135, 0).size(125, 20).build()); // volume slider - leftWidgets.add(volumeSlider = new ForgeSlider(baseX - 135, 0, 125, 20, getTrans("tooltip.screen.volume").append(": "), Component.literal("%"), 0, 100, volume * 100, true) { + leftWidgets.add(volumeSlider = new ExtendedSlider(baseX - 135, 0, 125, 20, getTrans("tooltip.screen.volume").append(": "), Component.literal("%"), 0, 100, volume * 100, true) { @Override protected void applyValue() { volume = (float) (this.getValue() / 100D); @@ -156,7 +154,7 @@ protected void applyValue() { // Freeze delay if( containsFreeze ) - leftWidgets.add(freezeDelaySlider = new ForgeSlider(baseX - 135, 0, 125, 20, getTrans("tooltip.screen.freeze_delay").append(": "), Component.literal(" ").append(getTrans("tooltip.screen.ticks")), 0, 10, MiningProperties.getFreezeDelay(gadget), true) { + leftWidgets.add(freezeDelaySlider = new ExtendedSlider(baseX - 135, 0, 125, 20, getTrans("tooltip.screen.freeze_delay").append(": "), Component.literal(" ").append(getTrans("tooltip.screen.ticks")), 0, 10, MiningProperties.getFreezeDelay(gadget), true) { @Override protected void applyValue() { freezeDelay = this.getValueInt(); @@ -199,7 +197,7 @@ private void updateButtons(Upgrade upgrade) { @Override public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(guiGraphics); + //this.renderBackground(guiGraphics); super.render(guiGraphics, mouseX, mouseY, partialTicks); int top = (height / 2) - (containsFreeze ? 80 : 60); @@ -219,11 +217,11 @@ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partia guiGraphics.renderTooltip(font, isWhitelist ? getTrans("tooltip.screen.whitelist") : getTrans("tooltip.screen.blacklist"), mouseX, mouseY); } else if( e.equals(freezeDelaySlider) ) { if( e.isMouseOver(mouseX, mouseY) ) { - assert e instanceof ForgeSlider; + assert e instanceof ExtendedSlider; // This is a bit silly, not going to lie List helpText = Arrays.stream(getTrans("tooltip.screen.delay_explain").getString().split("\n")).map(Component::literal).collect(Collectors.toList()); - guiGraphics.renderTooltip(font, Language.getInstance().getVisualOrder(helpText), ((ForgeSlider)e).getX() - 8, ((ForgeSlider)e).getY() + 40); + guiGraphics.renderTooltip(font, Language.getInstance().getVisualOrder(helpText), ((ExtendedSlider) e).getX() - 8, ((ExtendedSlider) e).getY() + 40); } } else { assert e instanceof ToggleButton; @@ -265,16 +263,16 @@ private static MutableComponent getTrans(String key, Object... args) { } @Override - public boolean mouseScrolled(double mouseX, double mouseY, double delta) { - if( rangeSlider.isMouseOver(mouseX, mouseY) ) { + public boolean mouseScrolled(double mouseX, double mouseY, double delta, double deltaY) { + if (rangeSlider.isMouseOver(mouseX, mouseY)) { rangeSlider.setValue(rangeSlider.getValueInt() + (delta > 0 ? 1 : -1)); beamRange = rangeSlider.getValueInt(); } - if( freezeDelaySlider != null && freezeDelaySlider.isMouseOver(mouseX, mouseY) ) { + if (freezeDelaySlider != null && freezeDelaySlider.isMouseOver(mouseX, mouseY)) { freezeDelaySlider.setValue(freezeDelaySlider.getValueInt() + (delta > 0 ? 1 : -1)); freezeDelay = freezeDelaySlider.getValueInt(); } - if( volumeSlider.isMouseOver(mouseX, mouseY) ) { + if (volumeSlider.isMouseOver(mouseX, mouseY)) { volumeSlider.setValue(volumeSlider.getValueInt() + (delta > 0 ? 1 : -1)); volume = volumeSlider.getValueInt(); } diff --git a/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningVisualsScreen.java b/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningVisualsScreen.java index 20c59e77..8f07200b 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningVisualsScreen.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningVisualsScreen.java @@ -5,7 +5,6 @@ import com.direwolf20.mininggadgets.common.network.packets.PacketChangeBreakType; import com.direwolf20.mininggadgets.common.network.packets.PacketChangeColor; import com.mojang.blaze3d.platform.InputConstants; -import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.ints.IntConsumer; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; @@ -13,7 +12,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.gui.widget.ForgeSlider; +import net.neoforged.neoforge.client.gui.widget.ExtendedSlider; import java.util.HashMap; import java.util.Map; @@ -27,14 +26,14 @@ public class MiningVisualsScreen extends Screen { private int red_inner; private int green_inner; private int blue_inner; - private ForgeSlider sliderRedInner; - private ForgeSlider sliderGreenInner; - private ForgeSlider sliderBlueInner; - private ForgeSlider sliderRedOuter; - private ForgeSlider sliderGreenOuter; - private ForgeSlider sliderBlueOuter; + private ExtendedSlider sliderRedInner; + private ExtendedSlider sliderGreenInner; + private ExtendedSlider sliderBlueInner; + private ExtendedSlider sliderRedOuter; + private ExtendedSlider sliderGreenOuter; + private ExtendedSlider sliderBlueOuter; - private Map sliderMap = new HashMap<>(); + private Map sliderMap = new HashMap<>(); public MiningVisualsScreen(ItemStack gadget) { super(Component.literal("title")); @@ -74,38 +73,38 @@ protected void init() { addRenderableWidget(blockBreakButton); - sliderRedInner = new ForgeSlider(baseX - (150), baseY - 10, 150, 20, Component.translatable("mininggadgets.tooltip.screen.red").append(": "), Component.empty(), 0, 255, this.red, true) { + sliderRedInner = new ExtendedSlider(baseX - (150), baseY - 10, 150, 20, Component.translatable("mininggadgets.tooltip.screen.red").append(": "), Component.empty(), 0, 255, this.red, true) { @Override protected void applyValue() { red_inner = this.getValueInt(); } }; - sliderGreenInner = new ForgeSlider(baseX - (150), baseY + 15, 150, 20, Component.translatable("mininggadgets.tooltip.screen.green").append(": "), Component.empty(), 0, 255, this.green, true) { + sliderGreenInner = new ExtendedSlider(baseX - (150), baseY + 15, 150, 20, Component.translatable("mininggadgets.tooltip.screen.green").append(": "), Component.empty(), 0, 255, this.green, true) { @Override protected void applyValue() { green_inner = this.getValueInt(); } }; - sliderBlueInner = new ForgeSlider(baseX - (150), baseY + 40, 150, 20, Component.translatable("mininggadgets.tooltip.screen.blue").append(": "), Component.empty(), 0, 255, this.blue, true) { + sliderBlueInner = new ExtendedSlider(baseX - (150), baseY + 40, 150, 20, Component.translatable("mininggadgets.tooltip.screen.blue").append(": "), Component.empty(), 0, 255, this.blue, true) { @Override protected void applyValue() { blue_inner = this.getValueInt(); } }; - sliderRedOuter = new ForgeSlider(baseX + (25), baseY - 10, 150, 20, Component.translatable("mininggadgets.tooltip.screen.red").append(": "), Component.empty(), 0, 255, this.red_inner, true) { + sliderRedOuter = new ExtendedSlider(baseX + (25), baseY - 10, 150, 20, Component.translatable("mininggadgets.tooltip.screen.red").append(": "), Component.empty(), 0, 255, this.red_inner, true) { @Override protected void applyValue() { red = this.getValueInt(); } }; - sliderGreenOuter = new ForgeSlider(baseX + (25), baseY + 15, 150, 20, Component.translatable("mininggadgets.tooltip.screen.green").append(": "), Component.empty(), 0, 255, this.green_inner, true) { + sliderGreenOuter = new ExtendedSlider(baseX + (25), baseY + 15, 150, 20, Component.translatable("mininggadgets.tooltip.screen.green").append(": "), Component.empty(), 0, 255, this.green_inner, true) { @Override protected void applyValue() { green = this.getValueInt(); } }; - sliderBlueOuter = new ForgeSlider(baseX + (25), baseY + 40, 150, 20, Component.translatable("mininggadgets.tooltip.screen.blue").append(": "), Component.empty(), 0, 255, this.blue_inner, true) { + sliderBlueOuter = new ExtendedSlider(baseX + (25), baseY + 40, 150, 20, Component.translatable("mininggadgets.tooltip.screen.blue").append(": "), Component.empty(), 0, 255, this.blue_inner, true) { @Override protected void applyValue() { blue = this.getValueInt(); @@ -132,7 +131,7 @@ protected void applyValue() { @Override public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(guiGraphics); + //this.renderBackground(guiGraphics); super.render(guiGraphics, mouseX, mouseY, partialTicks); guiGraphics.drawCenteredString(font, Component.translatable("mininggadgets.tooltip.screen.visual_settings"), (width / 2), (height / 2) - 95, 0xFFFFFF); @@ -156,12 +155,12 @@ private int rgbToInt(int r, int g, int b) { } @Override - public boolean mouseScrolled(double mouseX, double mouseY, double delta) { + public boolean mouseScrolled(double mouseX, double mouseY, double delta, double deltaY) { this.sliderMap.forEach((slider, consumer) -> { - if (slider.isMouseOver(mouseX, mouseY)) { - slider.setValue(slider.getValueInt() + (delta > 0 ? 1 : -1)); - consumer.accept(slider.getValueInt()); - } + if (slider.isMouseOver(mouseX, mouseY)) { + slider.setValue(slider.getValueInt() + (delta > 0 ? 1 : -1)); + consumer.accept(slider.getValueInt()); + } }); return false; diff --git a/src/main/java/com/direwolf20/mininggadgets/client/screens/ModificationTableScreen.java b/src/main/java/com/direwolf20/mininggadgets/client/screens/ModificationTableScreen.java index 1948a449..e64ddbc9 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/screens/ModificationTableScreen.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/screens/ModificationTableScreen.java @@ -24,8 +24,8 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; -import net.minecraftforge.client.gui.widget.ScrollPanel; -import net.minecraftforge.common.ForgeI18n; +import net.neoforged.neoforge.client.gui.widget.ScrollPanel; + public class ModificationTableScreen extends AbstractContainerScreen { private ResourceLocation GUI = new ResourceLocation(MiningGadgets.MOD_ID, "textures/gui/modificationtable.png"); @@ -44,7 +44,7 @@ public ModificationTableScreen(ModificationTableContainer container, Inventory i @Override public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(guiGraphics); + // this.renderBackground(guiGraphics); super.render(guiGraphics, mouseX, mouseY, partialTicks); this.scrollingUpgrades.render(guiGraphics, mouseX, mouseY, partialTicks); @@ -53,10 +53,12 @@ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partia int relX = (this.width) / 2; int relY = (this.height) / 2; - guiGraphics.drawCenteredString(font, ForgeI18n.getPattern(String.format("%s.%s", MiningGadgets.MOD_ID, "text.modification_table")), relX, relY - 100, 0xFFFFFF); + //guiGraphics.drawCenteredString(font, ForgeI18n.getPattern(String.format("%s.%s", MiningGadgets.MOD_ID, "text.modification_table")), relX, relY - 100, 0xFFFFFF); + guiGraphics.drawCenteredString(font, MiningGadgets.MOD_ID + "text.modification_table", relX, relY - 100, 0xFFFFFF); if (this.container.getUpgradesCache().size() == 0) { - String string = ForgeI18n.getPattern(String.format("%s.%s", MiningGadgets.MOD_ID, "text.empty_table_helper")); + //String string = ForgeI18n.getPattern(String.format("%s.%s", MiningGadgets.MOD_ID, "text.empty_table_helper")); + String string = MiningGadgets.MOD_ID + "text.empty_table_helper"; String[] parts = string.split("\n"); for (int i = 0; i < parts.length; i++) { drawScaledCenteredString(guiGraphics, (relX + 17) - (font.width(parts[0]) / 2), (relY - 68) + (i * font.lineHeight), .8f, parts[i], 0xFFFFFF); @@ -124,11 +126,11 @@ private static class ScrollingUpgrades extends ScrollPanel implements Narratable // Fixes a forge bug where the screen will screen when no scroll is available @Override - public boolean mouseScrolled(double mouseX, double mouseY, double scroll) { + public boolean mouseScrolled(double mouseX, double mouseY, double scroll, double scrollY) { if (this.getContentHeight() < this.height) return false; - return super.mouseScrolled(mouseX, mouseY, scroll); + return super.mouseScrolled(mouseX, mouseY, scroll, scrollY); } @Override diff --git a/src/main/java/com/direwolf20/mininggadgets/client/screens/widget/DireButton.java b/src/main/java/com/direwolf20/mininggadgets/client/screens/widget/DireButton.java index d78f807b..0ccb2a48 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/screens/widget/DireButton.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/screens/widget/DireButton.java @@ -2,7 +2,6 @@ import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; @@ -18,21 +17,15 @@ public DireButton(int x, int y, int widthIn, int heightIn, Component buttonText, } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { if (this.visible) { Font fontrenderer = Minecraft.getInstance().font; RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); this.isHovered = isMouseOver(mouseX, mouseY); RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA.value, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA.value, GlStateManager.SourceFactor.ONE.value, GlStateManager.DestFactor.ZERO.value); - RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA.value, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA.value); - guiGraphics.blit(WIDGETS_LOCATION, this.getX(), this.getY(), 0, 46, this.width / 2, this.height); - guiGraphics.blit(WIDGETS_LOCATION, this.getX() + this.width / 2, this.getY(), 200 - this.width / 2, 46, this.width / 2, this.height); - - - int bottomToDraw = 2; - guiGraphics.blit(WIDGETS_LOCATION, this.getX(), this.getY() + this.height - bottomToDraw, 0, 66 - bottomToDraw, this.width / 2, bottomToDraw); - guiGraphics.blit(WIDGETS_LOCATION, this.getX() + this.width / 2, this.getY() + this.height - bottomToDraw, 200 - this.width / 2, 66 - bottomToDraw, this.width / 2, bottomToDraw); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + guiGraphics.blitSprite(SPRITES.get(this.active, this.isHoveredOrFocused()), this.getX(), this.getY(), this.getWidth(), this.getHeight()); int j = 14737632; @@ -44,7 +37,7 @@ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partia j = 16777120; } - guiGraphics.drawCenteredString(fontrenderer, this.getMessage(), this.getX() + this.width / 2, this.getY() + (this.height - 7) / 2, j); + guiGraphics.drawCenteredString(fontrenderer, this.getMessage().getString(), this.getX() + this.width / 2, this.getY() + (this.height - 7) / 2, j); } } } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/MiningGadgets.java b/src/main/java/com/direwolf20/mininggadgets/common/MiningGadgets.java index 8771af79..d69ac213 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/MiningGadgets.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/MiningGadgets.java @@ -1,37 +1,23 @@ package com.direwolf20.mininggadgets.common; -import com.direwolf20.mininggadgets.client.ClientEvents; -import com.direwolf20.mininggadgets.client.ClientSetup; -import com.direwolf20.mininggadgets.client.particles.ModParticles; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; -import com.direwolf20.mininggadgets.common.containers.ModContainers; -import com.direwolf20.mininggadgets.common.events.ServerTickHandler; +import com.direwolf20.mininggadgets.common.capabilities.EnergisedItem; import com.direwolf20.mininggadgets.common.items.MiningGadget; -import com.direwolf20.mininggadgets.common.items.ModItems; -import com.direwolf20.mininggadgets.common.items.upgrade.UpgradeBatteryLevels; import com.direwolf20.mininggadgets.common.network.PacketHandler; -import com.direwolf20.mininggadgets.common.sounds.OurSounds; -import net.minecraft.core.registries.Registries; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; +import com.direwolf20.mininggadgets.setup.ClientSetup; +import com.direwolf20.mininggadgets.setup.Config; +import com.direwolf20.mininggadgets.setup.ModSetup; +import com.direwolf20.mininggadgets.setup.Registration; import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.*; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.fml.loading.FMLPaths; -import net.minecraftforge.registries.RegisterEvent; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.loading.FMLLoader; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -41,65 +27,34 @@ public class MiningGadgets public static final String MOD_ID = "mininggadgets"; private static final Logger LOGGER = LogManager.getLogger(); - public MiningGadgets() { - IEventBus event = FMLJavaModLoadingContext.get().getModEventBus(); - + public MiningGadgets(IEventBus event) { // Register all of our items, blocks, item blocks, etc - ModItems.ITEMS.register(event); - ModItems.UPGRADE_ITEMS.register(event); - ModBlocks.BLOCKS.register(event); - ModBlocks.TILES_ENTITIES.register(event); - ModContainers.CONTAINERS.register(event); - ModParticles.PARTICLE_TYPES.register(event); - OurSounds.SOUND_REGISTRY.register(event); - - event.addListener(this::setup); - event.addListener(this::setupClient); - - ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, Config.CLIENT_CONFIG); - ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.COMMON_CONFIG); + Registration.init(event); + Config.register(); - // Register the setup method for modloading - event.addListener(this::setup); - event.addListener(this::buildContents); - MinecraftForge.EVENT_BUS.register(this); + event.addListener(ModSetup::init); + ModSetup.TABS.register(event); + NeoForge.EVENT_BUS.register(this); + event.addListener(PacketHandler::registerNetworking); + event.addListener(this::registerCapabilities); - Config.loadConfig(Config.CLIENT_CONFIG, FMLPaths.CONFIGDIR.get().resolve(MOD_ID + "-client.toml")); - Config.loadConfig(Config.COMMON_CONFIG, FMLPaths.CONFIGDIR.get().resolve(MOD_ID + "-common.toml")); + if (FMLLoader.getDist().isClient()) { + event.addListener(ClientSetup::init); + } } - public void buildContents(RegisterEvent event) { - ResourceKey TAB = ResourceKey.create(Registries.CREATIVE_MODE_TAB, new ResourceLocation(MOD_ID, "creative_tab")); - event.register(Registries.CREATIVE_MODE_TAB, creativeModeTabRegisterHelper -> - { - creativeModeTabRegisterHelper.register(TAB, CreativeModeTab.builder().icon(() -> new ItemStack(ModItems.MININGGADGET_FANCY.get())) - .title(Component.translatable("itemGroup." + MOD_ID)) - .displayItems((params, output) -> { - ModItems.ITEMS.getEntries() - .stream().filter(e -> e != ModItems.MINERS_LIGHT_ITEM) - .forEach(e -> { - // Normal - Item item = e.get(); - output.accept(item); - - // Charged - if (item instanceof MiningGadget) { - ItemStack stack = new ItemStack(item); - stack.getOrCreateTag().putInt("energy", UpgradeBatteryLevels.BATTERY.getPower()); - output.accept(stack); - } - }); - - ModItems.UPGRADE_ITEMS.getEntries().forEach(e -> output.accept(e.get())); - }) - .build()); - }); + private void registerCapabilities(RegisterCapabilitiesEvent event) { + event.registerItem(Capabilities.EnergyStorage.ITEM, (itemStack, context) -> new EnergisedItem(itemStack, ((MiningGadget) itemStack.getItem()).getEnergyMax()), + Registration.MININGGADGET.get(), + Registration.MININGGADGET_FANCY.get(), + Registration.MININGGADGET_SIMPLE.get() + ); } @SubscribeEvent public void rightClickEvent(PlayerInteractEvent.RightClickBlock event) { ItemStack stack = MiningGadget.getGadget(event.getEntity()); - if( stack.getItem() instanceof MiningGadget ) { + if (stack.getItem() instanceof MiningGadget) { if (this.stackIsAnnoying(event.getEntity().getMainHandItem()) || this.stackIsAnnoying(event.getEntity().getOffhandItem()) || event.getLevel().getBlockState(event.getPos()).getBlock() instanceof RedStoneOreBlock) { @@ -123,23 +78,6 @@ private boolean stackIsAnnoying(ItemStack stack) { || block instanceof RedstoneLampBlock || block instanceof EndRodBlock; } - private void setup(final FMLCommonSetupEvent event) - { - PacketHandler.register(); - MinecraftForge.EVENT_BUS.register(ServerTickHandler.class); - } - - /** - * Only run on the client making it a safe place to register client - * components. Remember that you shouldn't reference client only - * methods in this class as it'll crash the mod :P - */ - private void setupClient(final FMLClientSetupEvent event) { - // Register the container screens. - ClientSetup.setup(); - MinecraftForge.EVENT_BUS.register(ClientEvents.class); - } - public static Logger getLogger() { return LOGGER; } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/blocks/ModBlocks.java b/src/main/java/com/direwolf20/mininggadgets/common/blocks/ModBlocks.java deleted file mode 100644 index c584508c..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/blocks/ModBlocks.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.direwolf20.mininggadgets.common.blocks; - -import com.direwolf20.mininggadgets.common.MiningGadgets; -import com.direwolf20.mininggadgets.common.tiles.ModificationTableTileEntity; -import com.direwolf20.mininggadgets.common.tiles.RenderBlockTileEntity; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; - -public class ModBlocks { - /** - * Deferred Registers for the our Main class to load. - */ - public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MiningGadgets.MOD_ID); - public static final DeferredRegister> TILES_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, MiningGadgets.MOD_ID); - - /** - * Register our blocks to the above registers to be loaded when the mod is initialized - */ - public static final RegistryObject RENDER_BLOCK = BLOCKS.register("renderblock", RenderBlock::new); - public static final RegistryObject MINERS_LIGHT = BLOCKS.register("minerslight", MinersLight::new); - public static final RegistryObject MODIFICATION_TABLE = BLOCKS.register("modificationtable", ModificationTable::new); - - /** - * TileEntity Registers to the above deferred registers to be loaded in from the mods main class. - */ - public static final RegistryObject> RENDERBLOCK_TILE = - TILES_ENTITIES.register("renderblock", () -> BlockEntityType.Builder.of(RenderBlockTileEntity::new, ModBlocks.RENDER_BLOCK.get()).build(null)); - - public static final RegistryObject> MODIFICATIONTABLE_TILE = - TILES_ENTITIES.register("modificationtable", () -> BlockEntityType.Builder.of(ModificationTableTileEntity::new, ModBlocks.MODIFICATION_TABLE.get()).build(null)); -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/blocks/ModificationTable.java b/src/main/java/com/direwolf20/mininggadgets/common/blocks/ModificationTable.java index 27571bb7..3dab3ca9 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/blocks/ModificationTable.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/blocks/ModificationTable.java @@ -1,8 +1,8 @@ package com.direwolf20.mininggadgets.common.blocks; +import com.direwolf20.mininggadgets.setup.Registration; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Containers; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -23,10 +23,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.network.NetworkHooks; +import net.neoforged.neoforge.capabilities.Capabilities; import javax.annotation.Nullable; import java.util.stream.Stream; @@ -56,7 +53,7 @@ protected void createBlockStateDefinition(StateDefinition.Builder cap = tileEntity.getCapability(ForgeCapabilities.ITEM_HANDLER); - cap.ifPresent(handler -> { - for(int i = 0; i < handler.getSlots(); ++i) { - Containers.dropItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), handler.getStackInSlot(i)); - } - }); + BlockEntity tile = worldIn.getBlockEntity(pos); + if (tile != null) { + var cap = tile.getLevel().getCapability(Capabilities.ItemHandler.BLOCK, tile.getBlockPos(), tile.getBlockState(), tile, null); + if (cap == null) return; + for (int i = 0; i < cap.getSlots(); ++i) { + Containers.dropItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), cap.getStackInSlot(i)); + } + super.onRemove(state, worldIn, pos, newState, isMoving); } - super.onRemove(state, worldIn, pos, newState, isMoving); } } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/blocks/RenderBlock.java b/src/main/java/com/direwolf20/mininggadgets/common/blocks/RenderBlock.java index 28722856..4cddee5d 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/blocks/RenderBlock.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/blocks/RenderBlock.java @@ -1,6 +1,7 @@ package com.direwolf20.mininggadgets.common.blocks; import com.direwolf20.mininggadgets.common.tiles.RenderBlockTileEntity; +import com.direwolf20.mininggadgets.setup.Registration; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.BlockGetter; @@ -13,8 +14,8 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.PushReaction; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import javax.annotation.Nullable; @@ -37,7 +38,7 @@ public BlockEntityTicker getTicker(Level p_153212_, B @Nullable @Override public BlockEntity newBlockEntity(BlockPos p_153215_, BlockState p_153216_) { - return ModBlocks.RENDERBLOCK_TILE.get().create(p_153215_, p_153216_); + return Registration.RENDERBLOCK_TILE.get().create(p_153215_, p_153216_); } /** diff --git a/src/main/java/com/direwolf20/mininggadgets/common/capabilities/CapabilityEnergyProvider.java b/src/main/java/com/direwolf20/mininggadgets/common/capabilities/CapabilityEnergyProvider.java deleted file mode 100644 index c452734b..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/capabilities/CapabilityEnergyProvider.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.direwolf20.mininggadgets.common.capabilities; - -import com.direwolf20.mininggadgets.common.items.EnergisedItem; -import net.minecraft.core.Direction; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.energy.IEnergyStorage; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public class CapabilityEnergyProvider implements ICapabilityProvider { - private ItemStack stack; - private int energyCapacity; - private LazyOptional capability = LazyOptional.of(() -> new EnergisedItem(stack, energyCapacity)); - - public CapabilityEnergyProvider(ItemStack stack, int energyCapacity) { - this.stack = stack; - this.energyCapacity = energyCapacity; - } - - @Nonnull - @Override - public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { - return cap == ForgeCapabilities.ENERGY ? capability.cast() : LazyOptional.empty(); - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/items/EnergisedItem.java b/src/main/java/com/direwolf20/mininggadgets/common/capabilities/EnergisedItem.java similarity index 92% rename from src/main/java/com/direwolf20/mininggadgets/common/items/EnergisedItem.java rename to src/main/java/com/direwolf20/mininggadgets/common/capabilities/EnergisedItem.java index 7761ee1b..8cf938d8 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/items/EnergisedItem.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/capabilities/EnergisedItem.java @@ -1,7 +1,8 @@ -package com.direwolf20.mininggadgets.common.items; +package com.direwolf20.mininggadgets.common.capabilities; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.energy.EnergyStorage; +import net.neoforged.neoforge.energy.EnergyStorage; + public class EnergisedItem extends EnergyStorage { private ItemStack stack; diff --git a/src/main/java/com/direwolf20/mininggadgets/common/collectors/ShapelessWalker.java b/src/main/java/com/direwolf20/mininggadgets/common/collectors/ShapelessWalker.java index a143bcd1..25323a30 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/collectors/ShapelessWalker.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/collectors/ShapelessWalker.java @@ -1,10 +1,10 @@ package com.direwolf20.mininggadgets.common.collectors; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; +import com.direwolf20.mininggadgets.setup.Registration; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import java.util.*; @@ -64,7 +64,7 @@ private void walk(Level level, BlockPos pos, HashSet known) { BlockPos ptr = openSet.pop(); Block block = level.getBlockState(ptr).getBlock(); - if ((block == Blocks.OAK_LOG || block == ModBlocks.RENDER_BLOCK.get()) && known.add(ptr)) { + if ((block == Blocks.OAK_LOG || block == Registration.RENDER_BLOCK.get()) && known.add(ptr)) { if (known.size() >= 60) { return; } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/containers/FilterContainer.java b/src/main/java/com/direwolf20/mininggadgets/common/containers/FilterContainer.java index 42e841b9..355dc4c2 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/containers/FilterContainer.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/containers/FilterContainer.java @@ -2,25 +2,28 @@ import com.direwolf20.mininggadgets.common.items.MiningGadget; import com.direwolf20.mininggadgets.common.items.UpgradeCard; -import net.minecraft.world.entity.player.Player; +import com.direwolf20.mininggadgets.setup.Registration; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ClickType; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemStackHandler; -import net.minecraftforge.items.SlotItemHandler; -import net.minecraftforge.items.wrapper.InvWrapper; +import net.neoforged.neoforge.items.IItemHandler; +import net.neoforged.neoforge.items.ItemStackHandler; +import net.neoforged.neoforge.items.SlotItemHandler; +import net.neoforged.neoforge.items.wrapper.InvWrapper; + public class FilterContainer extends AbstractContainerMenu { - FilterContainer(int windowId, Inventory playerInventory, FriendlyByteBuf buf) { + public FilterContainer(int windowId, Inventory playerInventory, FriendlyByteBuf extraData) { this(windowId, playerInventory, new ItemStackHandler(30)); + } public FilterContainer(int windowId, Inventory playerInventory, IItemHandler ghostInventory) { - super(ModContainers.FILTER_CONTAINER.get(), windowId); + super(Registration.FILTER_CONTAINER.get(), windowId); this.setup(new InvWrapper(playerInventory), ghostInventory); } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/containers/GhostSlot.java b/src/main/java/com/direwolf20/mininggadgets/common/containers/GhostSlot.java index 4d4b5134..22a79210 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/containers/GhostSlot.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/containers/GhostSlot.java @@ -3,8 +3,8 @@ import com.direwolf20.mininggadgets.common.items.MiningGadget; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.SlotItemHandler; +import net.neoforged.neoforge.items.IItemHandler; +import net.neoforged.neoforge.items.SlotItemHandler; import javax.annotation.Nonnull; diff --git a/src/main/java/com/direwolf20/mininggadgets/common/containers/ModContainers.java b/src/main/java/com/direwolf20/mininggadgets/common/containers/ModContainers.java deleted file mode 100644 index 955665c3..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/containers/ModContainers.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.direwolf20.mininggadgets.common.containers; - -import com.direwolf20.mininggadgets.common.MiningGadgets; -import com.direwolf20.mininggadgets.client.ClientSetup; -import net.minecraft.world.inventory.MenuType; -import net.minecraftforge.common.extensions.IForgeMenuType; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; - -/** - * @implNote Container screens are registered in {@link ClientSetup#setup()} - */ -public class ModContainers { - public static final DeferredRegister> CONTAINERS = DeferredRegister.create(ForgeRegistries.MENU_TYPES, MiningGadgets.MOD_ID); - - // Our containers - public static final RegistryObject> MODIFICATIONTABLE_CONTAINER - = CONTAINERS.register("modificationtable", () -> IForgeMenuType.create(ModificationTableContainer::new)); - - public static final RegistryObject> FILTER_CONTAINER - = CONTAINERS.register("filter_container", () -> IForgeMenuType.create(FilterContainer::new)); -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/containers/ModificationTableCommands.java b/src/main/java/com/direwolf20/mininggadgets/common/containers/ModificationTableCommands.java index 5f1b767c..a6595c83 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/containers/ModificationTableCommands.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/containers/ModificationTableCommands.java @@ -1,7 +1,7 @@ package com.direwolf20.mininggadgets.common.containers; -import com.direwolf20.mininggadgets.common.items.EnergisedItem; +import com.direwolf20.mininggadgets.common.capabilities.EnergisedItem; import com.direwolf20.mininggadgets.common.items.MiningGadget; import com.direwolf20.mininggadgets.common.items.UpgradeCard; import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; @@ -11,7 +11,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.neoforged.neoforge.capabilities.Capabilities; import java.util.List; @@ -56,12 +56,12 @@ public static boolean insertButton(ModificationTableContainer container, ItemSta // Did we just insert a battery upgrade? if(card.getBaseName().equals(Upgrade.BATTERY_1.getBaseName())) { UpgradeBatteryLevels.getBatteryByLevel(card.getTier()).ifPresent(power -> { - laser.getCapability(ForgeCapabilities.ENERGY).ifPresent(e -> { - ((EnergisedItem) e).updatedMaxEnergy(power.getPower()); - if (card.getTier() == Upgrade.BATTERY_CREATIVE.getTier()) { - e.receiveEnergy(e.getMaxEnergyStored() - e.getEnergyStored(), false); - } - }); + var cap = laser.getCapability(Capabilities.EnergyStorage.ITEM); + if (cap == null) return; + ((EnergisedItem) cap).updatedMaxEnergy(power.getPower()); + if (card.getTier() == Upgrade.BATTERY_CREATIVE.getTier()) { + cap.receiveEnergy(cap.getMaxEnergyStored() - cap.getEnergyStored(), false); + } }); MiningProperties.setBatteryTier(laser, card.getTier()); } @@ -106,7 +106,9 @@ public static void extractButton(ModificationTableContainer container, ServerPla if (upgrade.getBaseName().equals(Upgrade.BATTERY_1.getBaseName())) { MiningProperties.setBatteryTier(laser, 0); - laser.getCapability(ForgeCapabilities.ENERGY).ifPresent(e -> ((EnergisedItem) e).updatedMaxEnergy(UpgradeBatteryLevels.BATTERY.getPower())); + var cap = laser.getCapability(Capabilities.EnergyStorage.ITEM); + if (cap == null) return; + ((EnergisedItem) cap).updatedMaxEnergy(UpgradeBatteryLevels.BATTERY.getPower()); } }); } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/containers/ModificationTableContainer.java b/src/main/java/com/direwolf20/mininggadgets/common/containers/ModificationTableContainer.java index ad58260a..6513b39d 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/containers/ModificationTableContainer.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/containers/ModificationTableContainer.java @@ -1,10 +1,10 @@ package com.direwolf20.mininggadgets.common.containers; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; import com.direwolf20.mininggadgets.common.items.MiningGadget; import com.direwolf20.mininggadgets.common.items.UpgradeCard; import com.direwolf20.mininggadgets.common.items.upgrade.Upgrade; import com.direwolf20.mininggadgets.common.items.upgrade.UpgradeTools; +import com.direwolf20.mininggadgets.setup.Registration; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; @@ -16,10 +16,10 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.SlotItemHandler; -import net.minecraftforge.items.wrapper.InvWrapper; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.items.IItemHandler; +import net.neoforged.neoforge.items.SlotItemHandler; +import net.neoforged.neoforge.items.wrapper.InvWrapper; import java.util.ArrayList; import java.util.List; @@ -31,7 +31,7 @@ public class ModificationTableContainer extends AbstractContainerMenu { private List upgradesCache = new ArrayList<>(); public ModificationTableContainer(int windowId, Inventory playerInventory, FriendlyByteBuf extraData) { - super(ModContainers.MODIFICATIONTABLE_CONTAINER.get(), windowId); + super(Registration.MODIFICATIONTABLE_CONTAINER.get(), windowId); this.tileEntity = Minecraft.getInstance().level.getBlockEntity(extraData.readBlockPos()); this.playerInventory = new InvWrapper(playerInventory); @@ -41,7 +41,7 @@ public ModificationTableContainer(int windowId, Inventory playerInventory, Frien } public ModificationTableContainer(int windowId, Level world, BlockPos pos, Inventory playerInventory) { - super(ModContainers.MODIFICATIONTABLE_CONTAINER.get(), windowId); + super(Registration.MODIFICATIONTABLE_CONTAINER.get(), windowId); this.tileEntity = world.getBlockEntity(pos); this.playerInventory = new InvWrapper(playerInventory); @@ -51,13 +51,14 @@ public ModificationTableContainer(int windowId, Level world, BlockPos pos, Inven @Override public boolean stillValid(Player playerIn) { - return stillValid(ContainerLevelAccess.create(getTE().getLevel(), tileEntity.getBlockPos()), playerIn, ModBlocks.MODIFICATION_TABLE.get()); + return stillValid(ContainerLevelAccess.create(getTE().getLevel(), tileEntity.getBlockPos()), playerIn, Registration.MODIFICATION_TABLE.get()); } private void setupContainerSlots() { - this.getTE().getCapability(ForgeCapabilities.ITEM_HANDLER).ifPresent(h -> { - addSlot(new WatchedSlot(h, 0, -16, 84, this::updateUpgradeCache)); - }); + var cap = this.tileEntity.getLevel().getCapability(Capabilities.ItemHandler.BLOCK, tileEntity.getBlockPos(), tileEntity.getBlockState(), tileEntity, null); + if (cap != null) { + addSlot(new WatchedSlot(cap, 0, -16, 84, this::updateUpgradeCache)); + } } private void updateUpgradeCache(int index) { diff --git a/src/main/java/com/direwolf20/mininggadgets/common/containers/ModificationTableHandler.java b/src/main/java/com/direwolf20/mininggadgets/common/containers/ModificationTableHandler.java new file mode 100644 index 00000000..6efefd05 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/containers/ModificationTableHandler.java @@ -0,0 +1,32 @@ +package com.direwolf20.mininggadgets.common.containers; + +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.tiles.ModificationTableTileEntity; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.items.ItemStackHandler; + +import javax.annotation.Nonnull; + +public class ModificationTableHandler extends ItemStackHandler { + ModificationTableTileEntity blockEntity; + + public ModificationTableHandler(int size) { + super(size); + } + + public ModificationTableHandler(int size, ModificationTableTileEntity blockEntity) { + super(size); + this.blockEntity = blockEntity; + } + + @Override + public boolean isItemValid(int slot, @Nonnull ItemStack stack) { + return slot == 0 && stack.getItem() instanceof MiningGadget; + } + + @Override + protected void onContentsChanged(int slot) { + if (blockEntity != null) + blockEntity.setChanged(); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/containers/WatchedSlot.java b/src/main/java/com/direwolf20/mininggadgets/common/containers/WatchedSlot.java index d7136cd5..64341f80 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/containers/WatchedSlot.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/containers/WatchedSlot.java @@ -1,7 +1,7 @@ package com.direwolf20.mininggadgets.common.containers; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.SlotItemHandler; +import net.neoforged.neoforge.items.IItemHandler; +import net.neoforged.neoforge.items.SlotItemHandler; import java.util.function.Consumer; diff --git a/src/main/java/com/direwolf20/mininggadgets/common/data/Generator.java b/src/main/java/com/direwolf20/mininggadgets/common/data/Generator.java index a9a60094..6b9dcfbe 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/data/Generator.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/data/Generator.java @@ -1,19 +1,23 @@ package com.direwolf20.mininggadgets.common.data; import com.direwolf20.mininggadgets.common.MiningGadgets; -import net.minecraftforge.data.event.GatherDataEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.data.event.GatherDataEvent; + @Mod.EventBusSubscriber(modid = MiningGadgets.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public class Generator { @SubscribeEvent public static void gatherData(GatherDataEvent event) { - var includeServer = event.includeServer(); - var includeClient = event.includeClient(); - var generator = event.getGenerator(); - var helper = event.getExistingFileHelper(); - var packOutput = event.getGenerator().getPackOutput(); + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + boolean includeServer = event.includeServer(); + boolean includeClient = event.includeClient(); + ExistingFileHelper helper = event.getExistingFileHelper(); // Client generator.addProvider(includeClient, new GeneratorLanguage(packOutput)); diff --git a/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorBlockStates.java b/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorBlockStates.java index 3f017237..ba319b28 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorBlockStates.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorBlockStates.java @@ -1,13 +1,14 @@ package com.direwolf20.mininggadgets.common.data; import com.direwolf20.mininggadgets.common.MiningGadgets; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; +import com.direwolf20.mininggadgets.setup.Registration; import net.minecraft.data.PackOutput; import net.minecraft.world.level.block.Block; -import net.minecraftforge.client.model.generators.BlockStateProvider; -import net.minecraftforge.client.model.generators.ConfiguredModel; -import net.minecraftforge.client.model.generators.ModelFile; -import net.minecraftforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.client.model.generators.BlockStateProvider; +import net.neoforged.neoforge.client.model.generators.ConfiguredModel; +import net.neoforged.neoforge.client.model.generators.ModelFile; +import net.neoforged.neoforge.common.data.ExistingFileHelper; + public class GeneratorBlockStates extends BlockStateProvider { public GeneratorBlockStates(PackOutput output, ExistingFileHelper exFileHelper) { @@ -24,11 +25,11 @@ protected void registerStatesAndModels() { // modLoc("block/modificationtable_top") // ).texture("particle", modLoc("block/modificationtable_side"))); - horizontalBlock(ModBlocks.MODIFICATION_TABLE.get(), new ModelFile.UncheckedModelFile(modLoc("block/modificationtable"))); + horizontalBlock(Registration.MODIFICATION_TABLE.get(), new ModelFile.UncheckedModelFile(modLoc("block/modificationtable"))); // Render block - buildCubeAll(ModBlocks.RENDER_BLOCK.get()); - buildCubeAll(ModBlocks.MINERS_LIGHT.get()); + buildCubeAll(Registration.RENDER_BLOCK.get()); + buildCubeAll(Registration.MINERS_LIGHT.get()); } private void buildCubeAll(Block block) { diff --git a/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorBlockTags.java b/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorBlockTags.java index 31aad6c9..3fb0959f 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorBlockTags.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorBlockTags.java @@ -1,13 +1,13 @@ package com.direwolf20.mininggadgets.common.data; import com.direwolf20.mininggadgets.common.MiningGadgets; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; +import com.direwolf20.mininggadgets.setup.Registration; import net.minecraft.core.HolderLookup; import net.minecraft.data.DataGenerator; import net.minecraft.data.PackOutput; import net.minecraft.tags.BlockTags; -import net.minecraftforge.common.data.BlockTagsProvider; -import net.minecraftforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.common.data.BlockTagsProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; import java.util.concurrent.CompletableFuture; @@ -19,6 +19,6 @@ public GeneratorBlockTags(PackOutput output, CompletableFuture { + Registration.UPGRADE_ITEMS.getEntries().forEach(item -> { String path = item.getId().getPath(); singleTexture(path, mcLoc("item/handheld"), "layer0", modLoc("item/" + path)); }); // Our block items - registerBlockModel(ModBlocks.MODIFICATION_TABLE); - registerBlockModel(ModBlocks.MINERS_LIGHT); + registerBlockModel(Registration.MODIFICATION_TABLE); + registerBlockModel(Registration.MINERS_LIGHT); } - private void registerBlockModel(RegistryObject block) { + private void registerBlockModel(DeferredHolder block) { String path = block.getId().getPath(); getBuilder(path).parent(new ModelFile.UncheckedModelFile(modLoc("block/" + path))); } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorLanguage.java b/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorLanguage.java index 55ccb6e4..c9bdc83a 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorLanguage.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorLanguage.java @@ -1,10 +1,10 @@ package com.direwolf20.mininggadgets.common.data; import com.direwolf20.mininggadgets.common.MiningGadgets; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; -import com.direwolf20.mininggadgets.common.items.ModItems; +import com.direwolf20.mininggadgets.setup.Registration; import net.minecraft.data.PackOutput; -import net.minecraftforge.common.data.LanguageProvider; +import net.neoforged.neoforge.common.data.LanguageProvider; + public class GeneratorLanguage extends LanguageProvider { public GeneratorLanguage(PackOutput output) { @@ -14,40 +14,40 @@ public GeneratorLanguage(PackOutput output) { @Override protected void addTranslations() { add("itemGroup.mininggadgets", "Mining Gadgets"); - addItem(ModItems.MININGGADGET, "Mining Gadget MK3"); - addItem(ModItems.MININGGADGET_SIMPLE, "Mining Gadget MK1"); - addItem(ModItems.MININGGADGET_FANCY, "Mining Gadget MK2"); - addItem(ModItems.UPGRADE_EMPTY, "Blank Upgrade Module"); + addItem(Registration.MININGGADGET, "Mining Gadget MK3"); + addItem(Registration.MININGGADGET_SIMPLE, "Mining Gadget MK1"); + addItem(Registration.MININGGADGET_FANCY, "Mining Gadget MK2"); + addItem(Registration.UPGRADE_EMPTY, "Blank Upgrade Module"); // This should always match the start of below upgrade names. I use this // to actively replace the start of the word. (it's an exact search so this should // still work nicely in other languages. It's rare we need the Upgrade: prefix // for most of the gui in the mod so it's purely a gui hack. addPrefixed("upgrade.replacement", "Upgrade: "); - addItem(ModItems.SILK, "Upgrade: Silk touch"); - addItem(ModItems.FREEZING, "Upgrade: Freezing"); - addItem(ModItems.LIGHT_PLACER, "Upgrade: Light Placer"); - addItem(ModItems.MAGNET, "Upgrade: Magnet"); - addItem(ModItems.SIZE_1, "Upgrade: 3x3"); - addItem(ModItems.SIZE_2, "Upgrade: 5x5"); - addItem(ModItems.SIZE_3, "Upgrade: 7x7"); + addItem(Registration.SILK, "Upgrade: Silk touch"); + addItem(Registration.FREEZING, "Upgrade: Freezing"); + addItem(Registration.LIGHT_PLACER, "Upgrade: Light Placer"); + addItem(Registration.MAGNET, "Upgrade: Magnet"); + addItem(Registration.SIZE_1, "Upgrade: 3x3"); + addItem(Registration.SIZE_2, "Upgrade: 5x5"); + addItem(Registration.SIZE_3, "Upgrade: 7x7"); // addItem(ModItems.PAVER, "Upgrade: Paver"); - addItem(ModItems.VOID_JUNK, "Upgrade: Void Junk"); - addItem(ModItems.FORTUNE_1, "Upgrade: Fortune, Tier 1"); - addItem(ModItems.FORTUNE_2, "Upgrade: Fortune, Tier 2"); - addItem(ModItems.FORTUNE_3, "Upgrade: Fortune, Tier 3"); - addItem(ModItems.RANGE_1, "Upgrade: Range, Tier 1"); - addItem(ModItems.RANGE_2, "Upgrade: Range, Tier 2"); - addItem(ModItems.RANGE_3, "Upgrade: Range, Tier 3"); - addItem(ModItems.EFFICIENCY_1, "Upgrade: Efficiency, Tier 1"); - addItem(ModItems.EFFICIENCY_2, "Upgrade: Efficiency, Tier 2"); - addItem(ModItems.EFFICIENCY_3, "Upgrade: Efficiency, Tier 3"); - addItem(ModItems.EFFICIENCY_4, "Upgrade: Efficiency, Tier 4"); - addItem(ModItems.EFFICIENCY_5, "Upgrade: Efficiency, Tier 5"); - addItem(ModItems.BATTERY_1, "Upgrade: Battery, Tier 1"); - addItem(ModItems.BATTERY_2, "Upgrade: Battery, Tier 2"); - addItem(ModItems.BATTERY_3, "Upgrade: Battery, Tier 3"); - addItem(ModItems.BATTERY_CREATIVE, "Upgrade: Creative Battery"); + addItem(Registration.VOID_JUNK, "Upgrade: Void Junk"); + addItem(Registration.FORTUNE_1, "Upgrade: Fortune, Tier 1"); + addItem(Registration.FORTUNE_2, "Upgrade: Fortune, Tier 2"); + addItem(Registration.FORTUNE_3, "Upgrade: Fortune, Tier 3"); + addItem(Registration.RANGE_1, "Upgrade: Range, Tier 1"); + addItem(Registration.RANGE_2, "Upgrade: Range, Tier 2"); + addItem(Registration.RANGE_3, "Upgrade: Range, Tier 3"); + addItem(Registration.EFFICIENCY_1, "Upgrade: Efficiency, Tier 1"); + addItem(Registration.EFFICIENCY_2, "Upgrade: Efficiency, Tier 2"); + addItem(Registration.EFFICIENCY_3, "Upgrade: Efficiency, Tier 3"); + addItem(Registration.EFFICIENCY_4, "Upgrade: Efficiency, Tier 4"); + addItem(Registration.EFFICIENCY_5, "Upgrade: Efficiency, Tier 5"); + addItem(Registration.BATTERY_1, "Upgrade: Battery, Tier 1"); + addItem(Registration.BATTERY_2, "Upgrade: Battery, Tier 2"); + addItem(Registration.BATTERY_3, "Upgrade: Battery, Tier 3"); + addItem(Registration.BATTERY_CREATIVE, "Upgrade: Creative Battery"); // Upgrade tooltips :D add("tooltop.mininggadgets.empty", "Used to craft other upgrades"); @@ -64,9 +64,9 @@ protected void addTranslations() { add("tooltop.mininggadgets.paver", "Creates a path for you as you mine"); // Blocks - addBlock(ModBlocks.MINERS_LIGHT, "Miner's Light"); - addBlock(ModBlocks.RENDER_BLOCK, "Render Block (Don't use)"); - addBlock(ModBlocks.MODIFICATION_TABLE, "Modification Table"); + addBlock(Registration.MINERS_LIGHT, "Miner's Light"); + addBlock(Registration.RENDER_BLOCK, "Render Block (Don't use)"); + addBlock(Registration.MODIFICATION_TABLE, "Modification Table"); // Fixes oneProbe? Weird add("block.mininggadgets.renderblock.name", "What ever it wants to be!"); diff --git a/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorLoot.java b/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorLoot.java index 4f310b97..18d554c6 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorLoot.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorLoot.java @@ -1,6 +1,6 @@ package com.direwolf20.mininggadgets.common.data; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; +import com.direwolf20.mininggadgets.setup.Registration; import com.google.common.collect.ImmutableList; import net.minecraft.data.PackOutput; import net.minecraft.data.loot.BlockLootSubProvider; @@ -37,12 +37,12 @@ protected Blocks() { @Override protected void generate() { - this.dropSelf(ModBlocks.MODIFICATION_TABLE.get()); + this.dropSelf(Registration.MODIFICATION_TABLE.get()); } @Override protected Iterable getKnownBlocks() { - return Collections.singletonList(ModBlocks.MODIFICATION_TABLE.get()); + return Collections.singletonList(Registration.MODIFICATION_TABLE.get()); } } } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorRecipes.java b/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorRecipes.java index 8b2c871a..fba0a74d 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorRecipes.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/data/GeneratorRecipes.java @@ -1,15 +1,17 @@ package com.direwolf20.mininggadgets.common.data; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; +import com.direwolf20.mininggadgets.setup.Registration; import net.minecraft.data.PackOutput; -import net.minecraft.data.recipes.*; +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.data.recipes.RecipeOutput; +import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.data.recipes.ShapedRecipeBuilder; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Blocks; -import net.minecraftforge.common.Tags; +import net.neoforged.neoforge.common.Tags; +import org.jetbrains.annotations.NotNull; -import java.util.function.Consumer; - -import static com.direwolf20.mininggadgets.common.items.ModItems.*; +import static com.direwolf20.mininggadgets.setup.Registration.*; public class GeneratorRecipes extends RecipeProvider { public GeneratorRecipes(PackOutput output) { @@ -24,271 +26,271 @@ public GeneratorRecipes(PackOutput output) { */ @Override - protected void buildRecipes(Consumer consumer) { + protected void buildRecipes(@NotNull RecipeOutput recipeOutput) { ShapedRecipeBuilder.shaped(RecipeCategory.MISC, UPGRADE_EMPTY.get()) - .define('r', Tags.Items.DUSTS_REDSTONE) - .define('g', Tags.Items.GLASS_PANES) - .define('l', Tags.Items.GEMS_LAPIS) - .define('d', Tags.Items.GEMS_DIAMOND) - .pattern("rlr") - .pattern("dgd") - .pattern("rlr") - .unlockedBy("has_diamonds", has(Tags.Items.GEMS_DIAMOND)) - .save(consumer); + .define('r', Tags.Items.DUSTS_REDSTONE) + .define('g', Tags.Items.GLASS_PANES) + .define('l', Tags.Items.GEMS_LAPIS) + .define('d', Tags.Items.GEMS_DIAMOND) + .pattern("rlr") + .pattern("dgd") + .pattern("rlr") + .unlockedBy("has_diamonds", has(Tags.Items.GEMS_DIAMOND)) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, MININGGADGET.get()) - .define('u', UPGRADE_EMPTY.get()) - .define('r', Tags.Items.DUSTS_REDSTONE) - .define('i', Tags.Items.INGOTS_IRON) - .define('d', Tags.Items.GEMS_DIAMOND) - .define('g', Tags.Items.INGOTS_GOLD) - .pattern("dig") - .pattern("dur") - .pattern("dig") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('u', UPGRADE_EMPTY.get()) + .define('r', Tags.Items.DUSTS_REDSTONE) + .define('i', Tags.Items.INGOTS_IRON) + .define('d', Tags.Items.GEMS_DIAMOND) + .define('g', Tags.Items.INGOTS_GOLD) + .pattern("dig") + .pattern("dur") + .pattern("dig") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, MININGGADGET_SIMPLE.get()) - .define('u', UPGRADE_EMPTY.get()) - .define('r', Tags.Items.DUSTS_REDSTONE) - .define('i', Tags.Items.INGOTS_IRON) - .define('d', Tags.Items.GEMS_DIAMOND) - .define('g', Tags.Items.INGOTS_GOLD) - .pattern("dig") - .pattern("dur") - .pattern("dii") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('u', UPGRADE_EMPTY.get()) + .define('r', Tags.Items.DUSTS_REDSTONE) + .define('i', Tags.Items.INGOTS_IRON) + .define('d', Tags.Items.GEMS_DIAMOND) + .define('g', Tags.Items.INGOTS_GOLD) + .pattern("dig") + .pattern("dur") + .pattern("dii") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, MININGGADGET_FANCY.get()) - .define('u', UPGRADE_EMPTY.get()) - .define('r', Tags.Items.DUSTS_REDSTONE) - .define('i', Tags.Items.INGOTS_IRON) - .define('d', Tags.Items.GEMS_DIAMOND) - .define('g', Tags.Items.INGOTS_GOLD) - .pattern("dii") - .pattern("dur") - .pattern("dig") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); - - ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.MODIFICATION_TABLE.get()) - .define('r', Tags.Items.DUSTS_REDSTONE) - .define('u', UPGRADE_EMPTY.get()) - .define('i', Tags.Items.INGOTS_IRON) - .pattern("iii") - .pattern("rur") - .pattern("iii") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('u', UPGRADE_EMPTY.get()) + .define('r', Tags.Items.DUSTS_REDSTONE) + .define('i', Tags.Items.INGOTS_IRON) + .define('d', Tags.Items.GEMS_DIAMOND) + .define('g', Tags.Items.INGOTS_GOLD) + .pattern("dii") + .pattern("dur") + .pattern("dig") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); + + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, Registration.MODIFICATION_TABLE.get()) + .define('r', Tags.Items.DUSTS_REDSTONE) + .define('u', UPGRADE_EMPTY.get()) + .define('i', Tags.Items.INGOTS_IRON) + .pattern("iii") + .pattern("rur") + .pattern("iii") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, BATTERY_1.get()) - .define('q', Items.QUARTZ) - .define('u', UPGRADE_EMPTY.get()) - .pattern("qqq") - .pattern("quq") - .pattern("qqq") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('q', Items.QUARTZ) + .define('u', UPGRADE_EMPTY.get()) + .pattern("qqq") + .pattern("quq") + .pattern("qqq") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, BATTERY_2.get()) - .define('q', Items.QUARTZ) - .define('b', Items.QUARTZ_BLOCK) - .define('g', Tags.Items.INGOTS_IRON) - .define('u', BATTERY_1.get()) - .pattern("qbq") - .pattern("gug") - .pattern("qbq") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .unlockedBy("has_battery_1", has(BATTERY_1.get())) - .save(consumer); + .define('q', Items.QUARTZ) + .define('b', Items.QUARTZ_BLOCK) + .define('g', Tags.Items.INGOTS_IRON) + .define('u', BATTERY_1.get()) + .pattern("qbq") + .pattern("gug") + .pattern("qbq") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .unlockedBy("has_battery_1", has(BATTERY_1.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, BATTERY_3.get()) - .define('q', Items.QUARTZ) - .define('b', Items.QUARTZ_BLOCK) - .define('g', Tags.Items.INGOTS_GOLD) - .define('u', BATTERY_2.get()) - .pattern("bqb") - .pattern("gug") - .pattern("bqb") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .unlockedBy("has_battery_2", has(BATTERY_2.get())) - .save(consumer); + .define('q', Items.QUARTZ) + .define('b', Items.QUARTZ_BLOCK) + .define('g', Tags.Items.INGOTS_GOLD) + .define('u', BATTERY_2.get()) + .pattern("bqb") + .pattern("gug") + .pattern("bqb") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .unlockedBy("has_battery_2", has(BATTERY_2.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, EFFICIENCY_1.get()) - .define('r', Tags.Items.DUSTS_REDSTONE) - .define('u', UPGRADE_EMPTY.get()) - .pattern("rrr") - .pattern("rur") - .pattern("rrr") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('r', Tags.Items.DUSTS_REDSTONE) + .define('u', UPGRADE_EMPTY.get()) + .pattern("rrr") + .pattern("rur") + .pattern("rrr") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, EFFICIENCY_2.get()) - .define('r', Tags.Items.DUSTS_REDSTONE) - .define('u', EFFICIENCY_1.get()) - .define('b', Items.REDSTONE_BLOCK) - .pattern("rbr") - .pattern("rur") - .pattern("rbr") - .unlockedBy("has_efficiency_1", has(EFFICIENCY_1.get())) - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('r', Tags.Items.DUSTS_REDSTONE) + .define('u', EFFICIENCY_1.get()) + .define('b', Items.REDSTONE_BLOCK) + .pattern("rbr") + .pattern("rur") + .pattern("rbr") + .unlockedBy("has_efficiency_1", has(EFFICIENCY_1.get())) + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, EFFICIENCY_3.get()) - .define('r', Tags.Items.DUSTS_REDSTONE) - .define('u', EFFICIENCY_2.get()) - .define('b', Items.REDSTONE_BLOCK) - .pattern("rbr") - .pattern("bub") - .pattern("rbr") - .unlockedBy("has_efficiency_2", has(EFFICIENCY_2.get())) - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('r', Tags.Items.DUSTS_REDSTONE) + .define('u', EFFICIENCY_2.get()) + .define('b', Items.REDSTONE_BLOCK) + .pattern("rbr") + .pattern("bub") + .pattern("rbr") + .unlockedBy("has_efficiency_2", has(EFFICIENCY_2.get())) + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, EFFICIENCY_4.get()) - .define('r', Tags.Items.DUSTS_REDSTONE) - .define('u', EFFICIENCY_3.get()) - .define('b', Items.REDSTONE_BLOCK) - .pattern("brb") - .pattern("bub") - .pattern("brb") - .unlockedBy("has_efficiency_3", has(EFFICIENCY_3.get())) - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('r', Tags.Items.DUSTS_REDSTONE) + .define('u', EFFICIENCY_3.get()) + .define('b', Items.REDSTONE_BLOCK) + .pattern("brb") + .pattern("bub") + .pattern("brb") + .unlockedBy("has_efficiency_3", has(EFFICIENCY_3.get())) + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, EFFICIENCY_5.get()) - .define('u', EFFICIENCY_4.get()) - .define('b', Items.REDSTONE_BLOCK) - .pattern("bbb") - .pattern("bub") - .pattern("bbb") - .unlockedBy("has_efficiency_4", has(EFFICIENCY_4.get())) - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('u', EFFICIENCY_4.get()) + .define('b', Items.REDSTONE_BLOCK) + .pattern("bbb") + .pattern("bub") + .pattern("bbb") + .unlockedBy("has_efficiency_4", has(EFFICIENCY_4.get())) + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, FORTUNE_1.get()) - .define('l', Items.LAPIS_BLOCK) - .define('g', Items.IRON_BLOCK) - .define('u', UPGRADE_EMPTY.get()) - .pattern("lgl") - .pattern("lul") - .pattern("lgl") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('l', Items.LAPIS_BLOCK) + .define('g', Items.IRON_BLOCK) + .define('u', UPGRADE_EMPTY.get()) + .pattern("lgl") + .pattern("lul") + .pattern("lgl") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, FORTUNE_2.get()) - .define('l', Items.LAPIS_BLOCK) - .define('g', Items.GOLD_BLOCK) - .define('u', FORTUNE_1.get()) - .pattern("lgl") - .pattern("lul") - .pattern("lgl") - .unlockedBy("has_fortune_1", has(FORTUNE_1.get())) - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('l', Items.LAPIS_BLOCK) + .define('g', Items.GOLD_BLOCK) + .define('u', FORTUNE_1.get()) + .pattern("lgl") + .pattern("lul") + .pattern("lgl") + .unlockedBy("has_fortune_1", has(FORTUNE_1.get())) + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, FORTUNE_3.get()) - .define('l', Items.LAPIS_BLOCK) - .define('d', Items.DIAMOND) - .define('u', FORTUNE_2.get()) - .pattern("ldl") - .pattern("lul") - .pattern("ldl") - .unlockedBy("has_fortune_2", has(FORTUNE_2.get())) - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('l', Items.LAPIS_BLOCK) + .define('d', Items.DIAMOND) + .define('u', FORTUNE_2.get()) + .pattern("ldl") + .pattern("lul") + .pattern("ldl") + .unlockedBy("has_fortune_2", has(FORTUNE_2.get())) + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, RANGE_1.get()) - .define('l', Items.LAPIS_LAZULI) - .define('g', Items.GLASS) - .define('d', Items.DIAMOND) - .define('u', UPGRADE_EMPTY.get()) - .pattern("lgl") - .pattern("dud") - .pattern("lgl") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('l', Items.LAPIS_LAZULI) + .define('g', Items.GLASS) + .define('d', Items.DIAMOND) + .define('u', UPGRADE_EMPTY.get()) + .pattern("lgl") + .pattern("dud") + .pattern("lgl") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, RANGE_2.get()) - .define('l', Items.LAPIS_LAZULI) - .define('g', Items.GLASS) - .define('e', Items.EMERALD) - .define('u', RANGE_1.get()) - .pattern("lgl") - .pattern("eue") - .pattern("lgl") - .unlockedBy("has_range_1", has(RANGE_1.get())) - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('l', Items.LAPIS_LAZULI) + .define('g', Items.GLASS) + .define('e', Items.EMERALD) + .define('u', RANGE_1.get()) + .pattern("lgl") + .pattern("eue") + .pattern("lgl") + .unlockedBy("has_range_1", has(RANGE_1.get())) + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, RANGE_3.get()) - .define('l', Items.LAPIS_BLOCK) - .define('g', Items.GLASS) - .define('d', Items.DIAMOND_BLOCK) - .define('e', Items.EMERALD_BLOCK) - .define('u', RANGE_2.get()) - .pattern("lgl") - .pattern("eud") - .pattern("lgl") - .unlockedBy("has_range_2", has(RANGE_2.get())) - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('l', Items.LAPIS_BLOCK) + .define('g', Items.GLASS) + .define('d', Items.DIAMOND_BLOCK) + .define('e', Items.EMERALD_BLOCK) + .define('u', RANGE_2.get()) + .pattern("lgl") + .pattern("eud") + .pattern("lgl") + .unlockedBy("has_range_2", has(RANGE_2.get())) + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, FREEZING.get()) - .define('s', Items.SNOWBALL) - .define('u', UPGRADE_EMPTY.get()) - .pattern("sss") - .pattern("sus") - .pattern("sss") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('s', Items.SNOWBALL) + .define('u', UPGRADE_EMPTY.get()) + .pattern("sss") + .pattern("sus") + .pattern("sss") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, LIGHT_PLACER.get()) - .define('g', Items.GLOWSTONE_DUST) - .define('b', Items.GLOWSTONE) - .define('r', Items.REDSTONE_LAMP) - .define('a', Items.LANTERN) - .define('u', UPGRADE_EMPTY.get()) - .pattern("ara") - .pattern("bub") - .pattern("grg") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('g', Items.GLOWSTONE_DUST) + .define('b', Items.GLOWSTONE) + .define('r', Items.REDSTONE_LAMP) + .define('a', Items.LANTERN) + .define('u', UPGRADE_EMPTY.get()) + .pattern("ara") + .pattern("bub") + .pattern("grg") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, MAGNET.get()) - .define('r', Tags.Items.DUSTS_REDSTONE) - .define('u', UPGRADE_EMPTY.get()) - .define('i', Tags.Items.INGOTS_IRON) - .define('g', Tags.Items.INGOTS_GOLD) - .pattern("rgr") - .pattern("iui") - .pattern("rgr") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('r', Tags.Items.DUSTS_REDSTONE) + .define('u', UPGRADE_EMPTY.get()) + .define('i', Tags.Items.INGOTS_IRON) + .define('g', Tags.Items.INGOTS_GOLD) + .pattern("rgr") + .pattern("iui") + .pattern("rgr") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, SILK.get()) - .define('d', Items.GOLDEN_APPLE) - .define('s', Tags.Items.SLIMEBALLS) - .define('g', Tags.Items.INGOTS_GOLD) - .define('u', UPGRADE_EMPTY.get()) - .pattern("sds") - .pattern("gug") - .pattern("sss") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('d', Items.GOLDEN_APPLE) + .define('s', Tags.Items.SLIMEBALLS) + .define('g', Tags.Items.INGOTS_GOLD) + .define('u', UPGRADE_EMPTY.get()) + .pattern("sds") + .pattern("gug") + .pattern("sss") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, SIZE_1.get()) - .define('r', Items.REDSTONE_BLOCK) - .define('u', UPGRADE_EMPTY.get()) - .define('d', Items.DIAMOND_BLOCK) - .define('p', Items.DIAMOND_PICKAXE) - .define('e', Tags.Items.ENDER_PEARLS) - .pattern("rdr") - .pattern("eue") - .pattern("rpr") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('r', Items.REDSTONE_BLOCK) + .define('u', UPGRADE_EMPTY.get()) + .define('d', Items.DIAMOND_BLOCK) + .define('p', Items.DIAMOND_PICKAXE) + .define('e', Tags.Items.ENDER_PEARLS) + .pattern("rdr") + .pattern("eue") + .pattern("rpr") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, SIZE_2.get()) .define('n', Items.NETHERITE_BLOCK) @@ -301,7 +303,7 @@ protected void buildRecipes(Consumer consumer) { .pattern("epe") .unlockedBy("has_size_1", has(SIZE_1.get())) .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, SIZE_3.get()) .define('n', Items.NETHERITE_BLOCK) @@ -315,18 +317,18 @@ protected void buildRecipes(Consumer consumer) { .unlockedBy("has_size_2", has(SIZE_2.get())) .unlockedBy("has_size_1", has(SIZE_1.get())) .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .save(recipeOutput); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, VOID_JUNK.get()) - .define('r', Tags.Items.DUSTS_REDSTONE) - .define('u', UPGRADE_EMPTY.get()) - .define('o', Blocks.OBSIDIAN) - .define('e', Tags.Items.ENDER_PEARLS) - .pattern("ror") - .pattern("eue") - .pattern("ror") - .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) - .save(consumer); + .define('r', Tags.Items.DUSTS_REDSTONE) + .define('u', UPGRADE_EMPTY.get()) + .define('o', Blocks.OBSIDIAN) + .define('e', Tags.Items.ENDER_PEARLS) + .pattern("ror") + .pattern("eue") + .pattern("ror") + .unlockedBy("has_upgrade", has(UPGRADE_EMPTY.get())) + .save(recipeOutput); // ShapedRecipeBuilder.shapedRecipe(PAVER.get()) // .key('r', Tags.Items.DUSTS_REDSTONE) @@ -340,6 +342,6 @@ protected void buildRecipes(Consumer consumer) { // .patternLine("cuc") // .patternLine("lpw") // .addCriterion("has_upgrade", hasItem(UPGRADE_EMPTY.get())) - // .build(consumer); + // .build(recipeOutput); } } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/events/ServerTickHandler.java b/src/main/java/com/direwolf20/mininggadgets/common/events/ServerTickHandler.java index d1c6aa9c..74fc399b 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/events/ServerTickHandler.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/events/ServerTickHandler.java @@ -2,11 +2,11 @@ import com.direwolf20.mininggadgets.common.network.PacketHandler; import com.direwolf20.mininggadgets.common.network.packets.PacketDurabilitySync; -import net.minecraft.util.Tuple; import net.minecraft.core.BlockPos; +import net.minecraft.util.Tuple; import net.minecraft.world.level.Level; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.neoforge.event.TickEvent; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/direwolf20/mininggadgets/common/items/MiningGadget.java b/src/main/java/com/direwolf20/mininggadgets/common/items/MiningGadget.java index 823c4da9..7b8cb980 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/items/MiningGadget.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/items/MiningGadget.java @@ -3,10 +3,7 @@ import com.direwolf20.mininggadgets.client.OurKeys; import com.direwolf20.mininggadgets.client.particles.playerparticle.PlayerParticleData; import com.direwolf20.mininggadgets.client.screens.ModScreens; -import com.direwolf20.mininggadgets.common.Config; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; import com.direwolf20.mininggadgets.common.blocks.RenderBlock; -import com.direwolf20.mininggadgets.common.capabilities.CapabilityEnergyProvider; import com.direwolf20.mininggadgets.common.items.gadget.MiningCollect; import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; import com.direwolf20.mininggadgets.common.items.upgrade.Upgrade; @@ -16,6 +13,8 @@ import com.direwolf20.mininggadgets.common.tiles.RenderBlockTileEntity; import com.direwolf20.mininggadgets.common.util.MagicHelpers; import com.direwolf20.mininggadgets.common.util.VectorHelper; +import com.direwolf20.mininggadgets.setup.Config; +import com.direwolf20.mininggadgets.setup.Registration; import com.mojang.blaze3d.platform.InputConstants; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; @@ -49,13 +48,11 @@ import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.energy.IEnergyStorage; -import net.minecraftforge.event.level.BlockEvent; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.level.BlockEvent; import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; @@ -78,6 +75,10 @@ public MiningGadget() { this.energyCapacity = Config.MININGGADGET_MAXPOWER.get(); } + public int getEnergyMax() { + return Config.MININGGADGET_MAXPOWER.get(); + } + //TODO Add an override for onCreated and initialize all NBT Tags in it @Override @@ -102,24 +103,24 @@ public boolean isBarVisible(ItemStack stack) { if (MiningProperties.getBatteryTier(stack) == Upgrade.BATTERY_CREATIVE.getTier()) return false; - IEnergyStorage energy = stack.getCapability(ForgeCapabilities.ENERGY, null).orElse(null); + var energy = stack.getCapability(Capabilities.EnergyStorage.ITEM); + if (energy == null) { + return false; + } return (energy.getEnergyStored() < energy.getMaxEnergyStored()); } - @Nullable - @Override - public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundTag nbt) { - return new CapabilityEnergyProvider(stack, Config.MININGGADGET_MAXPOWER.get()); - } - @Override public int getBarWidth(ItemStack stack) { if (MiningProperties.getBatteryTier(stack) == Upgrade.BATTERY_CREATIVE.getTier()) return 13; - return stack.getCapability(ForgeCapabilities.ENERGY, null) - .map(e -> Math.min(13 * e.getEnergyStored() / e.getMaxEnergyStored(), 13)) - .orElse(0); + var energy = stack.getCapability(Capabilities.EnergyStorage.ITEM); + if (energy == null) { + return 13; + } + + return Math.min(13 * energy.getEnergyStored() / energy.getMaxEnergyStored(), 13); } @Override @@ -127,9 +128,11 @@ public int getBarColor(ItemStack stack) { if (MiningProperties.getBatteryTier(stack) == Upgrade.BATTERY_CREATIVE.getTier()) return Mth.color(0, 1, 0); - return stack.getCapability(ForgeCapabilities.ENERGY) - .map(e -> Mth.hsvToRgb(Math.max(0.0F, (float) e.getEnergyStored() / (float) e.getMaxEnergyStored()) / 3.0F, 1.0F, 1.0F)) - .orElse(super.getBarColor(stack)); + var energy = stack.getCapability(Capabilities.EnergyStorage.ITEM); + if (energy == null) { + super.getBarColor(stack); + } + return Mth.hsvToRgb(Math.max(0.0F, (float) energy.getEnergyStored() / (float) energy.getMaxEnergyStored()) / 3.0F, 1.0F, 1.0F); } @OnlyIn(Dist.CLIENT) @@ -162,13 +165,16 @@ public void appendHoverText(ItemStack stack, @Nullable Level world, List { - MutableComponent energyText = !sneakPressed - ? Component.translatable("mininggadgets.gadget.energy", MagicHelpers.tidyValue(energy.getEnergyStored()), MagicHelpers.tidyValue(energy.getMaxEnergyStored())) - : Component.translatable("mininggadgets.gadget.energy", String.format("%,d", energy.getEnergyStored()), String.format("%,d", energy.getMaxEnergyStored())); - tooltip.add(energyText.withStyle(ChatFormatting.GREEN)); - }); + var energy = stack.getCapability(Capabilities.EnergyStorage.ITEM); + if (energy == null) { + return; + } + + MutableComponent energyText = !sneakPressed + ? Component.translatable("mininggadgets.gadget.energy", MagicHelpers.tidyValue(energy.getEnergyStored()), MagicHelpers.tidyValue(energy.getMaxEnergyStored())) + : Component.translatable("mininggadgets.gadget.energy", String.format("%,d", energy.getEnergyStored()), String.format("%,d", energy.getMaxEnergyStored())); + tooltip.add(energyText.withStyle(ChatFormatting.GREEN)); + } // TODO: Use event @@ -201,7 +207,10 @@ public static boolean canMine(ItemStack tool) { if (MiningProperties.getBatteryTier(tool) == Upgrade.BATTERY_CREATIVE.getTier()) return true; - IEnergyStorage energy = tool.getCapability(ForgeCapabilities.ENERGY, null).orElse(null); + var energy = tool.getCapability(Capabilities.EnergyStorage.ITEM); + if (energy == null) { + return false; + } int cost = getEnergyCost(tool); var range = MiningProperties.getRange(tool); @@ -216,7 +225,7 @@ public static boolean canMineBlock(ItemStack tool, Level world, Player player, B if (!player.mayBuild() || !world.mayInteract(player, pos)) return false; - if (MinecraftForge.EVENT_BUS.post(new BlockEvent.BreakEvent(world, pos, state, player))) + if (NeoForge.EVENT_BUS.post(new BlockEvent.BreakEvent(world, pos, state, player)).isCanceled()) return false; return canMine(tool); @@ -432,6 +441,8 @@ else if (g > 0 && b == 1) // Server Side if (!world.isClientSide) { + var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM); + if (cap == null) return; // As all upgrade types with tiers contain the same name, we can check for a single // type in the enum and produce a result that we can then pull the tier from int efficiency = 0; @@ -450,7 +461,7 @@ else if (g > 0 && b == 1) return; } List gadgetUpgrades = UpgradeTools.getUpgrades(stack); - boolean placed = world.setBlockAndUpdate(coord, ModBlocks.RENDER_BLOCK.get().defaultBlockState()); + boolean placed = world.setBlockAndUpdate(coord, Registration.RENDER_BLOCK.get().defaultBlockState()); RenderBlockTileEntity te = (RenderBlockTileEntity) world.getBlockEntity(coord); if (!placed || te == null) { @@ -479,7 +490,7 @@ else if (g > 0 && b == 1) else*/ durability = durability - 1; if (durability <= 0) { - stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(e -> e.receiveEnergy(getEnergyCost(stack) * -1, false)); + cap.receiveEnergy(getEnergyCost(stack) * -1, false); if (MiningProperties.getPrecisionMode(stack)) { MiningProperties.setCanMine(stack, false); player.stopUsingItem(); @@ -505,11 +516,12 @@ else if (g > 0 && b == 1) BlockPos pos = lookingAt.getBlockPos().relative(side).relative(right, rightAmt); if (world.getMaxLocalRawBrightness(pos) <= 7 && world.getBlockState(pos).isAir()) { - int energy = stack.getCapability(ForgeCapabilities.ENERGY).map(IEnergyStorage::getEnergyStored).orElse(0); + int energy = cap.getEnergyStored(); if (energy > Config.UPGRADECOST_LIGHT.get()) { - world.setBlockAndUpdate(pos, ModBlocks.MINERS_LIGHT.get().defaultBlockState()); - stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(e -> e.receiveEnergy((Config.UPGRADECOST_LIGHT.get() * -1), false)); + world.setBlockAndUpdate(pos, Registration.MINERS_LIGHT.get().defaultBlockState()); + cap.receiveEnergy((Config.UPGRADECOST_LIGHT.get() * -1), false); } + } } } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/items/ModItems.java b/src/main/java/com/direwolf20/mininggadgets/common/items/ModItems.java deleted file mode 100644 index d897d985..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/items/ModItems.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.direwolf20.mininggadgets.common.items; - -import com.direwolf20.mininggadgets.common.MiningGadgets; -import com.direwolf20.mininggadgets.common.blocks.ModBlocks; -import com.direwolf20.mininggadgets.common.items.upgrade.Upgrade; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; - -public class ModItems { - // The item group is the creative tab it will go into. - public static final Item.Properties ITEM_GROUP = new Item.Properties(); - public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MiningGadgets.MOD_ID); - - // We have a separate register just to contain all of the upgrades for quick reference - public static final DeferredRegister UPGRADE_ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MiningGadgets.MOD_ID); - - // Items - public static final RegistryObject MININGGADGET_SIMPLE = ITEMS.register("mininggadget_simple", MiningGadget::new); - public static final RegistryObject MININGGADGET_FANCY = ITEMS.register("mininggadget_fancy", MiningGadget::new); - public static final RegistryObject MININGGADGET = ITEMS.register("mininggadget", MiningGadget::new); - - // Block items - public static final RegistryObject MODIFICATION_TABLE_ITEM = ITEMS.register("modificationtable", () -> new BlockItem(ModBlocks.MODIFICATION_TABLE.get(), ITEM_GROUP)); - public static final RegistryObject MINERS_LIGHT_ITEM = ITEMS.register("minerslight", () -> new BlockItem(ModBlocks.MINERS_LIGHT.get(), ITEM_GROUP.stacksTo(1))); - - /** - * Upgrades are a bit ugly.. Soz - * This one is actually kinda - */ - public static final RegistryObject UPGRADE_EMPTY = UPGRADE_ITEMS.register("upgrade_empty", () -> new UpgradeCard(Upgrade.EMPTY, 64)); - public static final RegistryObject SILK = UPGRADE_ITEMS.register("upgrade_silk", () -> new UpgradeCard(Upgrade.SILK)); - public static final RegistryObject VOID_JUNK = UPGRADE_ITEMS.register("upgrade_void_junk", () -> new UpgradeCard(Upgrade.VOID_JUNK)); - public static final RegistryObject MAGNET = UPGRADE_ITEMS.register("upgrade_magnet", () -> new UpgradeCard(Upgrade.MAGNET)); - public static final RegistryObject SIZE_1 = UPGRADE_ITEMS.register("upgrade_size_1", () -> new UpgradeCard(Upgrade.SIZE_1)); - public static final RegistryObject SIZE_2 = UPGRADE_ITEMS.register("upgrade_size_2", () -> new UpgradeCard(Upgrade.SIZE_2)); - public static final RegistryObject SIZE_3 = UPGRADE_ITEMS.register("upgrade_size_3", () -> new UpgradeCard(Upgrade.SIZE_3)); - public static final RegistryObject LIGHT_PLACER = UPGRADE_ITEMS.register("upgrade_light_placer", () -> new UpgradeCard(Upgrade.LIGHT_PLACER)); - public static final RegistryObject FREEZING = UPGRADE_ITEMS.register("upgrade_freezing", () -> new UpgradeCard(Upgrade.FREEZING)); - public static final RegistryObject FORTUNE_1 = UPGRADE_ITEMS.register("upgrade_fortune_1", () -> new UpgradeCard(Upgrade.FORTUNE_1)); - public static final RegistryObject FORTUNE_2 = UPGRADE_ITEMS.register("upgrade_fortune_2", () -> new UpgradeCard(Upgrade.FORTUNE_2)); - public static final RegistryObject FORTUNE_3 = UPGRADE_ITEMS.register("upgrade_fortune_3", () -> new UpgradeCard(Upgrade.FORTUNE_3)); - public static final RegistryObject RANGE_1 = UPGRADE_ITEMS.register("upgrade_range_1", () -> new UpgradeCard(Upgrade.RANGE_1)); - public static final RegistryObject RANGE_2 = UPGRADE_ITEMS.register("upgrade_range_2", () -> new UpgradeCard(Upgrade.RANGE_2)); - public static final RegistryObject RANGE_3 = UPGRADE_ITEMS.register("upgrade_range_3", () -> new UpgradeCard(Upgrade.RANGE_3)); - public static final RegistryObject BATTERY_1 = UPGRADE_ITEMS.register("upgrade_battery_1", () -> new UpgradeCard(Upgrade.BATTERY_1)); - public static final RegistryObject BATTERY_2 = UPGRADE_ITEMS.register("upgrade_battery_2", () -> new UpgradeCard(Upgrade.BATTERY_2)); - public static final RegistryObject BATTERY_3 = UPGRADE_ITEMS.register("upgrade_battery_3", () -> new UpgradeCard(Upgrade.BATTERY_3)); - public static final RegistryObject BATTERY_CREATIVE = UPGRADE_ITEMS.register("upgrade_battery_creative", () -> new UpgradeCard(Upgrade.BATTERY_CREATIVE)); - public static final RegistryObject EFFICIENCY_1 = UPGRADE_ITEMS.register("upgrade_efficiency_1", () -> new UpgradeCard(Upgrade.EFFICIENCY_1)); - public static final RegistryObject EFFICIENCY_2 = UPGRADE_ITEMS.register("upgrade_efficiency_2", () -> new UpgradeCard(Upgrade.EFFICIENCY_2)); - public static final RegistryObject EFFICIENCY_3 = UPGRADE_ITEMS.register("upgrade_efficiency_3", () -> new UpgradeCard(Upgrade.EFFICIENCY_3)); - public static final RegistryObject EFFICIENCY_4 = UPGRADE_ITEMS.register("upgrade_efficiency_4", () -> new UpgradeCard(Upgrade.EFFICIENCY_4)); - public static final RegistryObject EFFICIENCY_5 = UPGRADE_ITEMS.register("upgrade_efficiency_5", () -> new UpgradeCard(Upgrade.EFFICIENCY_5)); - // public static final RegistryObject PAVER = UPGRADE_ITEMS.register("upgrade_paver", Upgrade.PAVER::getCard); - -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/items/UpgradeCard.java b/src/main/java/com/direwolf20/mininggadgets/common/items/UpgradeCard.java index 8b7e6f53..85cd76ab 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/items/UpgradeCard.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/items/UpgradeCard.java @@ -1,9 +1,9 @@ package com.direwolf20.mininggadgets.common.items; -import com.direwolf20.mininggadgets.common.Config; import com.direwolf20.mininggadgets.common.items.upgrade.Upgrade; import com.direwolf20.mininggadgets.common.items.upgrade.UpgradeBatteryLevels; import com.direwolf20.mininggadgets.common.util.MagicHelpers; +import com.direwolf20.mininggadgets.setup.Config; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.world.item.Item; diff --git a/src/main/java/com/direwolf20/mininggadgets/common/items/upgrade/Upgrade.java b/src/main/java/com/direwolf20/mininggadgets/common/items/upgrade/Upgrade.java index 4841684f..c979fe5e 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/items/upgrade/Upgrade.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/items/upgrade/Upgrade.java @@ -1,10 +1,11 @@ package com.direwolf20.mininggadgets.common.items.upgrade; -import com.direwolf20.mininggadgets.common.Config; import com.direwolf20.mininggadgets.common.MiningGadgets; -import com.direwolf20.mininggadgets.common.items.ModItems; +import com.direwolf20.mininggadgets.common.items.UpgradeCard; +import com.direwolf20.mininggadgets.setup.Config; +import com.direwolf20.mininggadgets.setup.Registration; import net.minecraft.world.item.Item; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.neoforge.registries.DeferredHolder; import java.util.function.Supplier; @@ -23,48 +24,48 @@ */ public enum Upgrade { //Blank - EMPTY("empty", ModItems.UPGRADE_EMPTY, () -> 0, false), + EMPTY("empty", Registration.UPGRADE_EMPTY, () -> 0, false), - SILK("silk", ModItems.SILK, () -> Config.UPGRADECOST_SILKTOUCH.get(), true), - VOID_JUNK("void_junk", ModItems.VOID_JUNK, () -> Config.UPGRADECOST_VOID.get()), - MAGNET("magnet", ModItems.MAGNET, () -> Config.UPGRADECOST_MAGNET.get()), - FREEZING("freezing", ModItems.FREEZING, () -> 0), // applied at operation based on config. this isn't ideal - LIGHT_PLACER("light_placer", ModItems.LIGHT_PLACER, () -> 0), // applied at operation based on config. this isn't ideal + SILK("silk", Registration.SILK, () -> Config.UPGRADECOST_SILKTOUCH.get(), true), + VOID_JUNK("void_junk", Registration.VOID_JUNK, () -> Config.UPGRADECOST_VOID.get()), + MAGNET("magnet", Registration.MAGNET, () -> Config.UPGRADECOST_MAGNET.get()), + FREEZING("freezing", Registration.FREEZING, () -> 0), // applied at operation based on config. this isn't ideal + LIGHT_PLACER("light_placer", Registration.LIGHT_PLACER, () -> 0), // applied at operation based on config. this isn't ideal // Tiered - SIZE_1("size_1", ModItems.SIZE_1, 1, () -> 0), // 3x3 - SIZE_2("size_2", ModItems.SIZE_2, 2, () -> 0), // 5x5 - SIZE_3("size_3", ModItems.SIZE_3, 3, () -> 0), // 7x7 + SIZE_1("size_1", Registration.SIZE_1, 1, () -> 0), // 3x3 + SIZE_2("size_2", Registration.SIZE_2, 2, () -> 0), // 5x5 + SIZE_3("size_3", Registration.SIZE_3, 3, () -> 0), // 7x7 - FORTUNE_1("fortune_1", ModItems.FORTUNE_1, 1, () -> Config.UPGRADECOST_FORTUNE1.get(), true), - FORTUNE_2("fortune_2", ModItems.FORTUNE_2, 2, () -> Config.UPGRADECOST_FORTUNE2.get(), true), - FORTUNE_3("fortune_3", ModItems.FORTUNE_3, 3, () -> Config.UPGRADECOST_FORTUNE3.get(), true), + FORTUNE_1("fortune_1", Registration.FORTUNE_1, 1, () -> Config.UPGRADECOST_FORTUNE1.get(), true), + FORTUNE_2("fortune_2", Registration.FORTUNE_2, 2, () -> Config.UPGRADECOST_FORTUNE2.get(), true), + FORTUNE_3("fortune_3", Registration.FORTUNE_3, 3, () -> Config.UPGRADECOST_FORTUNE3.get(), true), - BATTERY_1("battery_1", ModItems.BATTERY_1, 1, () -> 0), - BATTERY_2("battery_2", ModItems.BATTERY_2, 2, () -> 0), - BATTERY_3("battery_3", ModItems.BATTERY_3, 3, () -> 0), - BATTERY_CREATIVE("battery_creative", ModItems.BATTERY_CREATIVE, 4, () -> 0), + BATTERY_1("battery_1", Registration.BATTERY_1, 1, () -> 0), + BATTERY_2("battery_2", Registration.BATTERY_2, 2, () -> 0), + BATTERY_3("battery_3", Registration.BATTERY_3, 3, () -> 0), + BATTERY_CREATIVE("battery_creative", Registration.BATTERY_CREATIVE, 4, () -> 0), - RANGE_1("range_1", ModItems.RANGE_1, 1, () -> 0), - RANGE_2("range_2", ModItems.RANGE_2, 2, () -> 0), - RANGE_3("range_3", ModItems.RANGE_3, 3, () -> 0), + RANGE_1("range_1", Registration.RANGE_1, 1, () -> 0), + RANGE_2("range_2", Registration.RANGE_2, 2, () -> 0), + RANGE_3("range_3", Registration.RANGE_3, 3, () -> 0), - EFFICIENCY_1("efficiency_1", ModItems.EFFICIENCY_1, 1, () -> Config.UPGRADECOST_EFFICIENCY1.get(), true), - EFFICIENCY_2("efficiency_2", ModItems.EFFICIENCY_2, 2, () -> Config.UPGRADECOST_EFFICIENCY2.get(), true), - EFFICIENCY_3("efficiency_3", ModItems.EFFICIENCY_3, 3, () -> Config.UPGRADECOST_EFFICIENCY3.get(), true), - EFFICIENCY_4("efficiency_4", ModItems.EFFICIENCY_4, 4, () -> Config.UPGRADECOST_EFFICIENCY4.get(), true), - EFFICIENCY_5("efficiency_5", ModItems.EFFICIENCY_5, 5, () -> Config.UPGRADECOST_EFFICIENCY5.get(), true); + EFFICIENCY_1("efficiency_1", Registration.EFFICIENCY_1, 1, () -> Config.UPGRADECOST_EFFICIENCY1.get(), true), + EFFICIENCY_2("efficiency_2", Registration.EFFICIENCY_2, 2, () -> Config.UPGRADECOST_EFFICIENCY2.get(), true), + EFFICIENCY_3("efficiency_3", Registration.EFFICIENCY_3, 3, () -> Config.UPGRADECOST_EFFICIENCY3.get(), true), + EFFICIENCY_4("efficiency_4", Registration.EFFICIENCY_4, 4, () -> Config.UPGRADECOST_EFFICIENCY4.get(), true), + EFFICIENCY_5("efficiency_5", Registration.EFFICIENCY_5, 5, () -> Config.UPGRADECOST_EFFICIENCY5.get(), true); private final String name; private final String baseName; - private final RegistryObject card; + private final DeferredHolder card; private final int tier; private final Supplier costPerBlock; private boolean active = true; private final boolean isToggleable; private final String toolTip; - Upgrade(String name, RegistryObject itemCard, int tier, Supplier costPerBlock, boolean isToggleable) { + Upgrade(String name, DeferredHolder itemCard, int tier, Supplier costPerBlock, boolean isToggleable) { this.name = name; this.tier = tier; this.costPerBlock = costPerBlock; @@ -74,15 +75,15 @@ public enum Upgrade { this.toolTip = "tooltop.mininggadgets." + this.baseName; } - Upgrade(String name, RegistryObject itemCard, int tier, Supplier costPerBlock) { + Upgrade(String name, DeferredHolder itemCard, int tier, Supplier costPerBlock) { this(name, itemCard, tier, costPerBlock, false); } - Upgrade(String name, RegistryObject itemCard, Supplier costPerBlock) { + Upgrade(String name, DeferredHolder itemCard, Supplier costPerBlock) { this(name, itemCard, -1, costPerBlock, true); } - Upgrade(String name, RegistryObject itemCard, Supplier costPerBlock, boolean isToggleable) { + Upgrade(String name, DeferredHolder itemCard, Supplier costPerBlock, boolean isToggleable) { this(name, itemCard, -1, costPerBlock, isToggleable); } @@ -90,7 +91,7 @@ public String getName() { return name; } - public RegistryObject getCardItem() { + public DeferredHolder getCardItem() { return card; } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/items/upgrade/UpgradeBatteryLevels.java b/src/main/java/com/direwolf20/mininggadgets/common/items/upgrade/UpgradeBatteryLevels.java index 4ed57c20..cb040fcf 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/items/upgrade/UpgradeBatteryLevels.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/items/upgrade/UpgradeBatteryLevels.java @@ -1,6 +1,6 @@ package com.direwolf20.mininggadgets.common.items.upgrade; -import com.direwolf20.mininggadgets.common.Config; +import com.direwolf20.mininggadgets.setup.Config; import java.util.Arrays; import java.util.Optional; diff --git a/src/main/java/com/direwolf20/mininggadgets/common/items/upgrade/UpgradeTools.java b/src/main/java/com/direwolf20/mininggadgets/common/items/upgrade/UpgradeTools.java index 86297854..4b9ffcd4 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/items/upgrade/UpgradeTools.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/items/upgrade/UpgradeTools.java @@ -7,7 +7,7 @@ import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.ForgeI18n; +import net.neoforged.neoforge.common.I18nExtension; import javax.annotation.Nullable; import java.util.ArrayList; @@ -231,7 +231,7 @@ public static int getMaxBeamRange(int tier) { * @return A formatted string of the Upgrade without it's `Upgrade:` prefix */ public static Component getName(Upgrade upgrade) { - return Component.literal(ForgeI18n.parseMessage(upgrade.getLocal()).replace(ForgeI18n.parseMessage(upgrade.getLocalReplacement()), "")); + return Component.literal(I18nExtension.parseMessage(upgrade.getLocal()).replace(I18nExtension.parseMessage(upgrade.getLocalReplacement()), "")); } public static int getMaxMiningRange(int tier) { diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/PacketHandler.java b/src/main/java/com/direwolf20/mininggadgets/common/network/PacketHandler.java index 585e766e..17b6f8cf 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/PacketHandler.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/PacketHandler.java @@ -2,18 +2,12 @@ import com.direwolf20.mininggadgets.common.MiningGadgets; import com.direwolf20.mininggadgets.common.network.packets.*; -import net.minecraft.world.entity.player.Player; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.network.NetworkDirection; -import net.minecraftforge.network.NetworkRegistry; -import net.minecraftforge.network.simple.SimpleChannel; - -import java.util.function.BiConsumer; -import java.util.function.Function; -import java.util.function.Supplier; +import net.neoforged.neoforge.common.util.FakePlayer; +import net.neoforged.neoforge.network.registration.NetworkRegistry; public class PacketHandler { private static final String PROTOCOL_VERSION = Integer.toString(2); diff --git a/src/main/java/com/direwolf20/mininggadgets/common/sounds/OurSounds.java b/src/main/java/com/direwolf20/mininggadgets/common/sounds/OurSounds.java index f7c8cc85..77641dbe 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/sounds/OurSounds.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/sounds/OurSounds.java @@ -1,16 +1,18 @@ package com.direwolf20.mininggadgets.common.sounds; import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.function.Supplier; + public interface OurSounds { - DeferredRegister SOUND_REGISTRY = DeferredRegister.create(ForgeRegistries.SOUND_EVENTS, MiningGadgets.MOD_ID); + DeferredRegister SOUND_REGISTRY = DeferredRegister.create(Registries.SOUND_EVENT, MiningGadgets.MOD_ID); - RegistryObject LASER_LOOP = SOUND_REGISTRY.register("mining_laser_loop", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(MiningGadgets.MOD_ID, "mining_laser_loop"))); - RegistryObject LASER_START = SOUND_REGISTRY.register("mining_laser_start1", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(MiningGadgets.MOD_ID, "mining_laser_start1"))); - RegistryObject LASER_END = SOUND_REGISTRY.register("mining_laser_end1", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(MiningGadgets.MOD_ID, "mining_laser_end1"))); + Supplier LASER_LOOP = SOUND_REGISTRY.register("mining_laser_loop", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(MiningGadgets.MOD_ID, "mining_laser_loop"))); + Supplier LASER_START = SOUND_REGISTRY.register("mining_laser_start1", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(MiningGadgets.MOD_ID, "mining_laser_start1"))); + Supplier LASER_END = SOUND_REGISTRY.register("mining_laser_end1", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(MiningGadgets.MOD_ID, "mining_laser_end1"))); } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/tiles/ModificationTableTileEntity.java b/src/main/java/com/direwolf20/mininggadgets/common/tiles/ModificationTableTileEntity.java index ed39e8e1..2486df91 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/tiles/ModificationTableTileEntity.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/tiles/ModificationTableTileEntity.java @@ -1,34 +1,26 @@ package com.direwolf20.mininggadgets.common.tiles; import com.direwolf20.mininggadgets.common.containers.ModificationTableContainer; -import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.containers.ModificationTableHandler; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.world.MenuProvider; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.util.INBTSerializable; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemStackHandler; -import net.minecraftforge.registries.ForgeRegistries; -import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.Objects; -import static com.direwolf20.mininggadgets.common.blocks.ModBlocks.MODIFICATIONTABLE_TILE; +import static com.direwolf20.mininggadgets.setup.Registration.MODIFICATIONTABLE_TILE; public class ModificationTableTileEntity extends BlockEntity implements MenuProvider { - public final LazyOptional handler = LazyOptional.of(this::createHandler); + public final ModificationTableHandler handler = new ModificationTableHandler(2); public ModificationTableTileEntity(BlockPos pos, BlockState state) { super(MODIFICATIONTABLE_TILE.get(), pos, state); @@ -47,49 +39,34 @@ public CompoundTag getUpdateTag() { } @Override - public void load(CompoundTag tag) { - super.load(tag); - CompoundTag invTag = tag.getCompound("inv"); - handler.ifPresent(h -> ((INBTSerializable) h).deserializeNBT(invTag)); + public void handleUpdateTag(CompoundTag tag) { + this.load(tag); } @Override - public void saveAdditional(CompoundTag tag) { - super.saveAdditional(tag); - handler.ifPresent(h -> { - CompoundTag compound = ((INBTSerializable) h).serializeNBT(); - tag.put("inv", compound); - }); + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { + this.load(Objects.requireNonNull(pkt.getTag())); } - private IItemHandler createHandler() { - return new ItemStackHandler(2) { - @Override - protected void onContentsChanged(int slot) { - setChanged(); - } - - @Override - public boolean isItemValid(int slot, @Nonnull ItemStack stack) { - return slot == 0 && stack.getItem() instanceof MiningGadget; - } - }; + @Override + public void load(CompoundTag tag) { + if (tag.contains("Inventory")) + handler.deserializeNBT(tag.getCompound("Inventory")); + super.load(tag); } - @Nonnull @Override - public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { - if (cap == ForgeCapabilities.ITEM_HANDLER) { - return handler.cast(); - } - return super.getCapability(cap, side); + public void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.put("Inventory", handler.serializeNBT()); } @Override public Component getDisplayName() { - return Component.literal(ForgeRegistries.BLOCK_ENTITY_TYPES.getKey(getType()).getPath()); + return Component.translatable("buildinggadgets2.screen.modificationtable"); } + @Nullable @Override public AbstractContainerMenu createMenu(int i, Inventory playerInventory, Player playerEntity) { diff --git a/src/main/java/com/direwolf20/mininggadgets/common/tiles/RenderBlockTileEntity.java b/src/main/java/com/direwolf20/mininggadgets/common/tiles/RenderBlockTileEntity.java index 78bb98fa..6915c839 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/tiles/RenderBlockTileEntity.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/tiles/RenderBlockTileEntity.java @@ -1,13 +1,13 @@ package com.direwolf20.mininggadgets.common.tiles; import com.direwolf20.mininggadgets.client.particles.laserparticle.LaserParticleData; -import com.direwolf20.mininggadgets.common.Config; import com.direwolf20.mininggadgets.common.events.ServerTickHandler; -import com.direwolf20.mininggadgets.common.items.ModItems; import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; import com.direwolf20.mininggadgets.common.items.upgrade.Upgrade; import com.direwolf20.mininggadgets.common.items.upgrade.UpgradeTools; import com.direwolf20.mininggadgets.common.util.SpecialBlockActions; +import com.direwolf20.mininggadgets.setup.Config; +import com.direwolf20.mininggadgets.setup.Registration; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.registries.Registries; @@ -31,17 +31,14 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; -import net.minecraftforge.common.ForgeHooks; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.energy.IEnergyStorage; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.event.level.BlockEvent; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.common.CommonHooks; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.EventHooks; +import net.neoforged.neoforge.event.level.BlockEvent; import java.util.*; -import static com.direwolf20.mininggadgets.common.blocks.ModBlocks.RENDERBLOCK_TILE; - public class RenderBlockTileEntity extends BlockEntity { private final Random rand = new Random(); private BlockState renderBlock; @@ -61,7 +58,7 @@ public class RenderBlockTileEntity extends BlockEntity { private boolean blockAllowed; public RenderBlockTileEntity(BlockPos pos, BlockState state) { - super(RENDERBLOCK_TILE.get(), pos, state); + super(Registration.RENDERBLOCK_TILE.get(), pos, state); } public static boolean blockAllowed(List drops, List filters, boolean isWhiteList) { @@ -193,7 +190,9 @@ public void setDurability(int dur, ItemStack stack) { private void freeze(ItemStack stack) { int freezeCost = Config.UPGRADECOST_FREEZE.get() * -1; - int energy = stack.getCapability(ForgeCapabilities.ENERGY).map(IEnergyStorage::getEnergyStored).orElse(0); + var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM); + if (cap == null) return; + int energy = cap.getEnergyStored(); if (energy == 0) { return; @@ -217,8 +216,9 @@ private int replaceBlockWithAlternative(Level world, BlockPos pos, BlockState st if (remainingEnergy < costOfOperation) { return 0; } - - stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(e -> e.receiveEnergy(costOfOperation, false)); + var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM); + if (cap == null) return 0; + cap.receiveEnergy(costOfOperation, false); // If the block is just water logged, remove the fluid BlockState blockState = world.getBlockState(pos); @@ -420,7 +420,7 @@ private void removeBlock() { int silk = 0; int fortune = 0; - ItemStack tempTool = new ItemStack(ModItems.MININGGADGET.get()); + ItemStack tempTool = new ItemStack(Registration.MININGGADGET.get()); // If silk is in the upgrades, apply it without a tier. if (UpgradeTools.containsActiveUpgradeFromList(this.gadgetUpgrades, Upgrade.SILK)) { @@ -439,7 +439,7 @@ private void removeBlock() { // Fire an event for other mods that we've just broken the block BlockEvent.BreakEvent breakEvent = fixForgeEventBreakBlock(this.renderBlock, player, level, worldPosition, tempTool); - MinecraftForge.EVENT_BUS.post(breakEvent); + NeoForge.EVENT_BUS.post(breakEvent); // Someone cancelled out break event if (breakEvent.isCanceled()) { return; @@ -454,7 +454,7 @@ private void removeBlock() { for (ItemStack drop : drops) { if (drop != null) { if (magnetMode) { - int wasPickedUp = ForgeEventFactory.onItemPickup(new ItemEntity(this.level, this.worldPosition.getX(), this.worldPosition.getY(), this.worldPosition.getZ(), drop), player); + int wasPickedUp = EventHooks.onItemPickup(new ItemEntity(this.level, this.worldPosition.getX(), this.worldPosition.getY(), this.worldPosition.getZ(), drop), player); // 1 = someone allowed the event meaning it's handled, // -1 = someone blocked the event and thus we shouldn't drop it nor insert it // 0 = no body captured the event and we should handle it by hand. @@ -503,7 +503,7 @@ private void removeBlock() { private static BlockEvent.BreakEvent fixForgeEventBreakBlock(BlockState state, Player player, Level world, BlockPos pos, ItemStack tool) { BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(world, pos, state, player); // Handle empty block or player unable to break block scenario - if (state != null && ForgeHooks.isCorrectToolForDrops(state, player)) { + if (state != null && CommonHooks.isCorrectToolForDrops(state, player)) { int bonusLevel = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BLOCK_FORTUNE, tool); int silklevel = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool); event.setExpToDrop(state.getExpDrop(world, world.random, pos, bonusLevel, silklevel)); @@ -534,7 +534,7 @@ public void setBlockAllowed() { int silk = 0; int fortune = 0; - ItemStack tempTool = new ItemStack(ModItems.MININGGADGET.get()); + ItemStack tempTool = new ItemStack(Registration.MININGGADGET.get()); // If silk is in the upgrades, apply it without a tier. if (UpgradeTools.containsActiveUpgradeFromList(this.gadgetUpgrades, Upgrade.SILK)) { diff --git a/src/main/java/com/direwolf20/mininggadgets/setup/ClientSetup.java b/src/main/java/com/direwolf20/mininggadgets/setup/ClientSetup.java new file mode 100644 index 00000000..efc0a793 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/setup/ClientSetup.java @@ -0,0 +1,42 @@ +package com.direwolf20.mininggadgets.setup; + +import com.direwolf20.mininggadgets.client.ClientEvents; +import com.direwolf20.mininggadgets.client.renderer.ModificationTableTER; +import com.direwolf20.mininggadgets.client.renderer.RenderBlockTER; +import com.direwolf20.mininggadgets.client.screens.FilterScreen; +import com.direwolf20.mininggadgets.client.screens.ModificationTableScreen; +import net.minecraft.client.gui.screens.MenuScreens; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.neoforge.client.event.EntityRenderersEvent; +import net.neoforged.neoforge.common.NeoForge; + +public class ClientSetup { + public static void init(final FMLClientSetupEvent event) { + //registerRenderers(event); + registerContainerScreens(event); + + //Register our Render Events Class + NeoForge.EVENT_BUS.register(ClientEvents.class); + } + + /** + * Called from some Client Dist runner in the main class + */ + private static void registerContainerScreens(final FMLClientSetupEvent event) { + //Screens + event.enqueueWork(() -> { + MenuScreens.register(Registration.MODIFICATIONTABLE_CONTAINER.get(), ModificationTableScreen::new); + MenuScreens.register(Registration.FILTER_CONTAINER.get(), FilterScreen::new); + }); + } + + /** + * Client Registry for renders + */ + @SubscribeEvent + public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) { + event.registerBlockEntityRenderer(Registration.RENDERBLOCK_TILE.get(), RenderBlockTER::new); + event.registerBlockEntityRenderer(Registration.MODIFICATIONTABLE_TILE.get(), ModificationTableTER::new); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/Config.java b/src/main/java/com/direwolf20/mininggadgets/setup/Config.java similarity index 66% rename from src/main/java/com/direwolf20/mininggadgets/common/Config.java rename to src/main/java/com/direwolf20/mininggadgets/setup/Config.java index 6d8b950e..23194ec8 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/Config.java +++ b/src/main/java/com/direwolf20/mininggadgets/setup/Config.java @@ -1,13 +1,9 @@ -package com.direwolf20.mininggadgets.common; +package com.direwolf20.mininggadgets.setup; -import com.electronwill.nightconfig.core.file.CommentedFileConfig; -import com.electronwill.nightconfig.core.io.WritingMode; -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; - -import java.nio.file.Path; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.neoforge.common.ModConfigSpec; @Mod.EventBusSubscriber public class Config { @@ -17,33 +13,43 @@ public class Config { public static final String SUBCATEGORY_MININGGADGET = "mining_gadget"; public static final String SUBCATEGORY_UPGRADES = "upgrades"; - private static final ForgeConfigSpec.Builder COMMON_BUILDER = new ForgeConfigSpec.Builder(); - private static final ForgeConfigSpec.Builder CLIENT_BUILDER = new ForgeConfigSpec.Builder(); - - public static ForgeConfigSpec COMMON_CONFIG; - public static ForgeConfigSpec CLIENT_CONFIG; - - public static ForgeConfigSpec.IntValue MININGGADGET_MAXPOWER; - public static ForgeConfigSpec.IntValue MININGGADGET_BASECOST; - public static ForgeConfigSpec.IntValue UPGRADECOST_SILKTOUCH; - public static ForgeConfigSpec.IntValue UPGRADECOST_MAGNET; - public static ForgeConfigSpec.IntValue UPGRADECOST_VOID; - public static ForgeConfigSpec.IntValue UPGRADECOST_FORTUNE1; - public static ForgeConfigSpec.IntValue UPGRADECOST_FORTUNE2; - public static ForgeConfigSpec.IntValue UPGRADECOST_FORTUNE3; - public static ForgeConfigSpec.IntValue UPGRADECOST_EFFICIENCY1; - public static ForgeConfigSpec.IntValue UPGRADECOST_EFFICIENCY2; - public static ForgeConfigSpec.IntValue UPGRADECOST_EFFICIENCY3; - public static ForgeConfigSpec.IntValue UPGRADECOST_EFFICIENCY4; - public static ForgeConfigSpec.IntValue UPGRADECOST_EFFICIENCY5; - public static ForgeConfigSpec.IntValue UPGRADECOST_LIGHT; - public static ForgeConfigSpec.IntValue UPGRADECOST_FREEZE; - public static ForgeConfigSpec.IntValue UPGRADECOST_BATTERY1; - public static ForgeConfigSpec.IntValue UPGRADECOST_BATTERY2; - public static ForgeConfigSpec.IntValue UPGRADECOST_BATTERY3; - - static { + private static final ModConfigSpec.Builder COMMON_BUILDER = new ModConfigSpec.Builder(); + private static final ModConfigSpec.Builder CLIENT_BUILDER = new ModConfigSpec.Builder(); + + public static ModConfigSpec COMMON_CONFIG; + public static ModConfigSpec CLIENT_CONFIG; + + public static ModConfigSpec.IntValue MININGGADGET_MAXPOWER; + public static ModConfigSpec.IntValue MININGGADGET_BASECOST; + public static ModConfigSpec.IntValue UPGRADECOST_SILKTOUCH; + public static ModConfigSpec.IntValue UPGRADECOST_MAGNET; + public static ModConfigSpec.IntValue UPGRADECOST_VOID; + public static ModConfigSpec.IntValue UPGRADECOST_FORTUNE1; + public static ModConfigSpec.IntValue UPGRADECOST_FORTUNE2; + public static ModConfigSpec.IntValue UPGRADECOST_FORTUNE3; + public static ModConfigSpec.IntValue UPGRADECOST_EFFICIENCY1; + public static ModConfigSpec.IntValue UPGRADECOST_EFFICIENCY2; + public static ModConfigSpec.IntValue UPGRADECOST_EFFICIENCY3; + public static ModConfigSpec.IntValue UPGRADECOST_EFFICIENCY4; + public static ModConfigSpec.IntValue UPGRADECOST_EFFICIENCY5; + public static ModConfigSpec.IntValue UPGRADECOST_LIGHT; + public static ModConfigSpec.IntValue UPGRADECOST_FREEZE; + public static ModConfigSpec.IntValue UPGRADECOST_BATTERY1; + public static ModConfigSpec.IntValue UPGRADECOST_BATTERY2; + public static ModConfigSpec.IntValue UPGRADECOST_BATTERY3; + + + public static void register() { + //registerServerConfigs(); + registerCommonConfigs(); + //registerClientConfigs(); + } + + private static void registerClientConfigs() { + ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, CLIENT_BUILDER.build()); + } + private static void registerCommonConfigs() { COMMON_BUILDER.comment("General settings").push(CATEGORY_GENERAL); COMMON_BUILDER.pop(); @@ -53,9 +59,7 @@ public class Config { COMMON_BUILDER.pop(); - - COMMON_CONFIG = COMMON_BUILDER.build(); - CLIENT_CONFIG = CLIENT_BUILDER.build(); + ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, COMMON_BUILDER.build()); } private static void setupMiningGadgetConfig() { @@ -105,7 +109,7 @@ private static void setupMiningGadgetConfig() { COMMON_BUILDER.pop(); } - public static void loadConfig(ForgeConfigSpec spec, Path path) { + /*public static void loadConfig(ModConfigSpec spec, Path path) { final CommentedFileConfig configData = CommentedFileConfig.builder(path) .sync() @@ -115,6 +119,6 @@ public static void loadConfig(ForgeConfigSpec spec, Path path) { configData.load(); spec.setConfig(configData); - } + }*/ } diff --git a/src/main/java/com/direwolf20/mininggadgets/setup/ModSetup.java b/src/main/java/com/direwolf20/mininggadgets/setup/ModSetup.java new file mode 100644 index 00000000..283a1c03 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/setup/ModSetup.java @@ -0,0 +1,45 @@ +package com.direwolf20.mininggadgets.setup; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import com.direwolf20.mininggadgets.common.events.ServerTickHandler; +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.items.upgrade.UpgradeBatteryLevels; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; + +public class ModSetup { + public static void init(final FMLCommonSetupEvent event) { + NeoForge.EVENT_BUS.register(ServerTickHandler.class); + } + + public static final String TAB_NAME = "mininggadgets"; + public static DeferredRegister TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MiningGadgets.MOD_ID); + public static DeferredHolder TAB_MININGGADGETS = TABS.register(TAB_NAME, () -> CreativeModeTab.builder() + .title(Component.literal("MiningGadgets")) + .icon(() -> new ItemStack(Registration.MININGGADGET.get())) + .withTabsBefore(CreativeModeTabs.SPAWN_EGGS) + .displayItems((featureFlags, output) -> { + Registration.ITEMS.getEntries().stream().filter(e -> e != Registration.MINERS_LIGHT_ITEM) + .forEach(e -> { + // Normal + Item item = e.get(); + output.accept(item); + + // Charged + if (item instanceof MiningGadget) { + ItemStack stack = new ItemStack(item); + stack.getOrCreateTag().putInt("energy", UpgradeBatteryLevels.BATTERY.getPower()); + output.accept(stack); + } + }); + }) + .build()); +} diff --git a/src/main/java/com/direwolf20/mininggadgets/setup/Registration.java b/src/main/java/com/direwolf20/mininggadgets/setup/Registration.java new file mode 100644 index 00000000..afa688e9 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/setup/Registration.java @@ -0,0 +1,110 @@ +package com.direwolf20.mininggadgets.setup; + +import com.direwolf20.mininggadgets.client.particles.ModParticles; +import com.direwolf20.mininggadgets.common.MiningGadgets; +import com.direwolf20.mininggadgets.common.blocks.MinersLight; +import com.direwolf20.mininggadgets.common.blocks.ModificationTable; +import com.direwolf20.mininggadgets.common.blocks.RenderBlock; +import com.direwolf20.mininggadgets.common.containers.FilterContainer; +import com.direwolf20.mininggadgets.common.containers.ModificationTableContainer; +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.items.UpgradeCard; +import com.direwolf20.mininggadgets.common.items.upgrade.Upgrade; +import com.direwolf20.mininggadgets.common.sounds.OurSounds; +import com.direwolf20.mininggadgets.common.tiles.ModificationTableTileEntity; +import com.direwolf20.mininggadgets.common.tiles.RenderBlockTileEntity; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.common.extensions.IMenuTypeExtension; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; + +public class Registration { + public static final Item.Properties ITEM_GROUP = new Item.Properties(); + /** + * Deferred Registers for the our Main class to load. + */ + public static final DeferredRegister BLOCKS = DeferredRegister.create(Registries.BLOCK, MiningGadgets.MOD_ID); + public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, MiningGadgets.MOD_ID); + public static final DeferredRegister> CONTAINERS = DeferredRegister.create(Registries.MENU, MiningGadgets.MOD_ID); + public static final DeferredRegister ITEMS = DeferredRegister.create(Registries.ITEM, MiningGadgets.MOD_ID); + // We have a separate register just to contain all of the upgrades for quick reference + public static final DeferredRegister UPGRADE_ITEMS = DeferredRegister.create(Registries.ITEM, MiningGadgets.MOD_ID); + + + public static void init(IEventBus eventBus) { + BLOCKS.register(eventBus); + ITEMS.register(eventBus); + UPGRADE_ITEMS.register(eventBus); + BLOCK_ENTITIES.register(eventBus); + CONTAINERS.register(eventBus); + ModParticles.PARTICLE_TYPES.register(eventBus); + OurSounds.SOUND_REGISTRY.register(eventBus); + } + + /** + * Register our blocks to the above registers to be loaded when the mod is initialized + */ + public static final DeferredHolder RENDER_BLOCK = BLOCKS.register("renderblock", RenderBlock::new); + public static final DeferredHolder MINERS_LIGHT = BLOCKS.register("minerslight", MinersLight::new); + public static final DeferredHolder MODIFICATION_TABLE = BLOCKS.register("modificationtable", ModificationTable::new); + + /** + * TileEntity Registers to the above deferred registers to be loaded in from the mods main class. + */ + public static final DeferredHolder, BlockEntityType> RENDERBLOCK_TILE = BLOCK_ENTITIES.register("renderblock", () -> BlockEntityType.Builder.of(RenderBlockTileEntity::new, RENDER_BLOCK.get()).build(null)); + public static final DeferredHolder, BlockEntityType> MODIFICATIONTABLE_TILE = BLOCK_ENTITIES.register("modificationtable", () -> BlockEntityType.Builder.of(ModificationTableTileEntity::new, MODIFICATION_TABLE.get()).build(null)); + + // Items + public static final DeferredHolder MININGGADGET_SIMPLE = ITEMS.register("mininggadget_simple", MiningGadget::new); + public static final DeferredHolder MININGGADGET_FANCY = ITEMS.register("mininggadget_fancy", MiningGadget::new); + public static final DeferredHolder MININGGADGET = ITEMS.register("mininggadget", MiningGadget::new); + + // Block items + public static final DeferredHolder MODIFICATION_TABLE_ITEM = ITEMS.register("modificationtable", () -> new BlockItem(MODIFICATION_TABLE.get(), ITEM_GROUP)); + public static final DeferredHolder MINERS_LIGHT_ITEM = ITEMS.register("minerslight", () -> new BlockItem(MINERS_LIGHT.get(), ITEM_GROUP.stacksTo(1))); + + /** + * Upgrades are a bit ugly.. Soz + * This one is actually kinda + */ + public static final DeferredHolder UPGRADE_EMPTY = UPGRADE_ITEMS.register("upgrade_empty", () -> new UpgradeCard(Upgrade.EMPTY, 64)); + public static final DeferredHolder SILK = UPGRADE_ITEMS.register("upgrade_silk", () -> new UpgradeCard(Upgrade.SILK)); + public static final DeferredHolder VOID_JUNK = UPGRADE_ITEMS.register("upgrade_void_junk", () -> new UpgradeCard(Upgrade.VOID_JUNK)); + public static final DeferredHolder MAGNET = UPGRADE_ITEMS.register("upgrade_magnet", () -> new UpgradeCard(Upgrade.MAGNET)); + public static final DeferredHolder SIZE_1 = UPGRADE_ITEMS.register("upgrade_size_1", () -> new UpgradeCard(Upgrade.SIZE_1)); + public static final DeferredHolder SIZE_2 = UPGRADE_ITEMS.register("upgrade_size_2", () -> new UpgradeCard(Upgrade.SIZE_2)); + public static final DeferredHolder SIZE_3 = UPGRADE_ITEMS.register("upgrade_size_3", () -> new UpgradeCard(Upgrade.SIZE_3)); + public static final DeferredHolder LIGHT_PLACER = UPGRADE_ITEMS.register("upgrade_light_placer", () -> new UpgradeCard(Upgrade.LIGHT_PLACER)); + public static final DeferredHolder FREEZING = UPGRADE_ITEMS.register("upgrade_freezing", () -> new UpgradeCard(Upgrade.FREEZING)); + public static final DeferredHolder FORTUNE_1 = UPGRADE_ITEMS.register("upgrade_fortune_1", () -> new UpgradeCard(Upgrade.FORTUNE_1)); + public static final DeferredHolder FORTUNE_2 = UPGRADE_ITEMS.register("upgrade_fortune_2", () -> new UpgradeCard(Upgrade.FORTUNE_2)); + public static final DeferredHolder FORTUNE_3 = UPGRADE_ITEMS.register("upgrade_fortune_3", () -> new UpgradeCard(Upgrade.FORTUNE_3)); + public static final DeferredHolder RANGE_1 = UPGRADE_ITEMS.register("upgrade_range_1", () -> new UpgradeCard(Upgrade.RANGE_1)); + public static final DeferredHolder RANGE_2 = UPGRADE_ITEMS.register("upgrade_range_2", () -> new UpgradeCard(Upgrade.RANGE_2)); + public static final DeferredHolder RANGE_3 = UPGRADE_ITEMS.register("upgrade_range_3", () -> new UpgradeCard(Upgrade.RANGE_3)); + public static final DeferredHolder BATTERY_1 = UPGRADE_ITEMS.register("upgrade_battery_1", () -> new UpgradeCard(Upgrade.BATTERY_1)); + public static final DeferredHolder BATTERY_2 = UPGRADE_ITEMS.register("upgrade_battery_2", () -> new UpgradeCard(Upgrade.BATTERY_2)); + public static final DeferredHolder BATTERY_3 = UPGRADE_ITEMS.register("upgrade_battery_3", () -> new UpgradeCard(Upgrade.BATTERY_3)); + public static final DeferredHolder BATTERY_CREATIVE = UPGRADE_ITEMS.register("upgrade_battery_creative", () -> new UpgradeCard(Upgrade.BATTERY_CREATIVE)); + public static final DeferredHolder EFFICIENCY_1 = UPGRADE_ITEMS.register("upgrade_efficiency_1", () -> new UpgradeCard(Upgrade.EFFICIENCY_1)); + public static final DeferredHolder EFFICIENCY_2 = UPGRADE_ITEMS.register("upgrade_efficiency_2", () -> new UpgradeCard(Upgrade.EFFICIENCY_2)); + public static final DeferredHolder EFFICIENCY_3 = UPGRADE_ITEMS.register("upgrade_efficiency_3", () -> new UpgradeCard(Upgrade.EFFICIENCY_3)); + public static final DeferredHolder EFFICIENCY_4 = UPGRADE_ITEMS.register("upgrade_efficiency_4", () -> new UpgradeCard(Upgrade.EFFICIENCY_4)); + public static final DeferredHolder EFFICIENCY_5 = UPGRADE_ITEMS.register("upgrade_efficiency_5", () -> new UpgradeCard(Upgrade.EFFICIENCY_5)); + // public static final RegistryObject PAVER = UPGRADE_ITEMS.register("upgrade_paver", Upgrade.PAVER::getCard); + + + // Our containers + public static final DeferredHolder, MenuType> MODIFICATIONTABLE_CONTAINER = CONTAINERS.register("modificationtable", + () -> IMenuTypeExtension.create(ModificationTableContainer::new)); + public static final DeferredHolder, MenuType> FILTER_CONTAINER = CONTAINERS.register("filter_container", + () -> IMenuTypeExtension.create(FilterContainer::new)); + + +} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 6257ade3..b254b940 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,31 +1,32 @@ modLoader="javafml" -loaderVersion="[${forgeshortversion},)" +loaderVersion="${loader_version_range}" issueTrackerURL="https://github.com/Direwolf20-MC/MiningGadgets" license="MIT (https://github.com/Direwolf20-MC/MiningGadgets/blob/master/LICENSE.txt)" [[mods]] -modId="mininggadgets" -version="${version}" -displayName="Mining Gadgets" +modId="${mod_id}" +version="${mod_version}" +displayName="${mod_name}" updateJSONURL="https://raw.githubusercontent.com/Direwolf20-MC/MiningGadgets/master/update.json" displayURL="https://github.com/Direwolf20-MC/MiningGadgets/" logoFile="mininggadgets-logo.png" -credits="CPW and Lex for making Forge the best API ever!!" -authors="Direwolf20" +credits="Direwolf20, ErrorMikey, CPW and the entire neoforge team." +authors="Direwolf20, ErrorMikey" description='''Mining is better with lasers.''' #forge [[dependencies.mininggadgets]] - modId="forge" - mandatory=true - versionRange="$forge_acceptable_range" + modId="neoforge" #mandatory + type="required" #mandatory + versionRange="${neo_version_range}" #mandatory ordering="NONE" side="BOTH" #minecraft [[dependencies.mininggadgets]] modId="minecraft" - mandatory=true - versionRange="[${mcversion},]" + type="required" + # This version range declares a minimum of the current minecraft version up to but not including the next major version + versionRange="${minecraft_version_range}" ordering="NONE" side="BOTH" From ade826fa2eeed45cf74435be2ca84be31d3adbc9 Mon Sep 17 00:00:00 2001 From: direwolf20 <39863894+Direwolf20-MC@users.noreply.github.com> Date: Thu, 15 Feb 2024 16:58:20 -0500 Subject: [PATCH 2/8] Networking and misc fixes - it compiles and loads! --- gradle.properties | 4 +- .../client/screens/FilterScreen.java | 6 +- .../client/screens/MiningSettingScreen.java | 22 +++--- .../client/screens/MiningVisualsScreen.java | 38 +++++----- .../screens/ModificationTableScreen.java | 10 +-- .../common/events/ServerTickHandler.java | 6 +- .../common/items/MiningGadget.java | 4 +- .../common/items/gadget/MiningProperties.java | 6 +- .../common/network/PacketHandler.java | 72 ++++++------------- .../network/data/ChangeBreakTypePayload.java | 25 +++++++ .../network/data/ChangeColorPayload.java | 37 ++++++++++ .../data/ChangeFreezeDelayPayload.java | 27 +++++++ .../data/ChangeMiningSizeModePayload.java | 25 +++++++ .../network/data/ChangeMiningSizePayload.java | 25 +++++++ .../network/data/ChangeRangePayload.java | 27 +++++++ .../network/data/ChangeVolumePayload.java | 27 +++++++ .../network/data/DurabilitySyncPayload.java | 57 +++++++++++++++ .../network/data/ExtractUpgradePayload.java | 32 +++++++++ .../common/network/data/GhostSlotPayload.java | 30 ++++++++ .../network/data/InsertUpgradePayload.java | 31 ++++++++ .../data/OpenFilterContainerPayload.java | 25 +++++++ .../network/data/ToggleFiltersPayload.java | 25 +++++++ .../network/data/TogglePrecisionPayload.java | 25 +++++++ .../network/data/UpdateUpgradePayload.java | 27 +++++++ .../handler/PacketChangeBreakType.java | 31 ++++++++ .../network/handler/PacketChangeColor.java | 36 ++++++++++ .../handler/PacketChangeFreezeDelay.java | 33 +++++++++ .../handler/PacketChangeMiningSize.java | 30 ++++++++ .../handler/PacketChangeMiningSizeMode.java | 31 ++++++++ .../network/handler/PacketChangeRange.java | 31 ++++++++ .../network/handler/PacketChangeVolume.java | 31 ++++++++ .../network/handler/PacketDurabilitySync.java | 33 +++++++++ .../network/handler/PacketExtractUpgrade.java | 40 +++++++++++ .../network/handler/PacketGhostSlot.java | 35 +++++++++ .../network/handler/PacketInsertUpgrade.java | 48 +++++++++++++ .../handler/PacketOpenFilterContainer.java | 52 ++++++++++++++ .../network/handler/PacketToggleFilters.java | 30 ++++++++ .../handler/PacketTogglePrecision.java | 30 ++++++++ .../network/handler/PacketUpdateUpgrade.java | 36 ++++++++++ .../packets/PacketChangeBreakType.java | 38 ---------- .../network/packets/PacketChangeColor.java | 61 ---------------- .../packets/PacketChangeFreezeDelay.java | 43 ----------- .../packets/PacketChangeMiningSize.java | 31 -------- .../packets/PacketChangeMiningSizeMode.java | 32 --------- .../network/packets/PacketChangeRange.java | 41 ----------- .../network/packets/PacketChangeVolume.java | 43 ----------- .../network/packets/PacketDurabilitySync.java | 72 ------------------- .../network/packets/PacketExtractUpgrade.java | 57 --------------- .../network/packets/PacketGhostSlot.java | 50 ------------- .../network/packets/PacketInsertUpgrade.java | 58 --------------- .../packets/PacketOpenFilterContainer.java | 54 -------------- .../network/packets/PacketToggleFilters.java | 40 ----------- .../packets/PacketTogglePrecision.java | 40 ----------- .../network/packets/PacketUpdateUpgrade.java | 46 ------------ .../mininggadgets/setup/Config.java | 2 - 55 files changed, 1041 insertions(+), 807 deletions(-) create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeBreakTypePayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeColorPayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeFreezeDelayPayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeMiningSizeModePayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeMiningSizePayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeRangePayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeVolumePayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/DurabilitySyncPayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/ExtractUpgradePayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/GhostSlotPayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/InsertUpgradePayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/OpenFilterContainerPayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/ToggleFiltersPayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/TogglePrecisionPayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/data/UpdateUpgradePayload.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeBreakType.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeColor.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeFreezeDelay.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeMiningSize.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeMiningSizeMode.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeRange.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeVolume.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketDurabilitySync.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketExtractUpgrade.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketGhostSlot.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketInsertUpgrade.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketOpenFilterContainer.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketToggleFilters.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketTogglePrecision.java create mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketUpdateUpgrade.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeBreakType.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeColor.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeFreezeDelay.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeMiningSize.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeMiningSizeMode.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeRange.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeVolume.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketDurabilitySync.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketExtractUpgrade.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketGhostSlot.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketInsertUpgrade.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketOpenFilterContainer.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketToggleFilters.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketTogglePrecision.java delete mode 100644 src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketUpdateUpgrade.java diff --git a/gradle.properties b/gradle.properties index 050448f1..93678a5f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,8 +19,8 @@ neo_version_range=[20.4,) # The loader version range can only use the major version of FML as bounds loader_version_range=[2,) #Mod Info -mod_id=laserio -mod_name=LaserIO +mod_id=mininggadgets +mod_name=Mining Gadgets mod_version=1.16.0 mod_license=MIT mod_authors=direwolf20 diff --git a/src/main/java/com/direwolf20/mininggadgets/client/screens/FilterScreen.java b/src/main/java/com/direwolf20/mininggadgets/client/screens/FilterScreen.java index a4295e5b..be6dc4a8 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/screens/FilterScreen.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/screens/FilterScreen.java @@ -2,8 +2,7 @@ import com.direwolf20.mininggadgets.common.containers.FilterContainer; import com.direwolf20.mininggadgets.common.containers.GhostSlot; -import com.direwolf20.mininggadgets.common.network.PacketHandler; -import com.direwolf20.mininggadgets.common.network.packets.PacketGhostSlot; +import com.direwolf20.mininggadgets.common.network.data.GhostSlotPayload; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; @@ -11,6 +10,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.network.PacketDistributor; /** * Complete props and thanks to @amadones for their awesome implementation of this system @@ -59,7 +59,7 @@ public boolean mouseClicked(double x, double y, int btn) { stack = stack.copy().split(hoveredSlot.getMaxStackSize()); // Limit to slot limit hoveredSlot.set(stack); // Temporarily update the client for continuity purposes - PacketHandler.sendToServer(new PacketGhostSlot(hoveredSlot.index, stack)); + PacketDistributor.SERVER.noArg().send(new GhostSlotPayload(hoveredSlot.index, stack)); return true; } diff --git a/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningSettingScreen.java b/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningSettingScreen.java index e110fb67..09e3290a 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningSettingScreen.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningSettingScreen.java @@ -5,8 +5,7 @@ import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; import com.direwolf20.mininggadgets.common.items.upgrade.Upgrade; import com.direwolf20.mininggadgets.common.items.upgrade.UpgradeTools; -import com.direwolf20.mininggadgets.common.network.PacketHandler; -import com.direwolf20.mininggadgets.common.network.packets.*; +import com.direwolf20.mininggadgets.common.network.data.*; import com.mojang.blaze3d.platform.InputConstants; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; @@ -20,6 +19,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.client.gui.widget.ExtendedSlider; +import net.neoforged.neoforge.network.PacketDistributor; import java.awt.*; import java.util.List; @@ -90,14 +90,14 @@ protected void init() { if( containsVoid ) { addRenderableWidget( Button.builder(getTrans("tooltip.screen.edit_filters"), (button) -> { - PacketHandler.sendToServer(new PacketOpenFilterContainer()); + PacketDistributor.SERVER.noArg().send(new OpenFilterContainerPayload()); }).pos(baseX + 10, top + 20).size( 95, 20).build() ); addRenderableWidget(new WhitelistButton(baseX + 10 + (115 - 20), top + 20, 20, 20, isWhitelist, (button) -> { isWhitelist = !isWhitelist; ((WhitelistButton) button).setWhitelist(isWhitelist); - PacketHandler.sendToServer(new PacketToggleFilters()); + PacketDistributor.SERVER.noArg().send(new ToggleFiltersPayload()); })); } @@ -113,7 +113,7 @@ protected void init() { currentSize += 2; button.setMessage(getTrans("tooltip.screen.size", currentSize)); - PacketHandler.sendToServer(new PacketChangeMiningSize()); + PacketDistributor.SERVER.noArg().send(new ChangeMiningSizePayload()); }).pos(baseX - 135, 0).size(125, 20).build()); if (maxMiningRange > 3) { @@ -121,7 +121,7 @@ protected void init() { currentMode = MiningProperties.nextSizeMode(gadget); button.setMessage(currentMode.getTooltip()); - PacketHandler.sendToServer(new PacketChangeMiningSizeMode()); + PacketDistributor.SERVER.noArg().send(new ChangeMiningSizeModePayload()); }).pos(baseX - 135, 0).size(125, 20).build()); } @@ -141,7 +141,7 @@ protected void applyValue() { leftWidgets.add(Button.builder(getTrans("tooltip.screen.precision_mode", isPrecision), (button) -> { isPrecision = !isPrecision; button.setMessage(getTrans("tooltip.screen.precision_mode", isPrecision)); - PacketHandler.sendToServer(new PacketTogglePrecision()); + PacketDistributor.SERVER.noArg().send(new TogglePrecisionPayload()); }).pos(baseX - 135, 0).size(125, 20).build()); // volume slider @@ -177,7 +177,7 @@ private boolean toggleUpgrade(Upgrade upgrade, boolean update) { // When the button is clicked we toggle if( update ) { this.updateButtons(upgrade); - PacketHandler.sendToServer(new PacketUpdateUpgrade(upgrade.getName())); + PacketDistributor.SERVER.noArg().send(new UpdateUpgradePayload(upgrade.getName())); } // When we're just init the gui, we check if it's on or off. @@ -239,9 +239,9 @@ public boolean isPauseScreen() { @Override public void removed() { - PacketHandler.sendToServer(new PacketChangeRange(this.beamRange)); - PacketHandler.sendToServer(new PacketChangeVolume(this.volume)); - PacketHandler.sendToServer(new PacketChangeFreezeDelay(this.freezeDelay)); + PacketDistributor.SERVER.noArg().send(new ChangeRangePayload(this.beamRange)); + PacketDistributor.SERVER.noArg().send(new ChangeVolumePayload(this.volume)); + PacketDistributor.SERVER.noArg().send(new ChangeFreezeDelayPayload(this.freezeDelay)); super.removed(); } diff --git a/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningVisualsScreen.java b/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningVisualsScreen.java index 8f07200b..ee8d01c1 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningVisualsScreen.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningVisualsScreen.java @@ -1,11 +1,10 @@ package com.direwolf20.mininggadgets.client.screens; import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; -import com.direwolf20.mininggadgets.common.network.PacketHandler; -import com.direwolf20.mininggadgets.common.network.packets.PacketChangeBreakType; -import com.direwolf20.mininggadgets.common.network.packets.PacketChangeColor; +import com.direwolf20.mininggadgets.common.network.data.ChangeBreakTypePayload; +import com.direwolf20.mininggadgets.common.network.data.ChangeColorPayload; import com.mojang.blaze3d.platform.InputConstants; -import it.unimi.dsi.fastutil.ints.IntConsumer; +import it.unimi.dsi.fastutil.shorts.ShortConsumer; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; @@ -13,6 +12,7 @@ import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.client.gui.widget.ExtendedSlider; +import net.neoforged.neoforge.network.PacketDistributor; import java.util.HashMap; import java.util.Map; @@ -20,12 +20,12 @@ public class MiningVisualsScreen extends Screen { private ItemStack gadget; private Button blockBreakButton; - private int red; - private int green; - private int blue; - private int red_inner; - private int green_inner; - private int blue_inner; + private short red; + private short green; + private short blue; + private short red_inner; + private short green_inner; + private short blue_inner; private ExtendedSlider sliderRedInner; private ExtendedSlider sliderGreenInner; private ExtendedSlider sliderBlueInner; @@ -33,7 +33,7 @@ public class MiningVisualsScreen extends Screen { private ExtendedSlider sliderGreenOuter; private ExtendedSlider sliderBlueOuter; - private Map sliderMap = new HashMap<>(); + private Map sliderMap = new HashMap<>(); public MiningVisualsScreen(ItemStack gadget) { super(Component.literal("title")); @@ -64,7 +64,7 @@ protected void init() { else button.setMessage(Component.translatable("mininggadgets.tooltip.screen.shrink")); - PacketHandler.sendToServer(new PacketChangeBreakType()); + PacketDistributor.SERVER.noArg().send(new ChangeBreakTypePayload()); } ) .pos(baseX - (150), baseY - 55) @@ -76,38 +76,38 @@ protected void init() { sliderRedInner = new ExtendedSlider(baseX - (150), baseY - 10, 150, 20, Component.translatable("mininggadgets.tooltip.screen.red").append(": "), Component.empty(), 0, 255, this.red, true) { @Override protected void applyValue() { - red_inner = this.getValueInt(); + red_inner = (short) this.getValueInt(); } }; sliderGreenInner = new ExtendedSlider(baseX - (150), baseY + 15, 150, 20, Component.translatable("mininggadgets.tooltip.screen.green").append(": "), Component.empty(), 0, 255, this.green, true) { @Override protected void applyValue() { - green_inner = this.getValueInt(); + green_inner = (short) this.getValueInt(); } }; sliderBlueInner = new ExtendedSlider(baseX - (150), baseY + 40, 150, 20, Component.translatable("mininggadgets.tooltip.screen.blue").append(": "), Component.empty(), 0, 255, this.blue, true) { @Override protected void applyValue() { - blue_inner = this.getValueInt(); + blue_inner = (short) this.getValueInt(); } }; sliderRedOuter = new ExtendedSlider(baseX + (25), baseY - 10, 150, 20, Component.translatable("mininggadgets.tooltip.screen.red").append(": "), Component.empty(), 0, 255, this.red_inner, true) { @Override protected void applyValue() { - red = this.getValueInt(); + red = (short) this.getValueInt(); } }; sliderGreenOuter = new ExtendedSlider(baseX + (25), baseY + 15, 150, 20, Component.translatable("mininggadgets.tooltip.screen.green").append(": "), Component.empty(), 0, 255, this.green_inner, true) { @Override protected void applyValue() { - green = this.getValueInt(); + green = (short) this.getValueInt(); } }; sliderBlueOuter = new ExtendedSlider(baseX + (25), baseY + 40, 150, 20, Component.translatable("mininggadgets.tooltip.screen.blue").append(": "), Component.empty(), 0, 255, this.blue_inner, true) { @Override protected void applyValue() { - blue = this.getValueInt(); + blue = (short) this.getValueInt(); } }; @@ -177,7 +177,7 @@ public void removed() { } private void syncColors() { - PacketHandler.sendToServer(new PacketChangeColor(this.red, this.green, this.blue, this.red_inner, this.green_inner, this.blue_inner)); + PacketDistributor.SERVER.noArg().send(new ChangeColorPayload(this.red, this.green, this.blue, this.red_inner, this.green_inner, this.blue_inner)); } @Override diff --git a/src/main/java/com/direwolf20/mininggadgets/client/screens/ModificationTableScreen.java b/src/main/java/com/direwolf20/mininggadgets/client/screens/ModificationTableScreen.java index e64ddbc9..d060d6b3 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/screens/ModificationTableScreen.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/screens/ModificationTableScreen.java @@ -6,9 +6,8 @@ import com.direwolf20.mininggadgets.common.items.UpgradeCard; import com.direwolf20.mininggadgets.common.items.upgrade.Upgrade; import com.direwolf20.mininggadgets.common.items.upgrade.UpgradeTools; -import com.direwolf20.mininggadgets.common.network.PacketHandler; -import com.direwolf20.mininggadgets.common.network.packets.PacketExtractUpgrade; -import com.direwolf20.mininggadgets.common.network.packets.PacketInsertUpgrade; +import com.direwolf20.mininggadgets.common.network.data.ExtractUpgradePayload; +import com.direwolf20.mininggadgets.common.network.data.InsertUpgradePayload; import com.google.common.collect.Lists; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; @@ -25,6 +24,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.neoforged.neoforge.client.gui.widget.ScrollPanel; +import net.neoforged.neoforge.network.PacketDistributor; public class ModificationTableScreen extends AbstractContainerScreen { @@ -106,7 +106,7 @@ public boolean mouseClicked(double mouseXIn, double mouseYIn, int p_231044_5_) { return false; } - PacketHandler.sendToServer(new PacketInsertUpgrade(this.tePos, heldStack)); + PacketDistributor.SERVER.noArg().send(new InsertUpgradePayload(this.tePos, heldStack)); this.menu.setCarried(ItemStack.EMPTY); } } @@ -168,7 +168,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { if( !isMouseOver(mouseX, mouseY) || this.upgrade == null ) return false; - PacketHandler.sendToServer(new PacketExtractUpgrade(this.parent.tePos, this.upgrade.getName(), this.upgrade.getName().length())); + PacketDistributor.SERVER.noArg().send(new ExtractUpgradePayload(this.parent.tePos, this.upgrade.getName(), this.upgrade.getName().length())); return super.mouseClicked(mouseX, mouseY, button); } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/events/ServerTickHandler.java b/src/main/java/com/direwolf20/mininggadgets/common/events/ServerTickHandler.java index 74fc399b..c21566b2 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/events/ServerTickHandler.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/events/ServerTickHandler.java @@ -1,12 +1,12 @@ package com.direwolf20.mininggadgets.common.events; -import com.direwolf20.mininggadgets.common.network.PacketHandler; -import com.direwolf20.mininggadgets.common.network.packets.PacketDurabilitySync; +import com.direwolf20.mininggadgets.common.network.data.DurabilitySyncPayload; import net.minecraft.core.BlockPos; import net.minecraft.util.Tuple; import net.minecraft.world.level.Level; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.neoforge.event.TickEvent; +import net.neoforged.neoforge.network.PacketDistributor; import java.util.ArrayList; import java.util.List; @@ -20,7 +20,7 @@ public class ServerTickHandler { public static void handleTickEndEvent(TickEvent.ServerTickEvent event) { if (event.phase == TickEvent.Phase.END) { if (!updateList.isEmpty()) { - PacketHandler.sendToAll(new PacketDurabilitySync(updateList), serverWorld); + PacketDistributor.ALL.noArg().send(new DurabilitySyncPayload(List.copyOf(updateList))); updateList.clear(); } } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/items/MiningGadget.java b/src/main/java/com/direwolf20/mininggadgets/common/items/MiningGadget.java index 7b8cb980..a346ef51 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/items/MiningGadget.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/items/MiningGadget.java @@ -62,7 +62,6 @@ import java.util.Random; public class MiningGadget extends Item { - private final int energyCapacity; private final Random rand = new Random(); private LaserLoopSound laserLoopSound; //private static int energyPerItem = 15; @@ -72,7 +71,6 @@ public MiningGadget() { .stacksTo(1) .setNoRepair()); - this.energyCapacity = Config.MININGGADGET_MAXPOWER.get(); } public int getEnergyMax() { @@ -95,7 +93,7 @@ public void verifyTagAfterLoad(@NotNull CompoundTag tag) { @Override public int getMaxDamage(ItemStack stack) { - return this.energyCapacity; + return this.getEnergyMax(); } @Override diff --git a/src/main/java/com/direwolf20/mininggadgets/common/items/gadget/MiningProperties.java b/src/main/java/com/direwolf20/mininggadgets/common/items/gadget/MiningProperties.java index 497e6776..6a707c66 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/items/gadget/MiningProperties.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/items/gadget/MiningProperties.java @@ -1,11 +1,11 @@ package com.direwolf20.mininggadgets.common.items.gadget; import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; import java.util.ArrayList; import java.util.List; @@ -238,7 +238,7 @@ public static int getBatteryTier(ItemStack gadget) { * @implNote Please do not use {@link #deserializeItemStackList(CompoundTag)} or {@link #serializeItemStackList(List)} * if you wish to maintain the original tag data on the gadget. These have specific uses. * - * See {@link com.direwolf20.mininggadgets.common.network.packets.PacketOpenFilterContainer.Handler} for an + * See {@link com.direwolf20.mininggadgets.common.network.handler.PacketOpenFilterContainer} for an * understanding on why you shouldn't change the tad data on the gadget directly. */ public static List getFiltersAsList(ItemStack gadget) { diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/PacketHandler.java b/src/main/java/com/direwolf20/mininggadgets/common/network/PacketHandler.java index 17b6f8cf..a14ffd33 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/PacketHandler.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/PacketHandler.java @@ -1,62 +1,34 @@ package com.direwolf20.mininggadgets.common.network; import com.direwolf20.mininggadgets.common.MiningGadgets; -import com.direwolf20.mininggadgets.common.network.packets.*; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.neoforged.neoforge.common.util.FakePlayer; -import net.neoforged.neoforge.network.registration.NetworkRegistry; +import com.direwolf20.mininggadgets.common.network.data.*; +import com.direwolf20.mininggadgets.common.network.handler.*; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent; +import net.neoforged.neoforge.network.registration.IPayloadRegistrar; -public class PacketHandler { - private static final String PROTOCOL_VERSION = Integer.toString(2); - private static short index = 0; - - public static final SimpleChannel HANDLER = NetworkRegistry.ChannelBuilder - .named(new ResourceLocation(MiningGadgets.MOD_ID, "main_network_channel")) - .clientAcceptedVersions(PROTOCOL_VERSION::equals) - .serverAcceptedVersions(PROTOCOL_VERSION::equals) - .networkProtocolVersion(() -> PROTOCOL_VERSION) - .simpleChannel(); - public static void register() { - int id = 0; +public class PacketHandler { + public static void registerNetworking(final RegisterPayloadHandlerEvent event) { + final IPayloadRegistrar registrar = event.registrar(MiningGadgets.MOD_ID); // Server side - HANDLER.registerMessage(id++, PacketExtractUpgrade.class, PacketExtractUpgrade::encode, PacketExtractUpgrade::decode, PacketExtractUpgrade.Handler::handle); - HANDLER.registerMessage(id++, PacketUpdateUpgrade.class, PacketUpdateUpgrade::encode, PacketUpdateUpgrade::decode, PacketUpdateUpgrade.Handler::handle); - HANDLER.registerMessage(id++, PacketChangeMiningSize.class, PacketChangeMiningSize::encode, PacketChangeMiningSize::decode, PacketChangeMiningSize.Handler::handle); - HANDLER.registerMessage(id++, PacketChangeRange.class, PacketChangeRange::encode, PacketChangeRange::decode, PacketChangeRange.Handler::handle); - HANDLER.registerMessage(id++, PacketChangeBreakType.class, PacketChangeBreakType::encode, PacketChangeBreakType::decode, PacketChangeBreakType.Handler::handle); - HANDLER.registerMessage(id++, PacketChangeColor.class, PacketChangeColor::encode, PacketChangeColor::decode, PacketChangeColor.Handler::handle); - HANDLER.registerMessage(id++, PacketGhostSlot.class, PacketGhostSlot::encode, PacketGhostSlot::decode, PacketGhostSlot.Handler::handle); - HANDLER.registerMessage(id++, PacketOpenFilterContainer.class, PacketOpenFilterContainer::encode, PacketOpenFilterContainer::decode, PacketOpenFilterContainer.Handler::handle); - HANDLER.registerMessage(id++, PacketToggleFilters.class, PacketToggleFilters::encode, PacketToggleFilters::decode, PacketToggleFilters.Handler::handle); - HANDLER.registerMessage(id++, PacketTogglePrecision.class, PacketTogglePrecision::encode, PacketTogglePrecision::decode, PacketTogglePrecision.Handler::handle); - HANDLER.registerMessage(id++, PacketChangeVolume.class, PacketChangeVolume::encode, PacketChangeVolume::decode, PacketChangeVolume.Handler::handle); - HANDLER.registerMessage(id++, PacketChangeFreezeDelay.class, PacketChangeFreezeDelay::encode, PacketChangeFreezeDelay::decode, PacketChangeFreezeDelay.Handler::handle); + registrar.play(ExtractUpgradePayload.ID, ExtractUpgradePayload::new, handler -> handler.server(PacketExtractUpgrade.get()::handle)); + registrar.play(UpdateUpgradePayload.ID, UpdateUpgradePayload::new, handler -> handler.server(PacketUpdateUpgrade.get()::handle)); + registrar.play(ChangeMiningSizePayload.ID, ChangeMiningSizePayload::new, handler -> handler.server(PacketChangeMiningSize.get()::handle)); + registrar.play(ChangeMiningSizeModePayload.ID, ChangeMiningSizeModePayload::new, handler -> handler.server(PacketChangeMiningSizeMode.get()::handle)); + registrar.play(ChangeRangePayload.ID, ChangeRangePayload::new, handler -> handler.server(PacketChangeRange.get()::handle)); + registrar.play(ChangeBreakTypePayload.ID, ChangeBreakTypePayload::new, handler -> handler.server(PacketChangeBreakType.get()::handle)); + registrar.play(ChangeColorPayload.ID, ChangeColorPayload::new, handler -> handler.server(PacketChangeColor.get()::handle)); + registrar.play(GhostSlotPayload.ID, GhostSlotPayload::new, handler -> handler.server(PacketGhostSlot.get()::handle)); + registrar.play(OpenFilterContainerPayload.ID, OpenFilterContainerPayload::new, handler -> handler.server(PacketOpenFilterContainer.get()::handle)); + registrar.play(ToggleFiltersPayload.ID, ToggleFiltersPayload::new, handler -> handler.server(PacketToggleFilters.get()::handle)); + registrar.play(TogglePrecisionPayload.ID, TogglePrecisionPayload::new, handler -> handler.server(PacketTogglePrecision.get()::handle)); + registrar.play(ChangeVolumePayload.ID, ChangeVolumePayload::new, handler -> handler.server(PacketChangeVolume.get()::handle)); + registrar.play(ChangeFreezeDelayPayload.ID, ChangeFreezeDelayPayload::new, handler -> handler.server(PacketChangeFreezeDelay.get()::handle)); + registrar.play(InsertUpgradePayload.ID, InsertUpgradePayload::new, handler -> handler.server(PacketInsertUpgrade.get()::handle)); //Client Side - HANDLER.registerMessage(id++, PacketDurabilitySync.class, PacketDurabilitySync::encode, PacketDurabilitySync::decode, PacketDurabilitySync.Handler::handle); - HANDLER.registerMessage(id++, PacketInsertUpgrade.class, PacketInsertUpgrade::encode, PacketInsertUpgrade::decode, PacketInsertUpgrade::handler); - HANDLER.registerMessage(id++, PacketChangeMiningSizeMode.class,PacketChangeMiningSizeMode::encode, PacketChangeMiningSizeMode::decode, PacketChangeMiningSizeMode.Handler::handle); - } - - public static void sendTo(Object msg, ServerPlayer player) { - if (!(player instanceof FakePlayer)) - HANDLER.sendTo(msg, player.connection.connection, NetworkDirection.PLAY_TO_CLIENT); - } - - public static void sendToAll(Object msg, Level world) { - //Todo Maybe only send to nearby players? - for (Player player : world.players()) { - if (!(player instanceof FakePlayer)) - HANDLER.sendTo(msg, ((ServerPlayer) player).connection.connection, NetworkDirection.PLAY_TO_CLIENT); - } - } + registrar.play(DurabilitySyncPayload.ID, DurabilitySyncPayload::new, handler -> handler.client(PacketDurabilitySync.get()::handle)); - public static void sendToServer(Object msg) { - HANDLER.sendToServer(msg); } } diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeBreakTypePayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeBreakTypePayload.java new file mode 100644 index 00000000..f200b74b --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeBreakTypePayload.java @@ -0,0 +1,25 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record ChangeBreakTypePayload() implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "change_break_type"); + + public ChangeBreakTypePayload(final FriendlyByteBuf buffer) { + this(); + } + + @Override + public void write(FriendlyByteBuf buffer) { + + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeColorPayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeColorPayload.java new file mode 100644 index 00000000..3151a671 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeColorPayload.java @@ -0,0 +1,37 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record ChangeColorPayload( + short red, + short green, + short blue, + short red_inner, + short green_inner, + short blue_inner +) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "change_color"); + + public ChangeColorPayload(final FriendlyByteBuf buffer) { + this(buffer.readShort(), buffer.readShort(), buffer.readShort(), buffer.readShort(), buffer.readShort(), buffer.readShort()); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeShort(red()); + buffer.writeShort(green()); + buffer.writeShort(blue()); + buffer.writeShort(red_inner()); + buffer.writeShort(green_inner()); + buffer.writeShort(blue_inner()); + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeFreezeDelayPayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeFreezeDelayPayload.java new file mode 100644 index 00000000..119dca2b --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeFreezeDelayPayload.java @@ -0,0 +1,27 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record ChangeFreezeDelayPayload( + int freezeDelay +) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "change_freeze_delay"); + + public ChangeFreezeDelayPayload(final FriendlyByteBuf buffer) { + this(buffer.readInt()); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeInt(freezeDelay()); + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeMiningSizeModePayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeMiningSizeModePayload.java new file mode 100644 index 00000000..3096ecb3 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeMiningSizeModePayload.java @@ -0,0 +1,25 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record ChangeMiningSizeModePayload() implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "change_mining_size_mode"); + + public ChangeMiningSizeModePayload(final FriendlyByteBuf buffer) { + this(); + } + + @Override + public void write(FriendlyByteBuf buffer) { + + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeMiningSizePayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeMiningSizePayload.java new file mode 100644 index 00000000..e9af57b3 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeMiningSizePayload.java @@ -0,0 +1,25 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record ChangeMiningSizePayload() implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "change_mining_size"); + + public ChangeMiningSizePayload(final FriendlyByteBuf buffer) { + this(); + } + + @Override + public void write(FriendlyByteBuf buffer) { + + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeRangePayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeRangePayload.java new file mode 100644 index 00000000..1da437cd --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeRangePayload.java @@ -0,0 +1,27 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record ChangeRangePayload( + int range +) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "change_range"); + + public ChangeRangePayload(final FriendlyByteBuf buffer) { + this(buffer.readInt()); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeInt(range()); + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeVolumePayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeVolumePayload.java new file mode 100644 index 00000000..56eb8b6e --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ChangeVolumePayload.java @@ -0,0 +1,27 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record ChangeVolumePayload( + float volume +) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "change_volume"); + + public ChangeVolumePayload(final FriendlyByteBuf buffer) { + this(buffer.readFloat()); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeFloat(volume()); + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/DurabilitySyncPayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/DurabilitySyncPayload.java new file mode 100644 index 00000000..09edd2f2 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/DurabilitySyncPayload.java @@ -0,0 +1,57 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtUtils; +import net.minecraft.nbt.Tag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Tuple; + +import java.util.ArrayList; +import java.util.List; + +public record DurabilitySyncPayload( + List> updateList +) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "durability_sync"); + + public DurabilitySyncPayload(final FriendlyByteBuf buffer) { + this(decodeList(buffer)); + } + + public static List> decodeList(final FriendlyByteBuf buffer) { + CompoundTag tag = buffer.readNbt(); + ListTag nbtList = tag.getList("list", Tag.TAG_COMPOUND); + List> thisList = new ArrayList<>(); + for (int i = 0; i < nbtList.size(); i++) { + CompoundTag nbt = nbtList.getCompound(i); + thisList.add(new Tuple<>(NbtUtils.readBlockPos(nbt.getCompound("pos")), nbt.getInt("dur"))); + } + return thisList; + } + + @Override + public void write(FriendlyByteBuf buffer) { + List> thisList = List.copyOf(updateList()); + CompoundTag tag = new CompoundTag(); + ListTag nbtList = new ListTag(); + for (int i = 0; i < thisList.size(); i++) { + CompoundTag nbt = new CompoundTag(); + nbt.put("pos", NbtUtils.writeBlockPos(thisList.get(i).getA())); + nbt.putInt("dur", thisList.get(i).getB()); + nbtList.add(i, nbt); + } + tag.put("list", nbtList); + buffer.writeNbt(tag); + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/ExtractUpgradePayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ExtractUpgradePayload.java new file mode 100644 index 00000000..318ef740 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ExtractUpgradePayload.java @@ -0,0 +1,32 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record ExtractUpgradePayload( + BlockPos pos, + String upgrade, + int nameLength +) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "extract_upgrade"); + + public ExtractUpgradePayload(final FriendlyByteBuf buffer) { + this(buffer.readBlockPos(), buffer.readUtf(), buffer.readInt()); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeBlockPos(pos()); + buffer.writeUtf(upgrade()); + buffer.writeInt(nameLength()); + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/GhostSlotPayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/GhostSlotPayload.java new file mode 100644 index 00000000..6dd648b5 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/GhostSlotPayload.java @@ -0,0 +1,30 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public record GhostSlotPayload( + int slotNumber, + ItemStack stack +) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "ghost_slot"); + + public GhostSlotPayload(final FriendlyByteBuf buffer) { + this(buffer.readInt(), buffer.readItem()); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeInt(slotNumber()); + buffer.writeItem(stack()); + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/InsertUpgradePayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/InsertUpgradePayload.java new file mode 100644 index 00000000..f3d51876 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/InsertUpgradePayload.java @@ -0,0 +1,31 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +public record InsertUpgradePayload( + BlockPos pos, + ItemStack upgrade +) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "insert_upgrade"); + + public InsertUpgradePayload(final FriendlyByteBuf buffer) { + this(buffer.readBlockPos(), buffer.readItem()); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeBlockPos(pos()); + buffer.writeItem(upgrade()); + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/OpenFilterContainerPayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/OpenFilterContainerPayload.java new file mode 100644 index 00000000..919416b2 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/OpenFilterContainerPayload.java @@ -0,0 +1,25 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record OpenFilterContainerPayload() implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "open_filter_container"); + + public OpenFilterContainerPayload(final FriendlyByteBuf buffer) { + this(); + } + + @Override + public void write(FriendlyByteBuf buffer) { + + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/ToggleFiltersPayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ToggleFiltersPayload.java new file mode 100644 index 00000000..2abf1018 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/ToggleFiltersPayload.java @@ -0,0 +1,25 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record ToggleFiltersPayload() implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "toggle_filters"); + + public ToggleFiltersPayload(final FriendlyByteBuf buffer) { + this(); + } + + @Override + public void write(FriendlyByteBuf buffer) { + + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/TogglePrecisionPayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/TogglePrecisionPayload.java new file mode 100644 index 00000000..2d0ef7a5 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/TogglePrecisionPayload.java @@ -0,0 +1,25 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record TogglePrecisionPayload() implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "toggle_precision"); + + public TogglePrecisionPayload(final FriendlyByteBuf buffer) { + this(); + } + + @Override + public void write(FriendlyByteBuf buffer) { + + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/data/UpdateUpgradePayload.java b/src/main/java/com/direwolf20/mininggadgets/common/network/data/UpdateUpgradePayload.java new file mode 100644 index 00000000..6f5f9f68 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/data/UpdateUpgradePayload.java @@ -0,0 +1,27 @@ +package com.direwolf20.mininggadgets.common.network.data; + +import com.direwolf20.mininggadgets.common.MiningGadgets; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record UpdateUpgradePayload( + String upgrade +) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(MiningGadgets.MOD_ID, "update_upgrade"); + + public UpdateUpgradePayload(final FriendlyByteBuf buffer) { + this(buffer.readUtf()); + } + + @Override + public void write(FriendlyByteBuf buffer) { + buffer.writeUtf(upgrade()); + } + + @Override + public ResourceLocation id() { + return ID; + } +} + diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeBreakType.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeBreakType.java new file mode 100644 index 00000000..136dd447 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeBreakType.java @@ -0,0 +1,31 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; +import com.direwolf20.mininggadgets.common.network.data.ChangeBreakTypePayload; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketChangeBreakType { + public static final PacketChangeBreakType INSTANCE = new PacketChangeBreakType(); + + public static PacketChangeBreakType get() { + return INSTANCE; + } + + public void handle(final ChangeBreakTypePayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + Player player = senderOptional.get(); + + + ItemStack stack = MiningGadget.getGadget(player); + MiningProperties.nextBreakType(stack); + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeColor.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeColor.java new file mode 100644 index 00000000..d6831d1c --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeColor.java @@ -0,0 +1,36 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; +import com.direwolf20.mininggadgets.common.network.data.ChangeColorPayload; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketChangeColor { + public static final PacketChangeColor INSTANCE = new PacketChangeColor(); + + public static PacketChangeColor get() { + return INSTANCE; + } + + public void handle(final ChangeColorPayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + Player player = senderOptional.get(); + + + ItemStack stack = MiningGadget.getGadget(player); + MiningProperties.setColor(stack, payload.red(), MiningProperties.COLOR_RED); + MiningProperties.setColor(stack, payload.green(), MiningProperties.COLOR_GREEN); + MiningProperties.setColor(stack, payload.blue(), MiningProperties.COLOR_BLUE); + MiningProperties.setColor(stack, payload.red_inner(), MiningProperties.COLOR_RED_INNER); + MiningProperties.setColor(stack, payload.green_inner(), MiningProperties.COLOR_GREEN_INNER); + MiningProperties.setColor(stack, payload.blue_inner(), MiningProperties.COLOR_BLUE_INNER); + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeFreezeDelay.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeFreezeDelay.java new file mode 100644 index 00000000..1ed1f64b --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeFreezeDelay.java @@ -0,0 +1,33 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; +import com.direwolf20.mininggadgets.common.network.data.ChangeFreezeDelayPayload; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketChangeFreezeDelay { + public static final PacketChangeFreezeDelay INSTANCE = new PacketChangeFreezeDelay(); + + public static PacketChangeFreezeDelay get() { + return INSTANCE; + } + + public void handle(final ChangeFreezeDelayPayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + Player player = senderOptional.get(); + + + ItemStack stack = MiningGadget.getGadget(player); + + // Active toggle feature + MiningProperties.setFreezeDelay(stack, payload.freezeDelay()); + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeMiningSize.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeMiningSize.java new file mode 100644 index 00000000..ecb15062 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeMiningSize.java @@ -0,0 +1,30 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.network.data.ChangeMiningSizePayload; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketChangeMiningSize { + public static final PacketChangeMiningSize INSTANCE = new PacketChangeMiningSize(); + + public static PacketChangeMiningSize get() { + return INSTANCE; + } + + public void handle(final ChangeMiningSizePayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + Player player = senderOptional.get(); + + + ItemStack stack = MiningGadget.getGadget(player); + MiningGadget.changeRange(stack); + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeMiningSizeMode.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeMiningSizeMode.java new file mode 100644 index 00000000..0d6224b0 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeMiningSizeMode.java @@ -0,0 +1,31 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; +import com.direwolf20.mininggadgets.common.network.data.ChangeMiningSizeModePayload; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketChangeMiningSizeMode { + public static final PacketChangeMiningSizeMode INSTANCE = new PacketChangeMiningSizeMode(); + + public static PacketChangeMiningSizeMode get() { + return INSTANCE; + } + + public void handle(final ChangeMiningSizeModePayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + Player player = senderOptional.get(); + + + ItemStack stack = MiningGadget.getGadget(player); + MiningProperties.nextSizeMode(stack); + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeRange.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeRange.java new file mode 100644 index 00000000..343f5b46 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeRange.java @@ -0,0 +1,31 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; +import com.direwolf20.mininggadgets.common.network.data.ChangeRangePayload; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketChangeRange { + public static final PacketChangeRange INSTANCE = new PacketChangeRange(); + + public static PacketChangeRange get() { + return INSTANCE; + } + + public void handle(final ChangeRangePayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + Player player = senderOptional.get(); + + + ItemStack stack = MiningGadget.getGadget(player); + MiningProperties.setBeamRange(stack, payload.range()); + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeVolume.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeVolume.java new file mode 100644 index 00000000..c0fbd4bc --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketChangeVolume.java @@ -0,0 +1,31 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; +import com.direwolf20.mininggadgets.common.network.data.ChangeVolumePayload; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketChangeVolume { + public static final PacketChangeVolume INSTANCE = new PacketChangeVolume(); + + public static PacketChangeVolume get() { + return INSTANCE; + } + + public void handle(final ChangeVolumePayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + Player player = senderOptional.get(); + + + ItemStack stack = MiningGadget.getGadget(player); + MiningProperties.setVolume(stack, payload.volume()); + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketDurabilitySync.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketDurabilitySync.java new file mode 100644 index 00000000..c73a9a6e --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketDurabilitySync.java @@ -0,0 +1,33 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.network.data.DurabilitySyncPayload; +import com.direwolf20.mininggadgets.common.tiles.RenderBlockTileEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Tuple; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.List; + +public class PacketDurabilitySync { + public static final PacketDurabilitySync INSTANCE = new PacketDurabilitySync(); + + public static PacketDurabilitySync get() { + return INSTANCE; + } + + public void handle(final DurabilitySyncPayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + List> thisList = payload.updateList(); + + for (int i = 0; i < thisList.size(); i++) { + BlockPos pos = thisList.get(i).getA(); + int durability = thisList.get(i).getB(); + BlockEntity clientTE = Minecraft.getInstance().level.getBlockEntity(pos); + if (!(clientTE instanceof RenderBlockTileEntity)) return; + ((RenderBlockTileEntity) clientTE).setClientDurability(durability); + } + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketExtractUpgrade.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketExtractUpgrade.java new file mode 100644 index 00000000..0813d24d --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketExtractUpgrade.java @@ -0,0 +1,40 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.containers.ModificationTableCommands; +import com.direwolf20.mininggadgets.common.containers.ModificationTableContainer; +import com.direwolf20.mininggadgets.common.network.data.ExtractUpgradePayload; +import com.direwolf20.mininggadgets.common.tiles.ModificationTableTileEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketExtractUpgrade { + public static final PacketExtractUpgrade INSTANCE = new PacketExtractUpgrade(); + + public static PacketExtractUpgrade get() { + return INSTANCE; + } + + public void handle(final ExtractUpgradePayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + ServerPlayer player = (ServerPlayer) senderOptional.get(); + + Level world = player.level(); + BlockPos pos = payload.pos(); + + BlockEntity te = world.getBlockEntity(pos); + if (!(te instanceof ModificationTableTileEntity)) return; + ModificationTableContainer container = ((ModificationTableTileEntity) te).getContainer(player); + + ModificationTableCommands.extractButton(container, player, payload.upgrade()); + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketGhostSlot.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketGhostSlot.java new file mode 100644 index 00000000..f7304dc5 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketGhostSlot.java @@ -0,0 +1,35 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.containers.GhostSlot; +import com.direwolf20.mininggadgets.common.network.data.GhostSlotPayload; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.Slot; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketGhostSlot { + public static final PacketGhostSlot INSTANCE = new PacketGhostSlot(); + + public static PacketGhostSlot get() { + return INSTANCE; + } + + public void handle(final GhostSlotPayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + Player player = senderOptional.get(); + + AbstractContainerMenu container = player.containerMenu; + if (container == null) + return; + + Slot slot = container.slots.get(payload.slotNumber()); + if (slot instanceof GhostSlot) + slot.set(payload.stack()); + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketInsertUpgrade.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketInsertUpgrade.java new file mode 100644 index 00000000..0bc39d41 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketInsertUpgrade.java @@ -0,0 +1,48 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.containers.ModificationTableCommands; +import com.direwolf20.mininggadgets.common.containers.ModificationTableContainer; +import com.direwolf20.mininggadgets.common.network.data.InsertUpgradePayload; +import com.direwolf20.mininggadgets.common.tiles.ModificationTableTileEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketInsertUpgrade { + public static final PacketInsertUpgrade INSTANCE = new PacketInsertUpgrade(); + + public static PacketInsertUpgrade get() { + return INSTANCE; + } + + public void handle(final InsertUpgradePayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + ServerPlayer player = (ServerPlayer) senderOptional.get(); + + Level world = player.level(); + BlockPos pos = payload.pos(); + + BlockEntity te = world.getBlockEntity(pos); + if (!(te instanceof ModificationTableTileEntity)) return; + ModificationTableContainer container = ((ModificationTableTileEntity) te).getContainer(player); + + ItemStack stack = player.containerMenu.getCarried(); + if (!ItemStack.matches(stack, payload.upgrade())) { + return; + } + + if (ModificationTableCommands.insertButton(container, payload.upgrade())) { + player.containerMenu.setCarried(ItemStack.EMPTY); + } + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketOpenFilterContainer.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketOpenFilterContainer.java new file mode 100644 index 00000000..fe4dbb6e --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketOpenFilterContainer.java @@ -0,0 +1,52 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.containers.FilterContainer; +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; +import com.direwolf20.mininggadgets.common.network.data.OpenFilterContainerPayload; +import net.minecraft.network.chat.Component; +import net.minecraft.world.SimpleMenuProvider; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.items.ItemStackHandler; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketOpenFilterContainer { + public static final PacketOpenFilterContainer INSTANCE = new PacketOpenFilterContainer(); + + public static PacketOpenFilterContainer get() { + return INSTANCE; + } + + public void handle(final OpenFilterContainerPayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + + Player player = senderOptional.get(); + AbstractContainerMenu container = player.containerMenu; + if (container == null) + return; + + ItemStack stack = MiningGadget.getGadget(player); + if (stack.isEmpty()) + return; + + ItemStackHandler ghostInventory = new ItemStackHandler(30) { + @Override + protected void onContentsChanged(int slot) { + stack.getOrCreateTag().put(MiningProperties.KEY_FILTERS, serializeNBT()); + } + }; + + ghostInventory.deserializeNBT(stack.getOrCreateTagElement(MiningProperties.KEY_FILTERS)); + player.openMenu(new SimpleMenuProvider( + (windowId, playerInventory, playerEntity) -> new FilterContainer(windowId, playerInventory, ghostInventory), Component.literal("") + )); + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketToggleFilters.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketToggleFilters.java new file mode 100644 index 00000000..a819abc7 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketToggleFilters.java @@ -0,0 +1,30 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; +import com.direwolf20.mininggadgets.common.network.data.ToggleFiltersPayload; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketToggleFilters { + public static final PacketToggleFilters INSTANCE = new PacketToggleFilters(); + + public static PacketToggleFilters get() { + return INSTANCE; + } + + public void handle(final ToggleFiltersPayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + Player player = senderOptional.get(); + + ItemStack stack = MiningGadget.getGadget(player); + MiningProperties.setWhitelist(stack, !MiningProperties.getWhiteList(stack)); + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketTogglePrecision.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketTogglePrecision.java new file mode 100644 index 00000000..d3c33a1b --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketTogglePrecision.java @@ -0,0 +1,30 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; +import com.direwolf20.mininggadgets.common.network.data.TogglePrecisionPayload; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketTogglePrecision { + public static final PacketTogglePrecision INSTANCE = new PacketTogglePrecision(); + + public static PacketTogglePrecision get() { + return INSTANCE; + } + + public void handle(final TogglePrecisionPayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + Player player = senderOptional.get(); + + ItemStack stack = MiningGadget.getGadget(player); + MiningProperties.setPrecisionMode(stack, !MiningProperties.getPrecisionMode(stack)); + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketUpdateUpgrade.java b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketUpdateUpgrade.java new file mode 100644 index 00000000..9d530b07 --- /dev/null +++ b/src/main/java/com/direwolf20/mininggadgets/common/network/handler/PacketUpdateUpgrade.java @@ -0,0 +1,36 @@ +package com.direwolf20.mininggadgets.common.network.handler; + +import com.direwolf20.mininggadgets.common.items.MiningGadget; +import com.direwolf20.mininggadgets.common.items.upgrade.Upgrade; +import com.direwolf20.mininggadgets.common.items.upgrade.UpgradeTools; +import com.direwolf20.mininggadgets.common.network.data.UpdateUpgradePayload; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; + +import java.util.Optional; + +public class PacketUpdateUpgrade { + public static final PacketUpdateUpgrade INSTANCE = new PacketUpdateUpgrade(); + + public static PacketUpdateUpgrade get() { + return INSTANCE; + } + + public void handle(final UpdateUpgradePayload payload, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + Optional senderOptional = context.player(); + if (senderOptional.isEmpty()) + return; + ServerPlayer player = (ServerPlayer) senderOptional.get(); + + Upgrade upgrade = UpgradeTools.getUpgradeByName(payload.upgrade()); + if (upgrade == null) + return; + + ItemStack stack = MiningGadget.getGadget(player); + UpgradeTools.updateUpgrade(stack, upgrade); //todo: change. + }); + } +} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeBreakType.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeBreakType.java deleted file mode 100644 index cb752210..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeBreakType.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; -import com.direwolf20.mininggadgets.common.items.MiningGadget; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.network.NetworkEvent; - - -import java.util.function.Supplier; - -public class PacketChangeBreakType { - public PacketChangeBreakType() { - } - - public static void encode(PacketChangeBreakType msg, FriendlyByteBuf buffer) { - } - - public static PacketChangeBreakType decode(FriendlyByteBuf buffer) { - return new PacketChangeBreakType(); - } - - public static class Handler { - public static void handle(PacketChangeBreakType msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer player = ctx.get().getSender(); - if (player == null) - return; - - ItemStack stack = MiningGadget.getGadget(player); - MiningProperties.nextBreakType(stack); - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeColor.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeColor.java deleted file mode 100644 index 5b633d55..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeColor.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; -import com.direwolf20.mininggadgets.common.items.MiningGadget; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class PacketChangeColor { - private final short red; - private final short green; - private final short blue; - private final short red_inner; - private final short green_inner; - private final short blue_inner; - - public PacketChangeColor(int red, int green, int blue, int red_inner, int green_inner, int blue_inner) { - this.red = (short) red; - this.green = (short) green; - this.blue = (short) blue; - this.red_inner = (short) red_inner; - this.green_inner = (short) green_inner; - this.blue_inner = (short) blue_inner; - } - - public static void encode(PacketChangeColor msg, FriendlyByteBuf buffer) { - buffer.writeShort(msg.red); - buffer.writeShort(msg.green); - buffer.writeShort(msg.blue); - buffer.writeShort(msg.red_inner); - buffer.writeShort(msg.green_inner); - buffer.writeShort(msg.blue_inner); - } - - public static PacketChangeColor decode(FriendlyByteBuf buffer) { - return new PacketChangeColor(buffer.readShort(), buffer.readShort(), buffer.readShort(), buffer.readShort(), buffer.readShort(), buffer.readShort()); - } - - public static class Handler { - public static void handle(PacketChangeColor msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer player = ctx.get().getSender(); - if (player == null) - return; - - ItemStack stack = MiningGadget.getGadget(player); - MiningProperties.setColor(stack, msg.red, MiningProperties.COLOR_RED); - MiningProperties.setColor(stack, msg.green, MiningProperties.COLOR_GREEN); - MiningProperties.setColor(stack, msg.blue, MiningProperties.COLOR_BLUE); - MiningProperties.setColor(stack, msg.red_inner, MiningProperties.COLOR_RED_INNER); - MiningProperties.setColor(stack, msg.green_inner, MiningProperties.COLOR_GREEN_INNER); - MiningProperties.setColor(stack, msg.blue_inner, MiningProperties.COLOR_BLUE_INNER); - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeFreezeDelay.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeFreezeDelay.java deleted file mode 100644 index 518cb125..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeFreezeDelay.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; -import com.direwolf20.mininggadgets.common.items.MiningGadget; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class PacketChangeFreezeDelay { - private int freezeDelay; - - public PacketChangeFreezeDelay(int freezeDelay) { - this.freezeDelay = freezeDelay; - } - - public static void encode(PacketChangeFreezeDelay msg, FriendlyByteBuf buffer) { - buffer.writeInt(msg.freezeDelay); - } - - public static PacketChangeFreezeDelay decode(FriendlyByteBuf buffer) { - return new PacketChangeFreezeDelay(buffer.readInt()); - } - - public static class Handler { - public static void handle(PacketChangeFreezeDelay msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer player = ctx.get().getSender(); - if (player == null) - return; - - ItemStack stack = MiningGadget.getGadget(player); - - // Active toggle feature - MiningProperties.setFreezeDelay(stack, msg.freezeDelay); - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeMiningSize.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeMiningSize.java deleted file mode 100644 index 2f56dd6c..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeMiningSize.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.items.MiningGadget; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class PacketChangeMiningSize { - public PacketChangeMiningSize() {} - - public static void encode(PacketChangeMiningSize msg, FriendlyByteBuf buffer) {} - public static PacketChangeMiningSize decode(FriendlyByteBuf buffer) { return new PacketChangeMiningSize(); } - - public static class Handler { - public static void handle(PacketChangeMiningSize msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer player = ctx.get().getSender(); - if (player == null) - return; - - ItemStack stack = MiningGadget.getGadget(player); - MiningGadget.changeRange(stack); - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeMiningSizeMode.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeMiningSizeMode.java deleted file mode 100644 index 0d75ae4a..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeMiningSizeMode.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.items.MiningGadget; -import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class PacketChangeMiningSizeMode { - public PacketChangeMiningSizeMode() {} - - public static void encode(PacketChangeMiningSizeMode msg, FriendlyByteBuf buffer) {} - public static PacketChangeMiningSizeMode decode(FriendlyByteBuf buffer) { return new PacketChangeMiningSizeMode(); } - - public static class Handler { - public static void handle(PacketChangeMiningSizeMode msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer player = ctx.get().getSender(); - if (player == null) - return; - - ItemStack stack = MiningGadget.getGadget(player); - MiningProperties.nextSizeMode(stack); - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeRange.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeRange.java deleted file mode 100644 index e4daf600..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeRange.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; -import com.direwolf20.mininggadgets.common.items.MiningGadget; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class PacketChangeRange { - private final int range; - - public PacketChangeRange(int range) { - this.range = range; - } - - public static void encode(PacketChangeRange msg, FriendlyByteBuf buffer) { - buffer.writeInt(msg.range); - } - - public static PacketChangeRange decode(FriendlyByteBuf buffer) { - return new PacketChangeRange(buffer.readInt()); - } - - public static class Handler { - public static void handle(PacketChangeRange msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer player = ctx.get().getSender(); - if (player == null) - return; - - ItemStack stack = MiningGadget.getGadget(player); - MiningProperties.setBeamRange(stack, msg.range); - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeVolume.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeVolume.java deleted file mode 100644 index be77d209..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketChangeVolume.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; -import com.direwolf20.mininggadgets.common.items.MiningGadget; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class PacketChangeVolume { - private final float volume; - - public PacketChangeVolume(float volume) { - this.volume = volume; - } - - public static void encode(PacketChangeVolume msg, FriendlyByteBuf buffer) { - buffer.writeFloat(msg.volume); - } - - public static PacketChangeVolume decode(FriendlyByteBuf buffer) { - return new PacketChangeVolume(buffer.readFloat()); - } - - public static class Handler { - public static void handle(PacketChangeVolume msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer player = ctx.get().getSender(); - if (player == null) - return; - - ItemStack stack = MiningGadget.getGadget(player); - - // Active toggle feature - MiningProperties.setVolume(stack, msg.volume); - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketDurabilitySync.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketDurabilitySync.java deleted file mode 100644 index 7aaada4e..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketDurabilitySync.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.tiles.RenderBlockTileEntity; -import net.minecraft.client.Minecraft; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.NbtUtils; -import net.minecraft.nbt.Tag; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.util.Tuple; -import net.minecraft.core.BlockPos; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.network.NetworkEvent; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Supplier; - -public class PacketDurabilitySync { - private final List> updateList; - //private final int priorDurability; - - public PacketDurabilitySync(List> updateList) { - this.updateList = updateList; - } - - public static void encode(PacketDurabilitySync msg, FriendlyByteBuf buffer) { - List> thisList = msg.updateList; - CompoundTag tag = new CompoundTag(); - ListTag nbtList = new ListTag(); - for (int i = 0; i < thisList.size(); i++) { - CompoundTag nbt = new CompoundTag(); - nbt.put("pos", NbtUtils.writeBlockPos(thisList.get(i).getA())); - nbt.putInt("dur", thisList.get(i).getB()); - nbtList.add(i, nbt); - } - tag.put("list", nbtList); - buffer.writeNbt(tag); - } - - public static PacketDurabilitySync decode(FriendlyByteBuf buffer) { - CompoundTag tag = buffer.readNbt(); - ListTag nbtList = tag.getList("list", Tag.TAG_COMPOUND); - List> thisList = new ArrayList<>(); - for (int i = 0; i < nbtList.size(); i++) { - CompoundTag nbt = nbtList.getCompound(i); - thisList.add(new Tuple<>(NbtUtils.readBlockPos(nbt.getCompound("pos")), nbt.getInt("dur"))); - } - return new PacketDurabilitySync(thisList); - } - - public static class Handler { - public static void handle(PacketDurabilitySync msg, Supplier ctx) { - ctx.get().enqueueWork(() -> DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> clientPacketHandler(msg))); - ctx.get().setPacketHandled(true); - } - } - - public static void clientPacketHandler(PacketDurabilitySync msg) { - List> thisList = msg.updateList; - - for (int i = 0; i < thisList.size(); i++) { - BlockPos pos = thisList.get(i).getA(); - int durability = thisList.get(i).getB(); - BlockEntity clientTE = Minecraft.getInstance().level.getBlockEntity(pos); - if (!(clientTE instanceof RenderBlockTileEntity)) return; - ((RenderBlockTileEntity) clientTE).setClientDurability(durability); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketExtractUpgrade.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketExtractUpgrade.java deleted file mode 100644 index e291cdb5..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketExtractUpgrade.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.containers.ModificationTableCommands; -import com.direwolf20.mininggadgets.common.containers.ModificationTableContainer; -import com.direwolf20.mininggadgets.common.tiles.ModificationTableTileEntity; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class PacketExtractUpgrade { - - private final BlockPos pos; - private final String upgrade; - private final int nameLength; - - public PacketExtractUpgrade(BlockPos blockPos, String upgrade, int nameLength) { - this.pos = blockPos; - this.upgrade = upgrade; - this.nameLength = nameLength; - } - - public static void encode(PacketExtractUpgrade msg, FriendlyByteBuf buffer) { - buffer.writeInt(msg.nameLength); - buffer.writeBlockPos(msg.pos); - buffer.writeUtf(msg.upgrade); - } - - public static PacketExtractUpgrade decode(FriendlyByteBuf buffer) { - int strLength = buffer.readInt(); - return new PacketExtractUpgrade(buffer.readBlockPos(), buffer.readUtf(strLength), strLength); - } - - public static class Handler { - public static void handle(PacketExtractUpgrade msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer player = ctx.get().getSender(); - if (player == null) return; - - Level world = player.level(); - BlockPos pos = msg.pos; - - BlockEntity te = world.getBlockEntity(pos); - if (!(te instanceof ModificationTableTileEntity)) return; - ModificationTableContainer container = ((ModificationTableTileEntity) te).getContainer(player); - - ModificationTableCommands.extractButton(container, player, msg.upgrade); - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketGhostSlot.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketGhostSlot.java deleted file mode 100644 index f885777b..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketGhostSlot.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.containers.GhostSlot; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.inventory.Slot; -import net.minecraft.world.item.ItemStack; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class PacketGhostSlot { - private int slotNumber; - private ItemStack stack; - - public PacketGhostSlot(int slotNumber, ItemStack stack) { - this.slotNumber = slotNumber; - this.stack = stack; - } - - public static void encode(PacketGhostSlot msg, FriendlyByteBuf buffer) { - buffer.writeInt(msg.slotNumber); - buffer.writeItem(msg.stack); - } - - public static PacketGhostSlot decode(FriendlyByteBuf buffer) { - return new PacketGhostSlot(buffer.readInt(), buffer.readItem()); - } - - public static class Handler { - public static void handle(PacketGhostSlot msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer sender = ctx.get().getSender(); - if (sender == null) - return; - - AbstractContainerMenu container = sender.containerMenu; - if (container == null) - return; - - Slot slot = container.slots.get(msg.slotNumber); - if (slot instanceof GhostSlot) - slot.set(msg.stack); - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketInsertUpgrade.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketInsertUpgrade.java deleted file mode 100644 index 8e60e7f6..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketInsertUpgrade.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.containers.ModificationTableCommands; -import com.direwolf20.mininggadgets.common.containers.ModificationTableContainer; -import com.direwolf20.mininggadgets.common.tiles.ModificationTableTileEntity; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public final class PacketInsertUpgrade { - public static PacketInsertUpgrade decode(FriendlyByteBuf buffer) { - return new PacketInsertUpgrade(buffer.readBlockPos(), buffer.readItem()); - } - - private final BlockPos pos; - private final ItemStack upgrade; - - public PacketInsertUpgrade(BlockPos blockPos, ItemStack stack) { - this.pos = blockPos; - this.upgrade = stack; - } - - public void encode(FriendlyByteBuf buffer) { - buffer.writeBlockPos(pos); - buffer.writeItem(upgrade); - } - - public void handler(Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer player = ctx.get().getSender(); - if (player == null) return; - - Level world = player.level(); - BlockPos pos = this.pos; - - BlockEntity te = world.getBlockEntity(pos); - if (!(te instanceof ModificationTableTileEntity)) return; - ModificationTableContainer container = ((ModificationTableTileEntity) te).getContainer(player); - - ItemStack stack = player.containerMenu.getCarried(); - if (!ItemStack.matches(stack, upgrade)) { - return; - } - - if (ModificationTableCommands.insertButton(container, this.upgrade)) { - player.containerMenu.setCarried(ItemStack.EMPTY); - } - }); - - ctx.get().setPacketHandled(true); - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketOpenFilterContainer.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketOpenFilterContainer.java deleted file mode 100644 index 64f81a80..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketOpenFilterContainer.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.containers.FilterContainer; -import com.direwolf20.mininggadgets.common.items.MiningGadget; -import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.SimpleMenuProvider; -import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.ItemStackHandler; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class PacketOpenFilterContainer { - public PacketOpenFilterContainer() { } - - public static void encode(PacketOpenFilterContainer msg, FriendlyByteBuf buffer) {} - public static PacketOpenFilterContainer decode(FriendlyByteBuf buffer) { return new PacketOpenFilterContainer(); } - - public static class Handler { - public static void handle(PacketOpenFilterContainer msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer sender = ctx.get().getSender(); - if (sender == null) - return; - - AbstractContainerMenu container = sender.containerMenu; - if (container == null) - return; - - ItemStack stack = MiningGadget.getGadget(sender); - if( stack.isEmpty() ) - return; - - ItemStackHandler ghostInventory = new ItemStackHandler(30) { - @Override - protected void onContentsChanged(int slot) { - stack.getOrCreateTag().put(MiningProperties.KEY_FILTERS, serializeNBT()); - } - }; - - ghostInventory.deserializeNBT(stack.getOrCreateTagElement(MiningProperties.KEY_FILTERS)); - sender.openMenu(new SimpleMenuProvider( - (windowId, playerInventory, playerEntity) -> new FilterContainer(windowId, playerInventory, ghostInventory), Component.literal("") - )); - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketToggleFilters.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketToggleFilters.java deleted file mode 100644 index c63c10bd..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketToggleFilters.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; -import com.direwolf20.mininggadgets.common.items.MiningGadget; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class PacketToggleFilters { - public PacketToggleFilters() { - } - - public static void encode(PacketToggleFilters msg, FriendlyByteBuf buffer) { - - } - - public static PacketToggleFilters decode(FriendlyByteBuf buffer) { - return new PacketToggleFilters(); - } - - public static class Handler { - public static void handle(PacketToggleFilters msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer player = ctx.get().getSender(); - if (player == null) - return; - - ItemStack stack = MiningGadget.getGadget(player); - - // Active toggle feature - MiningProperties.setWhitelist(stack, !MiningProperties.getWhiteList(stack)); - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketTogglePrecision.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketTogglePrecision.java deleted file mode 100644 index 59608450..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketTogglePrecision.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.items.gadget.MiningProperties; -import com.direwolf20.mininggadgets.common.items.MiningGadget; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class PacketTogglePrecision { - public PacketTogglePrecision() { - } - - public static void encode(PacketTogglePrecision msg, FriendlyByteBuf buffer) { - - } - - public static PacketTogglePrecision decode(FriendlyByteBuf buffer) { - return new PacketTogglePrecision(); - } - - public static class Handler { - public static void handle(PacketTogglePrecision msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer player = ctx.get().getSender(); - if (player == null) - return; - - ItemStack stack = MiningGadget.getGadget(player); - - // Active toggle feature - MiningProperties.setPrecisionMode(stack, !MiningProperties.getPrecisionMode(stack)); - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketUpdateUpgrade.java b/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketUpdateUpgrade.java deleted file mode 100644 index 2d27ed42..00000000 --- a/src/main/java/com/direwolf20/mininggadgets/common/network/packets/PacketUpdateUpgrade.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.direwolf20.mininggadgets.common.network.packets; - -import com.direwolf20.mininggadgets.common.items.upgrade.Upgrade; -import com.direwolf20.mininggadgets.common.items.upgrade.UpgradeTools; -import com.direwolf20.mininggadgets.common.items.MiningGadget; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class PacketUpdateUpgrade { - private final String upgrade; - - public PacketUpdateUpgrade(String upgrade) { - this.upgrade = upgrade; - } - - public static void encode(PacketUpdateUpgrade msg, FriendlyByteBuf buffer) { - buffer.writeUtf(msg.upgrade); - } - - public static PacketUpdateUpgrade decode(FriendlyByteBuf buffer) { - return new PacketUpdateUpgrade(buffer.readUtf(100)); - } - - public static class Handler { - public static void handle(PacketUpdateUpgrade msg, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerPlayer player = ctx.get().getSender(); - if (player == null) - return; - - Upgrade upgrade = UpgradeTools.getUpgradeByName(msg.upgrade); - if( upgrade == null ) - return; - - ItemStack stack = MiningGadget.getGadget(player); - UpgradeTools.updateUpgrade(stack, upgrade); //todo: change. - }); - - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/com/direwolf20/mininggadgets/setup/Config.java b/src/main/java/com/direwolf20/mininggadgets/setup/Config.java index 23194ec8..35f5ec3d 100644 --- a/src/main/java/com/direwolf20/mininggadgets/setup/Config.java +++ b/src/main/java/com/direwolf20/mininggadgets/setup/Config.java @@ -1,11 +1,9 @@ package com.direwolf20.mininggadgets.setup; import net.neoforged.fml.ModLoadingContext; -import net.neoforged.fml.common.Mod; import net.neoforged.fml.config.ModConfig; import net.neoforged.neoforge.common.ModConfigSpec; -@Mod.EventBusSubscriber public class Config { public static final String CATEGORY_GENERAL = "general"; From 8878ab6b8eebe4a822f4b3ef0a14847126684eb6 Mon Sep 17 00:00:00 2001 From: direwolf20 <39863894+Direwolf20-MC@users.noreply.github.com> Date: Thu, 15 Feb 2024 17:06:57 -0500 Subject: [PATCH 3/8] Fix BER Connection for rendering --- .../java/com/direwolf20/mininggadgets/setup/ClientSetup.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/direwolf20/mininggadgets/setup/ClientSetup.java b/src/main/java/com/direwolf20/mininggadgets/setup/ClientSetup.java index efc0a793..521ba1b1 100644 --- a/src/main/java/com/direwolf20/mininggadgets/setup/ClientSetup.java +++ b/src/main/java/com/direwolf20/mininggadgets/setup/ClientSetup.java @@ -5,12 +5,16 @@ import com.direwolf20.mininggadgets.client.renderer.RenderBlockTER; import com.direwolf20.mininggadgets.client.screens.FilterScreen; import com.direwolf20.mininggadgets.client.screens.ModificationTableScreen; +import com.direwolf20.mininggadgets.common.MiningGadgets; import net.minecraft.client.gui.screens.MenuScreens; +import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.EntityRenderersEvent; import net.neoforged.neoforge.common.NeoForge; +@Mod.EventBusSubscriber(modid = MiningGadgets.MOD_ID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public class ClientSetup { public static void init(final FMLClientSetupEvent event) { //registerRenderers(event); From 9805e031ec1450153858383dd0478d853e95c296 Mon Sep 17 00:00:00 2001 From: direwolf20 <39863894+Direwolf20-MC@users.noreply.github.com> Date: Thu, 15 Feb 2024 17:16:35 -0500 Subject: [PATCH 4/8] Fix Upgrade Items in Creative mode tab, and handler for Modification table --- .../mininggadgets/common/MiningGadgets.java | 5 +++++ .../direwolf20/mininggadgets/setup/ModSetup.java | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/direwolf20/mininggadgets/common/MiningGadgets.java b/src/main/java/com/direwolf20/mininggadgets/common/MiningGadgets.java index d69ac213..4f2c45a3 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/MiningGadgets.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/MiningGadgets.java @@ -3,6 +3,7 @@ import com.direwolf20.mininggadgets.common.capabilities.EnergisedItem; import com.direwolf20.mininggadgets.common.items.MiningGadget; import com.direwolf20.mininggadgets.common.network.PacketHandler; +import com.direwolf20.mininggadgets.common.tiles.ModificationTableTileEntity; import com.direwolf20.mininggadgets.setup.ClientSetup; import com.direwolf20.mininggadgets.setup.Config; import com.direwolf20.mininggadgets.setup.ModSetup; @@ -49,6 +50,10 @@ private void registerCapabilities(RegisterCapabilitiesEvent event) { Registration.MININGGADGET_FANCY.get(), Registration.MININGGADGET_SIMPLE.get() ); + event.registerBlock(Capabilities.ItemHandler.BLOCK, + (level, pos, state, be, side) -> ((ModificationTableTileEntity) be).handler, + // blocks to register for + Registration.MODIFICATION_TABLE.get()); } @SubscribeEvent diff --git a/src/main/java/com/direwolf20/mininggadgets/setup/ModSetup.java b/src/main/java/com/direwolf20/mininggadgets/setup/ModSetup.java index 283a1c03..3718e40e 100644 --- a/src/main/java/com/direwolf20/mininggadgets/setup/ModSetup.java +++ b/src/main/java/com/direwolf20/mininggadgets/setup/ModSetup.java @@ -23,7 +23,7 @@ public static void init(final FMLCommonSetupEvent event) { public static final String TAB_NAME = "mininggadgets"; public static DeferredRegister TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MiningGadgets.MOD_ID); public static DeferredHolder TAB_MININGGADGETS = TABS.register(TAB_NAME, () -> CreativeModeTab.builder() - .title(Component.literal("MiningGadgets")) + .title(Component.literal("Mining Gadgets")) .icon(() -> new ItemStack(Registration.MININGGADGET.get())) .withTabsBefore(CreativeModeTabs.SPAWN_EGGS) .displayItems((featureFlags, output) -> { @@ -40,6 +40,19 @@ public static void init(final FMLCommonSetupEvent event) { output.accept(stack); } }); + Registration.UPGRADE_ITEMS.getEntries().stream().filter(e -> e != Registration.MINERS_LIGHT_ITEM) + .forEach(e -> { + // Normal + Item item = e.get(); + output.accept(item); + + // Charged + if (item instanceof MiningGadget) { + ItemStack stack = new ItemStack(item); + stack.getOrCreateTag().putInt("energy", UpgradeBatteryLevels.BATTERY.getPower()); + output.accept(stack); + } + }); }) .build()); } From ac9d29b4238d4709027df0cdd5d2dd1fb275fcbd Mon Sep 17 00:00:00 2001 From: direwolf20 <39863894+Direwolf20-MC@users.noreply.github.com> Date: Thu, 15 Feb 2024 17:30:19 -0500 Subject: [PATCH 5/8] Fix mining Visuals Screen mixup --- .../client/screens/MiningVisualsScreen.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningVisualsScreen.java b/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningVisualsScreen.java index ee8d01c1..95616004 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningVisualsScreen.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/screens/MiningVisualsScreen.java @@ -73,38 +73,38 @@ protected void init() { addRenderableWidget(blockBreakButton); - sliderRedInner = new ExtendedSlider(baseX - (150), baseY - 10, 150, 20, Component.translatable("mininggadgets.tooltip.screen.red").append(": "), Component.empty(), 0, 255, this.red, true) { + sliderRedInner = new ExtendedSlider(baseX - (150), baseY - 10, 150, 20, Component.translatable("mininggadgets.tooltip.screen.red").append(": "), Component.empty(), 0, 255, this.red_inner, true) { @Override protected void applyValue() { red_inner = (short) this.getValueInt(); } }; - sliderGreenInner = new ExtendedSlider(baseX - (150), baseY + 15, 150, 20, Component.translatable("mininggadgets.tooltip.screen.green").append(": "), Component.empty(), 0, 255, this.green, true) { + sliderGreenInner = new ExtendedSlider(baseX - (150), baseY + 15, 150, 20, Component.translatable("mininggadgets.tooltip.screen.green").append(": "), Component.empty(), 0, 255, this.green_inner, true) { @Override protected void applyValue() { green_inner = (short) this.getValueInt(); } }; - sliderBlueInner = new ExtendedSlider(baseX - (150), baseY + 40, 150, 20, Component.translatable("mininggadgets.tooltip.screen.blue").append(": "), Component.empty(), 0, 255, this.blue, true) { + sliderBlueInner = new ExtendedSlider(baseX - (150), baseY + 40, 150, 20, Component.translatable("mininggadgets.tooltip.screen.blue").append(": "), Component.empty(), 0, 255, this.blue_inner, true) { @Override protected void applyValue() { blue_inner = (short) this.getValueInt(); } }; - sliderRedOuter = new ExtendedSlider(baseX + (25), baseY - 10, 150, 20, Component.translatable("mininggadgets.tooltip.screen.red").append(": "), Component.empty(), 0, 255, this.red_inner, true) { + sliderRedOuter = new ExtendedSlider(baseX + (25), baseY - 10, 150, 20, Component.translatable("mininggadgets.tooltip.screen.red").append(": "), Component.empty(), 0, 255, this.red, true) { @Override protected void applyValue() { red = (short) this.getValueInt(); } }; - sliderGreenOuter = new ExtendedSlider(baseX + (25), baseY + 15, 150, 20, Component.translatable("mininggadgets.tooltip.screen.green").append(": "), Component.empty(), 0, 255, this.green_inner, true) { + sliderGreenOuter = new ExtendedSlider(baseX + (25), baseY + 15, 150, 20, Component.translatable("mininggadgets.tooltip.screen.green").append(": "), Component.empty(), 0, 255, this.green, true) { @Override protected void applyValue() { green = (short) this.getValueInt(); } }; - sliderBlueOuter = new ExtendedSlider(baseX + (25), baseY + 40, 150, 20, Component.translatable("mininggadgets.tooltip.screen.blue").append(": "), Component.empty(), 0, 255, this.blue_inner, true) { + sliderBlueOuter = new ExtendedSlider(baseX + (25), baseY + 40, 150, 20, Component.translatable("mininggadgets.tooltip.screen.blue").append(": "), Component.empty(), 0, 255, this.blue, true) { @Override protected void applyValue() { blue = (short) this.getValueInt(); From 8a0e59756b0799661b1701aaef83b549e0921f2a Mon Sep 17 00:00:00 2001 From: direwolf20 <39863894+Direwolf20-MC@users.noreply.github.com> Date: Thu, 15 Feb 2024 20:57:55 -0500 Subject: [PATCH 6/8] Fix Modification Table Screen language stuff. --- .../client/screens/ModificationTableScreen.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/direwolf20/mininggadgets/client/screens/ModificationTableScreen.java b/src/main/java/com/direwolf20/mininggadgets/client/screens/ModificationTableScreen.java index d060d6b3..924450cf 100644 --- a/src/main/java/com/direwolf20/mininggadgets/client/screens/ModificationTableScreen.java +++ b/src/main/java/com/direwolf20/mininggadgets/client/screens/ModificationTableScreen.java @@ -24,6 +24,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.neoforged.neoforge.client.gui.widget.ScrollPanel; +import net.neoforged.neoforge.common.I18nExtension; import net.neoforged.neoforge.network.PacketDistributor; @@ -54,11 +55,11 @@ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partia int relY = (this.height) / 2; //guiGraphics.drawCenteredString(font, ForgeI18n.getPattern(String.format("%s.%s", MiningGadgets.MOD_ID, "text.modification_table")), relX, relY - 100, 0xFFFFFF); - guiGraphics.drawCenteredString(font, MiningGadgets.MOD_ID + "text.modification_table", relX, relY - 100, 0xFFFFFF); + guiGraphics.drawCenteredString(font, Component.translatable(MiningGadgets.MOD_ID + ".text.modification_table"), relX, relY - 100, 0xFFFFFF); if (this.container.getUpgradesCache().size() == 0) { - //String string = ForgeI18n.getPattern(String.format("%s.%s", MiningGadgets.MOD_ID, "text.empty_table_helper")); - String string = MiningGadgets.MOD_ID + "text.empty_table_helper"; + String string = I18nExtension.parseMessage(String.format("%s.%s", MiningGadgets.MOD_ID, "text.empty_table_helper")); + //String string = MiningGadgets.MOD_ID + ".text.empty_table_helper"; String[] parts = string.split("\n"); for (int i = 0; i < parts.length; i++) { drawScaledCenteredString(guiGraphics, (relX + 17) - (font.width(parts[0]) / 2), (relY - 68) + (i * font.lineHeight), .8f, parts[i], 0xFFFFFF); From 62e8d62a134d987f52f5ee45ba98db3238fe21cd Mon Sep 17 00:00:00 2001 From: direwolf20 <39863894+Direwolf20-MC@users.noreply.github.com> Date: Thu, 15 Feb 2024 21:18:12 -0500 Subject: [PATCH 7/8] Return the slowdown on speed for wider ranges --- .../com/direwolf20/mininggadgets/common/items/MiningGadget.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/direwolf20/mininggadgets/common/items/MiningGadget.java b/src/main/java/com/direwolf20/mininggadgets/common/items/MiningGadget.java index a346ef51..b872893b 100644 --- a/src/main/java/com/direwolf20/mininggadgets/common/items/MiningGadget.java +++ b/src/main/java/com/direwolf20/mininggadgets/common/items/MiningGadget.java @@ -448,7 +448,7 @@ else if (g > 0 && b == 1) efficiency = UpgradeTools.getUpgradeFromGadget((stack), Upgrade.EFFICIENCY_1).get().getTier(); float hardness = getHardness(coords, (Player) player, efficiency); - // hardness = hardness * MiningProperties.getRange(stack) * 1; + hardness = hardness * MiningProperties.getRange(stack) * 1; hardness = (float) Math.floor(hardness); if (hardness == 0) hardness = 1; for (BlockPos coord : coords) { From 5eaa28415d1f5d305dc178344de6235b20750782 Mon Sep 17 00:00:00 2001 From: direwolf20 <39863894+Direwolf20-MC@users.noreply.github.com> Date: Thu, 15 Feb 2024 21:22:56 -0500 Subject: [PATCH 8/8] Ran Data --- .../2e50376a258ceefdeaf48c21f919aaa551c1fbe8 | 2 +- ... 560c5d1147eb8b61b5d489f37c738096153f5af2} | 2 +- .../59eb3dbb5f86130e09b3c62d89b9525ee01cf52d | 2 +- .../9132d71273a5f64d33baabb967ce14786e2e3b23 | 2 +- .../94a08339dfe16979d23f9d4e0445c75f17e0bb9b | 2 +- .../9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e | 110 +++++++++--------- .../recipes/misc/modificationtable.json | 7 +- .../recipes/misc/upgrade_battery_1.json | 7 +- .../recipes/misc/upgrade_battery_2.json | 7 +- .../recipes/misc/upgrade_battery_3.json | 7 +- .../recipes/misc/upgrade_efficiency_1.json | 7 +- .../recipes/misc/upgrade_efficiency_2.json | 7 +- .../recipes/misc/upgrade_efficiency_3.json | 7 +- .../recipes/misc/upgrade_efficiency_4.json | 7 +- .../recipes/misc/upgrade_efficiency_5.json | 7 +- .../recipes/misc/upgrade_empty.json | 7 +- .../recipes/misc/upgrade_fortune_1.json | 7 +- .../recipes/misc/upgrade_fortune_2.json | 7 +- .../recipes/misc/upgrade_fortune_3.json | 7 +- .../recipes/misc/upgrade_freezing.json | 7 +- .../recipes/misc/upgrade_light_placer.json | 7 +- .../recipes/misc/upgrade_magnet.json | 7 +- .../recipes/misc/upgrade_range_1.json | 7 +- .../recipes/misc/upgrade_range_2.json | 7 +- .../recipes/misc/upgrade_range_3.json | 7 +- .../recipes/misc/upgrade_silk.json | 7 +- .../recipes/misc/upgrade_size_1.json | 7 +- .../recipes/misc/upgrade_size_2.json | 7 +- .../recipes/misc/upgrade_size_3.json | 7 +- .../recipes/misc/upgrade_void_junk.json | 7 +- .../recipes/tools/mininggadget.json | 7 +- .../recipes/tools/mininggadget_fancy.json | 7 +- .../recipes/tools/mininggadget_simple.json | 7 +- .../mininggadgets/recipes/mininggadget.json | 3 +- .../recipes/mininggadget_fancy.json | 3 +- .../recipes/mininggadget_simple.json | 3 +- .../recipes/modificationtable.json | 3 +- .../recipes/upgrade_battery_1.json | 3 +- .../recipes/upgrade_battery_2.json | 3 +- .../recipes/upgrade_battery_3.json | 3 +- .../recipes/upgrade_efficiency_1.json | 3 +- .../recipes/upgrade_efficiency_2.json | 3 +- .../recipes/upgrade_efficiency_3.json | 3 +- .../recipes/upgrade_efficiency_4.json | 3 +- .../recipes/upgrade_efficiency_5.json | 3 +- .../mininggadgets/recipes/upgrade_empty.json | 3 +- .../recipes/upgrade_fortune_1.json | 3 +- .../recipes/upgrade_fortune_2.json | 3 +- .../recipes/upgrade_fortune_3.json | 3 +- .../recipes/upgrade_freezing.json | 3 +- .../recipes/upgrade_light_placer.json | 3 +- .../mininggadgets/recipes/upgrade_magnet.json | 3 +- .../recipes/upgrade_range_1.json | 3 +- .../recipes/upgrade_range_2.json | 3 +- .../recipes/upgrade_range_3.json | 3 +- .../mininggadgets/recipes/upgrade_silk.json | 3 +- .../mininggadgets/recipes/upgrade_size_1.json | 3 +- .../mininggadgets/recipes/upgrade_size_2.json | 3 +- .../mininggadgets/recipes/upgrade_size_3.json | 3 +- .../recipes/upgrade_void_junk.json | 3 +- 60 files changed, 168 insertions(+), 222 deletions(-) rename src/generated/resources/.cache/{c622617f6fabf890a00b9275cd5f643584a8a2c8 => 560c5d1147eb8b61b5d489f37c738096153f5af2} (50%) diff --git a/src/generated/resources/.cache/2e50376a258ceefdeaf48c21f919aaa551c1fbe8 b/src/generated/resources/.cache/2e50376a258ceefdeaf48c21f919aaa551c1fbe8 index c2d8dc28..e690b333 100644 --- a/src/generated/resources/.cache/2e50376a258ceefdeaf48c21f919aaa551c1fbe8 +++ b/src/generated/resources/.cache/2e50376a258ceefdeaf48c21f919aaa551c1fbe8 @@ -1,4 +1,4 @@ -// 1.20.1 2023-10-20T21:43:10.440018 Item Models +// 1.20.4 2024-02-15T21:19:22.3012844 Item Models 8da37fe8fa2b785fbf0633e3d25dfc8502305df3 assets/mininggadgets/models/item/minerslight.json 6e083fdcfbbe3ace1ce88136cfe9d68bf07c5490 assets/mininggadgets/models/item/modificationtable.json 00d58751e2423f4999a59ca9019b15100de3da1b assets/mininggadgets/models/item/upgrade_battery_1.json diff --git a/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/src/generated/resources/.cache/560c5d1147eb8b61b5d489f37c738096153f5af2 similarity index 50% rename from src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 rename to src/generated/resources/.cache/560c5d1147eb8b61b5d489f37c738096153f5af2 index 0d613b55..ea2007a6 100644 --- a/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 +++ b/src/generated/resources/.cache/560c5d1147eb8b61b5d489f37c738096153f5af2 @@ -1,2 +1,2 @@ -// 1.20.1 2023-11-12T21:10:58.6391552 Languages: en_us +// 1.20.4 2024-02-15T21:19:22.3027857 Languages: en_us for mod: mininggadgets e818e2aea1f0fc0b2317b97b5679d8eebc239abb assets/mininggadgets/lang/en_us.json diff --git a/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d index e38d8c91..8244e501 100644 --- a/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d +++ b/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d @@ -1,2 +1,2 @@ -// 1.20.1 2023-10-02T15:29:37.5520073 Loot Tables +// 1.20.4 2024-02-15T21:19:22.3047873 Loot Tables b0114caa0db068619f8d048678afab221aa33db5 data/mininggadgets/loot_tables/blocks/modificationtable.json diff --git a/src/generated/resources/.cache/9132d71273a5f64d33baabb967ce14786e2e3b23 b/src/generated/resources/.cache/9132d71273a5f64d33baabb967ce14786e2e3b23 index 53fd82bf..7ef0357a 100644 --- a/src/generated/resources/.cache/9132d71273a5f64d33baabb967ce14786e2e3b23 +++ b/src/generated/resources/.cache/9132d71273a5f64d33baabb967ce14786e2e3b23 @@ -1,2 +1,2 @@ -// 1.20.1 2023-10-02T15:29:37.5520073 Tags for minecraft:block mod id mininggadgets +// 1.20.4 2024-02-15T21:19:22.304287 Tags for minecraft:block mod id mininggadgets 1e3063ee4193a81550f3187aefa0924b9cfd6ba3 data/minecraft/tags/blocks/mineable/pickaxe.json diff --git a/src/generated/resources/.cache/94a08339dfe16979d23f9d4e0445c75f17e0bb9b b/src/generated/resources/.cache/94a08339dfe16979d23f9d4e0445c75f17e0bb9b index 9e33da4f..fdb28a96 100644 --- a/src/generated/resources/.cache/94a08339dfe16979d23f9d4e0445c75f17e0bb9b +++ b/src/generated/resources/.cache/94a08339dfe16979d23f9d4e0445c75f17e0bb9b @@ -1,4 +1,4 @@ -// 1.20.1 2023-10-02T15:29:37.5510063 Block States: mininggadgets +// 1.20.4 2024-02-15T21:19:22.3037865 Block States: mininggadgets d1a6662ff63880ec364d02b06c4c547d529bb8fe assets/mininggadgets/blockstates/minerslight.json 7c14a211cba596fc721c75f74f9d6f38b660a610 assets/mininggadgets/blockstates/modificationtable.json 58d4442f56c89d6f160a1104d74f3084e370d6d0 assets/mininggadgets/blockstates/renderblock.json diff --git a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e index 53289c4f..00d61907 100644 --- a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e +++ b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -1,55 +1,55 @@ -// 1.20.1 2023-10-13T13:23:20.1098383 Recipes -67baba67b52a425c919efd8b2da87e6521c6343b data/mininggadgets/advancements/recipes/misc/modificationtable.json -76a18c784a4afe6ad6753ec7b1ce479529e9ad51 data/mininggadgets/advancements/recipes/misc/upgrade_battery_1.json -e51c6b2722bc015ec25c0d9b9afb399921a63d9c data/mininggadgets/advancements/recipes/misc/upgrade_battery_2.json -8d1e77cad23d2a93e2d08d16281d411a7d7655c0 data/mininggadgets/advancements/recipes/misc/upgrade_battery_3.json -06292b4a91059620f4372f03f240fe108d3b215d data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_1.json -4472f4de34d8927601964b4b5bad740df1903abe data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_2.json -3fa4f0a475c7c8a70d9d74759b3ae22ae60f6cd3 data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_3.json -5ac0a78a105578ec5d910ee89b041f5027c3aa80 data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_4.json -ec667f4e7239c027c61f384434ba407c12e1ac64 data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_5.json -72e3fc340b867e8ee90438832188d7c315d0b61f data/mininggadgets/advancements/recipes/misc/upgrade_empty.json -5e14d825edf74fa0711f621ddab5f64bca25524a data/mininggadgets/advancements/recipes/misc/upgrade_fortune_1.json -ae8a64cd3c52f722e3a6fedd8d6b68880c870ca4 data/mininggadgets/advancements/recipes/misc/upgrade_fortune_2.json -dbdaa82325f4c092ba3117e47528fe4055a9109a data/mininggadgets/advancements/recipes/misc/upgrade_fortune_3.json -8c4f7adbad338fb5c7281c115e5c9e5d9c81828d data/mininggadgets/advancements/recipes/misc/upgrade_freezing.json -33fb811840194ef70df96843641aca964cec6010 data/mininggadgets/advancements/recipes/misc/upgrade_light_placer.json -d37e785485fb1d32c783dcfd04fe0d7666ee35d7 data/mininggadgets/advancements/recipes/misc/upgrade_magnet.json -74cbc16c9f85b7e089ecff6021823856a9571061 data/mininggadgets/advancements/recipes/misc/upgrade_range_1.json -1b7bf8775684236378c6ab1c8acf39132a07735c data/mininggadgets/advancements/recipes/misc/upgrade_range_2.json -81664a3b4f52305293710456854b4eae751cc0f9 data/mininggadgets/advancements/recipes/misc/upgrade_range_3.json -8cbd3e0a8fed24f0db856e6e26ebcc9b94af5b9e data/mininggadgets/advancements/recipes/misc/upgrade_silk.json -8da1cce9eb1c99f2f4a0ec3a216a120371e72e77 data/mininggadgets/advancements/recipes/misc/upgrade_size_1.json -67c78d54d25e3afa365b3e2f537780ed4d19e1b8 data/mininggadgets/advancements/recipes/misc/upgrade_size_2.json -c208f823a839b6c7302963a66710851891f735a6 data/mininggadgets/advancements/recipes/misc/upgrade_size_3.json -50f7b681777eaa8533909952a23ed23ead71098c data/mininggadgets/advancements/recipes/misc/upgrade_void_junk.json -5b5177eab7fceb9d9e5fbaa9908e5dbd621b963f data/mininggadgets/advancements/recipes/tools/mininggadget.json -ce02d0cf7588348eada6cdbe58d7c048ad8d20aa data/mininggadgets/advancements/recipes/tools/mininggadget_fancy.json -d95cb695edffef70e6d501c3890fc0ad4058d480 data/mininggadgets/advancements/recipes/tools/mininggadget_simple.json -8a319fe0c9a78ce4d3b4edf852307ce2cb35c516 data/mininggadgets/recipes/mininggadget.json -71dcf659741d64b0b51536b01457c4714b722448 data/mininggadgets/recipes/mininggadget_fancy.json -4c2c84defad05c8036c9249c80a7b606d1ffe89f data/mininggadgets/recipes/mininggadget_simple.json -01f2a220b57bd167ea660b2a526f8a7454857b38 data/mininggadgets/recipes/modificationtable.json -8f0ae0be58ec09adc8ddddaf3f34c20a59198f52 data/mininggadgets/recipes/upgrade_battery_1.json -e2d0a9017d8336235c18703350f17124ced2b2d0 data/mininggadgets/recipes/upgrade_battery_2.json -b0c8d272db46a8619dc76de37a907017d06f184b data/mininggadgets/recipes/upgrade_battery_3.json -2941226a02cc4f728b3a41afbaf68ab19784381a data/mininggadgets/recipes/upgrade_efficiency_1.json -973a69c27faab1af8b35637a53829642974e21fa data/mininggadgets/recipes/upgrade_efficiency_2.json -9d9f0ff973438f125a293c3734d4aa775424ecdd data/mininggadgets/recipes/upgrade_efficiency_3.json -e5445adbbb5d04fbf9bcdff7d403b7d42b5e8abf data/mininggadgets/recipes/upgrade_efficiency_4.json -25e07977103daa0330a27781f933ecbac1597898 data/mininggadgets/recipes/upgrade_efficiency_5.json -2662a9f379425f6a12934bdd980ebbce4081a34c data/mininggadgets/recipes/upgrade_empty.json -28beb0648e28606f918fbb80871f92d3e18d64ab data/mininggadgets/recipes/upgrade_fortune_1.json -9db5e5da72b64d2bdf0a46caf0a974ad5fc97d0a data/mininggadgets/recipes/upgrade_fortune_2.json -54589cc57657defc60425f7ad4fa1e7447cde9af data/mininggadgets/recipes/upgrade_fortune_3.json -a32a064456e7494f9e7e92c2ca6fbde947fc2b43 data/mininggadgets/recipes/upgrade_freezing.json -a31429c579a1d3c4b36f362f495e8a0275e15112 data/mininggadgets/recipes/upgrade_light_placer.json -2d7c173dcd7314dc511616df7e7ad984066dcac8 data/mininggadgets/recipes/upgrade_magnet.json -57492330350b2eb4e04c06167a8719ea86b738a0 data/mininggadgets/recipes/upgrade_range_1.json -e57e5586e85ab9056ba3b1fd03e66656bd79df11 data/mininggadgets/recipes/upgrade_range_2.json -8eeb9cd3ec82d8652b934862f854edc52a96281d data/mininggadgets/recipes/upgrade_range_3.json -20f3c6275af6476f4e37b00fbfb1d76d1336d200 data/mininggadgets/recipes/upgrade_silk.json -a7a45abf2c8887562490e41fd7e1bba48360341f data/mininggadgets/recipes/upgrade_size_1.json -63a2251eb33ec5e94e2d859952f1df752821ae7d data/mininggadgets/recipes/upgrade_size_2.json -4ff3fbabfc3427d90846b5c4506036e895a448e9 data/mininggadgets/recipes/upgrade_size_3.json -b4b7ecbdad882d55c08e65304837551386e64344 data/mininggadgets/recipes/upgrade_void_junk.json +// 1.20.4 2024-02-15T21:19:22.3052877 Recipes +64586512af251a3c92705e59f7bfa0de0545b6d7 data/mininggadgets/advancements/recipes/misc/modificationtable.json +55266ee00365ec07b6961e14db0491298bb3f1fb data/mininggadgets/advancements/recipes/misc/upgrade_battery_1.json +ed195c156fcb17f1f40c5cece24f517b00a9a0ef data/mininggadgets/advancements/recipes/misc/upgrade_battery_2.json +e7bf93b34851f7bd20c0faa41b6c51526a3fe9cb data/mininggadgets/advancements/recipes/misc/upgrade_battery_3.json +6b37615f759119d0eb24fc83e215fd2271179cb3 data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_1.json +321d1b85085bac40bce99712ad07e98712b27410 data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_2.json +b0bb914b492b32a3bb67cc9a0280bddcec8e476a data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_3.json +a4b63db5d8fcb172abccfb3c3bd8adf89963e5bd data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_4.json +a4804ea47fb1f377b9b131baf312e7e2f1367724 data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_5.json +b73e0f64a43763a6ac0407e78b6899ef892fef64 data/mininggadgets/advancements/recipes/misc/upgrade_empty.json +1c55100e0801639f91f9da3e0f40a25644280f7f data/mininggadgets/advancements/recipes/misc/upgrade_fortune_1.json +a2dc85ab99d194dfc99c0235abda493b076af3ed data/mininggadgets/advancements/recipes/misc/upgrade_fortune_2.json +c1430d33c3de2ce2613930a84d4b8ad24de46f9e data/mininggadgets/advancements/recipes/misc/upgrade_fortune_3.json +6d70da60d6303e4d0f0f99736720fc3b98c7d8d4 data/mininggadgets/advancements/recipes/misc/upgrade_freezing.json +64387725f7f484f6dbe1a436520c498cc2941efb data/mininggadgets/advancements/recipes/misc/upgrade_light_placer.json +b6798e6973c34eba587f1b2285f50c9775d3bb7b data/mininggadgets/advancements/recipes/misc/upgrade_magnet.json +ad9ca11c143e918ed79dceb87128aa38522b6be9 data/mininggadgets/advancements/recipes/misc/upgrade_range_1.json +8b6510adbd5f653ac6833f9c189327f2f82daaa9 data/mininggadgets/advancements/recipes/misc/upgrade_range_2.json +5fee8433421f9c1a9e64bb7e7beef46be8e508fe data/mininggadgets/advancements/recipes/misc/upgrade_range_3.json +7b2292771a9b52ac2e18f218460aeec3dd1ea02d data/mininggadgets/advancements/recipes/misc/upgrade_silk.json +215f2b5949305ff749ed79687c667e4e92f919f0 data/mininggadgets/advancements/recipes/misc/upgrade_size_1.json +2cf1c196da10a6334f9db5b3243ee4c0e5d0c662 data/mininggadgets/advancements/recipes/misc/upgrade_size_2.json +05138a99a7018b6727c325f23602fac0ccb0e5fd data/mininggadgets/advancements/recipes/misc/upgrade_size_3.json +07f1c858827ef038e52ddfb8110648bdbb9b40b2 data/mininggadgets/advancements/recipes/misc/upgrade_void_junk.json +5cfa0f69976269a43e9aa3bdec2482eed40dbed8 data/mininggadgets/advancements/recipes/tools/mininggadget.json +96744355dff165d924657f4b58fcd24582e69b38 data/mininggadgets/advancements/recipes/tools/mininggadget_fancy.json +2ef41116a880ca71dee4b0f57c8afd814b67cbf9 data/mininggadgets/advancements/recipes/tools/mininggadget_simple.json +71a4834828a1e00f997dfd65ce4f6c2fea694efc data/mininggadgets/recipes/mininggadget.json +a3dc345a8244eb25af74276645c162bb28266129 data/mininggadgets/recipes/mininggadget_fancy.json +a5af2fc42d0fd75470ce35d7d97b855a9e3afa91 data/mininggadgets/recipes/mininggadget_simple.json +3a5a14972d26ed816f59bc41fe4e8e4acd47d4e7 data/mininggadgets/recipes/modificationtable.json +b6a1b64d09dd808b815ac1be45abb98894ddc410 data/mininggadgets/recipes/upgrade_battery_1.json +ef9a20896eec861498ffb3ed3bdc0770ed83e943 data/mininggadgets/recipes/upgrade_battery_2.json +e1e1bafd3bff3cac7e15e6affbb0a0e3ff8ecf83 data/mininggadgets/recipes/upgrade_battery_3.json +6743198ca5bd38c5fa77f1b44b008932fc2ac11f data/mininggadgets/recipes/upgrade_efficiency_1.json +2dda23fc9227899be6b4e7d370d596c303e92a85 data/mininggadgets/recipes/upgrade_efficiency_2.json +41f76f1571d4a9b4b96367b638664925ac21bf37 data/mininggadgets/recipes/upgrade_efficiency_3.json +e9dc917528a3f32eb6910f872505f469dd80f211 data/mininggadgets/recipes/upgrade_efficiency_4.json +611880b306770b33b3ad4002e5a15ea05c5e331f data/mininggadgets/recipes/upgrade_efficiency_5.json +ed9188fd12077c4181f9580c8ab6d2a8a353b250 data/mininggadgets/recipes/upgrade_empty.json +1ab9a33a83aeaade81ec2a2138e402ca125bbe04 data/mininggadgets/recipes/upgrade_fortune_1.json +ab171a00aa72e8e28775c031ab660da7063affd8 data/mininggadgets/recipes/upgrade_fortune_2.json +9c57c331ac7b3234b9b69ce7e0a582b1dcddad18 data/mininggadgets/recipes/upgrade_fortune_3.json +30988a33caf63a7afaf55dd7bb78bace84e1c9ab data/mininggadgets/recipes/upgrade_freezing.json +cdcbaa4b0358867ae23e23f39027f2640ad2979c data/mininggadgets/recipes/upgrade_light_placer.json +b30ba5b56d1dc12032beaf99b760a78806c6020d data/mininggadgets/recipes/upgrade_magnet.json +d9ebb234e5df182f7f18e7cf3c3fa25a7db4bb15 data/mininggadgets/recipes/upgrade_range_1.json +59500b82f052327417609cb83e125bbae71ce611 data/mininggadgets/recipes/upgrade_range_2.json +c3d114c54bd51ee2fb17caa2045055900aab59a4 data/mininggadgets/recipes/upgrade_range_3.json +4aea6947fc633af9d60143e91dec0c737c420e63 data/mininggadgets/recipes/upgrade_silk.json +10fe1524ad9e352187edd62f44a96c3a517cc4e2 data/mininggadgets/recipes/upgrade_size_1.json +43a6f221144db07dfb24edb62db18e7738b639c2 data/mininggadgets/recipes/upgrade_size_2.json +bca429ba351a75a1856c5426de2b9b09bd969e5c data/mininggadgets/recipes/upgrade_size_3.json +42d8b4df35d1239062a2371aada2e6a030b21069 data/mininggadgets/recipes/upgrade_void_junk.json diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/modificationtable.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/modificationtable.json index 2986cfc4..ce33bd11 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/modificationtable.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/modificationtable.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:modificationtable" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_battery_1.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_battery_1.json index 0f760f6b..2192d611 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_battery_1.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_battery_1.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_battery_1" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_battery_2.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_battery_2.json index 4767ab22..a49f689f 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_battery_2.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_battery_2.json @@ -34,15 +34,14 @@ }, "requirements": [ [ + "has_the_recipe", "has_upgrade", - "has_battery_1", - "has_the_recipe" + "has_battery_1" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_battery_2" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_battery_3.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_battery_3.json index 4da6ddd3..bca3e2fb 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_battery_3.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_battery_3.json @@ -34,15 +34,14 @@ }, "requirements": [ [ + "has_the_recipe", "has_upgrade", - "has_battery_2", - "has_the_recipe" + "has_battery_2" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_battery_3" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_1.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_1.json index bff73a54..7c646249 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_1.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_1.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_efficiency_1" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_2.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_2.json index 25ed56c0..baf94e0a 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_2.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_2.json @@ -34,15 +34,14 @@ }, "requirements": [ [ + "has_the_recipe", "has_efficiency_1", - "has_upgrade", - "has_the_recipe" + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_efficiency_2" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_3.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_3.json index b08b011e..fe12f7c2 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_3.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_3.json @@ -34,15 +34,14 @@ }, "requirements": [ [ + "has_the_recipe", "has_efficiency_2", - "has_upgrade", - "has_the_recipe" + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_efficiency_3" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_4.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_4.json index c1f0303a..044df0f3 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_4.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_4.json @@ -34,15 +34,14 @@ }, "requirements": [ [ + "has_the_recipe", "has_efficiency_3", - "has_upgrade", - "has_the_recipe" + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_efficiency_4" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_5.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_5.json index 446a1349..bc62351f 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_5.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_efficiency_5.json @@ -34,15 +34,14 @@ }, "requirements": [ [ + "has_the_recipe", "has_efficiency_4", - "has_upgrade", - "has_the_recipe" + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_efficiency_5" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_empty.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_empty.json index b689c540..16315641 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_empty.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_empty.json @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_diamonds", - "has_the_recipe" + "has_the_recipe", + "has_diamonds" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_empty" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_fortune_1.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_fortune_1.json index 3988ca86..c6ca63eb 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_fortune_1.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_fortune_1.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_fortune_1" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_fortune_2.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_fortune_2.json index be4ed774..04c79fd2 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_fortune_2.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_fortune_2.json @@ -34,15 +34,14 @@ }, "requirements": [ [ + "has_the_recipe", "has_fortune_1", - "has_upgrade", - "has_the_recipe" + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_fortune_2" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_fortune_3.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_fortune_3.json index 40cd9adb..e399e980 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_fortune_3.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_fortune_3.json @@ -34,15 +34,14 @@ }, "requirements": [ [ + "has_the_recipe", "has_fortune_2", - "has_upgrade", - "has_the_recipe" + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_fortune_3" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_freezing.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_freezing.json index 7263b930..3495f83d 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_freezing.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_freezing.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_freezing" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_light_placer.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_light_placer.json index 62e36d5f..78275dfa 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_light_placer.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_light_placer.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_light_placer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_magnet.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_magnet.json index 233df32c..71f93fb8 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_magnet.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_magnet.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_magnet" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_range_1.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_range_1.json index 715e77bf..67aa7e79 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_range_1.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_range_1.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_range_1" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_range_2.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_range_2.json index f43b978d..a4194e24 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_range_2.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_range_2.json @@ -34,15 +34,14 @@ }, "requirements": [ [ + "has_the_recipe", "has_range_1", - "has_upgrade", - "has_the_recipe" + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_range_2" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_range_3.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_range_3.json index 8da807a1..8d3cb690 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_range_3.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_range_3.json @@ -34,15 +34,14 @@ }, "requirements": [ [ + "has_the_recipe", "has_range_2", - "has_upgrade", - "has_the_recipe" + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_range_3" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_silk.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_silk.json index da77e4f5..fbbac4a1 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_silk.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_silk.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_silk" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_size_1.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_size_1.json index 99509819..0de9d6a7 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_size_1.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_size_1.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_size_1" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_size_2.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_size_2.json index 4fcd0cb7..06b83056 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_size_2.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_size_2.json @@ -34,15 +34,14 @@ }, "requirements": [ [ + "has_the_recipe", "has_size_1", - "has_upgrade", - "has_the_recipe" + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_size_2" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_size_3.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_size_3.json index 04c3e7da..287cb062 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_size_3.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_size_3.json @@ -46,16 +46,15 @@ }, "requirements": [ [ + "has_the_recipe", "has_size_2", "has_size_1", - "has_upgrade", - "has_the_recipe" + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_size_3" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_void_junk.json b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_void_junk.json index 93252ab4..65c983a6 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_void_junk.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/misc/upgrade_void_junk.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:upgrade_void_junk" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/tools/mininggadget.json b/src/generated/resources/data/mininggadgets/advancements/recipes/tools/mininggadget.json index 9cac94b3..be5e9c80 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/tools/mininggadget.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/tools/mininggadget.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:mininggadget" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/tools/mininggadget_fancy.json b/src/generated/resources/data/mininggadgets/advancements/recipes/tools/mininggadget_fancy.json index 830a249c..d407330f 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/tools/mininggadget_fancy.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/tools/mininggadget_fancy.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:mininggadget_fancy" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/advancements/recipes/tools/mininggadget_simple.json b/src/generated/resources/data/mininggadgets/advancements/recipes/tools/mininggadget_simple.json index 203470a6..f1dfe4c3 100644 --- a/src/generated/resources/data/mininggadgets/advancements/recipes/tools/mininggadget_simple.json +++ b/src/generated/resources/data/mininggadgets/advancements/recipes/tools/mininggadget_simple.json @@ -22,14 +22,13 @@ }, "requirements": [ [ - "has_upgrade", - "has_the_recipe" + "has_the_recipe", + "has_upgrade" ] ], "rewards": { "recipes": [ "mininggadgets:mininggadget_simple" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/mininggadget.json b/src/generated/resources/data/mininggadgets/recipes/mininggadget.json index e89e197d..f1af86a9 100644 --- a/src/generated/resources/data/mininggadgets/recipes/mininggadget.json +++ b/src/generated/resources/data/mininggadgets/recipes/mininggadget.json @@ -25,6 +25,5 @@ ], "result": { "item": "mininggadgets:mininggadget" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/mininggadget_fancy.json b/src/generated/resources/data/mininggadgets/recipes/mininggadget_fancy.json index fe958b5c..29fd51c5 100644 --- a/src/generated/resources/data/mininggadgets/recipes/mininggadget_fancy.json +++ b/src/generated/resources/data/mininggadgets/recipes/mininggadget_fancy.json @@ -25,6 +25,5 @@ ], "result": { "item": "mininggadgets:mininggadget_fancy" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/mininggadget_simple.json b/src/generated/resources/data/mininggadgets/recipes/mininggadget_simple.json index 2022c878..55177764 100644 --- a/src/generated/resources/data/mininggadgets/recipes/mininggadget_simple.json +++ b/src/generated/resources/data/mininggadgets/recipes/mininggadget_simple.json @@ -25,6 +25,5 @@ ], "result": { "item": "mininggadgets:mininggadget_simple" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/modificationtable.json b/src/generated/resources/data/mininggadgets/recipes/modificationtable.json index 4d036ee9..61c8765a 100644 --- a/src/generated/resources/data/mininggadgets/recipes/modificationtable.json +++ b/src/generated/resources/data/mininggadgets/recipes/modificationtable.json @@ -19,6 +19,5 @@ ], "result": { "item": "mininggadgets:modificationtable" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_battery_1.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_battery_1.json index 95073f54..77872c8e 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_battery_1.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_battery_1.json @@ -16,6 +16,5 @@ ], "result": { "item": "mininggadgets:upgrade_battery_1" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_battery_2.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_battery_2.json index d95588d8..6f481e8e 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_battery_2.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_battery_2.json @@ -22,6 +22,5 @@ ], "result": { "item": "mininggadgets:upgrade_battery_2" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_battery_3.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_battery_3.json index f7b635d6..d78bdf00 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_battery_3.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_battery_3.json @@ -22,6 +22,5 @@ ], "result": { "item": "mininggadgets:upgrade_battery_3" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_1.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_1.json index 6134010a..70a026ff 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_1.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_1.json @@ -16,6 +16,5 @@ ], "result": { "item": "mininggadgets:upgrade_efficiency_1" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_2.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_2.json index 2557b2ab..885d47fc 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_2.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_2.json @@ -19,6 +19,5 @@ ], "result": { "item": "mininggadgets:upgrade_efficiency_2" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_3.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_3.json index 6652efd1..f7d32f68 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_3.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_3.json @@ -19,6 +19,5 @@ ], "result": { "item": "mininggadgets:upgrade_efficiency_3" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_4.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_4.json index 1771ebfa..2dc42ea3 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_4.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_4.json @@ -19,6 +19,5 @@ ], "result": { "item": "mininggadgets:upgrade_efficiency_4" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_5.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_5.json index 23622ba7..3b8f4360 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_5.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_efficiency_5.json @@ -16,6 +16,5 @@ ], "result": { "item": "mininggadgets:upgrade_efficiency_5" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_empty.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_empty.json index bba74a0e..8c20a2d3 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_empty.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_empty.json @@ -22,6 +22,5 @@ ], "result": { "item": "mininggadgets:upgrade_empty" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_fortune_1.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_fortune_1.json index d05f1536..f9e6785f 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_fortune_1.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_fortune_1.json @@ -19,6 +19,5 @@ ], "result": { "item": "mininggadgets:upgrade_fortune_1" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_fortune_2.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_fortune_2.json index 6496d15c..3d9b9865 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_fortune_2.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_fortune_2.json @@ -19,6 +19,5 @@ ], "result": { "item": "mininggadgets:upgrade_fortune_2" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_fortune_3.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_fortune_3.json index 01b17306..3ba6d236 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_fortune_3.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_fortune_3.json @@ -19,6 +19,5 @@ ], "result": { "item": "mininggadgets:upgrade_fortune_3" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_freezing.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_freezing.json index e089789a..0a37c042 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_freezing.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_freezing.json @@ -16,6 +16,5 @@ ], "result": { "item": "mininggadgets:upgrade_freezing" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_light_placer.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_light_placer.json index d294e0cc..776365fb 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_light_placer.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_light_placer.json @@ -25,6 +25,5 @@ ], "result": { "item": "mininggadgets:upgrade_light_placer" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_magnet.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_magnet.json index 97835ae4..0fd4616b 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_magnet.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_magnet.json @@ -22,6 +22,5 @@ ], "result": { "item": "mininggadgets:upgrade_magnet" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_range_1.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_range_1.json index a5c00f51..83d7dbfd 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_range_1.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_range_1.json @@ -22,6 +22,5 @@ ], "result": { "item": "mininggadgets:upgrade_range_1" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_range_2.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_range_2.json index 64214bb6..724bfc64 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_range_2.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_range_2.json @@ -22,6 +22,5 @@ ], "result": { "item": "mininggadgets:upgrade_range_2" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_range_3.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_range_3.json index d9458557..fea03626 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_range_3.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_range_3.json @@ -25,6 +25,5 @@ ], "result": { "item": "mininggadgets:upgrade_range_3" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_silk.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_silk.json index 1ab1c5c1..1562edec 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_silk.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_silk.json @@ -22,6 +22,5 @@ ], "result": { "item": "mininggadgets:upgrade_silk" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_size_1.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_size_1.json index 7a4bec56..6e5cebb3 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_size_1.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_size_1.json @@ -25,6 +25,5 @@ ], "result": { "item": "mininggadgets:upgrade_size_1" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_size_2.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_size_2.json index 0507bd40..9018950b 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_size_2.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_size_2.json @@ -25,6 +25,5 @@ ], "result": { "item": "mininggadgets:upgrade_size_2" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_size_3.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_size_3.json index 799f7aa0..6aaf3061 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_size_3.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_size_3.json @@ -25,6 +25,5 @@ ], "result": { "item": "mininggadgets:upgrade_size_3" - }, - "show_notification": true + } } \ No newline at end of file diff --git a/src/generated/resources/data/mininggadgets/recipes/upgrade_void_junk.json b/src/generated/resources/data/mininggadgets/recipes/upgrade_void_junk.json index 22669bbe..739dcb09 100644 --- a/src/generated/resources/data/mininggadgets/recipes/upgrade_void_junk.json +++ b/src/generated/resources/data/mininggadgets/recipes/upgrade_void_junk.json @@ -22,6 +22,5 @@ ], "result": { "item": "mininggadgets:upgrade_void_junk" - }, - "show_notification": true + } } \ No newline at end of file