diff --git a/.gitignore b/.gitignore index 74c1d06..31d2550 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,7 @@ build # other eclipse run -logs/* +runs +run-data -# Files from Forge MDK -forge*changelog.txt +repo \ No newline at end of file diff --git a/build.gradle b/build.gradle index 68fb06f..67ed01f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,25 +1,11 @@ -buildscript { - repositories { - maven { url = 'https://maven.minecraftforge.net' } - mavenCentral() - maven { url = 'https://repo.spongepowered.org/repository/maven-public' } - maven { url = 'https://maven.parchmentmc.org' } - } - dependencies { - classpath "net.minecraftforge.gradle:ForgeGradle:${forgegradle_version}" - classpath "org.spongepowered:mixingradle:${mixingradle_version}" - classpath "org.parchmentmc:librarian:${librarian_version}" - } -} - plugins { + id 'java-library' + id 'eclipse' + id 'idea' + id 'maven-publish' + id 'net.neoforged.gradle.userdev' version "${neogradle_version}" id 'com.matthewprenger.cursegradle' version "${cursegradle_version}" } -apply plugin: 'net.minecraftforge.gradle' -apply plugin: 'org.parchmentmc.librarian.forgegradle' -apply plugin: 'eclipse' -apply plugin: 'maven-publish' -apply plugin: 'org.spongepowered.mixin' jarJar.enable() @@ -37,57 +23,48 @@ java.toolchain.languageVersion = JavaLanguageVersion.of(17) println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + ' (' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) -minecraft { - mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}" - accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') +minecraft.accessTransformers.file rootProject.file('src/main/resources/META-INF/accesstransformer.cfg') - runs { - client { - workingDirectory project.file('run') - arg '-mixin.config=flywheel.mixins.json' - //jvmArgs '-XX:+UnlockCommercialFeatures' // uncomment for profiling - property 'forge.logging.console.level', 'info' +runs { + // applies to all the run configs below + configureEach { net.neoforged.gradle.dsl.common.runs.run.Run run -> + // Recommended logging data for a userdev environment + systemProperty 'forge.logging.markers', 'REGISTRIES' - mods { - effortlessbuilding { - source sourceSets.main - } + // Recommended logging level for the console + systemProperty 'forge.logging.console.level', 'debug' - if (flywheelInWorkspace) { - flywheel { - source project(":Flywheel").sourceSets.main - } - } - } + //Limit ram usage for the dev environment to 4GB + jvmArgument '-Xmx4G' + if (run.project.javaToolchains.launcherFor(java.toolchain).map { it.metadata.vendor }.getOrElse("").contains("JetBrains")) { + jvmArgument '-XX:+AllowEnhancedClassRedefinition' } - server { - workingDirectory project.file('run/server') - property 'forge.logging.console.level', 'info' - mods { - effortlessbuilding { - source sourceSets.main - } + modSource project.sourceSets.main + } + + client { + // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. + systemProperty 'neoforge.enabledGameTestNamespaces', "effortlessbuilding" + + if (flywheelInWorkspace) { + dependencies { + runtime project(':Flywheel') } } + } - data { - workingDirectory project.file('run') - property 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP' - property 'forge.logging.console.level', 'debug' - args '--mod', 'effortlessbuilding', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources') - mods { - effortlessbuilding { - source sourceSets.main - } + server { + systemProperty 'neoforge.enabledGameTestNamespaces', "effortlessbuilding" + programArgument '--nogui' + } - if (flywheelInWorkspace) { - flywheel { - source project(":Flywheel").sourceSets.main - } - } - } - } + 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', "effortlessbuilding", '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() } } @@ -97,10 +74,13 @@ repositories { name = 'tterrag maven' url = 'https://maven.tterrag.com' } - - maven { - url = 'https://www.cursemaven.com' - content { + exclusiveContent { + forRepository { + maven { + url "https://cursemaven.com" + } + } + filter { includeGroup "curse.maven" } } @@ -119,22 +99,16 @@ repositories { } dependencies { - minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" + implementation "net.neoforged:neoforge:${neo_version}" jarJar("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") { - jarJar.ranged(it, '[0.6.10,0.7)') + version { prefer "0.6.10" } } if (flywheelInWorkspace) { implementation project(':Flywheel') } else { - implementation fg.deobf("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") - } - - // Prevent Mixin annotation processor from getting into IntelliJ's annotation processor settings - // This allows 'Settings > Build, Execution, and Deployment > Build Tools > Gradle > Build and run using' set to IntelliJ to work correctly - if (!Boolean.getBoolean('idea.sync.active')) { - annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor" + implementation "com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}" } } @@ -179,8 +153,7 @@ java { withJavadocJar() } -jar.finalizedBy('reobfJar') -tasks.jarJar.finalizedBy('reobfJarJar') +tasks.build.dependsOn tasks.jarJar publishing { publications { @@ -188,8 +161,7 @@ publishing { artifactId = base.archivesName.get() from components.java - fg.component(it) - jarJar.component(it) +// fg.component(it) } } diff --git a/gradle.properties b/gradle.properties index 5c965dc..9781bc5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,17 +4,15 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false mod_version = 3.5 -artifact_minecraft_version = 1.20.1 +artifact_minecraft_version = 1.20.4 -minecraft_version = 1.20.1 -forge_version = 47.1.3 +minecraft_version = 1.20.4 +neo_version = 20.4.232 +neogradle.subsystems.parchment.minecraftVersion = 1.20.4 +neogradle.subsystems.parchment.mappingsVersion = 2024.02.25 -forgegradle_version = 6.0.7 -mixingradle_version = 0.7-SNAPSHOT -mixin_version = 0.8.5 -librarian_version = 1.+ +neogradle_version = 7.0.107 cursegradle_version = 1.4.0 -parchment_version = 2023.09.03 -flywheel_minecraft_version = 1.20.1 -flywheel_version = 0.6.10-7 \ No newline at end of file +flywheel_minecraft_version = 1.20.4 +flywheel_version = 0.6.10 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cb..c1962a7 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37aef8d..509c4a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 65dcd68..aeb74cb 100644 --- a/gradlew +++ b/gradlew @@ -85,9 +85,6 @@ done APP_BASE_NAME=${0##*/} APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit -# 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"' - # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -144,7 +141,7 @@ 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 + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +149,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,6 +194,10 @@ if "$cygwin" || "$msys" ; then done fi + +# 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 diff --git a/settings.gradle b/settings.gradle index 5ebcbb5..081de2b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,10 +1,13 @@ pluginManagement { repositories { gradlePluginPortal() - maven { url = 'https://maven.minecraftforge.net/' } + maven { + name = 'Official NeoForge Maven' + url = 'https://maven.neoforged.net/releases' + } } } plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0' + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' } \ No newline at end of file diff --git a/src/main/java/nl/requios/effortlessbuilding/AllGuiTextures.java b/src/main/java/nl/requios/effortlessbuilding/AllGuiTextures.java index 2134d4d..62240df 100644 --- a/src/main/java/nl/requios/effortlessbuilding/AllGuiTextures.java +++ b/src/main/java/nl/requios/effortlessbuilding/AllGuiTextures.java @@ -3,8 +3,8 @@ package nl.requios.effortlessbuilding; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; -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 nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper; import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement; import nl.requios.effortlessbuilding.create.foundation.utility.Color; diff --git a/src/main/java/nl/requios/effortlessbuilding/AllIcons.java b/src/main/java/nl/requios/effortlessbuilding/AllIcons.java index e6b6ac6..e5b9548 100644 --- a/src/main/java/nl/requios/effortlessbuilding/AllIcons.java +++ b/src/main/java/nl/requios/effortlessbuilding/AllIcons.java @@ -8,8 +8,8 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.Vec3; -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 nl.requios.effortlessbuilding.create.Create; import nl.requios.effortlessbuilding.create.foundation.gui.element.DelegatedStencilElement; import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement; diff --git a/src/main/java/nl/requios/effortlessbuilding/ClientConfig.java b/src/main/java/nl/requios/effortlessbuilding/ClientConfig.java index ef0c8e4..a33efcc 100644 --- a/src/main/java/nl/requios/effortlessbuilding/ClientConfig.java +++ b/src/main/java/nl/requios/effortlessbuilding/ClientConfig.java @@ -1,14 +1,14 @@ package nl.requios.effortlessbuilding; -import net.minecraftforge.common.ForgeConfigSpec; +import net.neoforged.neoforge.common.ModConfigSpec; -import static net.minecraftforge.common.ForgeConfigSpec.*; +import static net.neoforged.neoforge.common.ModConfigSpec.*; public class ClientConfig { private static final Builder builder = new Builder(); public static final Visuals visuals = new Visuals(builder); - public static final ForgeConfigSpec spec = builder.build(); + public static final ModConfigSpec spec = builder.build(); public static class Visuals { public final BooleanValue showBlockPreviews; diff --git a/src/main/java/nl/requios/effortlessbuilding/ClientEvents.java b/src/main/java/nl/requios/effortlessbuilding/ClientEvents.java index 676e5c8..32121a0 100644 --- a/src/main/java/nl/requios/effortlessbuilding/ClientEvents.java +++ b/src/main/java/nl/requios/effortlessbuilding/ClientEvents.java @@ -6,18 +6,18 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.InputEvent; -import net.minecraftforge.client.event.RegisterKeyMappingsEvent; -import net.minecraftforge.client.event.ScreenEvent; -import net.minecraftforge.client.settings.KeyConflictContext; -import net.minecraftforge.client.settings.KeyModifier; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.neoforge.client.event.InputEvent; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; +import net.neoforged.neoforge.client.event.ScreenEvent; +import net.neoforged.neoforge.client.settings.KeyConflictContext; +import net.neoforged.neoforge.client.settings.KeyModifier; +import net.neoforged.neoforge.event.TickEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod.EventBusSubscriber; import nl.requios.effortlessbuilding.buildmode.BuildModeEnum; import nl.requios.effortlessbuilding.buildmode.ModeOptions; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.gui.buildmode.PlayerSettingsGui; import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu; import nl.requios.effortlessbuilding.gui.buildmodifier.ModifiersScreen; @@ -134,7 +134,7 @@ public class ClientEvents { //Radial menu if (keyBindings[0].isDown()) { - if (!CapabilityHandler.isDisabled(player)) { + if (!AttachmentHandler.isDisabled(player)) { if (!RadialMenu.instance.isVisible()) { Minecraft.getInstance().setScreen(RadialMenu.instance); } @@ -175,7 +175,7 @@ public class ClientEvents { if (player == null) return; //Disabled if max reach is 0, might be set in the config that way. - if (CapabilityHandler.isDisabled(player)) { + if (AttachmentHandler.isDisabled(player)) { EffortlessBuilding.log(player, "Build modifiers are disabled until your power level has increased. Increase your power level by consuming certain items."); } else { mc.setScreen(new ModifiersScreen()); @@ -188,7 +188,7 @@ public class ClientEvents { } @SubscribeEvent - public static void onGuiOpen(ScreenEvent event) { + public static void onGuiOpen(ScreenEvent.Opening event) { Player player = Minecraft.getInstance().player; if (player != null) { EffortlessBuildingClient.BUILDER_CHAIN.cancel(); diff --git a/src/main/java/nl/requios/effortlessbuilding/CommonConfig.java b/src/main/java/nl/requios/effortlessbuilding/CommonConfig.java index e3509a5..9bdef2f 100644 --- a/src/main/java/nl/requios/effortlessbuilding/CommonConfig.java +++ b/src/main/java/nl/requios/effortlessbuilding/CommonConfig.java @@ -1,8 +1,8 @@ package nl.requios.effortlessbuilding; -import net.minecraftforge.common.ForgeConfigSpec; +import net.neoforged.neoforge.common.ModConfigSpec; -import static net.minecraftforge.common.ForgeConfigSpec.*; +import static net.neoforged.neoforge.common.ModConfigSpec.*; public class CommonConfig { @@ -11,7 +11,7 @@ public class CommonConfig { public static final MaxBlocksPlacedAtOnce maxBlocksPlacedAtOnce = new MaxBlocksPlacedAtOnce(builder); public static final MaxBlocksPerAxis maxBlocksPerAxis = new MaxBlocksPerAxis(builder); public static final MaxMirrorRadius maxMirrorRadius = new MaxMirrorRadius(builder); - public static final ForgeConfigSpec spec = builder.build(); + public static final ModConfigSpec spec = builder.build(); public static class Reach { public final IntValue creative; diff --git a/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java b/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java index e88a5c8..dc590f4 100644 --- a/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java +++ b/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java @@ -2,27 +2,22 @@ package nl.requios.effortlessbuilding; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; -import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.event.AttachCapabilitiesEvent; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.event.level.BlockEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraftforge.network.PacketDistributor; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.capability.IPowerLevel; -import nl.requios.effortlessbuilding.capability.PowerLevelCapability; +import net.minecraft.world.level.Level; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.LogicalSide; +import net.neoforged.fml.common.Mod.EventBusSubscriber; +import net.neoforged.neoforge.common.util.FakePlayer; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.neoforged.neoforge.event.TickEvent; +import net.neoforged.neoforge.event.entity.player.PlayerEvent; +import net.neoforged.neoforge.event.level.BlockEvent; +import nl.requios.effortlessbuilding.attachment.PowerLevel; import nl.requios.effortlessbuilding.compatibility.CompatHelper; -import nl.requios.effortlessbuilding.network.ModifierSettingsPacket; -import nl.requios.effortlessbuilding.network.PacketHandler; -import nl.requios.effortlessbuilding.network.PowerLevelPacket; +import nl.requios.effortlessbuilding.network.message.ModifierSettingsPacket; +import nl.requios.effortlessbuilding.network.message.PowerLevelPacket; import nl.requios.effortlessbuilding.systems.ServerBuildState; import nl.requios.effortlessbuilding.utilities.PowerLevelCommand; @@ -30,7 +25,7 @@ import nl.requios.effortlessbuilding.utilities.PowerLevelCommand; public class CommonEvents { //Mod Bus Events - @EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD) +// @EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD) public static class ModBusEvents { @@ -45,6 +40,7 @@ public class CommonEvents { public static void onTick(TickEvent.LevelTickEvent event) { if (event.phase != TickEvent.Phase.START) return; if (event.side == LogicalSide.CLIENT) return; + if (event.level.dimension() != Level.OVERWORLD) return; EffortlessBuilding.SERVER_BLOCK_PLACER.tick(); } @@ -80,9 +76,7 @@ public class CommonEvents { //Don't cancel event if our custom logic is breaking blocks if (EffortlessBuilding.SERVER_BLOCK_PLACER.isPlacingOrBreakingBlocks()) return; - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); - if (powerLevel == null) return; //Should never be null but just to be sure - + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (!ServerBuildState.isLikeVanilla(player) && powerLevel.canBreakFar(player)) { event.setCanceled(true); } @@ -102,19 +96,10 @@ public class CommonEvents { ServerBuildState.handleNewPlayer(player); - PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new ModifierSettingsPacket(player)); + ((ServerPlayer)player).connection.send(new ModifierSettingsPacket(player)); - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); - if (powerLevel == null) return; //Should never be null but just to be sure - - PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new PowerLevelPacket(powerLevel.getPowerLevel())); - } - - @SubscribeEvent - public static void registerCaps(AttachCapabilitiesEvent event) { - if (event.getObject() instanceof Player) { - event.addCapability(CapabilityHandler.POWER_LEVEL_CAP, new PowerLevelCapability()); - } + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); + ((ServerPlayer)player).connection.send(new PowerLevelPacket(powerLevel.getPowerLevel())); } @SubscribeEvent @@ -126,11 +111,9 @@ public class CommonEvents { Player clone = event.getEntity(); // Copy the power level from the original player to the clone - original.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).ifPresent(dataOriginal -> - clone.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).ifPresent(dataClone -> { - dataClone.setPowerLevel(dataOriginal.getPowerLevel()); - }) - ); + if (event.isWasDeath() && event.getOriginal().hasData(EffortlessBuilding.POWER_LEVEL)) { + event.getEntity().setData(EffortlessBuilding.POWER_LEVEL, event.getOriginal().getData(EffortlessBuilding.POWER_LEVEL)); + } } @SubscribeEvent diff --git a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java index d44fe30..9febc22 100644 --- a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java +++ b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java @@ -1,34 +1,42 @@ package nl.requios.effortlessbuilding; import com.mojang.serialization.Codec; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.CreativeModeTabs; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.loot.IGlobalLootModifier; -import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.network.IContainerFactory; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.DistExecutor; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.neoforge.attachment.AttachmentType; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.common.loot.IGlobalLootModifier; +import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; +import net.neoforged.neoforge.network.IContainerFactory; +import net.neoforged.neoforge.registries.DeferredItem; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.neoforged.neoforge.registries.NeoForgeRegistries; +import nl.requios.effortlessbuilding.attachment.PowerLevel; import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.gui.DiamondRandomizerBagContainer; import nl.requios.effortlessbuilding.gui.GoldenRandomizerBagContainer; import nl.requios.effortlessbuilding.gui.RandomizerBagContainer; -import nl.requios.effortlessbuilding.item.*; +import nl.requios.effortlessbuilding.item.DiamondRandomizerBagItem; +import nl.requios.effortlessbuilding.item.GoldenRandomizerBagItem; +import nl.requios.effortlessbuilding.item.PowerLevelItem; +import nl.requios.effortlessbuilding.item.RandomizerBagItem; +import nl.requios.effortlessbuilding.item.ReachUpgrade1Item; +import nl.requios.effortlessbuilding.item.ReachUpgrade2Item; +import nl.requios.effortlessbuilding.item.ReachUpgrade3Item; +import nl.requios.effortlessbuilding.item.SingleItemLootModifier; import nl.requios.effortlessbuilding.network.PacketHandler; import nl.requios.effortlessbuilding.proxy.ClientProxy; import nl.requios.effortlessbuilding.proxy.IProxy; @@ -40,6 +48,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.List; +import java.util.function.Supplier; @Mod(EffortlessBuilding.MODID) public class EffortlessBuilding { @@ -55,42 +64,48 @@ public class EffortlessBuilding { public static final ItemUsageTracker ITEM_USAGE_TRACKER = new ItemUsageTracker(); //Registration - private static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); - private static final DeferredRegister> CONTAINERS = DeferredRegister.create(ForgeRegistries.MENU_TYPES, EffortlessBuilding.MODID); - public static final DeferredRegister> LOOT_MODIFIERS = DeferredRegister.create(ForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, EffortlessBuilding.MODID); + private static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(MODID); + private static final DeferredRegister> CONTAINERS = DeferredRegister.create(BuiltInRegistries.MENU, EffortlessBuilding.MODID); + private static final DeferredRegister> LOOT_MODIFIERS = DeferredRegister.create(NeoForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, EffortlessBuilding.MODID); + private static final DeferredRegister> ATTACHMENT_TYPES = DeferredRegister.create(NeoForgeRegistries.Keys.ATTACHMENT_TYPES, EffortlessBuilding.MODID); - public static final RegistryObject RANDOMIZER_BAG_ITEM = ITEMS.register("randomizer_bag", RandomizerBagItem::new); - public static final RegistryObject GOLDEN_RANDOMIZER_BAG_ITEM = ITEMS.register("golden_randomizer_bag", GoldenRandomizerBagItem::new); - public static final RegistryObject DIAMOND_RANDOMIZER_BAG_ITEM = ITEMS.register("diamond_randomizer_bag", DiamondRandomizerBagItem::new); - public static final RegistryObject REACH_UPGRADE_1_ITEM = ITEMS.register("reach_upgrade1", ReachUpgrade1Item::new); - public static final RegistryObject REACH_UPGRADE_2_ITEM = ITEMS.register("reach_upgrade2", ReachUpgrade2Item::new); - public static final RegistryObject REACH_UPGRADE_3_ITEM = ITEMS.register("reach_upgrade3", ReachUpgrade3Item::new); - public static final RegistryObject MUSCLES_ITEM = ITEMS.register("muscles", PowerLevelItem::new); - public static final RegistryObject ELASTIC_HAND_ITEM = ITEMS.register("elastic_hand", PowerLevelItem::new); - public static final RegistryObject BUILDING_TECHNIQUES_BOOK_ITEM = ITEMS.register("building_techniques_book", PowerLevelItem::new); + public static final DeferredItem RANDOMIZER_BAG_ITEM = ITEMS.register("randomizer_bag", RandomizerBagItem::new); + public static final DeferredItem GOLDEN_RANDOMIZER_BAG_ITEM = ITEMS.register("golden_randomizer_bag", GoldenRandomizerBagItem::new); + public static final DeferredItem DIAMOND_RANDOMIZER_BAG_ITEM = ITEMS.register("diamond_randomizer_bag", DiamondRandomizerBagItem::new); + public static final DeferredItem REACH_UPGRADE_1_ITEM = ITEMS.register("reach_upgrade1", ReachUpgrade1Item::new); + public static final DeferredItem REACH_UPGRADE_2_ITEM = ITEMS.register("reach_upgrade2", ReachUpgrade2Item::new); + public static final DeferredItem REACH_UPGRADE_3_ITEM = ITEMS.register("reach_upgrade3", ReachUpgrade3Item::new); + public static final DeferredItem MUSCLES_ITEM = ITEMS.register("muscles", PowerLevelItem::new); + public static final DeferredItem ELASTIC_HAND_ITEM = ITEMS.register("elastic_hand", PowerLevelItem::new); + public static final DeferredItem BUILDING_TECHNIQUES_BOOK_ITEM = ITEMS.register("building_techniques_book", PowerLevelItem::new); - public static final RegistryObject> RANDOMIZER_BAG_CONTAINER = CONTAINERS.register("randomizer_bag", () -> registerContainer(RandomizerBagContainer::new)); - public static final RegistryObject> GOLDEN_RANDOMIZER_BAG_CONTAINER = CONTAINERS.register("golden_randomizer_bag", () -> registerContainer(GoldenRandomizerBagContainer::new)); - public static final RegistryObject> DIAMOND_RANDOMIZER_BAG_CONTAINER = CONTAINERS.register("diamond_randomizer_bag", () -> registerContainer(DiamondRandomizerBagContainer::new)); + public static final Supplier> RANDOMIZER_BAG_CONTAINER = CONTAINERS.register("randomizer_bag", () -> registerContainer(RandomizerBagContainer::new)); + public static final Supplier> GOLDEN_RANDOMIZER_BAG_CONTAINER = CONTAINERS.register("golden_randomizer_bag", () -> registerContainer(GoldenRandomizerBagContainer::new)); + public static final Supplier> DIAMOND_RANDOMIZER_BAG_CONTAINER = CONTAINERS.register("diamond_randomizer_bag", () -> registerContainer(DiamondRandomizerBagContainer::new)); + public static final Supplier> SINGLE_ITEM_LOOT_MODIFIER = EffortlessBuilding.LOOT_MODIFIERS.register("single_item_loot_modifier", SingleItemLootModifier.CODEC); - public EffortlessBuilding() { + public static final Supplier> POWER_LEVEL = ATTACHMENT_TYPES.register("power_level", () -> AttachmentType.serializable(PowerLevel::new).build()); + + public EffortlessBuilding(IEventBus modEventBus) { instance = this; ModLoadingContext modLoadingContext = ModLoadingContext.get(); - IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); - IEventBus forgeEventBus = MinecraftForge.EVENT_BUS; + IEventBus forgeEventBus = NeoForge.EVENT_BUS; modEventBus.addListener(EffortlessBuilding::setup); modEventBus.addListener(EffortlessBuilding::addTabContents); + modEventBus.addListener(PacketHandler::setupPackets); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> EffortlessBuildingClient.onConstructorClient(modEventBus, forgeEventBus)); + if (FMLEnvironment.dist.isClient()) { + EffortlessBuildingClient.onConstructorClient(modEventBus, forgeEventBus); + } - ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus()); - CONTAINERS.register(FMLJavaModLoadingContext.get().getModEventBus()); + ITEMS.register(modEventBus); + CONTAINERS.register(modEventBus); - var singleItemLootModifier = SingleItemLootModifier.CODEC; //load this class to register the loot modifier - LOOT_MODIFIERS.register(FMLJavaModLoadingContext.get().getModEventBus()); + LOOT_MODIFIERS.register(modEventBus); + ATTACHMENT_TYPES.register(modEventBus); //Register config modLoadingContext.registerConfig(ModConfig.Type.COMMON, CommonConfig.spec); @@ -99,8 +114,6 @@ public class EffortlessBuilding { } public static void setup(final FMLCommonSetupEvent event) { - PacketHandler.register(); - CompatHelper.setup(); } @@ -111,7 +124,7 @@ public class EffortlessBuilding { } } - public static MenuType registerContainer(IContainerFactory fact){ + public static MenuType registerContainer(IContainerFactory fact) { MenuType type = new MenuType(fact, FeatureFlags.REGISTRY.allFlags()); return type; } diff --git a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuildingClient.java b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuildingClient.java index 22e72fb..4c96f6b 100644 --- a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuildingClient.java +++ b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuildingClient.java @@ -1,8 +1,8 @@ package nl.requios.effortlessbuilding; import net.minecraft.client.gui.screens.MenuScreens; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers; import nl.requios.effortlessbuilding.gui.DiamondRandomizerBagScreen; diff --git a/src/main/java/nl/requios/effortlessbuilding/ServerConfig.java b/src/main/java/nl/requios/effortlessbuilding/ServerConfig.java index fb71917..60e2f5b 100644 --- a/src/main/java/nl/requios/effortlessbuilding/ServerConfig.java +++ b/src/main/java/nl/requios/effortlessbuilding/ServerConfig.java @@ -1,17 +1,17 @@ package nl.requios.effortlessbuilding; -import net.minecraftforge.common.ForgeConfigSpec; +import net.neoforged.neoforge.common.ModConfigSpec; import java.util.Arrays; import java.util.List; -import static net.minecraftforge.common.ForgeConfigSpec.*; +import static net.neoforged.neoforge.common.ModConfigSpec.*; public class ServerConfig { private static final Builder builder = new Builder(); public static final ServerConfig.Validation validation = new ServerConfig.Validation(builder); public static final ServerConfig.Memory memory = new ServerConfig.Memory(builder); - public static final ForgeConfigSpec spec = builder.build(); + public static final ModConfigSpec spec = builder.build(); public static class Validation { public final BooleanValue allowInSurvival; diff --git a/src/main/java/nl/requios/effortlessbuilding/capability/CapabilityHandler.java b/src/main/java/nl/requios/effortlessbuilding/attachment/AttachmentHandler.java similarity index 62% rename from src/main/java/nl/requios/effortlessbuilding/capability/CapabilityHandler.java rename to src/main/java/nl/requios/effortlessbuilding/attachment/AttachmentHandler.java index f7452a7..0149db5 100644 --- a/src/main/java/nl/requios/effortlessbuilding/capability/CapabilityHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/attachment/AttachmentHandler.java @@ -1,33 +1,26 @@ -package nl.requios.effortlessbuilding.capability; +package nl.requios.effortlessbuilding.attachment; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.CapabilityManager; -import net.minecraftforge.common.capabilities.CapabilityToken; -import net.minecraftforge.network.PacketDistributor; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.network.PacketHandler; -import nl.requios.effortlessbuilding.network.PowerLevelPacket; +import nl.requios.effortlessbuilding.network.message.PowerLevelPacket; -public class CapabilityHandler { +public class AttachmentHandler { public static final ResourceLocation POWER_LEVEL_CAP = new ResourceLocation(EffortlessBuilding.MODID, "power_level"); - public static final Capability POWER_LEVEL_CAPABILITY = CapabilityManager.get(new CapabilityToken<>() { - }); public static void syncToClient(Player player) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel == null) return; //Should never be null but just to be sure - PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new PowerLevelPacket(powerLevel.getPowerLevel())); + ((ServerPlayer)player).connection.send(new PowerLevelPacket(powerLevel.getPowerLevel())); } //Helper methods to reduce boilerplate code public static boolean canReplaceBlocks(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.canReplaceBlocks(player); } @@ -37,7 +30,7 @@ public class CapabilityHandler { public static int getMaxBlocksPerAxis(Player player, boolean nextPowerLevel) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getMaxBlocksPerAxis(player, nextPowerLevel); } @@ -47,7 +40,7 @@ public class CapabilityHandler { public static int getMaxBlocksPlacedAtOnce(Player player, boolean nextPowerLevel) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getMaxBlocksPlacedAtOnce(player, nextPowerLevel); } @@ -57,7 +50,7 @@ public class CapabilityHandler { public static int getMaxMirrorRadius(Player player, boolean nextPowerLevel) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getMaxMirrorRadius(player, nextPowerLevel); } @@ -67,7 +60,7 @@ public class CapabilityHandler { public static int getBuildModeReach(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getBuildModeReach(player); } @@ -77,7 +70,7 @@ public class CapabilityHandler { public static int getPlacementReach(Player player, boolean nextPowerLevel) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getPlacementReach(player, nextPowerLevel); } @@ -87,7 +80,7 @@ public class CapabilityHandler { public static int getPowerLevel(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getPowerLevel(); } @@ -97,7 +90,7 @@ public class CapabilityHandler { public static int getNextPowerLevel(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getNextPowerLevel(); } @@ -107,7 +100,7 @@ public class CapabilityHandler { public static boolean canIncreasePowerLevel(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.canIncreasePowerLevel(); } @@ -117,7 +110,7 @@ public class CapabilityHandler { public static boolean isDisabled(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.isDisabled(player); } @@ -127,7 +120,7 @@ public class CapabilityHandler { public static boolean canBreakFar(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.canBreakFar(player); } diff --git a/src/main/java/nl/requios/effortlessbuilding/attachment/PowerLevel.java b/src/main/java/nl/requios/effortlessbuilding/attachment/PowerLevel.java new file mode 100644 index 0000000..43ce881 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/attachment/PowerLevel.java @@ -0,0 +1,105 @@ +package nl.requios.effortlessbuilding.attachment; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.common.util.INBTSerializable; +import nl.requios.effortlessbuilding.CommonConfig; + +public class PowerLevel implements INBTSerializable { + public static final int MAX_POWER_LEVEL = 3; //Common access + + public PowerLevel() { + } + + private int powerLevel = 0; + + public int getPowerLevel() { + return this.powerLevel; + } + + public int getNextPowerLevel() { + return Math.min(getPowerLevel() + 1, MAX_POWER_LEVEL); + } + + public void setPowerLevel(int powerLevel) { + this.powerLevel = powerLevel; + } + + public boolean canIncreasePowerLevel() { + return getPowerLevel() < MAX_POWER_LEVEL; + } + + public void increasePowerLevel() { + if (canIncreasePowerLevel()) { + setPowerLevel(getPowerLevel() + 1); + } + } + + public int getPlacementReach(Player player, boolean nextPowerLevel) { + if (player.isCreative()) return CommonConfig.reach.creative.get(); + return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) { + case 1 -> CommonConfig.reach.level1.get(); + case 2 -> CommonConfig.reach.level2.get(); + case 3 -> CommonConfig.reach.level3.get(); + default -> CommonConfig.reach.level0.get(); + }; + } + + //How far away we can detect the second and third click of build modes (distance to player) + public int getBuildModeReach(Player player) { + //A bit further than placement reach, so you can build lines when looking to the side without having to move. + return getPlacementReach(player, false) + 6; + } + + public int getMaxBlocksPlacedAtOnce(Player player, boolean nextPowerLevel) { + if (player.isCreative()) return CommonConfig.maxBlocksPlacedAtOnce.creative.get(); + return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) { + case 1 -> CommonConfig.maxBlocksPlacedAtOnce.level1.get(); + case 2 -> CommonConfig.maxBlocksPlacedAtOnce.level2.get(); + case 3 -> CommonConfig.maxBlocksPlacedAtOnce.level3.get(); + default -> CommonConfig.maxBlocksPlacedAtOnce.level0.get(); + }; + } + + public int getMaxBlocksPerAxis(Player player, boolean nextPowerLevel) { + if (player.isCreative()) return CommonConfig.maxBlocksPerAxis.creative.get(); + return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) { + case 1 -> CommonConfig.maxBlocksPerAxis.level1.get(); + case 2 -> CommonConfig.maxBlocksPerAxis.level2.get(); + case 3 -> CommonConfig.maxBlocksPerAxis.level3.get(); + default -> CommonConfig.maxBlocksPerAxis.level0.get(); + }; + } + + public int getMaxMirrorRadius(Player player, boolean nextPowerLevel) { + if (player.isCreative()) return CommonConfig.maxMirrorRadius.creative.get(); + return switch (getPowerLevel() + (nextPowerLevel ? 1 : 0)) { + case 1 -> CommonConfig.maxMirrorRadius.level1.get(); + case 2 -> CommonConfig.maxMirrorRadius.level2.get(); + case 3 -> CommonConfig.maxMirrorRadius.level3.get(); + default -> CommonConfig.maxMirrorRadius.level0.get(); + }; + } + + public boolean isDisabled(Player player) { + return getMaxBlocksPlacedAtOnce(player, false) <= 0 || getMaxBlocksPerAxis(player, false) <= 0; + } + + public boolean canBreakFar(Player player) { + return player.getAbilities().instabuild; + } + + public boolean canReplaceBlocks(Player player) { + return player.getAbilities().instabuild; + } + + public CompoundTag serializeNBT() { + CompoundTag tag = new CompoundTag(); + tag.putInt("powerLevel", getPowerLevel()); + return tag; + } + + public void deserializeNBT(CompoundTag nbt) { + setPowerLevel(nbt.getInt("powerLevel")); + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java index e232392..b729302 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java @@ -6,11 +6,11 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.ClipContext; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -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 net.neoforged.neoforge.network.PacketDistributor; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.network.IsUsingBuildModePacket; -import nl.requios.effortlessbuilding.network.PacketHandler; +import nl.requios.effortlessbuilding.network.message.IsUsingBuildModePacket; import nl.requios.effortlessbuilding.utilities.BlockSet; @OnlyIn(Dist.CLIENT) @@ -30,7 +30,7 @@ public class BuildModes { public void setBuildMode(BuildModeEnum buildMode) { this.buildMode = buildMode; - PacketHandler.INSTANCE.sendToServer(new IsUsingBuildModePacket(this.buildMode != BuildModeEnum.DISABLED)); + PacketDistributor.SERVER.noArg().send(new IsUsingBuildModePacket(this.buildMode != BuildModeEnum.DISABLED)); EffortlessBuilding.log(Minecraft.getInstance().player, I18n.get(buildMode.getNameKey()), true); } diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeOptions.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeOptions.java index c322bd5..6461c59 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeOptions.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeOptions.java @@ -1,15 +1,15 @@ package nl.requios.effortlessbuilding.buildmode; import net.minecraft.world.entity.player.Player; -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 net.neoforged.neoforge.network.PacketDistributor; import nl.requios.effortlessbuilding.AllIcons; import nl.requios.effortlessbuilding.ClientEvents; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.EffortlessBuildingClient; -import nl.requios.effortlessbuilding.network.PacketHandler; -import nl.requios.effortlessbuilding.network.PerformRedoPacket; -import nl.requios.effortlessbuilding.network.PerformUndoPacket; +import nl.requios.effortlessbuilding.network.message.PerformRedoPacket; +import nl.requios.effortlessbuilding.network.message.PerformUndoPacket; import nl.requios.effortlessbuilding.systems.BuildSettings; @OnlyIn(Dist.CLIENT) @@ -69,8 +69,8 @@ public class ModeOptions { if (action == null) return; switch (action) { - case UNDO -> PacketHandler.INSTANCE.sendToServer(new PerformUndoPacket()); - case REDO -> PacketHandler.INSTANCE.sendToServer(new PerformRedoPacket()); + case UNDO -> PacketDistributor.SERVER.noArg().send(new PerformUndoPacket()); + case REDO -> PacketDistributor.SERVER.noArg().send(new PerformRedoPacket()); case OPEN_MODIFIER_SETTINGS -> ClientEvents.openModifierSettings(); case OPEN_PLAYER_SETTINGS -> ClientEvents.openPlayerSettings(); case PREVIOUS_BUILD_MODE -> EffortlessBuildingClient.BUILD_MODES.activatePreviousBuildMode(); diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java index 71e3d9f..d097a30 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java @@ -5,7 +5,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; import nl.requios.effortlessbuilding.EffortlessBuildingClient; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.utilities.BlockEntry; import nl.requios.effortlessbuilding.utilities.BlockSet; @@ -65,7 +65,7 @@ public abstract class ThreeClicksBuildMode extends BaseBuildMode { if (secondPos == null) return; //Limit amount of blocks we can place per row - int axisLimit = CapabilityHandler.getMaxBlocksPerAxis(player, false); + int axisLimit = AttachmentHandler.getMaxBlocksPerAxis(player, false); int x1 = firstPos.getX(), x2 = secondPos.getX(); int y1 = firstPos.getY(), y2 = secondPos.getY(); @@ -94,7 +94,7 @@ public abstract class ThreeClicksBuildMode extends BaseBuildMode { if (thirdPos == null) return; //Limit amount of blocks you can place per row - int axisLimit = CapabilityHandler.getMaxBlocksPerAxis(player, false); + int axisLimit = AttachmentHandler.getMaxBlocksPerAxis(player, false); int x1 = firstPos.getX(), x2 = secondPos.getX(), x3 = thirdPos.getX(); int y1 = firstPos.getY(), y2 = secondPos.getY(), y3 = thirdPos.getY(); @@ -140,7 +140,7 @@ public abstract class ThreeClicksBuildMode extends BaseBuildMode { criteriaList.add(new HeightCriteria(zBound, secondPos, start)); //Remove invalid criteria - int reach = CapabilityHandler.getBuildModeReach(player); + int reach = AttachmentHandler.getBuildModeReach(player); criteriaList.removeIf(criteria -> !criteria.isValid(start, look, reach, player, skipRaytrace)); //If none are valid, return empty list of blocks diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/TwoClicksBuildMode.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/TwoClicksBuildMode.java index ad05b71..82647cd 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/TwoClicksBuildMode.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/TwoClicksBuildMode.java @@ -4,7 +4,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; import nl.requios.effortlessbuilding.EffortlessBuildingClient; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.utilities.BlockEntry; import nl.requios.effortlessbuilding.utilities.BlockSet; @@ -49,7 +49,7 @@ public abstract class TwoClicksBuildMode extends BaseBuildMode { if (secondPos == null) return; //Limit amount of blocks we can place per row - int axisLimit = CapabilityHandler.getMaxBlocksPerAxis(player, false); + int axisLimit = AttachmentHandler.getMaxBlocksPerAxis(player, false); int x1 = firstPos.getX(), x2 = secondPos.getX(); int y1 = firstPos.getY(), y2 = secondPos.getY(); diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Floor.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Floor.java index c06c649..4bac2b9 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Floor.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Floor.java @@ -6,7 +6,7 @@ import net.minecraft.world.phys.Vec3; import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import java.util.ArrayList; import java.util.List; @@ -24,7 +24,7 @@ public class Floor extends TwoClicksBuildMode { criteriaList.add(new Criteria(yBound, start)); //Remove invalid criteria - int reach = CapabilityHandler.getBuildModeReach(player); + int reach = AttachmentHandler.getBuildModeReach(player); criteriaList.removeIf(criteria -> !criteria.isValid(start, look, reach, player, skipRaytrace)); //If none are valid, return empty list of blocks diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Line.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Line.java index 9817d09..0dd4772 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Line.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Line.java @@ -5,7 +5,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import java.util.ArrayList; import java.util.List; @@ -31,7 +31,7 @@ public class Line extends TwoClicksBuildMode { criteriaList.add(new Criteria(zBound, firstPos, start)); //Remove invalid criteria - int reach = CapabilityHandler.getBuildModeReach(player); + int reach = AttachmentHandler.getBuildModeReach(player); criteriaList.removeIf(criteria -> !criteria.isValid(start, look, reach, player, skipRaytrace)); //If none are valid, return empty list of blocks diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/SlopeFloor.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/SlopeFloor.java index 5b24032..867fbde 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/SlopeFloor.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/SlopeFloor.java @@ -4,7 +4,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.core.BlockPos; import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.ThreeClicksBuildMode; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import java.util.ArrayList; import java.util.List; @@ -15,7 +15,7 @@ public class SlopeFloor extends ThreeClicksBuildMode { public static List getSlopeFloorBlocks(Player player, int x1, int y1, int z1, int x2, int y2, int z2, int x3, int y3, int z3) { List list = new ArrayList<>(); - int axisLimit = CapabilityHandler.getMaxBlocksPerAxis(player, false); + int axisLimit = AttachmentHandler.getMaxBlocksPerAxis(player, false); //Determine whether to use x or z axis to slope up boolean onXAxis = true; diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Wall.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Wall.java index 076f5d0..f41c2a4 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Wall.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Wall.java @@ -6,7 +6,7 @@ import net.minecraft.world.phys.Vec3; import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import java.util.ArrayList; import java.util.List; @@ -28,7 +28,7 @@ public class Wall extends TwoClicksBuildMode { criteriaList.add(new Criteria(zBound, firstPos, start, look)); //Remove invalid criteria - int reach = CapabilityHandler.getBuildModeReach(player); + int reach = AttachmentHandler.getBuildModeReach(player); criteriaList.removeIf(criteria -> !criteria.isValid(start, look, reach, player, skipRaytrace)); //If none are valid, return empty list of blocks diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java index 6b4bb34..2119be2 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java @@ -3,11 +3,11 @@ package nl.requios.effortlessbuilding.buildmodifier; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.world.entity.player.Player; -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 net.neoforged.neoforge.network.PacketDistributor; import nl.requios.effortlessbuilding.create.foundation.utility.NBTHelper; -import nl.requios.effortlessbuilding.network.ModifierSettingsPacket; -import nl.requios.effortlessbuilding.network.PacketHandler; +import nl.requios.effortlessbuilding.network.message.ModifierSettingsPacket; import nl.requios.effortlessbuilding.utilities.BlockSet; import java.util.ArrayList; @@ -96,7 +96,7 @@ public class BuildModifiers { } public void save() { - PacketHandler.INSTANCE.sendToServer(new ModifierSettingsPacket(serializeNBT())); + PacketDistributor.SERVER.noArg().send(new ModifierSettingsPacket(serializeNBT())); //Save locally as well? // var listTag = NBTHelper.writeCompoundList(modifierSettingsList, BaseModifier::serializeNBT); diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/Mirror.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/Mirror.java index b19c7b0..64f92bf 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/Mirror.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/Mirror.java @@ -6,7 +6,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.core.BlockPos; import net.minecraft.world.phys.Vec3; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.utilities.BlockEntry; import nl.requios.effortlessbuilding.utilities.BlockSet; @@ -42,7 +42,7 @@ public class Mirror extends BaseModifier { @Override public void onPowerLevelChanged(int powerLevel) { - radius = CapabilityHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false); + radius = AttachmentHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false); } private void performMirrorX(BlockSet blocks, BlockEntry blockEntry) { diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/RadialMirror.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/RadialMirror.java index 3c6a144..48eff2c 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/RadialMirror.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/RadialMirror.java @@ -9,7 +9,7 @@ import net.minecraft.world.level.block.Rotation; import net.minecraft.core.BlockPos; import net.minecraft.util.Mth; import net.minecraft.world.phys.Vec3; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.utilities.BlockEntry; import nl.requios.effortlessbuilding.utilities.BlockSet; @@ -43,7 +43,7 @@ public class RadialMirror extends BaseModifier { @Override public void onPowerLevelChanged(int powerLevel) { - radius = CapabilityHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false); + radius = AttachmentHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false); } public void performRadialMirror(BlockSet blocks, BlockEntry blockEntry) { diff --git a/src/main/java/nl/requios/effortlessbuilding/capability/IPowerLevel.java b/src/main/java/nl/requios/effortlessbuilding/capability/IPowerLevel.java deleted file mode 100644 index 721379c..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/capability/IPowerLevel.java +++ /dev/null @@ -1,38 +0,0 @@ -package nl.requios.effortlessbuilding.capability; - -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.common.capabilities.AutoRegisterCapability; - -@AutoRegisterCapability -public interface IPowerLevel { - - int getPowerLevel(); - - int getNextPowerLevel(); - - void setPowerLevel(int powerLevel); - - boolean canIncreasePowerLevel(); - - void increasePowerLevel(); - - - int getPlacementReach(Player player, boolean nextPowerLevel); - - int getBuildModeReach(Player player); - - - int getMaxBlocksPlacedAtOnce(Player player, boolean nextPowerLevel); - - - int getMaxBlocksPerAxis(Player player, boolean nextPowerLevel); - - - int getMaxMirrorRadius(Player player, boolean nextPowerLevel); - - boolean isDisabled(Player player); - - boolean canBreakFar(Player player); - - boolean canReplaceBlocks(Player player); -} diff --git a/src/main/java/nl/requios/effortlessbuilding/capability/PowerLevelCapability.java b/src/main/java/nl/requios/effortlessbuilding/capability/PowerLevelCapability.java deleted file mode 100644 index e472e46..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/capability/PowerLevelCapability.java +++ /dev/null @@ -1,127 +0,0 @@ -package nl.requios.effortlessbuilding.capability; - -import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ICapabilitySerializable; -import net.minecraftforge.common.util.LazyOptional; -import nl.requios.effortlessbuilding.CommonConfig; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class PowerLevelCapability implements IPowerLevel, ICapabilitySerializable { - public static final int MAX_POWER_LEVEL = 3; //Common access - - private int powerLevel = 0; - - @Override - public int getPowerLevel() { - return this.powerLevel; - } - - @Override - public int getNextPowerLevel() { - return Math.min(getPowerLevel() + 1, MAX_POWER_LEVEL); - } - - @Override - public void setPowerLevel(int powerLevel) { - this.powerLevel = powerLevel; - } - - @Override - public boolean canIncreasePowerLevel() { - return getPowerLevel() < MAX_POWER_LEVEL; - } - - @Override - public void increasePowerLevel() { - if (canIncreasePowerLevel()) { - setPowerLevel(getPowerLevel() + 1); - } - } - - @Override - public int getPlacementReach(Player player, boolean nextPowerLevel) { - if (player.isCreative()) return CommonConfig.reach.creative.get(); - return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) { - case 1 -> CommonConfig.reach.level1.get(); - case 2 -> CommonConfig.reach.level2.get(); - case 3 -> CommonConfig.reach.level3.get(); - default -> CommonConfig.reach.level0.get(); - }; - } - - //How far away we can detect the second and third click of build modes (distance to player) - @Override - public int getBuildModeReach(Player player) { - //A bit further than placement reach, so you can build lines when looking to the side without having to move. - return getPlacementReach(player, false) + 6; - } - - @Override - public int getMaxBlocksPlacedAtOnce(Player player, boolean nextPowerLevel) { - if (player.isCreative()) return CommonConfig.maxBlocksPlacedAtOnce.creative.get(); - return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) { - case 1 -> CommonConfig.maxBlocksPlacedAtOnce.level1.get(); - case 2 -> CommonConfig.maxBlocksPlacedAtOnce.level2.get(); - case 3 -> CommonConfig.maxBlocksPlacedAtOnce.level3.get(); - default -> CommonConfig.maxBlocksPlacedAtOnce.level0.get(); - }; - } - - @Override - public int getMaxBlocksPerAxis(Player player, boolean nextPowerLevel) { - if (player.isCreative()) return CommonConfig.maxBlocksPerAxis.creative.get(); - return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) { - case 1 -> CommonConfig.maxBlocksPerAxis.level1.get(); - case 2 -> CommonConfig.maxBlocksPerAxis.level2.get(); - case 3 -> CommonConfig.maxBlocksPerAxis.level3.get(); - default -> CommonConfig.maxBlocksPerAxis.level0.get(); - }; - } - - @Override - public int getMaxMirrorRadius(Player player, boolean nextPowerLevel) { - if (player.isCreative()) return CommonConfig.maxMirrorRadius.creative.get(); - return switch (getPowerLevel() + (nextPowerLevel ? 1 : 0)) { - case 1 -> CommonConfig.maxMirrorRadius.level1.get(); - case 2 -> CommonConfig.maxMirrorRadius.level2.get(); - case 3 -> CommonConfig.maxMirrorRadius.level3.get(); - default -> CommonConfig.maxMirrorRadius.level0.get(); - }; - } - - @Override - public boolean isDisabled(Player player) { - return getMaxBlocksPlacedAtOnce(player, false) <= 0 || getMaxBlocksPerAxis(player, false) <= 0; - } - - @Override - public boolean canBreakFar(Player player) { - return player.getAbilities().instabuild; - } - - @Override - public boolean canReplaceBlocks(Player player) { - return player.getAbilities().instabuild; - } - - @Override - public @NotNull LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { - return CapabilityHandler.POWER_LEVEL_CAPABILITY.orEmpty(cap, LazyOptional.of(() -> this)); - } - - @Override - public CompoundTag serializeNBT() { - CompoundTag tag = new CompoundTag(); - tag.putInt("powerLevel", getPowerLevel()); - return tag; - } - - @Override - public void deserializeNBT(CompoundTag nbt) { - setPowerLevel(nbt.getInt("powerLevel")); - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/compatibility/CompatHelper.java b/src/main/java/nl/requios/effortlessbuilding/compatibility/CompatHelper.java index fc7c5af..52ea80f 100644 --- a/src/main/java/nl/requios/effortlessbuilding/compatibility/CompatHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/compatibility/CompatHelper.java @@ -6,7 +6,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.IItemHandler; +import net.neoforged.neoforge.items.IItemHandler; import nl.requios.effortlessbuilding.create.foundation.item.ItemHelper; import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/CreateClientTest.java b/src/main/java/nl/requios/effortlessbuilding/create/CreateClientTest.java index aa1d47b..7ed4b71 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/CreateClientTest.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/CreateClientTest.java @@ -1,9 +1,6 @@ package nl.requios.effortlessbuilding.create; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(Dist.CLIENT) +//@Mod.EventBusSubscriber(Dist.CLIENT) public class CreateClientTest { // @SubscribeEvent diff --git a/src/main/java/nl/requios/effortlessbuilding/create/events/ClientEvents.java b/src/main/java/nl/requios/effortlessbuilding/create/events/ClientEvents.java index 5ccc8bf..d39b8a3 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/events/ClientEvents.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/events/ClientEvents.java @@ -6,14 +6,14 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RenderLevelStageEvent; -import net.minecraftforge.client.event.ViewportEvent; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.TickEvent.ClientTickEvent; -import net.minecraftforge.event.level.LevelEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.neoforge.client.event.RenderLevelStageEvent; +import net.neoforged.neoforge.client.event.ViewportEvent; +import net.neoforged.neoforge.event.TickEvent; +import net.neoforged.neoforge.event.TickEvent.ClientTickEvent; +import net.neoforged.neoforge.event.level.LevelEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; import nl.requios.effortlessbuilding.create.Create; import nl.requios.effortlessbuilding.create.CreateClient; import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer; @@ -21,7 +21,7 @@ import nl.requios.effortlessbuilding.create.foundation.utility.AnimationTickHold import nl.requios.effortlessbuilding.create.foundation.utility.CameraAngleAnimationService; import nl.requios.effortlessbuilding.create.foundation.utility.worldWrappers.WrappedClientWorld; -@EventBusSubscriber(Dist.CLIENT) +@Mod.EventBusSubscriber(Dist.CLIENT) public class ClientEvents { private static final String ITEM_PREFIX = "item." + Create.ID; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/events/CommonEvents.java b/src/main/java/nl/requios/effortlessbuilding/create/events/CommonEvents.java index 5e83123..92a4b5c 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/events/CommonEvents.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/events/CommonEvents.java @@ -1,12 +1,12 @@ package nl.requios.effortlessbuilding.create.events; import net.minecraft.world.level.LevelAccessor; -import net.minecraftforge.event.level.LevelEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.neoforged.neoforge.event.level.LevelEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; import nl.requios.effortlessbuilding.create.foundation.utility.WorldAttached; -@EventBusSubscriber +@Mod.EventBusSubscriber public class CommonEvents { @SubscribeEvent @@ -16,7 +16,7 @@ public class CommonEvents { } - @EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD) +// @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public static class ModBusEvents { // @SubscribeEvent diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/ModFilePackResources.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/ModFilePackResources.java index 4f0aa47..30dc183 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/ModFilePackResources.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/ModFilePackResources.java @@ -1,25 +1,25 @@ -package nl.requios.effortlessbuilding.create.foundation; - -import net.minecraftforge.forgespi.locating.IModFile; -import net.minecraftforge.resource.PathPackResources; - -import java.nio.file.Path; - -public class ModFilePackResources extends PathPackResources { - protected final IModFile modFile; - protected final String sourcePath; - - public ModFilePackResources(String name, IModFile modFile, String sourcePath) { - super(name, true, modFile.findResource(sourcePath)); - this.modFile = modFile; - this.sourcePath = sourcePath; - } - - @Override - protected Path resolve(String... paths) { - String[] allPaths = new String[paths.length + 1]; - allPaths[0] = sourcePath; - System.arraycopy(paths, 0, allPaths, 1, paths.length); - return modFile.findResource(allPaths); - } -} +//package nl.requios.effortlessbuilding.create.foundation; +// +//import net.neoforged.neoforgespi.locating.IModFile; +//import net.neoforged.neoforge.resource.PathPackResources; +// +//import java.nio.file.Path; +// +//public class ModFilePackResources extends PathPackResources { +// protected final IModFile modFile; +// protected final String sourcePath; +// +// public ModFilePackResources(String name, IModFile modFile, String sourcePath) { +// super(name, true, modFile.findResource(sourcePath)); +// this.modFile = modFile; +// this.sourcePath = sourcePath; +// } +// +// @Override +// protected Path resolve(String... paths) { +// String[] allPaths = new String[paths.length + 1]; +// allPaths[0] = sourcePath; +// System.arraycopy(paths, 0, allPaths, 1, paths.length); +// return modFile.findResource(allPaths); +// } +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AbstractSimiScreen.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AbstractSimiScreen.java index 62d3df6..aba40fa 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AbstractSimiScreen.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AbstractSimiScreen.java @@ -10,8 +10,8 @@ import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.narration.NarratableEntry; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; -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 nl.requios.effortlessbuilding.create.foundation.gui.widget.AbstractSimiWidget; import nl.requios.effortlessbuilding.create.foundation.utility.Components; import nl.requios.effortlessbuilding.gui.buildmodifier.ModifiersScreenList; @@ -114,8 +114,8 @@ public abstract class AbstractSimiScreen extends Screen { prepareFrame(); renderWindowBackground(graphics, mouseX, mouseY, partialTicks); - renderWindow(graphics, mouseX, mouseY, partialTicks); super.render(graphics, mouseX, mouseY, partialTicks); + renderWindow(graphics, mouseX, mouseY, partialTicks); renderWindowForeground(graphics, mouseX, mouseY, partialTicks); endFrame(); @@ -123,6 +123,11 @@ public abstract class AbstractSimiScreen extends Screen { ms.popPose(); } + @Override + public void renderBackground(GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) { +// super.renderBackground(pGuiGraphics, pMouseX, pMouseY, pPartialTick); + } + @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { boolean keyPressed = super.keyPressed(keyCode, scanCode, modifiers); @@ -141,7 +146,7 @@ public abstract class AbstractSimiScreen extends Screen { protected void prepareFrame() {} protected void renderWindowBackground(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - renderBackground(graphics); + this.renderTransparentBackground(graphics); //Manually draw background } protected abstract void renderWindow(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks); diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllGuiTextures.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllGuiTextures.java index 4fb5be8..76b7180 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllGuiTextures.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllGuiTextures.java @@ -3,8 +3,8 @@ package nl.requios.effortlessbuilding.create.foundation.gui; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; -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 nl.requios.effortlessbuilding.create.Create; import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement; import nl.requios.effortlessbuilding.create.foundation.utility.Color; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllIcons.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllIcons.java index 23d80ac..7977644 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllIcons.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllIcons.java @@ -9,8 +9,8 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.Vec3; -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 nl.requios.effortlessbuilding.create.Create; import nl.requios.effortlessbuilding.create.foundation.gui.element.DelegatedStencilElement; import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/RemovedGuiUtils.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/RemovedGuiUtils.java index deba030..ab268f8 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/RemovedGuiUtils.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/RemovedGuiUtils.java @@ -5,6 +5,8 @@ import java.util.List; import javax.annotation.Nonnull; +import net.neoforged.neoforge.client.event.RenderTooltipEvent; +import net.neoforged.neoforge.common.NeoForge; import org.joml.Matrix4f; import com.mojang.blaze3d.systems.RenderSystem; @@ -18,10 +20,8 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.Style; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.ForgeHooksClient; -import net.minecraftforge.client.event.RenderTooltipEvent; -import net.minecraftforge.client.extensions.IForgeGuiGraphics; -import net.minecraftforge.common.MinecraftForge; +import net.neoforged.neoforge.client.ClientHooks; +import net.neoforged.neoforge.client.extensions.IGuiGraphicsExtension; public class RemovedGuiUtils { @Nonnull @@ -38,7 +38,7 @@ public class RemovedGuiUtils { public static void drawHoveringText(GuiGraphics graphics, List textLines, int mouseX, int mouseY, int screenWidth, int screenHeight, int maxTextWidth, Font font) { drawHoveringText(graphics, textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth, - IForgeGuiGraphics.DEFAULT_BACKGROUND_COLOR, IForgeGuiGraphics.DEFAULT_BORDER_COLOR_START, IForgeGuiGraphics.DEFAULT_BORDER_COLOR_END, + IGuiGraphicsExtension.DEFAULT_BACKGROUND_COLOR, IGuiGraphicsExtension.DEFAULT_BORDER_COLOR_START, IGuiGraphicsExtension.DEFAULT_BORDER_COLOR_END, font); } @@ -53,7 +53,7 @@ public class RemovedGuiUtils { List textLines, int mouseX, int mouseY, int screenWidth, int screenHeight, int maxTextWidth, Font font) { drawHoveringText(stack, graphics, textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth, - IForgeGuiGraphics.DEFAULT_BACKGROUND_COLOR, IForgeGuiGraphics.DEFAULT_BORDER_COLOR_START, IForgeGuiGraphics.DEFAULT_BORDER_COLOR_END, + IGuiGraphicsExtension.DEFAULT_BACKGROUND_COLOR, IGuiGraphicsExtension.DEFAULT_BORDER_COLOR_START, IGuiGraphicsExtension.DEFAULT_BORDER_COLOR_END, font); } @@ -63,11 +63,11 @@ public class RemovedGuiUtils { if (textLines.isEmpty()) return; - List list = ForgeHooksClient.gatherTooltipComponents(stack, textLines, + List list = ClientHooks.gatherTooltipComponents(stack, textLines, stack.getTooltipImage(), mouseX, screenWidth, screenHeight, font); RenderTooltipEvent.Pre event = new RenderTooltipEvent.Pre(stack, graphics, mouseX, mouseY, screenWidth, screenHeight, font, list, null); - if (MinecraftForge.EVENT_BUS.post(event)) + if (NeoForge.EVENT_BUS.post(event).isCanceled()) return; PoseStack pStack = graphics.pose(); @@ -152,7 +152,7 @@ public class RemovedGuiUtils { final int zLevel = 400; RenderTooltipEvent.Color colorEvent = new RenderTooltipEvent.Color(stack, graphics, tooltipX, tooltipY, font, backgroundColor, borderColorStart, borderColorEnd, list); - MinecraftForge.EVENT_BUS.post(colorEvent); + NeoForge.EVENT_BUS.post(colorEvent); backgroundColor = colorEvent.getBackgroundStart(); borderColorStart = colorEvent.getBorderStart(); borderColorEnd = colorEvent.getBorderEnd(); diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/AbstractSimiContainerScreen.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/AbstractSimiContainerScreen.java index 220392a..166679e 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/AbstractSimiContainerScreen.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/AbstractSimiContainerScreen.java @@ -13,8 +13,8 @@ import net.minecraft.client.renderer.Rect2i; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.AbstractContainerMenu; -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 nl.requios.effortlessbuilding.create.foundation.gui.TickableGuiEventListener; import nl.requios.effortlessbuilding.create.foundation.gui.widget.AbstractSimiWidget; @@ -94,8 +94,6 @@ public abstract class AbstractSimiContainerScreen { - ServerPlayer player = context.getSender(); - if (player == null) - return; - if (!(player.containerMenu instanceof IClearableMenu)) - return; - ((IClearableMenu) player.containerMenu).clearContents(); - }); - return true; - } - -} +//package nl.requios.effortlessbuilding.create.foundation.gui.container; +// +//import net.minecraft.network.FriendlyByteBuf; +//import net.minecraft.server.level.ServerPlayer; +//import net.neoforged.neoforge.network.NetworkEvent.Context; +//import nl.requios.effortlessbuilding.create.foundation.networking.SimplePacketBase; +// +//public class ClearMenuPacket extends SimplePacketBase { +// +// public ClearMenuPacket() {} +// +// public ClearMenuPacket(FriendlyByteBuf buffer) {} +// +// @Override +// public void write(FriendlyByteBuf buffer) {} +// +// @Override +// public boolean handle(Context context) { +// context.enqueueWork(() -> { +// ServerPlayer player = context.getSender(); +// if (player == null) +// return; +// if (!(player.containerMenu instanceof IClearableMenu)) +// return; +// ((IClearableMenu) player.containerMenu).clearContents(); +// }); +// return true; +// } +// +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemMenu.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemMenu.java index b2a06b8..03c3063 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemMenu.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemMenu.java @@ -7,8 +7,8 @@ import net.minecraft.world.inventory.ClickType; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.ItemHandlerHelper; -import net.minecraftforge.items.ItemStackHandler; +import net.neoforged.neoforge.items.ItemHandlerHelper; +import net.neoforged.neoforge.items.ItemStackHandler; public abstract class GhostItemMenu extends MenuBase implements IClearableMenu { diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemSubmitPacket.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemSubmitPacket.java index b212f55..bde9ee2 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemSubmitPacket.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemSubmitPacket.java @@ -1,45 +1,45 @@ -package nl.requios.effortlessbuilding.create.foundation.gui.container; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.network.NetworkEvent.Context; -import nl.requios.effortlessbuilding.create.foundation.networking.SimplePacketBase; - -public class GhostItemSubmitPacket extends SimplePacketBase { - - private final ItemStack item; - private final int slot; - - public GhostItemSubmitPacket(ItemStack item, int slot) { - this.item = item; - this.slot = slot; - } - - public GhostItemSubmitPacket(FriendlyByteBuf buffer) { - item = buffer.readItem(); - slot = buffer.readInt(); - } - - @Override - public void write(FriendlyByteBuf buffer) { - buffer.writeItem(item); - buffer.writeInt(slot); - } - - @Override - public boolean handle(Context context) { - context.enqueueWork(() -> { - ServerPlayer player = context.getSender(); - if (player == null) - return; - - if (player.containerMenu instanceof GhostItemMenu menu) { - menu.ghostInventory.setStackInSlot(slot, item); - menu.getSlot(36 + slot).setChanged(); - } - }); - return true; - } - -} +//package nl.requios.effortlessbuilding.create.foundation.gui.container; +// +//import net.minecraft.network.FriendlyByteBuf; +//import net.minecraft.server.level.ServerPlayer; +//import net.minecraft.world.item.ItemStack; +//import net.neoforged.neoforge.network.NetworkEvent.Context; +//import nl.requios.effortlessbuilding.create.foundation.networking.SimplePacketBase; +// +//public class GhostItemSubmitPacket extends SimplePacketBase { +// +// private final ItemStack item; +// private final int slot; +// +// public GhostItemSubmitPacket(ItemStack item, int slot) { +// this.item = item; +// this.slot = slot; +// } +// +// public GhostItemSubmitPacket(FriendlyByteBuf buffer) { +// item = buffer.readItem(); +// slot = buffer.readInt(); +// } +// +// @Override +// public void write(FriendlyByteBuf buffer) { +// buffer.writeItem(item); +// buffer.writeInt(slot); +// } +// +// @Override +// public boolean handle(Context context) { +// context.enqueueWork(() -> { +// ServerPlayer player = context.getSender(); +// if (player == null) +// return; +// +// if (player.containerMenu instanceof GhostItemMenu menu) { +// menu.ghostInventory.setStackInSlot(slot, item); +// menu.getSlot(36 + slot).setChanged(); +// } +// }); +// return true; +// } +// +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/IClearableMenu.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/IClearableMenu.java index 7ac69bc..08073a7 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/IClearableMenu.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/IClearableMenu.java @@ -3,7 +3,7 @@ package nl.requios.effortlessbuilding.create.foundation.gui.container; public interface IClearableMenu { default void sendClearPacket() { -// PacketHandler.INSTANCE.sendToServer(new ClearMenuPacket()); +// PacketDistributor.SERVER.noArg().send(new ClearMenuPacket()); } public void clearContents(); diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/MenuBase.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/MenuBase.java index ef91980..b20bc8c 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/MenuBase.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/MenuBase.java @@ -6,8 +6,8 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.Slot; -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 nl.requios.effortlessbuilding.create.foundation.utility.IInteractionChecker; public abstract class MenuBase extends AbstractContainerMenu { diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/GuiGameElement.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/GuiGameElement.java index 60aa3c3..75f48af 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/GuiGameElement.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/GuiGameElement.java @@ -30,7 +30,7 @@ import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.client.RenderTypeHelper; +import net.neoforged.neoforge.client.RenderTypeHelper; import nl.requios.effortlessbuilding.create.foundation.gui.ILightingSettings; import nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper; import nl.requios.effortlessbuilding.create.foundation.utility.Color; @@ -268,7 +268,7 @@ public class GuiGameElement { ItemRenderer renderer = Minecraft.getInstance().getItemRenderer(); BakedModel bakedModel = renderer.getModel(stack, null, null, 0); - renderer.textureManager.getTexture(InventoryMenu.BLOCK_ATLAS).setFilter(false, false); + Minecraft.getInstance().textureManager.getTexture(InventoryMenu.BLOCK_ATLAS).setFilter(false, false); RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS); RenderSystem.enableBlend(); RenderSystem.enableCull(); diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/ScreenElement.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/ScreenElement.java index 86c2700..6a6f9ba 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/ScreenElement.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/ScreenElement.java @@ -1,8 +1,8 @@ package nl.requios.effortlessbuilding.create.foundation.gui.element; import net.minecraft.client.gui.GuiGraphics; -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 interface ScreenElement { diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/AbstractSimiWidget.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/AbstractSimiWidget.java index 2851206..3c4cab6 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/AbstractSimiWidget.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/AbstractSimiWidget.java @@ -3,8 +3,6 @@ package nl.requios.effortlessbuilding.create.foundation.gui.widget; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.narration.NarrationElementOutput; -import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipPositioner; -import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner; import net.minecraft.network.chat.Component; import nl.requios.effortlessbuilding.create.foundation.gui.TickableGuiEventListener; import nl.requios.effortlessbuilding.create.foundation.utility.Components; @@ -39,10 +37,10 @@ public abstract class AbstractSimiWidget extends AbstractWidget implements Ticka super(x, y, width, height, message); } - @Override - protected ClientTooltipPositioner createTooltipPositioner() { - return DefaultTooltipPositioner.INSTANCE; - } +// @Override +// protected ClientTooltipPositioner createTooltipPositioner() { +// return DefaultTooltipPositioner.INSTANCE; +// } public T withCallback(BiConsumer cb) { this.onClick = cb; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/Indicator.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/Indicator.java index 314457b..3151cb2 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/Indicator.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/Indicator.java @@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableList; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import nl.requios.effortlessbuilding.create.foundation.gui.AllGuiTextures; +import org.jetbrains.annotations.NotNull; public class Indicator extends AbstractSimiWidget { @@ -16,7 +17,7 @@ public class Indicator extends AbstractSimiWidget { } @Override - public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks ) { + public void renderWidget(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { if (!visible) return; AllGuiTextures toDraw; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/ScrollInput.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/ScrollInput.java index 3944e90..6dce241 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/ScrollInput.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/ScrollInput.java @@ -117,21 +117,21 @@ public class ScrollInput extends AbstractSimiWidget { } @Override - public boolean mouseScrolled(double mouseX, double mouseY, double delta) { + public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, double scrollY) { if (!this.visible || !this.isHovered) return false; //Added if (inverted) - delta *= -1; + scrollX *= -1; StepContext context = new StepContext(); context.control = AllKeys.ctrlDown(); context.shift = AllKeys.shiftDown(); context.currentValue = state; - context.forward = delta > 0; + context.forward = scrollX > 0; int priorState = state; boolean shifted = AllKeys.shiftDown(); - int step = (int) Math.signum(delta) * this.step.apply(context); + int step = (int) Math.signum(scrollX) * this.step.apply(context); state += step; if (shifted) diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHandlerWrapper.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHandlerWrapper.java index cdbc5f0..77e8b5d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHandlerWrapper.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHandlerWrapper.java @@ -1,7 +1,7 @@ package nl.requios.effortlessbuilding.create.foundation.item; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.IItemHandlerModifiable; +import net.neoforged.neoforge.items.IItemHandlerModifiable; public class ItemHandlerWrapper implements IItemHandlerModifiable { diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHelper.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHelper.java index 4153a84..2dd46b2 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHelper.java @@ -1,5 +1,6 @@ package nl.requios.effortlessbuilding.create.foundation.item; +import net.neoforged.neoforge.items.ItemHandlerHelper; import nl.requios.effortlessbuilding.create.foundation.utility.Pair; import net.minecraft.core.BlockPos; import net.minecraft.core.NonNullList; @@ -8,8 +9,7 @@ import net.minecraft.world.Containers; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.Level; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemHandlerHelper; +import net.neoforged.neoforge.items.IItemHandler; import org.apache.commons.lang3.mutable.MutableInt; import javax.annotation.Nullable; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/TagDependentIngredientItem.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/TagDependentIngredientItem.java index c6e7327..8eb54df 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/TagDependentIngredientItem.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/TagDependentIngredientItem.java @@ -1,9 +1,8 @@ package nl.requios.effortlessbuilding.create.foundation.item; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.tags.ITagManager; public class TagDependentIngredientItem extends Item { @@ -15,8 +14,7 @@ public class TagDependentIngredientItem extends Item { } public boolean shouldHide() { - ITagManager tagManager = ForgeRegistries.ITEMS.tags(); - return !tagManager.isKnownTagName(tag) || tagManager.getTag(tag).isEmpty(); + return BuiltInRegistries.ITEM.getTag(tag).isEmpty() || BuiltInRegistries.ITEM.getTag(tag).get().size() == 0; } } diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/CustomRenderedItemModel.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/CustomRenderedItemModel.java index 207a5d8..202e971 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/CustomRenderedItemModel.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/CustomRenderedItemModel.java @@ -3,7 +3,7 @@ package nl.requios.effortlessbuilding.create.foundation.item.render; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.world.item.ItemDisplayContext; -import net.minecraftforge.client.model.BakedModelWrapper; +import net.neoforged.neoforge.client.model.BakedModelWrapper; public class CustomRenderedItemModel extends BakedModelWrapper { diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/PartialItemModelRenderer.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/PartialItemModelRenderer.java index 88b9b51..dd90019 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/PartialItemModelRenderer.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/PartialItemModelRenderer.java @@ -11,8 +11,8 @@ import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.extensions.common.IClientItemExtensions; -import net.minecraftforge.client.model.data.ModelData; +import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; +import net.neoforged.neoforge.client.model.data.ModelData; import nl.requios.effortlessbuilding.create.foundation.render.RenderTypes; import nl.requios.effortlessbuilding.create.foundation.utility.Iterate; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/ISyncPersistentData.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/ISyncPersistentData.java index b35bd98..e311e1a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/ISyncPersistentData.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/ISyncPersistentData.java @@ -1,53 +1,53 @@ -package nl.requios.effortlessbuilding.create.foundation.networking; - -import net.minecraft.client.Minecraft; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.Entity; -import net.minecraftforge.network.NetworkEvent.Context; - -import java.util.HashSet; - -public interface ISyncPersistentData { - - void onPersistentDataUpdated(); - - public static class PersistentDataPacket extends SimplePacketBase { - - private int entityId; - private Entity entity; - private CompoundTag readData; - - public PersistentDataPacket(Entity entity) { - this.entity = entity; - this.entityId = entity.getId(); - } - - public PersistentDataPacket(FriendlyByteBuf buffer) { - entityId = buffer.readInt(); - readData = buffer.readNbt(); - } - - @Override - public void write(FriendlyByteBuf buffer) { - buffer.writeInt(entityId); - buffer.writeNbt(entity.getPersistentData()); - } - - @Override - public boolean handle(Context context) { - context.enqueueWork(() -> { - Entity entityByID = Minecraft.getInstance().level.getEntity(entityId); - CompoundTag data = entityByID.getPersistentData(); - new HashSet<>(data.getAllKeys()).forEach(data::remove); - data.merge(readData); - if (!(entityByID instanceof ISyncPersistentData)) - return; - ((ISyncPersistentData) entityByID).onPersistentDataUpdated(); - }); - return true; - } - - } - -} +//package nl.requios.effortlessbuilding.create.foundation.networking; +// +//import net.minecraft.client.Minecraft; +//import net.minecraft.nbt.CompoundTag; +//import net.minecraft.network.FriendlyByteBuf; +//import net.minecraft.world.entity.Entity; +//import net.neoforged.neoforge.network.NetworkEvent.Context; +// +//import java.util.HashSet; +// +//public interface ISyncPersistentData { +// +// void onPersistentDataUpdated(); +// +// public static class PersistentDataPacket extends SimplePacketBase { +// +// private int entityId; +// private Entity entity; +// private CompoundTag readData; +// +// public PersistentDataPacket(Entity entity) { +// this.entity = entity; +// this.entityId = entity.getId(); +// } +// +// public PersistentDataPacket(FriendlyByteBuf buffer) { +// entityId = buffer.readInt(); +// readData = buffer.readNbt(); +// } +// +// @Override +// public void write(FriendlyByteBuf buffer) { +// buffer.writeInt(entityId); +// buffer.writeNbt(entity.getPersistentData()); +// } +// +// @Override +// public boolean handle(Context context) { +// context.enqueueWork(() -> { +// Entity entityByID = Minecraft.getInstance().level.getEntity(entityId); +// CompoundTag data = entityByID.getPersistentData(); +// new HashSet<>(data.getAllKeys()).forEach(data::remove); +// data.merge(readData); +// if (!(entityByID instanceof ISyncPersistentData)) +// return; +// ((ISyncPersistentData) entityByID).onPersistentDataUpdated(); +// }); +// return true; +// } +// +// } +// +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/SimplePacketBase.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/SimplePacketBase.java index 4adb134..641fb9e 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/SimplePacketBase.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/SimplePacketBase.java @@ -1,12 +1,12 @@ -package nl.requios.effortlessbuilding.create.foundation.networking; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent.Context; - -public abstract class SimplePacketBase { - - public abstract void write(FriendlyByteBuf buffer); - - public abstract boolean handle(Context context); - -} +//package nl.requios.effortlessbuilding.create.foundation.networking; +// +//import net.minecraft.network.FriendlyByteBuf; +//import net.neoforged.neoforge.network.NetworkEvent.Context; +// +//public abstract class SimplePacketBase { +// +// public abstract void write(FriendlyByteBuf buffer); +// +// public abstract boolean handle(Context context); +// +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/render/SuperRenderTypeBuffer.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/render/SuperRenderTypeBuffer.java index 008ad8d..13c8f2b 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/render/SuperRenderTypeBuffer.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/render/SuperRenderTypeBuffer.java @@ -7,7 +7,7 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; import net.minecraft.Util; -import net.minecraft.client.renderer.ChunkBufferBuilderPack; +import net.minecraft.client.renderer.SectionBufferBuilderPack; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.Sheets; @@ -59,31 +59,28 @@ public class SuperRenderTypeBuffer implements MultiBufferSource { private static class SuperRenderTypeBufferPhase { // Visible clones from RenderBuffers - private final ChunkBufferBuilderPack fixedBufferPack = new ChunkBufferBuilderPack(); + private final SectionBufferBuilderPack fixedBufferPack = new SectionBufferBuilderPack(); private final SortedMap fixedBuffers = Util.make(new Object2ObjectLinkedOpenHashMap<>(), map -> { - map.put(Sheets.solidBlockSheet(), fixedBufferPack.builder(RenderType.solid())); - map.put(Sheets.cutoutBlockSheet(), fixedBufferPack.builder(RenderType.cutout())); - map.put(Sheets.bannerSheet(), fixedBufferPack.builder(RenderType.cutoutMipped())); - map.put(Sheets.translucentCullBlockSheet(), fixedBufferPack.builder(RenderType.translucent())); - put(map, Sheets.shieldSheet()); - put(map, Sheets.bedSheet()); - put(map, Sheets.shulkerBoxSheet()); - put(map, Sheets.signSheet()); - put(map, Sheets.chestSheet()); - put(map, RenderType.translucentNoCrumbling()); - put(map, RenderType.armorGlint()); - put(map, RenderType.armorEntityGlint()); - put(map, RenderType.glint()); - put(map, RenderType.glintDirect()); - put(map, RenderType.glintTranslucent()); - put(map, RenderType.entityGlint()); - put(map, RenderType.entityGlintDirect()); - put(map, RenderType.waterMask()); - put(map, RenderTypes.getOutlineSolid()); - ModelBakery.DESTROY_TYPES.forEach((p_173062_) -> { - put(map, p_173062_); - }); - }); + map.put(Sheets.solidBlockSheet(), this.fixedBufferPack.builder(RenderType.solid())); + map.put(Sheets.cutoutBlockSheet(), this.fixedBufferPack.builder(RenderType.cutout())); + map.put(Sheets.bannerSheet(), this.fixedBufferPack.builder(RenderType.cutoutMipped())); + map.put(Sheets.translucentCullBlockSheet(), this.fixedBufferPack.builder(RenderType.translucent())); + put(map, Sheets.shieldSheet()); + put(map, Sheets.bedSheet()); + put(map, Sheets.shulkerBoxSheet()); + put(map, Sheets.signSheet()); + put(map, Sheets.hangingSignSheet()); + map.put(Sheets.chestSheet(), new BufferBuilder(786432)); + put(map, RenderType.armorGlint()); + put(map, RenderType.armorEntityGlint()); + put(map, RenderType.glint()); + put(map, RenderType.glintDirect()); + put(map, RenderType.glintTranslucent()); + put(map, RenderType.entityGlint()); + put(map, RenderType.entityGlintDirect()); + put(map, RenderType.waterMask()); + ModelBakery.DESTROY_TYPES.forEach(p_173062_ -> put(map, p_173062_)); + }); private final BufferSource bufferSource = MultiBufferSource.immediateWithBuffers(fixedBuffers, new BufferBuilder(256)); private static void put(Object2ObjectLinkedOpenHashMap map, RenderType type) { diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/AbstractBlockBreakQueue.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/AbstractBlockBreakQueue.java index 5408b96..c5f0ef9 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/AbstractBlockBreakQueue.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/AbstractBlockBreakQueue.java @@ -6,7 +6,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import net.minecraftforge.event.ForgeEventFactory; +import net.neoforged.neoforge.event.EventHooks; import javax.annotation.Nullable; import java.util.function.BiConsumer; @@ -20,7 +20,7 @@ public abstract class AbstractBlockBreakQueue { BlockHelper.destroyBlockAs(world, pos, playerEntity, toDamage, effectChance, stack -> drop.accept(pos, stack)); if (toDamage.isEmpty() && !usedTool.isEmpty()) - ForgeEventFactory.onPlayerDestroyItem(playerEntity, usedTool, InteractionHand.MAIN_HAND); + EventHooks.onPlayerDestroyItem(playerEntity, usedTool, InteractionHand.MAIN_HAND); }; } diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/BlockHelper.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/BlockHelper.java index 6a37500..9e6a3ab 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/BlockHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/BlockHelper.java @@ -34,9 +34,9 @@ import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.material.FluidState; -import net.minecraftforge.common.IPlantable; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.level.BlockEvent; +import net.neoforged.neoforge.common.IPlantable; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.level.BlockEvent; import javax.annotation.Nullable; import java.util.function.Consumer; @@ -159,7 +159,7 @@ public class BlockHelper { if (player != null) { BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(world, pos, state, player); - MinecraftForge.EVENT_BUS.post(event); + NeoForge.EVENT_BUS.post(event); if (event.isCanceled()) return false; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/CreateRegistry.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/CreateRegistry.java index 28646cb..8b5aefc 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/CreateRegistry.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/CreateRegistry.java @@ -1,101 +1,101 @@ -package nl.requios.effortlessbuilding.create.foundation.utility; - -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.registries.IForgeRegistry; -import nl.requios.effortlessbuilding.create.Create; -import org.jetbrains.annotations.Nullable; - -import java.util.*; - -public class CreateRegistry { - private static final List> ALL = new ArrayList<>(); - - protected final IForgeRegistry objectRegistry; - protected final Map locationMap = new HashMap<>(); - protected final Map objectMap = new IdentityHashMap<>(); - protected boolean unwrapped = false; - - public CreateRegistry(IForgeRegistry objectRegistry) { - this.objectRegistry = objectRegistry; - ALL.add(this); - } - - public void register(ResourceLocation location, V value) { - if (!unwrapped) { - locationMap.put(location, value); - } else { - K object = objectRegistry.getValue(location); - if (object != null) { - objectMap.put(object, value); - } else { - Create.LOGGER.warn("Could not get object for location '" + location + "' in CreateRegistry after unwrapping!"); - } - } - } - - public void register(K object, V value) { - if (unwrapped) { - objectMap.put(object, value); - } else { - ResourceLocation location = objectRegistry.getKey(object); - if (location != null) { - locationMap.put(location, value); - } else { - Create.LOGGER.warn("Could not get location of object '" + object + "' in CreateRegistry before unwrapping!"); - } - } - } - - @Nullable - public V get(ResourceLocation location) { - if (!unwrapped) { - return locationMap.get(location); - } else { - K object = objectRegistry.getValue(location); - if (object != null) { - return objectMap.get(object); - } else { - Create.LOGGER.warn("Could not get object for location '" + location + "' in CreateRegistry after unwrapping!"); - return null; - } - } - } - - @Nullable - public V get(K object) { - if (unwrapped) { - return objectMap.get(object); - } else { - ResourceLocation location = objectRegistry.getKey(object); - if (location != null) { - return locationMap.get(location); - } else { - Create.LOGGER.warn("Could not get location of object '" + object + "' in CreateRegistry before unwrapping!"); - return null; - } - } - } - - public boolean isUnwrapped() { - return unwrapped; - } - - protected void unwrap() { - for (Map.Entry entry : locationMap.entrySet()) { - ResourceLocation location = entry.getKey(); - K object = objectRegistry.getValue(location); - if (object != null) { - objectMap.put(object, entry.getValue()); - } else { - Create.LOGGER.warn("Could not get object for location '" + location + "' in CreateRegistry during unwrapping!"); - } - } - unwrapped = true; - } - - public static void unwrapAll() { - for (CreateRegistry registry : ALL) { - registry.unwrap(); - } - } -} +//package nl.requios.effortlessbuilding.create.foundation.utility; +// +//import net.minecraft.resources.ResourceLocation; +//import net.neoforged.neoforge.registries.IForgeRegistry; +//import nl.requios.effortlessbuilding.create.Create; +//import org.jetbrains.annotations.Nullable; +// +//import java.util.*; +// +//public class CreateRegistry { +// private static final List> ALL = new ArrayList<>(); +// +// protected final IForgeRegistry objectRegistry; +// protected final Map locationMap = new HashMap<>(); +// protected final Map objectMap = new IdentityHashMap<>(); +// protected boolean unwrapped = false; +// +// public CreateRegistry(IForgeRegistry objectRegistry) { +// this.objectRegistry = objectRegistry; +// ALL.add(this); +// } +// +// public void register(ResourceLocation location, V value) { +// if (!unwrapped) { +// locationMap.put(location, value); +// } else { +// K object = objectRegistry.getValue(location); +// if (object != null) { +// objectMap.put(object, value); +// } else { +// Create.LOGGER.warn("Could not get object for location '" + location + "' in CreateRegistry after unwrapping!"); +// } +// } +// } +// +// public void register(K object, V value) { +// if (unwrapped) { +// objectMap.put(object, value); +// } else { +// ResourceLocation location = objectRegistry.getKey(object); +// if (location != null) { +// locationMap.put(location, value); +// } else { +// Create.LOGGER.warn("Could not get location of object '" + object + "' in CreateRegistry before unwrapping!"); +// } +// } +// } +// +// @Nullable +// public V get(ResourceLocation location) { +// if (!unwrapped) { +// return locationMap.get(location); +// } else { +// K object = objectRegistry.getValue(location); +// if (object != null) { +// return objectMap.get(object); +// } else { +// Create.LOGGER.warn("Could not get object for location '" + location + "' in CreateRegistry after unwrapping!"); +// return null; +// } +// } +// } +// +// @Nullable +// public V get(K object) { +// if (unwrapped) { +// return objectMap.get(object); +// } else { +// ResourceLocation location = objectRegistry.getKey(object); +// if (location != null) { +// return locationMap.get(location); +// } else { +// Create.LOGGER.warn("Could not get location of object '" + object + "' in CreateRegistry before unwrapping!"); +// return null; +// } +// } +// } +// +// public boolean isUnwrapped() { +// return unwrapped; +// } +// +// protected void unwrap() { +// for (Map.Entry entry : locationMap.entrySet()) { +// ResourceLocation location = entry.getKey(); +// K object = objectRegistry.getValue(location); +// if (object != null) { +// objectMap.put(object, entry.getValue()); +// } else { +// Create.LOGGER.warn("Could not get object for location '" + location + "' in CreateRegistry during unwrapping!"); +// } +// } +// unwrapped = true; +// } +// +// public static void unwrapAll() { +// for (CreateRegistry registry : ALL) { +// registry.unwrap(); +// } +// } +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Debug.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Debug.java index ba00b87..49a1a33 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Debug.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Debug.java @@ -1,13 +1,13 @@ package nl.requios.effortlessbuilding.create.foundation.utility; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.fml.util.thread.EffectiveSide; import nl.requios.effortlessbuilding.create.Create; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.util.thread.EffectiveSide; +import net.neoforged.api.distmarker.OnlyIn; /** Deprecated so simi doensn't forget to remove debug calls **/ @OnlyIn(value = Dist.CLIENT) diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Lang.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Lang.java index e14385c..1d4aef6 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Lang.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Lang.java @@ -5,7 +5,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.fluids.FluidStack; +import net.neoforged.neoforge.fluids.FluidStack; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/NBTHelper.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/NBTHelper.java index d409073..bff79f7 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/NBTHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/NBTHelper.java @@ -57,9 +57,9 @@ public class NBTHelper { listNBT.forEach(inbt -> consumer.accept((CompoundTag) inbt)); } - public static ListTag writeItemList(Iterable stacks) { - return writeCompoundList(stacks, ItemStack::serializeNBT); - } +// public static ListTag writeItemList(Iterable stacks) { +// return writeCompoundList(stacks, ItemStack::serializeNBT); +// } public static List readItemList(ListTag stacks) { return readCompoundList(stacks, ItemStack::of); diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/RegisteredObjects.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/RegisteredObjects.java index 68e3108..9e31149 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/RegisteredObjects.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/RegisteredObjects.java @@ -1,6 +1,8 @@ package nl.requios.effortlessbuilding.create.foundation.utility; +import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.Item; @@ -9,14 +11,12 @@ import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.material.Fluid; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.IForgeRegistry; import org.jetbrains.annotations.NotNull; public final class RegisteredObjects { // registry argument for easier porting to 1.19 @NotNull - public static ResourceLocation getKeyOrThrow(IForgeRegistry registry, V value) { + public static ResourceLocation getKeyOrThrow(Registry registry, V value) { ResourceLocation key = registry.getKey(value); if (key == null) { throw new IllegalArgumentException("Could not get key for value " + value + "!"); @@ -26,41 +26,41 @@ public final class RegisteredObjects { @NotNull public static ResourceLocation getKeyOrThrow(Block value) { - return getKeyOrThrow(ForgeRegistries.BLOCKS, value); + return getKeyOrThrow(BuiltInRegistries.BLOCK, value); } @NotNull public static ResourceLocation getKeyOrThrow(Item value) { - return getKeyOrThrow(ForgeRegistries.ITEMS, value); + return getKeyOrThrow(BuiltInRegistries.ITEM, value); } @NotNull public static ResourceLocation getKeyOrThrow(Fluid value) { - return getKeyOrThrow(ForgeRegistries.FLUIDS, value); + return getKeyOrThrow(BuiltInRegistries.FLUID, value); } @NotNull public static ResourceLocation getKeyOrThrow(EntityType value) { - return getKeyOrThrow(ForgeRegistries.ENTITY_TYPES, value); + return getKeyOrThrow(BuiltInRegistries.ENTITY_TYPE, value); } @NotNull public static ResourceLocation getKeyOrThrow(BlockEntityType value) { - return getKeyOrThrow(ForgeRegistries.BLOCK_ENTITY_TYPES, value); + return getKeyOrThrow(BuiltInRegistries.BLOCK_ENTITY_TYPE, value); } @NotNull public static ResourceLocation getKeyOrThrow(Potion value) { - return getKeyOrThrow(ForgeRegistries.POTIONS, value); + return getKeyOrThrow(BuiltInRegistries.POTION, value); } @NotNull public static ResourceLocation getKeyOrThrow(ParticleType value) { - return getKeyOrThrow(ForgeRegistries.PARTICLE_TYPES, value); + return getKeyOrThrow(BuiltInRegistries.PARTICLE_TYPE, value); } @NotNull public static ResourceLocation getKeyOrThrow(RecipeSerializer value) { - return getKeyOrThrow(ForgeRegistries.RECIPE_SERIALIZERS, value); + return getKeyOrThrow(BuiltInRegistries.RECIPE_SERIALIZER, value); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ResetableLazy.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ResetableLazy.java index b18f34f..a344a32 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ResetableLazy.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ResetableLazy.java @@ -1,6 +1,6 @@ package nl.requios.effortlessbuilding.create.foundation.utility; -import net.minecraftforge.common.util.NonNullSupplier; +import net.neoforged.neoforge.common.util.NonNullSupplier; import java.util.function.Supplier; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ghost/GhostBlockRenderer.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ghost/GhostBlockRenderer.java index fb29bc1..6a80740 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ghost/GhostBlockRenderer.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ghost/GhostBlockRenderer.java @@ -18,7 +18,7 @@ import net.minecraft.core.Direction; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.client.model.data.ModelData; +import net.neoforged.neoforge.client.model.data.ModelData; import nl.requios.effortlessbuilding.create.foundation.utility.Color; import javax.annotation.Nullable; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedClientWorld.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedClientWorld.java index 31ed743..0f65faa 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedClientWorld.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedClientWorld.java @@ -15,8 +15,8 @@ import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; -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; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedWorld.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedWorld.java index ae8e400..18a1840 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedWorld.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedWorld.java @@ -3,6 +3,7 @@ package nl.requios.effortlessbuilding.create.foundation.utility.worldWrappers; import net.minecraft.core.*; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; +import net.minecraft.world.TickRateManager; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.flag.FeatureFlagSet; @@ -134,6 +135,11 @@ public class WrappedWorld extends Level { return null; } + @Override + public TickRateManager tickRateManager() { + return null; + } + @Override public MapItemSavedData getMapData(String mapName) { return null; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagContainer.java b/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagContainer.java index 709d60b..e4513bf 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagContainer.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagContainer.java @@ -9,9 +9,9 @@ import net.minecraft.world.inventory.ClickType; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemStackHandler; -import net.minecraftforge.items.SlotItemHandler; +import net.neoforged.neoforge.items.IItemHandler; +import net.neoforged.neoforge.items.ItemStackHandler; +import net.neoforged.neoforge.items.SlotItemHandler; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.item.DiamondRandomizerBagItem; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagScreen.java b/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagScreen.java index ba3b9c2..d253544 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagScreen.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagScreen.java @@ -5,8 +5,8 @@ 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.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.EffortlessBuilding; import javax.annotation.ParametersAreNonnullByDefault; @@ -26,7 +26,6 @@ public class DiamondRandomizerBagScreen extends AbstractContainerScreen this.minecraft.player.closeContainer()); @@ -68,7 +63,7 @@ public class PlayerSettingsGui extends Screen { @Override public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(guiGraphics); + super.render(guiGraphics, mouseX, mouseY, partialTicks); int yy = top; guiGraphics.drawString(font, "Shader type", left, yy + 5, 0xFFFFFF, false); @@ -76,8 +71,6 @@ public class PlayerSettingsGui extends Screen { yy += 50; guiGraphics.drawString(font, "Shader speed", left, yy + 5, 0xFFFFFF, false); - super.render(guiGraphics, mouseX, mouseY, partialTicks); - if (showShaderList) this.shaderTypeList.render(guiGraphics, mouseX, mouseY, partialTicks); } @@ -118,8 +111,8 @@ public class PlayerSettingsGui extends Screen { class ShaderTypeList extends ObjectSelectionList { public ShaderTypeList(Minecraft mcIn) { - super(mcIn, 180, 140, top + 20, top + 100, 18); - this.setLeftPos(right - width); + super(mcIn, 180, 140, top + 20, /*top + 100,*/ 18); + this.setX(right - width); for (int i = 0; i < 40; i++) { @@ -151,33 +144,33 @@ public class PlayerSettingsGui extends Screen { } @Override - public boolean mouseClicked(double p_mouseClicked_1_, double p_mouseClicked_3_, int p_mouseClicked_5_) { + public boolean mouseClicked(double mouseX, double mouseY, int pButton) { if (!showShaderList) return false; - return super.mouseClicked(p_mouseClicked_1_, p_mouseClicked_3_, p_mouseClicked_5_); + return super.mouseClicked(mouseX, mouseY, pButton); } @Override - public boolean mouseReleased(double p_mouseReleased_1_, double p_mouseReleased_3_, int p_mouseReleased_5_) { + public boolean mouseReleased(double mouseX, double mouseY, int button) { if (!showShaderList) return false; - return super.mouseReleased(p_mouseReleased_1_, p_mouseReleased_3_, p_mouseReleased_5_); + return super.mouseReleased(mouseX, mouseY, button); } @Override - public boolean mouseDragged(double p_mouseDragged_1_, double p_mouseDragged_3_, int p_mouseDragged_5_, double p_mouseDragged_6_, double p_mouseDragged_8_) { + public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) { if (!showShaderList) return false; - return super.mouseDragged(p_mouseDragged_1_, p_mouseDragged_3_, p_mouseDragged_5_, p_mouseDragged_6_, p_mouseDragged_8_); + return super.mouseDragged(mouseX, mouseY, button, dragX, dragY); } @Override - public boolean mouseScrolled(double p_mouseScrolled_1_, double p_mouseScrolled_3_, double p_mouseScrolled_5_) { + public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, double scrollY) { if (!showShaderList) return false; - return super.mouseScrolled(p_mouseScrolled_1_, p_mouseScrolled_3_, p_mouseScrolled_5_); + return super.mouseScrolled(mouseX, mouseY, scrollX, scrollY); } @Override - public boolean isMouseOver(double p_isMouseOver_1_, double p_isMouseOver_3_) { + public boolean isMouseOver(double mouseX, double mouseY) { if (!showShaderList) return false; - return super.isMouseOver(p_isMouseOver_1_, p_isMouseOver_3_); + return super.isMouseOver(mouseX, mouseY); } public boolean isFocused() { @@ -190,90 +183,90 @@ public class PlayerSettingsGui extends Screen { } //From AbstractSelectionList, disabled parts - @Override - public void render(GuiGraphics guiGraphics, int p_render_1_, int p_render_2_, float p_render_3_) { - this.renderBackground(guiGraphics); - int i = this.getScrollbarPosition(); - int j = i + 6; - Tesselator tessellator = Tesselator.getInstance(); - BufferBuilder bufferbuilder = tessellator.getBuilder(); -// this.minecraft.getTextureManager().bindTexture(AbstractGui.BACKGROUND_LOCATION); - RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - float f = 32.0F; - bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); - bufferbuilder.vertex(this.x0, this.y1, 0.0D).color(20, 20, 20, 180).endVertex(); - bufferbuilder.vertex(this.x1, this.y1, 0.0D).color(20, 20, 20, 180).endVertex(); - bufferbuilder.vertex(this.x1, this.y0, 0.0D).color(20, 20, 20, 180).endVertex(); - bufferbuilder.vertex(this.x0, this.y0, 0.0D).color(20, 20, 20, 180).endVertex(); - tessellator.end(); - int k = this.getRowLeft(); - int l = this.y0 + 4 - (int) this.getScrollAmount(); - if (this.renderHeader) { - this.renderHeader(guiGraphics, k, l); - } +// @Override //TODO: Check if this is still needed! +// public void render(GuiGraphics guiGraphics, int p_render_1_, int p_render_2_, float p_render_3_) { +// this.renderBackground(guiGraphics); +// int i = this.getScrollbarPosition(); +// int j = i + 6; +// Tesselator tessellator = Tesselator.getInstance(); +// BufferBuilder bufferbuilder = tessellator.getBuilder(); +//// this.minecraft.getTextureManager().bindTexture(AbstractGui.BACKGROUND_LOCATION); +// RenderSystem.enableBlend(); +// RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); +// RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); +// float f = 32.0F; +// bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); +// bufferbuilder.vertex(this.x0, this.y1, 0.0D).color(20, 20, 20, 180).endVertex(); +// bufferbuilder.vertex(this.x1, this.y1, 0.0D).color(20, 20, 20, 180).endVertex(); +// bufferbuilder.vertex(this.x1, this.y0, 0.0D).color(20, 20, 20, 180).endVertex(); +// bufferbuilder.vertex(this.x0, this.y0, 0.0D).color(20, 20, 20, 180).endVertex(); +// tessellator.end(); +// int k = this.getRowLeft(); +// int l = this.y0 + 4 - (int) this.getScrollAmount(); +// if (this.renderHeader) { +// this.renderHeader(guiGraphics, k, l); +// } +// +// this.renderList(guiGraphics, p_render_1_, p_render_2_, p_render_3_); +// RenderSystem.disableDepthTest(); +//// this.renderHoleBackground(0, this.y0, 255, 255); +//// this.renderHoleBackground(this.y1, this.height, 255, 255); +// RenderSystem.enableBlend(); +// RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); +//// RenderSystem.disableTexture(); +// RenderSystem.setShader(GameRenderer::getPositionColorShader); +//// int i1 = 4; +//// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); +//// bufferbuilder.pos((double)this.x0, (double)(this.y0 + 4), 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 0).endVertex(); +//// bufferbuilder.pos((double)this.x1, (double)(this.y0 + 4), 0.0D).tex(1.0F, 1.0F).color(0, 0, 0, 0).endVertex(); +//// bufferbuilder.pos((double)this.x1, (double)this.y0, 0.0D).tex(1.0F, 0.0F).color(0, 0, 0, 255).endVertex(); +//// bufferbuilder.pos((double)this.x0, (double)this.y0, 0.0D).tex(0.0F, 0.0F).color(0, 0, 0, 255).endVertex(); +//// tessellator.draw(); +//// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); +//// bufferbuilder.pos((double)this.x0, (double)this.y1, 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 255).endVertex(); +//// bufferbuilder.pos((double)this.x1, (double)this.y1, 0.0D).tex(1.0F, 1.0F).color(0, 0, 0, 255).endVertex(); +//// bufferbuilder.pos((double)this.x1, (double)(this.y1 - 4), 0.0D).tex(1.0F, 0.0F).color(0, 0, 0, 0).endVertex(); +//// bufferbuilder.pos((double)this.x0, (double)(this.y1 - 4), 0.0D).tex(0.0F, 0.0F).color(0, 0, 0, 0).endVertex(); +//// tessellator.draw(); +// +// //SCROLLBAR +// int j1 = this.getMaxScroll(); +// if (j1 > 0) { +// int k1 = (int) ((float) ((this.y1 - this.y0) * (this.y1 - this.y0)) / (float) this.getMaxPosition()); +// k1 = Mth.clamp(k1, 32, this.y1 - this.y0 - 8); +// int l1 = (int) this.getScrollAmount() * (this.y1 - this.y0 - k1) / j1 + this.y0; +// if (l1 < this.y0) { +// l1 = this.y0; +// } +// +// bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); +// bufferbuilder.vertex(i, this.y1, 0.0D).uv(0.0F, 1.0F).color(0, 0, 0, 255).endVertex(); +// bufferbuilder.vertex(j, this.y1, 0.0D).uv(1.0F, 1.0F).color(0, 0, 0, 255).endVertex(); +// bufferbuilder.vertex(j, this.y0, 0.0D).uv(1.0F, 0.0F).color(0, 0, 0, 255).endVertex(); +// bufferbuilder.vertex(i, this.y0, 0.0D).uv(0.0F, 0.0F).color(0, 0, 0, 255).endVertex(); +// tessellator.end(); +// bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); +// bufferbuilder.vertex(i, l1 + k1, 0.0D).uv(0.0F, 1.0F).color(128, 128, 128, 255).endVertex(); +// bufferbuilder.vertex(j, l1 + k1, 0.0D).uv(1.0F, 1.0F).color(128, 128, 128, 255).endVertex(); +// bufferbuilder.vertex(j, l1, 0.0D).uv(1.0F, 0.0F).color(128, 128, 128, 255).endVertex(); +// bufferbuilder.vertex(i, l1, 0.0D).uv(0.0F, 0.0F).color(128, 128, 128, 255).endVertex(); +// tessellator.end(); +// bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); +// bufferbuilder.vertex(i, l1 + k1 - 1, 0.0D).uv(0.0F, 1.0F).color(192, 192, 192, 255).endVertex(); +// bufferbuilder.vertex(j - 1, l1 + k1 - 1, 0.0D).uv(1.0F, 1.0F).color(192, 192, 192, 255).endVertex(); +// bufferbuilder.vertex(j - 1, l1, 0.0D).uv(1.0F, 0.0F).color(192, 192, 192, 255).endVertex(); +// bufferbuilder.vertex(i, l1, 0.0D).uv(0.0F, 0.0F).color(192, 192, 192, 255).endVertex(); +// tessellator.end(); +// } +// +//// this.renderDecorations(p_render_1_, p_render_2_); +//// RenderSystem.enableTexture(); +// RenderSystem.disableBlend(); +// } - this.renderList(guiGraphics, p_render_1_, p_render_2_, p_render_3_); - RenderSystem.disableDepthTest(); -// this.renderHoleBackground(0, this.y0, 255, 255); -// this.renderHoleBackground(this.y1, this.height, 255, 255); - RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); -// RenderSystem.disableTexture(); - RenderSystem.setShader(GameRenderer::getPositionColorShader); -// int i1 = 4; -// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); -// bufferbuilder.pos((double)this.x0, (double)(this.y0 + 4), 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 0).endVertex(); -// bufferbuilder.pos((double)this.x1, (double)(this.y0 + 4), 0.0D).tex(1.0F, 1.0F).color(0, 0, 0, 0).endVertex(); -// bufferbuilder.pos((double)this.x1, (double)this.y0, 0.0D).tex(1.0F, 0.0F).color(0, 0, 0, 255).endVertex(); -// bufferbuilder.pos((double)this.x0, (double)this.y0, 0.0D).tex(0.0F, 0.0F).color(0, 0, 0, 255).endVertex(); -// tessellator.draw(); -// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); -// bufferbuilder.pos((double)this.x0, (double)this.y1, 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 255).endVertex(); -// bufferbuilder.pos((double)this.x1, (double)this.y1, 0.0D).tex(1.0F, 1.0F).color(0, 0, 0, 255).endVertex(); -// bufferbuilder.pos((double)this.x1, (double)(this.y1 - 4), 0.0D).tex(1.0F, 0.0F).color(0, 0, 0, 0).endVertex(); -// bufferbuilder.pos((double)this.x0, (double)(this.y1 - 4), 0.0D).tex(0.0F, 0.0F).color(0, 0, 0, 0).endVertex(); -// tessellator.draw(); - - //SCROLLBAR - int j1 = this.getMaxScroll(); - if (j1 > 0) { - int k1 = (int) ((float) ((this.y1 - this.y0) * (this.y1 - this.y0)) / (float) this.getMaxPosition()); - k1 = Mth.clamp(k1, 32, this.y1 - this.y0 - 8); - int l1 = (int) this.getScrollAmount() * (this.y1 - this.y0 - k1) / j1 + this.y0; - if (l1 < this.y0) { - l1 = this.y0; - } - - bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); - bufferbuilder.vertex(i, this.y1, 0.0D).uv(0.0F, 1.0F).color(0, 0, 0, 255).endVertex(); - bufferbuilder.vertex(j, this.y1, 0.0D).uv(1.0F, 1.0F).color(0, 0, 0, 255).endVertex(); - bufferbuilder.vertex(j, this.y0, 0.0D).uv(1.0F, 0.0F).color(0, 0, 0, 255).endVertex(); - bufferbuilder.vertex(i, this.y0, 0.0D).uv(0.0F, 0.0F).color(0, 0, 0, 255).endVertex(); - tessellator.end(); - bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); - bufferbuilder.vertex(i, l1 + k1, 0.0D).uv(0.0F, 1.0F).color(128, 128, 128, 255).endVertex(); - bufferbuilder.vertex(j, l1 + k1, 0.0D).uv(1.0F, 1.0F).color(128, 128, 128, 255).endVertex(); - bufferbuilder.vertex(j, l1, 0.0D).uv(1.0F, 0.0F).color(128, 128, 128, 255).endVertex(); - bufferbuilder.vertex(i, l1, 0.0D).uv(0.0F, 0.0F).color(128, 128, 128, 255).endVertex(); - tessellator.end(); - bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); - bufferbuilder.vertex(i, l1 + k1 - 1, 0.0D).uv(0.0F, 1.0F).color(192, 192, 192, 255).endVertex(); - bufferbuilder.vertex(j - 1, l1 + k1 - 1, 0.0D).uv(1.0F, 1.0F).color(192, 192, 192, 255).endVertex(); - bufferbuilder.vertex(j - 1, l1, 0.0D).uv(1.0F, 0.0F).color(192, 192, 192, 255).endVertex(); - bufferbuilder.vertex(i, l1, 0.0D).uv(0.0F, 0.0F).color(192, 192, 192, 255).endVertex(); - tessellator.end(); - } - -// this.renderDecorations(p_render_1_, p_render_2_); -// RenderSystem.enableTexture(); - RenderSystem.disableBlend(); - } - - public int getMaxScroll() { - return Math.max(0, this.getMaxPosition() - (this.y1 - this.y0 - 4)); - } +// public int getMaxScroll() { +// return Math.max(0, this.getMaxPosition() - (this.y1 - this.y0 - 4)); +// } @OnlyIn(Dist.CLIENT) public class ShaderTypeEntry extends ObjectSelectionList.Entry { @@ -285,8 +278,8 @@ public class PlayerSettingsGui extends Screen { @Override public void render(GuiGraphics guiGraphics, int itemIndex, int rowTop, int rowLeft, int rowWidth, int rowHeight, int mouseX, int mouseY, boolean hovered, float partialTicks) { - if (rowTop + 10 > ShaderTypeList.this.y0 && rowTop + rowHeight - 5 < ShaderTypeList.this.y1) - guiGraphics.drawString(font, shaderType.name, ShaderTypeList.this.x0 + 8, rowTop + 4, 0xFFFFFF, false); + if (rowTop + 10 > ShaderTypeList.this.getY() && rowTop + rowHeight - 5 < (ShaderTypeList.this.getY() + ShaderTypeList.this.getHeight())) + guiGraphics.drawString(font, shaderType.name, ShaderTypeList.this.getX() + 8, rowTop + 4, 0xFFFFFF, false); } @Override diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java index 3a69190..3050038 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java @@ -26,7 +26,7 @@ import nl.requios.effortlessbuilding.buildmode.BuildModeEnum; import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.ModeOptions.ActionEnum; import nl.requios.effortlessbuilding.buildmode.ModeOptions.OptionEnum; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.create.foundation.item.ItemDescription; import nl.requios.effortlessbuilding.create.foundation.item.TooltipHelper; import nl.requios.effortlessbuilding.create.foundation.utility.Color; @@ -155,7 +155,7 @@ public class RadialMenu extends Screen { //Add actions - boolean canReplace = CapabilityHandler.canReplaceBlocks(minecraft.player); + boolean canReplace = AttachmentHandler.canReplaceBlocks(minecraft.player); // buttons.add(new MenuButton(ActionEnum.OPEN_PLAYER_SETTINGS, -buttonDistance - 65, -13, Direction.UP)); if (canReplace) { @@ -337,7 +337,7 @@ public class RadialMenu extends Screen { guiGraphics.drawString(font, credits, width - font.width(credits) - 4, height - 10, watermarkTextColor); //Draw power level info - String powerLevelValue = minecraft.player.isCreative() ? "Creative" : String.valueOf(CapabilityHandler.getPowerLevel(minecraft.player)); + String powerLevelValue = minecraft.player.isCreative() ? "Creative" : String.valueOf(AttachmentHandler.getPowerLevel(minecraft.player)); String powerLevelText = I18n.get("key.effortlessbuilding.power_level") + ": " + powerLevelValue; guiGraphics.drawString(font, powerLevelText, width - font.width(powerLevelText) - 4, height - 22, minecraft.player.isCreative() ? watermarkTextColor : ChatFormatting.DARK_PURPLE.getColor()); @@ -345,19 +345,19 @@ public class RadialMenu extends Screen { if (mouseX >= width - font.width(powerLevelText) - 14 && mouseX <= width && mouseY >= height - 24 && mouseY <= height) { var tooltip = new ArrayList(); tooltip.add(Components.literal(powerLevelText).withStyle(ChatFormatting.DARK_PURPLE)); - int placementReach = CapabilityHandler.getPlacementReach(minecraft.player, false); + int placementReach = AttachmentHandler.getPlacementReach(minecraft.player, false); tooltip.add(Components.translatable("key.effortlessbuilding.placement_reach").withStyle(ChatFormatting.GRAY).append(": " + (placementReach == 0 ? "vanilla" : placementReach + " blocks"))); - tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_per_axis").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getMaxBlocksPerAxis(minecraft.player, false))); - tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_placed_at_once").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getMaxBlocksPlacedAtOnce(minecraft.player, false))); - tooltip.add(Components.translatable("key.effortlessbuilding.max_mirror_radius").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getMaxMirrorRadius(minecraft.player, false) + " blocks")); + tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_per_axis").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getMaxBlocksPerAxis(minecraft.player, false))); + tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_placed_at_once").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getMaxBlocksPlacedAtOnce(minecraft.player, false))); + tooltip.add(Components.translatable("key.effortlessbuilding.max_mirror_radius").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getMaxMirrorRadius(minecraft.player, false) + " blocks")); - if (CapabilityHandler.canIncreasePowerLevel(minecraft.player) && !minecraft.player.isCreative()) { + if (AttachmentHandler.canIncreasePowerLevel(minecraft.player) && !minecraft.player.isCreative()) { tooltip.add(Components.literal("")); - tooltip.add(Components.translatable("key.effortlessbuilding.next_power_level").withStyle(ChatFormatting.DARK_AQUA).append(": " + CapabilityHandler.getNextPowerLevel(minecraft.player))); - tooltip.add(Components.translatable("key.effortlessbuilding.placement_reach").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getPlacementReach(minecraft.player, true) + " blocks")); - tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_per_axis").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getMaxBlocksPerAxis(minecraft.player, true))); - tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_placed_at_once").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getMaxBlocksPlacedAtOnce(minecraft.player, true))); - tooltip.add(Components.translatable("key.effortlessbuilding.max_mirror_radius").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getMaxMirrorRadius(minecraft.player, true) + " blocks")); + tooltip.add(Components.translatable("key.effortlessbuilding.next_power_level").withStyle(ChatFormatting.DARK_AQUA).append(": " + AttachmentHandler.getNextPowerLevel(minecraft.player))); + tooltip.add(Components.translatable("key.effortlessbuilding.placement_reach").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getPlacementReach(minecraft.player, true) + " blocks")); + tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_per_axis").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getMaxBlocksPerAxis(minecraft.player, true))); + tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_placed_at_once").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getMaxBlocksPlacedAtOnce(minecraft.player, true))); + tooltip.add(Components.translatable("key.effortlessbuilding.max_mirror_radius").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getMaxMirrorRadius(minecraft.player, true) + " blocks")); tooltip.add(Components.literal("")); tooltip.addAll(TooltipHelper.cutTextComponent(Components.translatable("key.effortlessbuilding.next_power_level_how"), ChatFormatting.GRAY, ChatFormatting.WHITE)); } @@ -485,7 +485,7 @@ public class RadialMenu extends Screen { public static void playRadialMenuSound() { final float volume = 0.1f; if (volume >= 0.0001f) { - SimpleSoundInstance sound = new SimpleSoundInstance(SoundEvents.UI_BUTTON_CLICK.get(), SoundSource.MASTER, volume, + SimpleSoundInstance sound = new SimpleSoundInstance(SoundEvents.UI_BUTTON_CLICK.value(), SoundSource.MASTER, volume, 1.0f, RandomSource.create(), Minecraft.getInstance().player.blockPosition()); Minecraft.getInstance().getSoundManager().play(sound); } diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArrayEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArrayEntry.java index 8261aec..484e3b3 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArrayEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArrayEntry.java @@ -4,12 +4,12 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; -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 nl.requios.effortlessbuilding.AllGuiTextures; import nl.requios.effortlessbuilding.buildmodifier.Array; import nl.requios.effortlessbuilding.buildmodifier.BaseModifier; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.create.foundation.gui.widget.ScrollInput; import nl.requios.effortlessbuilding.gui.elements.LabeledScrollInput; import nl.requios.effortlessbuilding.utilities.MathHelper; @@ -59,8 +59,8 @@ public class ArrayEntry extends BaseModifierEntry { } @Override - public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { - super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, p_230432_9_, partialTicks); + public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTicks) { + super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, hovering, partialTicks); //draw offset inputs for (int i = 0; i < 3; i++) { @@ -85,7 +85,7 @@ public class ArrayEntry extends BaseModifierEntry { super.onValueChanged(); int currentReach = Math.max(-1, getArrayReach()); - int maxReach = CapabilityHandler.getMaxBlocksPerAxis(Minecraft.getInstance().player, false); + int maxReach = AttachmentHandler.getMaxBlocksPerAxis(Minecraft.getInstance().player, false); ChatFormatting reachColor = isCurrentReachValid(currentReach, maxReach) ? ChatFormatting.GRAY : ChatFormatting.RED; var reachText = "" + reachColor + currentReach + ChatFormatting.GRAY + "/" + ChatFormatting.GRAY + maxReach; reachLabel.text = Component.literal(reachText); diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/BaseModifierEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/BaseModifierEntry.java index 1adce87..dcd94b5 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/BaseModifierEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/BaseModifierEntry.java @@ -80,7 +80,7 @@ public abstract class BaseModifierEntry extends Modifier } @Override - public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { + public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTicks) { left = x + width / 2 - BACKGROUND_WIDTH / 2; right = x + width / 2 + BACKGROUND_WIDTH / 2; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorEntry.java index 12fe5cb..b7dd1a8 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorEntry.java @@ -4,13 +4,13 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.world.phys.Vec3; -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 nl.requios.effortlessbuilding.AllGuiTextures; import nl.requios.effortlessbuilding.AllIcons; import nl.requios.effortlessbuilding.buildmodifier.BaseModifier; import nl.requios.effortlessbuilding.buildmodifier.Mirror; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.create.foundation.gui.widget.IconButton; import nl.requios.effortlessbuilding.create.foundation.gui.widget.ScrollInput; import nl.requios.effortlessbuilding.create.foundation.utility.Components; @@ -101,7 +101,7 @@ public class MirrorEntry extends BaseModifierEntry { //Radius radiusInput = new LabeledScrollInput(0, 0, 27, 18) - .withRange(0, CapabilityHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false)) + .withRange(0, AttachmentHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false)) .titled(Minecraft.getInstance().player.isCreative() ? Component.literal("Radius") : Component.literal("Radius. Use Reach Upgrade items to increase maximum.")) @@ -135,8 +135,8 @@ public class MirrorEntry extends BaseModifierEntry { } @Override - public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { - super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, p_230432_9_, partialTicks); + public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTicks) { + super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, hovering, partialTicks); //draw position inputs for (int i = 0; i < 3; i++) { diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreen.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreen.java index 4c7dc20..1d9e3cd 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreen.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreen.java @@ -3,8 +3,8 @@ package nl.requios.effortlessbuilding.gui.buildmodifier; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; -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 nl.requios.effortlessbuilding.ClientEvents; import nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.buildmodifier.Array; @@ -41,8 +41,8 @@ public class ModifiersScreen extends AbstractSimiScreen { int listL = this.width / 2 - listWidth / 2; int listR = this.width / 2 + listWidth / 2; - list = new ModifiersScreenList(minecraft, listWidth, height - 80, 45, height - 45, 68); - list.setLeftPos(this.width / 2 - list.getWidth() / 2); + list = new ModifiersScreenList(minecraft, listWidth, height - 80, 45, 68); + list.setX(this.width / 2 - list.getWidth() / 2); addRenderableWidget(list); diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreenList.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreenList.java index e91efae..daebae0 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreenList.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreenList.java @@ -21,32 +21,26 @@ import java.util.Objects; //Based on Create's ConfigScreenList public class ModifiersScreenList extends ObjectSelectionList implements TickableGuiEventListener { - public ModifiersScreenList(Minecraft mc, int width, int height, int y0, int y1, int itemHeight) { - super(mc, width, height, y0, y1, itemHeight); + public ModifiersScreenList(Minecraft mc, int width, int height, int y1, int itemHeight) { + super(mc, width, height, y1, itemHeight); setRenderBackground(false); - setRenderTopAndBottom(false); - setRenderSelection(false); headerHeight = 3; } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { Color c = new Color(0x60_000000); - UIRenderHelper.angledGradient(guiGraphics, 90, x0 + width / 2, y0, width, 5, c, Color.TRANSPARENT_BLACK); - UIRenderHelper.angledGradient(guiGraphics, -90, x0 + width / 2, y1, width, 5, c, Color.TRANSPARENT_BLACK); - UIRenderHelper.angledGradient(guiGraphics, 0, x0, y0 + height / 2, height, 5, c, Color.TRANSPARENT_BLACK); - UIRenderHelper.angledGradient(guiGraphics, 180, x1, y0 + height / 2, height, 5, c, Color.TRANSPARENT_BLACK); + UIRenderHelper.angledGradient(guiGraphics, 90, getX() + width / 2, getY(), width, 5, c, Color.TRANSPARENT_BLACK); + UIRenderHelper.angledGradient(guiGraphics, -90, getX() + width / 2, getY() + getHeight(), width, 5, c, Color.TRANSPARENT_BLACK); + UIRenderHelper.angledGradient(guiGraphics, 0, getX(), getY() + height / 2, height, 5, c, Color.TRANSPARENT_BLACK); + UIRenderHelper.angledGradient(guiGraphics, 180, getX() + getWidth(), getY() + height / 2, height, 5, c, Color.TRANSPARENT_BLACK); - super.render(guiGraphics, mouseX, mouseY, partialTicks); + super.renderWidget(guiGraphics, mouseX, mouseY, partialTicks); } @Override - protected void renderList(GuiGraphics guiGraphics, int p_239229_, int p_239230_, float p_239231_) { - Window window = minecraft.getWindow(); - double d0 = window.getGuiScale(); - RenderSystem.enableScissor((int) (this.x0 * d0), (int) (window.getHeight() - (this.y1 * d0)), (int) (this.width * d0), (int) (this.height * d0)); - super.renderList(guiGraphics, p_239229_, p_239230_, p_239231_); - RenderSystem.disableScissor(); + protected void renderList(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + super.renderList(guiGraphics, mouseX, mouseY, partialTick); } public void renderWindowForeground(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { @@ -62,7 +56,7 @@ public class ModifiersScreenList extends ObjectSelectionList= this.y0 && j1 <= this.y1) { + if (k1 >= this.getY() && j1 <= (this.getY() + this.getHeight())) { renderItemForeground(guiGraphics, pMouseX, pMouseY, pPartialTick, i1, i, j1, j, k); } } @@ -86,7 +80,7 @@ public class ModifiersScreenList extends ObjectSelectionList e.charTyped(pCodePoint, pModifiers))) @@ -95,10 +89,10 @@ public class ModifiersScreenList extends ObjectSelectionList e.mouseScrolled(pMouseX, pMouseY, pDelta))) + public boolean mouseScrolled(double pMouseX, double pMouseY, double scrollX, double scrollY) { + if (children().stream().anyMatch(e -> e.mouseScrolled(pMouseX, pMouseY, scrollX, scrollY))) return true; - return super.mouseScrolled(pMouseX, pMouseY, pDelta); + return super.mouseScrolled(pMouseX, pMouseY, scrollX, scrollY); } @Override @@ -108,7 +102,7 @@ public class ModifiersScreenList extends ObjectSelectionList l.mouseScrolled(x, y, delta)); + public boolean mouseScrolled(double x, double y, double scrollX, double scrollY) { + return getGuiListeners().stream().anyMatch(l -> l.mouseScrolled(x, y, scrollX, scrollY)); } @Override - public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { + public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTicks) { // UIRenderHelper.streak(guiGraphics, 0, x - 10, y + height / 2, height - 6, width, 0xdd_000000); // UIRenderHelper.streak(guiGraphics, 180, x + (int) (width * 1.35f) + 10, y + height / 2, height - 6, width / 8 * 7, 0xdd_000000); } - + public void renderForeground(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { - for (var listener : listeners) { if (listener instanceof AbstractSimiWidget simiWidget && simiWidget.isHoveredOrFocused() && simiWidget.visible) { diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorEntry.java index 2e37b32..a7b22d8 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorEntry.java @@ -4,13 +4,13 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.world.phys.Vec3; -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 nl.requios.effortlessbuilding.AllGuiTextures; import nl.requios.effortlessbuilding.AllIcons; import nl.requios.effortlessbuilding.buildmodifier.BaseModifier; import nl.requios.effortlessbuilding.buildmodifier.RadialMirror; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.create.foundation.gui.widget.IconButton; import nl.requios.effortlessbuilding.create.foundation.gui.widget.ScrollInput; import nl.requios.effortlessbuilding.create.foundation.utility.Components; @@ -107,7 +107,7 @@ public class RadialMirrorEntry extends BaseModifierEntry { //Radius radiusInput = new LabeledScrollInput(0, 0, 27, 18) - .withRange(0, CapabilityHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false)) + .withRange(0, AttachmentHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false)) .titled(Minecraft.getInstance().player.isCreative() ? Component.literal("Radius") : Component.literal("Radius. Use Reach Upgrade items to increase maximum.")) @@ -141,8 +141,8 @@ public class RadialMirrorEntry extends BaseModifierEntry { } @Override - public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { - super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, p_230432_9_, partialTicks); + public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTicks) { + super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, hovering, partialTicks); //draw position inputs for (int i = 0; i < 3; i++) { diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCheckBoxFixed.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCheckBoxFixed.java index 3ed6b88..fb003a8 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCheckBoxFixed.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCheckBoxFixed.java @@ -1,13 +1,11 @@ package nl.requios.effortlessbuilding.gui.elements; -import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; -import net.minecraftforge.client.gui.ScreenUtils; +import net.minecraft.resources.ResourceLocation; import javax.annotation.ParametersAreNonnullByDefault; @@ -16,6 +14,7 @@ import javax.annotation.ParametersAreNonnullByDefault; */ @ParametersAreNonnullByDefault public class GuiCheckBoxFixed extends Button { + private final ResourceLocation DISABLED_BUTTON = new ResourceLocation("textures/gui/sprites/widget/button_disabled"); private final int boxWidth; private boolean isChecked; @@ -30,10 +29,8 @@ public class GuiCheckBoxFixed extends Button { @Override public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partial) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, WIDGETS_LOCATION); //Is deprecated but still works - ScreenUtils.blitWithBorder(guiGraphics, this.getX(), this.getY(), 0, 46, this.boxWidth, this.height, 200, 20, 2, 3, 2, 2, 0); + guiGraphics.blitWithBorder(DISABLED_BUTTON, this.getX(), this.getY(), 0, 0, this.boxWidth, this.height, 200, 20, 2, 3, 2, 2); int color = 14737632; if (packedFGColor != 0) { diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCollapsibleScrollEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCollapsibleScrollEntry.java index 7a63add..287015a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCollapsibleScrollEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCollapsibleScrollEntry.java @@ -5,8 +5,8 @@ import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.screens.Screen; -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 java.util.List; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiIconButton.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiIconButton.java index 9cf44ed..ecfb927 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiIconButton.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiIconButton.java @@ -5,8 +5,8 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.components.Button; import net.minecraft.resources.ResourceLocation; import net.minecraft.network.chat.Component; -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.ParametersAreNonnullByDefault; import java.util.ArrayList; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiNumberField.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiNumberField.java index 986d2a6..f0d71f5 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiNumberField.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiNumberField.java @@ -9,8 +9,8 @@ import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; -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.ParametersAreNonnullByDefault; import java.text.DecimalFormat; @@ -138,7 +138,7 @@ public class GuiNumberField { } public void update() { - textField.tick(); +// textField.tick(); } public boolean charTyped(char typedChar, int keyCode) { diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiScrollPane.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiScrollPane.java index 30e5921..c9bf16b 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiScrollPane.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiScrollPane.java @@ -11,9 +11,9 @@ import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; import net.minecraft.util.Mth; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.common.MinecraftForge; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.common.NeoForge; import javax.annotation.ParametersAreNonnullByDefault; import java.util.ArrayList; @@ -38,7 +38,7 @@ public class GuiScrollPane extends SlotGui { this.font = font; this.renderSelection = false; listEntries = new ArrayList<>(); - MinecraftForge.EVENT_BUS.register(this); + NeoForge.EVENT_BUS.register(this); } public IScrollEntry getListEntry(int index) { @@ -239,11 +239,11 @@ public class GuiScrollPane extends SlotGui { } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(double mouseX, double mouseY, int pButton) { for (int i = 0; i < this.getItemCount(); ++i) { double relativeX = getRelativeMouseX(mouseX); double relativeY = getRelativeMouseY(mouseY, i); - this.getListEntry(i).mouseReleased(i, (int) mouseX, (int) mouseY, button, (int) relativeX, (int) relativeY); + this.getListEntry(i).mouseReleased(i, (int) mouseX, (int) mouseY, pButton, (int) relativeX, (int) relativeY); } this.visible = true; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/SlotGui.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/SlotGui.java index ec7b0f2..704a29d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/elements/SlotGui.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/SlotGui.java @@ -13,8 +13,8 @@ import net.minecraft.client.gui.components.events.AbstractContainerEventHandler; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.util.Mth; -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.ParametersAreNonnullByDefault; import java.util.Collections; @@ -114,6 +114,7 @@ public abstract class SlotGui extends AbstractContainerEventHandler implements R this.scrolling = p_updateScrollingState_5_ == 0 && p_updateScrollingState_1_ >= (double) this.getScrollbarPosition() && p_updateScrollingState_1_ < (double) (this.getScrollbarPosition() + 6); } + @Override public boolean mouseClicked(double p_mouseClicked_1_, double p_mouseClicked_3_, int p_mouseClicked_5_) { this.updateScrollingState(p_mouseClicked_1_, p_mouseClicked_3_, p_mouseClicked_5_); if (this.isVisible() && this.isMouseInList(p_mouseClicked_1_, p_mouseClicked_3_)) { @@ -136,21 +137,23 @@ public abstract class SlotGui extends AbstractContainerEventHandler implements R } } - public boolean mouseReleased(double p_mouseReleased_1_, double p_mouseReleased_3_, int p_mouseReleased_5_) { + @Override + public boolean mouseReleased(double mouseX, double mouseY, int pButton) { if (this.getFocused() != null) { - this.getFocused().mouseReleased(p_mouseReleased_1_, p_mouseReleased_3_, p_mouseReleased_5_); + this.getFocused().mouseReleased(mouseX, mouseY, pButton); } return false; } - public boolean mouseDragged(double p_mouseDragged_1_, double p_mouseDragged_3_, int p_mouseDragged_5_, double p_mouseDragged_6_, double p_mouseDragged_8_) { - if (super.mouseDragged(p_mouseDragged_1_, p_mouseDragged_3_, p_mouseDragged_5_, p_mouseDragged_6_, p_mouseDragged_8_)) { + @Override + public boolean mouseDragged(double mouseX, double pMouseY, int button, double dragX, double dragY) { + if (super.mouseDragged(mouseX, pMouseY, button, dragX, dragY)) { return true; - } else if (this.isVisible() && p_mouseDragged_5_ == 0 && this.scrolling) { - if (p_mouseDragged_3_ < (double) this.y0) { + } else if (this.isVisible() && button == 0 && this.scrolling) { + if (pMouseY < (double) this.y0) { this.yo = 0.0D; - } else if (p_mouseDragged_3_ > (double) this.y1) { + } else if (pMouseY > (double) this.y1) { this.yo = this.getMaxScroll(); } else { double d0 = this.getMaxScroll(); @@ -165,7 +168,7 @@ public abstract class SlotGui extends AbstractContainerEventHandler implements R d1 = 1.0D; } - this.yo += p_mouseDragged_8_ * d1; + this.yo += dragY * d1; this.capYPosition(); } @@ -175,15 +178,17 @@ public abstract class SlotGui extends AbstractContainerEventHandler implements R } } - public boolean mouseScrolled(double p_mouseScrolled_1_, double p_mouseScrolled_3_, double p_mouseScrolled_5_) { + @Override + public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, double scrollY) { if (!this.isVisible()) { return false; } else { - this.yo -= p_mouseScrolled_5_ * (double) this.itemHeight / 2.0D; + this.yo -= scrollX * (double) this.itemHeight / 2.0D; return true; } } + @Override public boolean keyPressed(int p_keyPressed_1_, int p_keyPressed_2_, int p_keyPressed_3_) { if (!this.isVisible()) { return false; diff --git a/src/main/java/nl/requios/effortlessbuilding/item/AbstractRandomizerBagItem.java b/src/main/java/nl/requios/effortlessbuilding/item/AbstractRandomizerBagItem.java index 59937de..f2cd884 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/AbstractRandomizerBagItem.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/AbstractRandomizerBagItem.java @@ -4,9 +4,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; @@ -23,10 +21,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.network.NetworkHooks; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.items.IItemHandler; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.systems.ServerBuildState; import nl.requios.effortlessbuilding.utilities.BlockEntry; @@ -43,160 +39,161 @@ import java.util.Random; @ParametersAreNonnullByDefault public abstract class AbstractRandomizerBagItem extends Item { - private static long currentSeed = 1337; - private static final Random rand = new Random(currentSeed); + private static long currentSeed = 1337; + private static final Random rand = new Random(currentSeed); - public AbstractRandomizerBagItem() { - super(new Item.Properties().stacksTo(1)); - } + public AbstractRandomizerBagItem() { + super(new Item.Properties().stacksTo(1)); + } - public abstract int getInventorySize(); + public abstract int getInventorySize(); - public abstract MenuProvider getContainerProvider(ItemStack item); + public abstract MenuProvider getContainerProvider(ItemStack item); - /** - * Get the inventory of a randomizer bag by checking the capability. - */ - public IItemHandler getBagInventory(ItemStack bag) { - return bag.getCapability(ForgeCapabilities.ITEM_HANDLER, null).orElse(null); - } + /** + * Get the inventory of a randomizer bag by checking the capability. + */ + @Nullable + public IItemHandler getBagInventory(ItemStack bag) { + return bag.getCapability(Capabilities.ItemHandler.ITEM, null); + } - /** - * Pick a random slot from the bag. Empty slots will never get chosen. - */ - public ItemStack pickRandomStack(IItemHandler bagInventory) { - //Find how many stacks are non-empty, and save them in a list - int nonempty = 0; - List nonEmptyStacks = new ArrayList<>(); - List originalSlots = new ArrayList<>(getInventorySize()); - for (int i = 0; i < bagInventory.getSlots(); i++) { - ItemStack stack = bagInventory.getStackInSlot(i); - if (!stack.isEmpty()) { - nonempty++; - nonEmptyStacks.add(stack); - originalSlots.add(i); - } - } + /** + * Pick a random slot from the bag. Empty slots will never get chosen. + */ + public ItemStack pickRandomStack(IItemHandler bagInventory) { + //Find how many stacks are non-empty, and save them in a list + int nonempty = 0; + List nonEmptyStacks = new ArrayList<>(); + List originalSlots = new ArrayList<>(getInventorySize()); + for (int i = 0; i < bagInventory.getSlots(); i++) { + ItemStack stack = bagInventory.getStackInSlot(i); + if (!stack.isEmpty()) { + nonempty++; + nonEmptyStacks.add(stack); + originalSlots.add(i); + } + } - if (nonEmptyStacks.size() != originalSlots.size()) - throw new Error("NonEmptyStacks and OriginalSlots not same size"); + if (nonEmptyStacks.size() != originalSlots.size()) + throw new Error("NonEmptyStacks and OriginalSlots not same size"); - if (nonempty == 0) return ItemStack.EMPTY; + if (nonempty == 0) return ItemStack.EMPTY; - //Pick random slot - int randomSlot = rand.nextInt(nonempty); - if (randomSlot < 0 || randomSlot > bagInventory.getSlots()) return ItemStack.EMPTY; + //Pick random slot + int randomSlot = rand.nextInt(nonempty); + if (randomSlot < 0 || randomSlot > bagInventory.getSlots()) return ItemStack.EMPTY; - int originalSlot = originalSlots.get(randomSlot); - if (originalSlot < 0 || originalSlot > bagInventory.getSlots()) return ItemStack.EMPTY; + int originalSlot = originalSlots.get(randomSlot); + if (originalSlot < 0 || originalSlot > bagInventory.getSlots()) return ItemStack.EMPTY; - return bagInventory.getStackInSlot(originalSlot); - } + return bagInventory.getStackInSlot(originalSlot); + } - public ItemStack findStack(IItemHandler bagInventory, Item item) { - for (int i = 0; i < bagInventory.getSlots(); i++) { - ItemStack stack = bagInventory.getStackInSlot(i); - if (!stack.isEmpty() && stack.getItem() == item) { - return stack; - } - } - return ItemStack.EMPTY; - } + public ItemStack findStack(IItemHandler bagInventory, Item item) { + for (int i = 0; i < bagInventory.getSlots(); i++) { + ItemStack stack = bagInventory.getStackInSlot(i); + if (!stack.isEmpty() && stack.getItem() == item) { + return stack; + } + } + return ItemStack.EMPTY; + } - public static void resetRandomness() { - rand.setSeed(currentSeed); - } + public static void resetRandomness() { + rand.setSeed(currentSeed); + } - public static void renewRandomness() { - currentSeed = Calendar.getInstance().getTimeInMillis(); - rand.setSeed(currentSeed); - } + public static void renewRandomness() { + currentSeed = Calendar.getInstance().getTimeInMillis(); + rand.setSeed(currentSeed); + } - @Override - public InteractionResult useOn(UseOnContext ctx) { - Player player = ctx.getPlayer(); - Level world = ctx.getLevel(); - BlockPos pos = ctx.getClickedPos(); - Direction facing = ctx.getClickedFace(); - ItemStack item = ctx.getItemInHand(); - Vec3 hitVec = ctx.getClickLocation(); + @Override + public InteractionResult useOn(UseOnContext ctx) { + Player player = ctx.getPlayer(); + Level world = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); + Direction facing = ctx.getClickedFace(); + ItemStack item = ctx.getItemInHand(); + Vec3 hitVec = ctx.getClickLocation(); - if (player == null) return InteractionResult.FAIL; + if (player == null) return InteractionResult.FAIL; - if (ctx.getPlayer() != null && ctx.getPlayer().isShiftKeyDown()) { //ctx.isPlacerSneaking() - if (world.isClientSide) return InteractionResult.SUCCESS; - //Open inventory - NetworkHooks.openScreen((ServerPlayer) player, getContainerProvider(item)); - } else { - if (world.isClientSide) return InteractionResult.SUCCESS; + if (ctx.getPlayer() != null && ctx.getPlayer().isShiftKeyDown()) { //ctx.isPlacerSneaking() + if (world.isClientSide) return InteractionResult.SUCCESS; + //Open inventory + player.openMenu(getContainerProvider(item)); + } else { + if (world.isClientSide) return InteractionResult.SUCCESS; - //---Only place manually if in normal vanilla mode--- - if (!ServerBuildState.isLikeVanilla(player)) { - return InteractionResult.FAIL; - } + //---Only place manually if in normal vanilla mode--- + if (!ServerBuildState.isLikeVanilla(player)) { + return InteractionResult.FAIL; + } - //Use item - //Get bag inventory - ItemStack bag = ctx.getItemInHand(); - IItemHandler bagInventory = getBagInventory(bag); - if (bagInventory == null) - return InteractionResult.FAIL; + //Use item + //Get bag inventory + ItemStack bag = ctx.getItemInHand(); + IItemHandler bagInventory = getBagInventory(bag); + if (bagInventory == null) + return InteractionResult.FAIL; - ItemStack toPlace = pickRandomStack(bagInventory); - if (toPlace.isEmpty()) return InteractionResult.FAIL; + ItemStack toPlace = pickRandomStack(bagInventory); + if (toPlace.isEmpty()) return InteractionResult.FAIL; - if (!world.getBlockState(pos).getBlock().canBeReplaced(world.getBlockState(pos), Fluids.EMPTY)) { - pos = pos.relative(facing); - } + if (!world.getBlockState(pos).getBlock().canBeReplaced(world.getBlockState(pos), Fluids.EMPTY)) { + pos = pos.relative(facing); + } - BlockPlaceContext blockItemUseContext = new BlockPlaceContext(new UseOnContext(player, ctx.getHand(), new BlockHitResult(hitVec, facing, pos, false))); - BlockState blockState = Block.byItem(toPlace.getItem()).getStateForPlacement(blockItemUseContext); + BlockPlaceContext blockItemUseContext = new BlockPlaceContext(new UseOnContext(player, ctx.getHand(), new BlockHitResult(hitVec, facing, pos, false))); + BlockState blockState = Block.byItem(toPlace.getItem()).getStateForPlacement(blockItemUseContext); - var blockEntry = new BlockEntry(pos, blockState, toPlace.getItem()); - var blockSet = new BlockSet(List.of(blockEntry), pos, pos, false); - EffortlessBuilding.SERVER_BLOCK_PLACER.applyBlockSet(player, blockSet); - } - return InteractionResult.SUCCESS; - } + var blockEntry = new BlockEntry(pos, blockState, toPlace.getItem()); + var blockSet = new BlockSet(List.of(blockEntry), pos, pos, false); + EffortlessBuilding.SERVER_BLOCK_PLACER.applyBlockSet(player, blockSet); + } + return InteractionResult.SUCCESS; + } - @Override - public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { - ItemStack bag = player.getItemInHand(hand); + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + ItemStack bag = player.getItemInHand(hand); - if (player.isShiftKeyDown()) { - if (world.isClientSide) return new InteractionResultHolder<>(InteractionResult.SUCCESS, bag); - //Open inventory - NetworkHooks.openScreen((ServerPlayer) player, getContainerProvider(bag)); - } else { - //Use item - //Get bag inventory - IItemHandler bagInventory = getBagInventory(bag); - if (bagInventory == null) - return new InteractionResultHolder<>(InteractionResult.FAIL, bag); + if (player.isShiftKeyDown()) { + if (world.isClientSide) return new InteractionResultHolder<>(InteractionResult.SUCCESS, bag); + //Open inventory + player.openMenu(getContainerProvider(bag)); + } else { + //Use item + //Get bag inventory + IItemHandler bagInventory = getBagInventory(bag); + if (bagInventory == null) + return new InteractionResultHolder<>(InteractionResult.FAIL, bag); - ItemStack toUse = pickRandomStack(bagInventory); - if (toUse.isEmpty()) return new InteractionResultHolder<>(InteractionResult.FAIL, bag); + ItemStack toUse = pickRandomStack(bagInventory); + if (toUse.isEmpty()) return new InteractionResultHolder<>(InteractionResult.FAIL, bag); - return toUse.use(world, player, hand); - } - return new InteractionResultHolder<>(InteractionResult.PASS, bag); - } + return toUse.use(world, player, hand); + } + return new InteractionResultHolder<>(InteractionResult.PASS, bag); + } - @Override - public int getUseDuration(ItemStack p_77626_1_) { - return 1; - } + @Override + public int getUseDuration(ItemStack p_77626_1_) { + return 1; + } - @Nullable - @Override - public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundTag nbt) { - return new ItemHandlerCapabilityProvider(getInventorySize()); - } +// @Nullable +// @Override +// public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundTag nbt) { +// return new ItemHandlerCapabilityProvider(getInventorySize()); TODO: Re-enable itemhandler cap on randomizer bag item! +// } - @Override - public void appendHoverText(ItemStack stack, @Nullable Level world, List tooltip, TooltipFlag flag) { - tooltip.add(Component.literal(ChatFormatting.YELLOW + "*Experimental* Only works in singleplayer")); - tooltip.add(Component.literal(ChatFormatting.BLUE + "Rightclick" + ChatFormatting.GRAY + " to place a random block")); - tooltip.add(Component.literal(ChatFormatting.BLUE + "Sneak + rightclick" + ChatFormatting.GRAY + " to open inventory")); - } + @Override + public void appendHoverText(ItemStack stack, @Nullable Level world, List tooltip, TooltipFlag flag) { + tooltip.add(Component.literal(ChatFormatting.YELLOW + "*Experimental* Only works in singleplayer")); + tooltip.add(Component.literal(ChatFormatting.BLUE + "Rightclick" + ChatFormatting.GRAY + " to place a random block")); + tooltip.add(Component.literal(ChatFormatting.BLUE + "Sneak + rightclick" + ChatFormatting.GRAY + " to open inventory")); + } } diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ItemHandlerCapabilityProvider.java b/src/main/java/nl/requios/effortlessbuilding/item/ItemHandlerCapabilityProvider.java index c967780..675aca1 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ItemHandlerCapabilityProvider.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ItemHandlerCapabilityProvider.java @@ -1,37 +1,37 @@ -package nl.requios.effortlessbuilding.item; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.core.Direction; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.capabilities.ICapabilitySerializable; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemStackHandler; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public class ItemHandlerCapabilityProvider implements ICapabilitySerializable { - IItemHandler itemHandler; - - public ItemHandlerCapabilityProvider(int size) { - itemHandler = new ItemStackHandler(size); - } - - @Nonnull - @Override - public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { - return ForgeCapabilities.ITEM_HANDLER.orEmpty(cap, LazyOptional.of(() -> itemHandler)); - } - - @Override - public CompoundTag serializeNBT() { - return ((ItemStackHandler) itemHandler).serializeNBT(); - } - - @Override - public void deserializeNBT(CompoundTag nbt) { - ((ItemStackHandler) itemHandler).deserializeNBT(nbt); - } -} +//package nl.requios.effortlessbuilding.item; +// +//import net.minecraft.nbt.CompoundTag; +//import net.minecraft.core.Direction; +//import net.neoforged.neoforge.common.capabilities.Capability; +//import net.neoforged.neoforge.common.capabilities.Capabilities; +//import net.neoforged.neoforge.common.util.LazyOptional; +//import net.neoforged.neoforge.items.IItemHandler; +//import net.neoforged.neoforge.items.ItemStackHandler; +//import net.neoforged.neoforge.common.capabilities.ICapabilitySerializable; +// +//import javax.annotation.Nonnull; +//import javax.annotation.Nullable; +// +//public class ItemHandlerCapabilityProvider implements ICapabilitySerializable { TODO: Reimplement the ItemHandler stuff +// IItemHandler itemHandler; +// +// public ItemHandlerCapabilityProvider(int size) { +// itemHandler = new ItemStackHandler(size); +// } +// +// @Nonnull +// @Override +// public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { +// return Capabilities.ITEM_HANDLER.orEmpty(cap, LazyOptional.of(() -> itemHandler)); +// } +// +// @Override +// public CompoundTag serializeNBT() { +// return ((ItemStackHandler) itemHandler).serializeNBT(); +// } +// +// @Override +// public void deserializeNBT(CompoundTag nbt) { +// ((ItemStackHandler) itemHandler).deserializeNBT(nbt); +// } +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/item/PowerLevelItem.java b/src/main/java/nl/requios/effortlessbuilding/item/PowerLevelItem.java index adc6023..1f984ac 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/PowerLevelItem.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/PowerLevelItem.java @@ -13,8 +13,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.capability.IPowerLevel; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; +import nl.requios.effortlessbuilding.attachment.PowerLevel; import nl.requios.effortlessbuilding.create.foundation.item.TooltipHelper; import javax.annotation.Nullable; @@ -31,18 +31,19 @@ public class PowerLevelItem extends Item { @Override public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { if (powerLevel.canIncreasePowerLevel()) { if (!world.isClientSide) { powerLevel.increasePowerLevel(); + player.setData(EffortlessBuilding.POWER_LEVEL, powerLevel); EffortlessBuilding.log(player, "Upgraded power level to " + powerLevel.getPowerLevel()); stack.shrink(1); world.playSound((Player) null, player.blockPosition(), SoundEvents.PLAYER_LEVELUP, SoundSource.PLAYERS, 1f, 1f); - CapabilityHandler.syncToClient(player); + AttachmentHandler.syncToClient(player); } return InteractionResultHolder.sidedSuccess(stack, world.isClientSide()); diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade1Item.java b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade1Item.java index 10a7ad5..e8afcca 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade1Item.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade1Item.java @@ -14,8 +14,8 @@ import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.capability.IPowerLevel; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; +import nl.requios.effortlessbuilding.attachment.PowerLevel; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -32,19 +32,20 @@ public class ReachUpgrade1Item extends Item { @Override public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { int currentLevel = powerLevel.getPowerLevel(); if (currentLevel == 0) { if (!world.isClientSide) { powerLevel.increasePowerLevel(); + player.setData(EffortlessBuilding.POWER_LEVEL, powerLevel); EffortlessBuilding.log(player, "Upgraded power level to " + powerLevel.getPowerLevel()); stack.shrink(1); world.playSound((Player) null, player.blockPosition(), SoundEvents.PLAYER_LEVELUP, SoundSource.PLAYERS, 1f, 1f); - CapabilityHandler.syncToClient(player); + AttachmentHandler.syncToClient(player); } return InteractionResultHolder.sidedSuccess(stack, world.isClientSide()); } else if (currentLevel > 0) { diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade2Item.java b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade2Item.java index 98dc3d8..219852a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade2Item.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade2Item.java @@ -14,8 +14,8 @@ import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.capability.IPowerLevel; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; +import nl.requios.effortlessbuilding.attachment.PowerLevel; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -33,7 +33,7 @@ public class ReachUpgrade2Item extends Item { @Override public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { int currentLevel = powerLevel.getPowerLevel(); if (currentLevel == 1) { @@ -45,7 +45,7 @@ public class ReachUpgrade2Item extends Item { world.playSound((Player) null, player.blockPosition(), SoundEvents.PLAYER_LEVELUP, SoundSource.PLAYERS, 1f, 1f); - CapabilityHandler.syncToClient(player); + AttachmentHandler.syncToClient(player); } return InteractionResultHolder.sidedSuccess(stack, world.isClientSide()); } else if (currentLevel < 1) { diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade3Item.java b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade3Item.java index 6bdee0c..f43a076 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade3Item.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade3Item.java @@ -14,8 +14,8 @@ import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.capability.IPowerLevel; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; +import nl.requios.effortlessbuilding.attachment.PowerLevel; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -32,19 +32,20 @@ public class ReachUpgrade3Item extends Item { @Override public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { int currentLevel = powerLevel.getPowerLevel(); if (currentLevel == 2) { if (!world.isClientSide) { powerLevel.increasePowerLevel(); + player.setData(EffortlessBuilding.POWER_LEVEL, powerLevel); EffortlessBuilding.log(player, "Upgraded power level to " + powerLevel.getPowerLevel()); stack.shrink(1); world.playSound((Player) null, player.blockPosition(), SoundEvents.PLAYER_LEVELUP, SoundSource.PLAYERS, 1f, 1f); - CapabilityHandler.syncToClient(player); + AttachmentHandler.syncToClient(player); } return InteractionResultHolder.sidedSuccess(stack, world.isClientSide()); } else if (currentLevel < 2) { diff --git a/src/main/java/nl/requios/effortlessbuilding/item/SingleItemLootModifier.java b/src/main/java/nl/requios/effortlessbuilding/item/SingleItemLootModifier.java index 684998d..ee20b6d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/SingleItemLootModifier.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/SingleItemLootModifier.java @@ -1,19 +1,18 @@ package nl.requios.effortlessbuilding.item; +import com.google.common.base.Suppliers; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; -import net.minecraftforge.common.loot.IGlobalLootModifier; -import net.minecraftforge.common.loot.LootModifier; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; -import nl.requios.effortlessbuilding.EffortlessBuilding; +import net.neoforged.neoforge.common.loot.IGlobalLootModifier; +import net.neoforged.neoforge.common.loot.LootModifier; import org.jetbrains.annotations.NotNull; +import java.util.function.Supplier; + //Adds a single item with a chance to any loot tables. Specify loot tables in the JSON file. //Add JSON files to resources/data/effortlessbuilding/loot_modifiers, and list them in resources/data/forge/loot_modifiers/global_loot_modifiers.json //https://forge.gemwire.uk/wiki/Dynamic_Loot_Modification @@ -21,21 +20,21 @@ import org.jetbrains.annotations.NotNull; //https://mcreator.net/wiki/minecraft-vanilla-loot-tables-list#toc-index-1 public class SingleItemLootModifier extends LootModifier { - public static final RegistryObject> CODEC = EffortlessBuilding.LOOT_MODIFIERS.register("single_item_loot_modifier", () -> - RecordCodecBuilder.create(inst -> codecStart(inst).and( - inst.group( + public static final Supplier> CODEC = Suppliers.memoize(() -> + RecordCodecBuilder.create(instance -> codecStart(instance).and( + instance.group( Codec.FLOAT.fieldOf("chance").forGetter(m -> m.chance), - ForgeRegistries.ITEMS.getCodec().fieldOf("item").forGetter(m -> m.item) - )).apply(inst, SingleItemLootModifier::new) + ItemStack.SINGLE_ITEM_CODEC.fieldOf("item").forGetter(m -> m.stack) + )).apply(instance, SingleItemLootModifier::new) )); private final float chance; - private final Item item; + private final ItemStack stack; - public SingleItemLootModifier(LootItemCondition[] conditionsIn, float chance, Item item) { + public SingleItemLootModifier(LootItemCondition[] conditionsIn, float chance, ItemStack stack) { super(conditionsIn); this.chance = chance; - this.item = item; + this.stack = stack; } @NotNull @@ -47,7 +46,7 @@ public class SingleItemLootModifier extends LootModifier { // //with chance, add an item if (context.getRandom().nextFloat() < chance) { - generatedLoot.add(new ItemStack(item, 1)); + generatedLoot.add(stack.copy()); } return generatedLoot; } diff --git a/src/main/java/nl/requios/effortlessbuilding/network/IsQuickReplacingPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/IsQuickReplacingPacket.java deleted file mode 100644 index fcd65f1..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/IsQuickReplacingPacket.java +++ /dev/null @@ -1,35 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.systems.ServerBuildState; - -import java.util.function.Supplier; - -public class IsQuickReplacingPacket { - private boolean isQuickReplacing; - - public IsQuickReplacingPacket() { - } - - public IsQuickReplacingPacket(boolean isQuickReplacing) { - this.isQuickReplacing = isQuickReplacing; - } - - public static void encode(IsQuickReplacingPacket message, FriendlyByteBuf buf) { - buf.writeBoolean(message.isQuickReplacing); - } - - public static IsQuickReplacingPacket decode(FriendlyByteBuf buf) { - return new IsQuickReplacingPacket(buf.readBoolean()); - } - - public static class Handler { - public static void handle(IsQuickReplacingPacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerBuildState.setIsQuickReplacing(ctx.get().getSender(), message.isQuickReplacing); - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/IsUsingBuildModePacket.java b/src/main/java/nl/requios/effortlessbuilding/network/IsUsingBuildModePacket.java deleted file mode 100644 index 8ff30aa..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/IsUsingBuildModePacket.java +++ /dev/null @@ -1,36 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -import nl.requios.effortlessbuilding.systems.ServerBuildState; - -public class IsUsingBuildModePacket { - private boolean isUsingBuildMode; - - public IsUsingBuildModePacket() { - } - - public IsUsingBuildModePacket(boolean isUsingBuildMode) { - this.isUsingBuildMode = isUsingBuildMode; - } - - public static void encode(IsUsingBuildModePacket message, FriendlyByteBuf buf) { - buf.writeBoolean(message.isUsingBuildMode); - } - - public static IsUsingBuildModePacket decode(FriendlyByteBuf buf) { - return new IsUsingBuildModePacket(buf.readBoolean()); - } - - public static class Handler { - public static void handle(IsUsingBuildModePacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerBuildState.setIsUsingBuildMode(ctx.get().getSender(), message.isUsingBuildMode); - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/ModifierSettingsPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/ModifierSettingsPacket.java deleted file mode 100644 index 4548ca7..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/ModifierSettingsPacket.java +++ /dev/null @@ -1,57 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.EffortlessBuildingClient; - -import java.util.function.Supplier; - -/** - * Sync build modifiers between server and client, for saving and loading. - */ -public class ModifierSettingsPacket { - - private static final String DATA_KEY = EffortlessBuilding.MODID + ":buildModifiers"; - private CompoundTag modifiersTag; - - public ModifierSettingsPacket() { - } - - public ModifierSettingsPacket(CompoundTag modifiersTag) { - this.modifiersTag = modifiersTag; - } - - //Only on server - public ModifierSettingsPacket(Player player) { - this.modifiersTag = player.getPersistentData().getCompound(DATA_KEY); - } - - public static void encode(ModifierSettingsPacket message, FriendlyByteBuf buf) { - buf.writeNbt(message.modifiersTag); - } - - public static ModifierSettingsPacket decode(FriendlyByteBuf buf) { - return new ModifierSettingsPacket(buf.readNbt()); - } - - public static class Handler { - public static void handle(ModifierSettingsPacket message, Supplier ctx) { - if (ctx.get().getDirection().getReceptionSide().isServer()) { - ctx.get().enqueueWork(() -> { - var player = ctx.get().getSender(); - //To server, save to persistent player data - player.getPersistentData().put(DATA_KEY, message.modifiersTag); - }); - } else { - ctx.get().enqueueWork(() -> { - //To client, load into system - EffortlessBuildingClient.BUILD_MODIFIERS.deserializeNBT(message.modifiersTag); - }); - } - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/PacketHandler.java b/src/main/java/nl/requios/effortlessbuilding/network/PacketHandler.java index 691efc1..389dc61 100644 --- a/src/main/java/nl/requios/effortlessbuilding/network/PacketHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/network/PacketHandler.java @@ -1,41 +1,43 @@ package nl.requios.effortlessbuilding.network; -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.network.NetworkDirection; -import net.minecraftforge.network.NetworkRegistry; -import net.minecraftforge.network.simple.SimpleChannel; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent; +import net.neoforged.neoforge.network.registration.IPayloadRegistrar; import nl.requios.effortlessbuilding.EffortlessBuilding; - -import java.util.Optional; +import nl.requios.effortlessbuilding.network.message.IsQuickReplacingPacket; +import nl.requios.effortlessbuilding.network.message.IsUsingBuildModePacket; +import nl.requios.effortlessbuilding.network.message.ModifierSettingsPacket; +import nl.requios.effortlessbuilding.network.message.PerformRedoPacket; +import nl.requios.effortlessbuilding.network.message.PerformUndoPacket; +import nl.requios.effortlessbuilding.network.message.PowerLevelPacket; +import nl.requios.effortlessbuilding.network.message.ServerBreakBlocksPacket; +import nl.requios.effortlessbuilding.network.message.ServerPlaceBlocksPacket; +import nl.requios.effortlessbuilding.network.message.TranslatedLogPacket; public class PacketHandler { - private static final String PROTOCOL_VERSION = "1"; - public static final SimpleChannel INSTANCE = NetworkRegistry.newSimpleChannel( - new ResourceLocation(EffortlessBuilding.MODID, "main"), - () -> PROTOCOL_VERSION, - PROTOCOL_VERSION::equals, - PROTOCOL_VERSION::equals - ); - private static int id = 0; + public static void setupPackets(final RegisterPayloadHandlerEvent event) { + final IPayloadRegistrar registrar = event.registrar(EffortlessBuilding.MODID); - public static void register() { - INSTANCE.registerMessage(id++, IsUsingBuildModePacket.class, IsUsingBuildModePacket::encode, IsUsingBuildModePacket::decode, - IsUsingBuildModePacket.Handler::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - INSTANCE.registerMessage(id++, IsQuickReplacingPacket.class, IsQuickReplacingPacket::encode, IsQuickReplacingPacket::decode, - IsQuickReplacingPacket.Handler::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - INSTANCE.registerMessage(id++, ServerPlaceBlocksPacket.class, ServerPlaceBlocksPacket::encode, ServerPlaceBlocksPacket::decode, - ServerPlaceBlocksPacket.Handler::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - INSTANCE.registerMessage(id++, ServerBreakBlocksPacket.class, ServerBreakBlocksPacket::encode, ServerBreakBlocksPacket::decode, - ServerBreakBlocksPacket.Handler::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - INSTANCE.registerMessage(id++, PerformUndoPacket.class, PerformUndoPacket::encode, PerformUndoPacket::decode, - PerformUndoPacket.Handler::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - INSTANCE.registerMessage(id++, PerformRedoPacket.class, PerformRedoPacket::encode, PerformRedoPacket::decode, - PerformRedoPacket.Handler::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - INSTANCE.registerMessage(id++, ModifierSettingsPacket.class, ModifierSettingsPacket::encode, ModifierSettingsPacket::decode, - ModifierSettingsPacket.Handler::handle); - INSTANCE.registerMessage(id++, PowerLevelPacket.class, PowerLevelPacket::encode, PowerLevelPacket::decode, - PowerLevelPacket.Handler::handle); + registrar.play(IsUsingBuildModePacket.ID, IsUsingBuildModePacket::new, handler -> handler + .server(IsUsingBuildModePacket.Handler::handle)); + registrar.play(IsQuickReplacingPacket.ID, IsQuickReplacingPacket::new, handler -> handler + .server(IsQuickReplacingPacket.Handler::handle)); + registrar.play(ServerPlaceBlocksPacket.ID, ServerPlaceBlocksPacket::new, handler -> handler + .server(ServerPlaceBlocksPacket.Handler::handle)); + registrar.play(ServerBreakBlocksPacket.ID, ServerBreakBlocksPacket::new, handler -> handler + .server(ServerBreakBlocksPacket.Handler::handle)); + registrar.play(PerformUndoPacket.ID, PerformUndoPacket::new, handler -> handler + .server(PerformUndoPacket.Handler::handle)); + registrar.play(PerformRedoPacket.ID, PerformRedoPacket::new, handler -> handler + .server(PerformRedoPacket.Handler::handle)); + + registrar.play(ModifierSettingsPacket.ID, ModifierSettingsPacket::new, handler -> handler + .server(ModifierSettingsPacket.ServerHandler::handleServer) + .server(ModifierSettingsPacket.ClientHandler::handleClient)); + + registrar.play(PowerLevelPacket.ID, PowerLevelPacket::new, handler -> handler + .client(PowerLevelPacket.Handler::handle)); + registrar.play(TranslatedLogPacket.ID, TranslatedLogPacket::new, handler -> handler + .client(TranslatedLogPacket.Handler::handle)); } - } diff --git a/src/main/java/nl/requios/effortlessbuilding/network/PerformRedoPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/PerformRedoPacket.java deleted file mode 100644 index f7f64bb..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/PerformRedoPacket.java +++ /dev/null @@ -1,27 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.EffortlessBuilding; - -import java.util.function.Supplier; - -public class PerformRedoPacket { - - public PerformRedoPacket() {} - - public static void encode(PerformRedoPacket message, FriendlyByteBuf buf) {} - - public static PerformRedoPacket decode(FriendlyByteBuf buf) { - return new PerformRedoPacket(); - } - - public static class Handler { - public static void handle(PerformRedoPacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - EffortlessBuilding.UNDO_REDO.redo(ctx.get().getSender()); - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/PerformUndoPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/PerformUndoPacket.java deleted file mode 100644 index cec6892..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/PerformUndoPacket.java +++ /dev/null @@ -1,27 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.EffortlessBuilding; - -import java.util.function.Supplier; - -public class PerformUndoPacket { - - public PerformUndoPacket() {} - - public static void encode(PerformUndoPacket message, FriendlyByteBuf buf) {} - - public static PerformUndoPacket decode(FriendlyByteBuf buf) { - return new PerformUndoPacket(); - } - - public static class Handler { - public static void handle(PerformUndoPacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - EffortlessBuilding.UNDO_REDO.undo(ctx.get().getSender()); - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/PowerLevelPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/PowerLevelPacket.java deleted file mode 100644 index e737c83..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/PowerLevelPacket.java +++ /dev/null @@ -1,50 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.client.Minecraft; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; - -import java.util.function.Supplier; - -/** - * Sync power level from server to client - */ -public class PowerLevelPacket { - - private int powerLevel; - - public PowerLevelPacket() { - } - - public PowerLevelPacket(int powerLevel) { - this.powerLevel = powerLevel; - } - - public static void encode(PowerLevelPacket message, FriendlyByteBuf buf) { - buf.writeInt(message.powerLevel); - } - - public static PowerLevelPacket decode(FriendlyByteBuf buf) { - return new PowerLevelPacket(buf.readInt()); - } - - public static class Handler { - public static void handle(PowerLevelPacket message, Supplier ctx) { - NetworkEvent.Context context = ctx.get(); - context.enqueueWork(() -> { - if (context.getDirection().getReceptionSide().isClient()) { - Player player = Minecraft.getInstance().player; - if (player != null) { - player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY, null) - .ifPresent(levelCap -> { - levelCap.setPowerLevel(message.powerLevel); - }); - } - } - }); - context.setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/ServerBreakBlocksPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/ServerBreakBlocksPacket.java deleted file mode 100644 index 148d86b..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/ServerBreakBlocksPacket.java +++ /dev/null @@ -1,44 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.utilities.BlockSet; - -import java.util.function.Supplier; - -/** - * Sends a message to the server to break multiple blocks - */ -public class ServerBreakBlocksPacket { - - private BlockSet blocks; - - public ServerBreakBlocksPacket() {} - - public ServerBreakBlocksPacket(BlockSet blocks) { - this.blocks = blocks; - } - - public static void encode(ServerBreakBlocksPacket message, FriendlyByteBuf buf) { - BlockSet.encode(buf, message.blocks); - } - - public static ServerBreakBlocksPacket decode(FriendlyByteBuf buf) { - ServerBreakBlocksPacket message = new ServerBreakBlocksPacket(); - message.blocks = BlockSet.decode(buf); - return message; - } - - public static class Handler { - public static void handle(ServerBreakBlocksPacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - Player player = EffortlessBuilding.proxy.getPlayerEntityFromContext(ctx); - - EffortlessBuilding.SERVER_BLOCK_PLACER.breakBlocks(player, message.blocks); - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/ServerPlaceBlocksPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/ServerPlaceBlocksPacket.java deleted file mode 100644 index 8b15afd..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/ServerPlaceBlocksPacket.java +++ /dev/null @@ -1,48 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.utilities.BlockSet; - -import java.util.function.Supplier; - -/** - * Sends a message to the server to place multiple blocks - */ -public class ServerPlaceBlocksPacket { - - private BlockSet blocks; - private long placeTime; - - public ServerPlaceBlocksPacket() {} - - public ServerPlaceBlocksPacket(BlockSet blocks, long placeTime) { - this.blocks = blocks; - this.placeTime = placeTime; - } - - public static void encode(ServerPlaceBlocksPacket message, FriendlyByteBuf buf) { - BlockSet.encode(buf, message.blocks); - buf.writeLong(message.placeTime); - } - - public static ServerPlaceBlocksPacket decode(FriendlyByteBuf buf) { - ServerPlaceBlocksPacket message = new ServerPlaceBlocksPacket(); - message.blocks = BlockSet.decode(buf); - message.placeTime = buf.readLong(); - return message; - } - - public static class Handler { - public static void handle(ServerPlaceBlocksPacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - Player player = EffortlessBuilding.proxy.getPlayerEntityFromContext(ctx); - - EffortlessBuilding.SERVER_BLOCK_PLACER.placeBlocksDelayed(player, message.blocks, message.placeTime); - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/TranslatedLogPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/TranslatedLogPacket.java deleted file mode 100644 index e22dcc5..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/TranslatedLogPacket.java +++ /dev/null @@ -1,74 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.world.entity.player.Player; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.EffortlessBuilding; - -import java.util.function.Supplier; - -/** - * Send packet to client to translate and log the containing message - */ -public class TranslatedLogPacket { - private final String prefix; - private final String translationKey; - private final String suffix; - private final boolean actionBar; - - public TranslatedLogPacket() { - prefix = ""; - translationKey = ""; - suffix = ""; - actionBar = false; - } - - public TranslatedLogPacket(String prefix, String translationKey, String suffix, boolean actionBar) { - this.prefix = prefix; - this.translationKey = translationKey; - this.suffix = suffix; - this.actionBar = actionBar; - } - - public static void encode(TranslatedLogPacket message, FriendlyByteBuf buf) { - buf.writeUtf(message.prefix); - buf.writeUtf(message.translationKey); - buf.writeUtf(message.suffix); - buf.writeBoolean(message.actionBar); - } - - public static TranslatedLogPacket decode(FriendlyByteBuf buf) { - return new TranslatedLogPacket(buf.readUtf(), buf.readUtf(), buf.readUtf(), buf.readBoolean()); - } - - public String getPrefix() { - return prefix; - } - - public String getTranslationKey() { - return translationKey; - } - - public String getSuffix() { - return suffix; - } - - public boolean isActionBar() { - return actionBar; - } - - public static class Handler { - public static void handle(TranslatedLogPacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - if (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT) { - //Received clientside - - Player player = EffortlessBuilding.proxy.getPlayerEntityFromContext(ctx); - EffortlessBuilding.logTranslate(player, message.prefix, message.translationKey, message.suffix, message.actionBar); - } - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/IsQuickReplacingPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/IsQuickReplacingPacket.java new file mode 100644 index 0000000..9d10324 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/IsQuickReplacingPacket.java @@ -0,0 +1,42 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.systems.ServerBuildState; + +public record IsQuickReplacingPacket(boolean isQuickReplacing) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "is_quick_replacing"); + + public IsQuickReplacingPacket(FriendlyByteBuf buf) { + this(buf.readBoolean()); + } + + public void write(FriendlyByteBuf buf) { + buf.writeBoolean(isQuickReplacing); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final IsQuickReplacingPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + ServerBuildState.setIsQuickReplacing(player, packet.isQuickReplacing()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.is_quick_replacing.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/IsUsingBuildModePacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/IsUsingBuildModePacket.java new file mode 100644 index 0000000..21602e3 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/IsUsingBuildModePacket.java @@ -0,0 +1,42 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.systems.ServerBuildState; + +public record IsUsingBuildModePacket(boolean isUsingBuildMode) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "is_using_build_mode"); + + public IsUsingBuildModePacket(FriendlyByteBuf buf) { + this(buf.readBoolean()); + } + + public void write(FriendlyByteBuf buf) { + buf.writeBoolean(isUsingBuildMode); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final IsUsingBuildModePacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + ServerBuildState.setIsUsingBuildMode(player, packet.isUsingBuildMode()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.is_using_build_mode.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/ModifierSettingsPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/ModifierSettingsPacket.java new file mode 100644 index 0000000..7e68cc8 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/ModifierSettingsPacket.java @@ -0,0 +1,69 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.EffortlessBuildingClient; + +/** + * Sync build modifiers between server and client, for saving and loading. + */ +public record ModifierSettingsPacket(CompoundTag modifiersTag) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "modifier_settings"); + + private static final String DATA_KEY = EffortlessBuilding.MODID + ":buildModifiers"; + + public ModifierSettingsPacket(FriendlyByteBuf buf) { + this(buf.readNbt()); + } + + public ModifierSettingsPacket(Player player) { + this(player.getPersistentData().getCompound(DATA_KEY)); + } + + public void write(FriendlyByteBuf buf) { + buf.writeNbt(modifiersTag); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class ServerHandler { + public static void handleServer(final ModifierSettingsPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + //To server, save to persistent player data + player.getPersistentData().put(DATA_KEY, packet.modifiersTag()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.modifier_settings.failed", e.getMessage())); + return null; + }); + } + } + + public static class ClientHandler { + public static void handleClient(final ModifierSettingsPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + //To client, load into system + EffortlessBuildingClient.BUILD_MODIFIERS.deserializeNBT(packet.modifiersTag()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.modifier_settings.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/PerformRedoPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/PerformRedoPacket.java new file mode 100644 index 0000000..730fd0a --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/PerformRedoPacket.java @@ -0,0 +1,40 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; + +public record PerformRedoPacket() implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "perform_redo"); + + public PerformRedoPacket(FriendlyByteBuf buf) { + this(); + } + + public void write(FriendlyByteBuf buf) { + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final PerformRedoPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + EffortlessBuilding.UNDO_REDO.redo(player); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.perform_undo.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/PerformUndoPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/PerformUndoPacket.java new file mode 100644 index 0000000..ab5d0f1 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/PerformUndoPacket.java @@ -0,0 +1,39 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; + +public record PerformUndoPacket() implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "perform_undo"); + + public PerformUndoPacket(FriendlyByteBuf buf) { + this(); + } + + public void write(FriendlyByteBuf buf) {} + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final PerformUndoPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + EffortlessBuilding.UNDO_REDO.undo(player); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.perform_undo.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/PowerLevelPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/PowerLevelPacket.java new file mode 100644 index 0000000..efe51e1 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/PowerLevelPacket.java @@ -0,0 +1,47 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.attachment.PowerLevel; + +/** + * Sync power level from server to client + */ +public record PowerLevelPacket(int powerLevel) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "power_level"); + + public PowerLevelPacket(FriendlyByteBuf buf) { + this(buf.readInt()); + } + + public void write(FriendlyByteBuf buf) { + buf.writeInt(powerLevel); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final PowerLevelPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + PowerLevel currentLevel = player.getData(EffortlessBuilding.POWER_LEVEL.get()); + currentLevel.setPowerLevel(packet.powerLevel); + player.setData(EffortlessBuilding.POWER_LEVEL.get(), currentLevel); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.power_level.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/ServerBreakBlocksPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/ServerBreakBlocksPacket.java new file mode 100644 index 0000000..23a03ce --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/ServerBreakBlocksPacket.java @@ -0,0 +1,45 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.utilities.BlockSet; + +/** + * Sends a message to the server to break multiple blocks + */ +public record ServerBreakBlocksPacket(BlockSet blocks) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "server_break_blocks"); + + public ServerBreakBlocksPacket(FriendlyByteBuf buf) { + this(BlockSet.decode(buf)); + } + + public void write(FriendlyByteBuf buf) { + BlockSet.encode(buf, blocks); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final ServerBreakBlocksPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + EffortlessBuilding.SERVER_BLOCK_PLACER.breakBlocks(player, packet.blocks()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.server_break_blocks.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/ServerPlaceBlocksPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/ServerPlaceBlocksPacket.java new file mode 100644 index 0000000..63c01bb --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/ServerPlaceBlocksPacket.java @@ -0,0 +1,47 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.utilities.BlockSet; + +/** + * Sends a message to the server to place multiple blocks + */ +public record ServerPlaceBlocksPacket(BlockSet blocks, long placeTime) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "server_place_blocks"); + + public ServerPlaceBlocksPacket(FriendlyByteBuf buf) { + this(BlockSet.decode(buf), buf.readLong()); + } + + public void write(FriendlyByteBuf buf) { + BlockSet.encode(buf, blocks); + buf.writeLong(placeTime); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final ServerPlaceBlocksPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + EffortlessBuilding.logger.info("Place block packet received from client. Placing blocks..."); + EffortlessBuilding.SERVER_BLOCK_PLACER.placeBlocksDelayed(player, packet.blocks(), packet.placeTime()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.server_place_blocks.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/TranslatedLogPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/TranslatedLogPacket.java new file mode 100644 index 0000000..fee5e0e --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/TranslatedLogPacket.java @@ -0,0 +1,70 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; + +/** + * Send packet to client to translate and log the containing message + */ +public record TranslatedLogPacket(String prefix, String translationKey, String suffix, boolean actionBar) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "translated_log"); + + public TranslatedLogPacket(FriendlyByteBuf buf) { + this(buf.readUtf(), buf.readUtf(), buf.readUtf(), buf.readBoolean()); + } + + public TranslatedLogPacket(String prefix, String translationKey, String suffix, boolean actionBar) { + this.prefix = prefix; + this.translationKey = translationKey; + this.suffix = suffix; + this.actionBar = actionBar; + } + + public void write(FriendlyByteBuf buf) { + buf.writeUtf(prefix); + buf.writeUtf(translationKey); + buf.writeUtf(suffix); + buf.writeBoolean(actionBar); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public String getPrefix() { + return prefix; + } + + public String getTranslationKey() { + return translationKey; + } + + public String getSuffix() { + return suffix; + } + + public boolean isActionBar() { + return actionBar; + } + + public static class Handler { + public static void handle(final TranslatedLogPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + EffortlessBuilding.logTranslate(player, packet.prefix(), packet.translationKey(), packet.suffix(), packet.actionBar()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.translated_log.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java index 4047301..c1c3a06 100644 --- a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java +++ b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java @@ -3,21 +3,13 @@ package nl.requios.effortlessbuilding.proxy; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.language.I18n; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.network.NetworkEvent; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.EffortlessBuilding; -import java.util.function.Supplier; - @OnlyIn(Dist.CLIENT) public class ClientProxy implements IProxy { - public Player getPlayerEntityFromContext(Supplier ctx) { - return (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT ? Minecraft.getInstance().player : ctx.get().getSender()); - } - public void logTranslate(Player player, String prefix, String translationKey, String suffix, boolean actionBar) { EffortlessBuilding.log(Minecraft.getInstance().player, prefix + I18n.get(translationKey) + suffix, actionBar); } diff --git a/src/main/java/nl/requios/effortlessbuilding/proxy/IProxy.java b/src/main/java/nl/requios/effortlessbuilding/proxy/IProxy.java index 189e1ff..a2e8650 100644 --- a/src/main/java/nl/requios/effortlessbuilding/proxy/IProxy.java +++ b/src/main/java/nl/requios/effortlessbuilding/proxy/IProxy.java @@ -1,12 +1,7 @@ package nl.requios.effortlessbuilding.proxy; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; public interface IProxy { - Player getPlayerEntityFromContext(Supplier ctx); - void logTranslate(Player player, String prefix, String translationKey, String suffix, boolean actionBar); } diff --git a/src/main/java/nl/requios/effortlessbuilding/proxy/ServerProxy.java b/src/main/java/nl/requios/effortlessbuilding/proxy/ServerProxy.java index be21683..6948c41 100644 --- a/src/main/java/nl/requios/effortlessbuilding/proxy/ServerProxy.java +++ b/src/main/java/nl/requios/effortlessbuilding/proxy/ServerProxy.java @@ -2,21 +2,12 @@ package nl.requios.effortlessbuilding.proxy; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; -import net.minecraftforge.network.PacketDistributor; -import nl.requios.effortlessbuilding.network.PacketHandler; -import nl.requios.effortlessbuilding.network.TranslatedLogPacket; - -import java.util.function.Supplier; +import nl.requios.effortlessbuilding.network.message.TranslatedLogPacket; public class ServerProxy implements IProxy { //Only physical server! Singleplayer server is seen as clientproxy - public Player getPlayerEntityFromContext(Supplier ctx) { - return ctx.get().getSender(); - } - public void logTranslate(Player player, String prefix, String translationKey, String suffix, boolean actionBar) { - PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new TranslatedLogPacket(prefix, translationKey, suffix, actionBar)); + ((ServerPlayer)player).connection.send(new TranslatedLogPacket(prefix, translationKey, suffix, actionBar)); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviews.java b/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviews.java index d285500..b094649 100644 --- a/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviews.java +++ b/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviews.java @@ -6,8 +6,8 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.Mth; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -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 nl.requios.effortlessbuilding.*; import nl.requios.effortlessbuilding.buildmode.BuildModeEnum; import nl.requios.effortlessbuilding.create.AllSpecialTextures; diff --git a/src/main/java/nl/requios/effortlessbuilding/render/ModifierRenderer.java b/src/main/java/nl/requios/effortlessbuilding/render/ModifierRenderer.java index aba1a09..7a7f9e2 100644 --- a/src/main/java/nl/requios/effortlessbuilding/render/ModifierRenderer.java +++ b/src/main/java/nl/requios/effortlessbuilding/render/ModifierRenderer.java @@ -4,8 +4,8 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.renderer.MultiBufferSource.BufferSource; import net.minecraft.world.phys.Vec3; -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 nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.buildmodifier.BaseModifier; import nl.requios.effortlessbuilding.buildmodifier.Mirror; diff --git a/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java b/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java index f9944b1..36ddd6a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java @@ -13,18 +13,18 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RenderGuiEvent; -import net.minecraftforge.client.event.RenderLevelStageEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.neoforge.client.event.RenderGuiEvent; +import net.neoforged.neoforge.client.event.RenderLevelStageEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; import nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.systems.BuilderChain; /*** * Main render class for Effortless Building */ -@EventBusSubscriber(Dist.CLIENT) +@Mod.EventBusSubscriber(Dist.CLIENT) public class RenderHandler { @SubscribeEvent @@ -48,7 +48,7 @@ public class RenderHandler { } @SubscribeEvent - public static void onRenderGuiEvent(RenderGuiEvent event) { + public static void onRenderGuiEvent(RenderGuiEvent.Post event) { renderSubText(event.getGuiGraphics()); drawStacks(event.getGuiGraphics()); diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/BuildSettings.java b/src/main/java/nl/requios/effortlessbuilding/systems/BuildSettings.java index f6bec8f..ebbb462 100644 --- a/src/main/java/nl/requios/effortlessbuilding/systems/BuildSettings.java +++ b/src/main/java/nl/requios/effortlessbuilding/systems/BuildSettings.java @@ -1,12 +1,12 @@ package nl.requios.effortlessbuilding.systems; import net.minecraft.client.Minecraft; -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 net.neoforged.neoforge.network.PacketDistributor; import nl.requios.effortlessbuilding.buildmode.ModeOptions; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.network.IsQuickReplacingPacket; -import nl.requios.effortlessbuilding.network.PacketHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; +import nl.requios.effortlessbuilding.network.message.IsQuickReplacingPacket; @OnlyIn(Dist.CLIENT) public class BuildSettings { @@ -26,7 +26,7 @@ public class BuildSettings { public void setReplaceMode(ReplaceMode replaceMode) { this.replaceMode = replaceMode; - PacketHandler.INSTANCE.sendToServer(new IsQuickReplacingPacket(isQuickReplacing())); + PacketDistributor.SERVER.noArg().send(new IsQuickReplacingPacket(isQuickReplacing())); } public ReplaceMode getReplaceMode() { @@ -68,6 +68,6 @@ public class BuildSettings { } private boolean canReplaceBlocks(){ - return Minecraft.getInstance().player != null && CapabilityHandler.canReplaceBlocks(Minecraft.getInstance().player); + return Minecraft.getInstance().player != null && AttachmentHandler.canReplaceBlocks(Minecraft.getInstance().player); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/BuilderChain.java b/src/main/java/nl/requios/effortlessbuilding/systems/BuilderChain.java index ed253ee..7fef9ba 100644 --- a/src/main/java/nl/requios/effortlessbuilding/systems/BuilderChain.java +++ b/src/main/java/nl/requios/effortlessbuilding/systems/BuilderChain.java @@ -15,19 +15,22 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -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 net.neoforged.neoforge.network.PacketDistributor; import nl.requios.effortlessbuilding.ClientConfig; import nl.requios.effortlessbuilding.ClientEvents; import nl.requios.effortlessbuilding.EffortlessBuildingClient; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.buildmode.BuildModeEnum; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem; -import nl.requios.effortlessbuilding.network.PacketHandler; -import nl.requios.effortlessbuilding.network.ServerBreakBlocksPacket; -import nl.requios.effortlessbuilding.network.ServerPlaceBlocksPacket; -import nl.requios.effortlessbuilding.utilities.*; +import nl.requios.effortlessbuilding.network.message.ServerBreakBlocksPacket; +import nl.requios.effortlessbuilding.network.message.ServerPlaceBlocksPacket; +import nl.requios.effortlessbuilding.utilities.BlockEntry; +import nl.requios.effortlessbuilding.utilities.BlockSet; +import nl.requios.effortlessbuilding.utilities.ClientBlockUtilities; +import nl.requios.effortlessbuilding.utilities.SurvivalHelper; import java.util.HashSet; @@ -91,7 +94,7 @@ public class BuilderChain { blocks.skipFirst = buildMode == BuildModeEnum.DISABLED; long placeTime = player.level().getGameTime(); if (blocks.size() > 1) placeTime += ClientConfig.visuals.appearAnimationLength.get(); - PacketHandler.INSTANCE.sendToServer(new ServerPlaceBlocksPacket(blocks, placeTime)); + PacketDistributor.SERVER.noArg().send(new ServerPlaceBlocksPacket(blocks, placeTime)); } } } @@ -105,7 +108,7 @@ public class BuilderChain { var player = Minecraft.getInstance().player; if (player == null) return; - if (!CapabilityHandler.canBreakFar(player)) return; + if (!AttachmentHandler.canBreakFar(player)) return; if (buildingState == BuildingState.IDLE){ buildingState = BuildingState.BREAKING; @@ -129,7 +132,7 @@ public class BuilderChain { ClientBlockUtilities.playSoundIfFurtherThanNormal(player, blocks.getLastBlockEntry(), true); player.swing(InteractionHand.MAIN_HAND); blocks.skipFirst = buildMode == BuildModeEnum.DISABLED; - PacketHandler.INSTANCE.sendToServer(new ServerBreakBlocksPacket(blocks)); + PacketDistributor.SERVER.noArg().send(new ServerBreakBlocksPacket(blocks)); } } } @@ -210,7 +213,7 @@ public class BuilderChain { private BlockEntry findStartPosition(Player player, BuildModeEnum buildMode) { - int maxReach = CapabilityHandler.getPlacementReach(player, false); + int maxReach = AttachmentHandler.getPlacementReach(player, false); //Determine if we should look far or nearby boolean shouldLookAtNear = buildMode == BuildModeEnum.DISABLED || maxReach < 3; @@ -243,7 +246,7 @@ public class BuilderChain { //We can only break //Do not break far if we are not allowed to - if (!shouldLookAtNear && !CapabilityHandler.canBreakFar(player)) return null; + if (!shouldLookAtNear && !AttachmentHandler.canBreakFar(player)) return null; } var blockEntry = new BlockEntry(startPos); diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/BuilderFilter.java b/src/main/java/nl/requios/effortlessbuilding/systems/BuilderFilter.java index 3fa06d5..a7a7321 100644 --- a/src/main/java/nl/requios/effortlessbuilding/systems/BuilderFilter.java +++ b/src/main/java/nl/requios/effortlessbuilding/systems/BuilderFilter.java @@ -1,8 +1,8 @@ package nl.requios.effortlessbuilding.systems; import net.minecraft.world.entity.player.Player; -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 nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.utilities.BlockEntry; diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/ServerBuildState.java b/src/main/java/nl/requios/effortlessbuilding/systems/ServerBuildState.java index 8d44dab..8b21be6 100644 --- a/src/main/java/nl/requios/effortlessbuilding/systems/ServerBuildState.java +++ b/src/main/java/nl/requios/effortlessbuilding/systems/ServerBuildState.java @@ -2,7 +2,7 @@ package nl.requios.effortlessbuilding.systems; import net.minecraft.world.entity.player.Player; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; public class ServerBuildState { private static final String IS_USING_BUILD_MODE_KEY = EffortlessBuilding.MODID + ":isUsingBuildMode"; @@ -26,7 +26,7 @@ public class ServerBuildState { } public static boolean isQuickReplacing(Player player) { - if (!CapabilityHandler.canReplaceBlocks(player)) return false; + if (!AttachmentHandler.canReplaceBlocks(player)) return false; return player.getPersistentData().contains(IS_QUICK_REPLACING_KEY); } diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/UndoRedo.java b/src/main/java/nl/requios/effortlessbuilding/systems/UndoRedo.java index 24eac41..db1f71a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/systems/UndoRedo.java +++ b/src/main/java/nl/requios/effortlessbuilding/systems/UndoRedo.java @@ -8,7 +8,7 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; -import net.minecraftforge.common.util.BlockSnapshot; +import net.neoforged.neoforge.common.util.BlockSnapshot; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.ServerConfig; import nl.requios.effortlessbuilding.utilities.*; diff --git a/src/main/java/nl/requios/effortlessbuilding/utilities/BlockPlacerHelper.java b/src/main/java/nl/requios/effortlessbuilding/utilities/BlockPlacerHelper.java index 8b108b8..4ee18dd 100644 --- a/src/main/java/nl/requios/effortlessbuilding/utilities/BlockPlacerHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/BlockPlacerHelper.java @@ -7,9 +7,9 @@ import net.minecraft.world.item.DiggerItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.common.util.BlockSnapshot; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.items.ItemHandlerHelper; +import net.neoforged.neoforge.common.util.BlockSnapshot; +import net.neoforged.neoforge.event.EventHooks; +import net.neoforged.neoforge.items.ItemHandlerHelper; import nl.requios.effortlessbuilding.create.foundation.utility.BlockHelper; import java.util.List; @@ -54,11 +54,11 @@ public class BlockPlacerHelper { boolean eventResult = false; if (blockSnapshots.size() > 1) { - eventResult = ForgeEventFactory.onMultiBlockPlace(player, blockSnapshots, side); + eventResult = EventHooks.onMultiBlockPlace(player, blockSnapshots, side); } else if (blockSnapshots.size() == 1) { - eventResult = ForgeEventFactory.onBlockPlace(player, blockSnapshots.get(0), side); + eventResult = EventHooks.onBlockPlace(player, blockSnapshots.get(0), side); } if (eventResult) diff --git a/src/main/java/nl/requios/effortlessbuilding/utilities/BlockSet.java b/src/main/java/nl/requios/effortlessbuilding/utilities/BlockSet.java index 4f7a560..aff3fd1 100644 --- a/src/main/java/nl/requios/effortlessbuilding/utilities/BlockSet.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/BlockSet.java @@ -2,11 +2,11 @@ package nl.requios.effortlessbuilding.utilities; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.DistExecutor; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.fml.loading.FMLEnvironment; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import org.jetbrains.annotations.NotNull; import java.util.HashMap; @@ -53,13 +53,17 @@ public class BlockSet extends HashMap implements Iterable< public void add(BlockEntry blockEntry) { if (!containsKey(blockEntry.blockPos)) { //check if we are clientside - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { + if(FMLEnvironment.dist.isClient()) { if (!ClientSide.isFull(this)) put(blockEntry.blockPos, blockEntry); - }); - DistExecutor.unsafeRunWhenOn(Dist.DEDICATED_SERVER, () -> () -> { + } else { put(blockEntry.blockPos, blockEntry); - }); + } +// DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { +// +// }); +// DistExecutor.unsafeRunWhenOn(Dist.DEDICATED_SERVER, () -> () -> { +// }); } else { if (logging) EffortlessBuilding.log("BlockSet already contains block at " + blockEntry.blockPos); } @@ -102,7 +106,7 @@ public class BlockSet extends HashMap implements Iterable< public static class ClientSide { public static boolean isFull(BlockSet blockSet) { //Limit number of blocks you can place - int limit = CapabilityHandler.getMaxBlocksPlacedAtOnce(net.minecraft.client.Minecraft.getInstance().player, false); + int limit = AttachmentHandler.getMaxBlocksPlacedAtOnce(net.minecraft.client.Minecraft.getInstance().player, false); if (blockSet.size() >= limit) { if (logging) EffortlessBuilding.log("BlockSet limit reached, not adding block."); return true; diff --git a/src/main/java/nl/requios/effortlessbuilding/utilities/ClientBlockUtilities.java b/src/main/java/nl/requios/effortlessbuilding/utilities/ClientBlockUtilities.java index b5d0bf7..f4d32a4 100644 --- a/src/main/java/nl/requios/effortlessbuilding/utilities/ClientBlockUtilities.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/ClientBlockUtilities.java @@ -10,9 +10,9 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; @OnlyIn(Dist.CLIENT) public class ClientBlockUtilities { @@ -52,7 +52,7 @@ public class ClientBlockUtilities { Level world = player.level(); //base distance off of player ability (config) - float raytraceRange = CapabilityHandler.getPlacementReach(player, false); + float raytraceRange = AttachmentHandler.getPlacementReach(player, false); Vec3 look = player.getLookAngle(); Vec3 start = new Vec3(player.getX(), player.getY() + player.getEyeHeight(), player.getZ()); diff --git a/src/main/java/nl/requios/effortlessbuilding/utilities/PlaceChecker.java b/src/main/java/nl/requios/effortlessbuilding/utilities/PlaceChecker.java index 2e9dfc9..00cbe5e 100644 --- a/src/main/java/nl/requios/effortlessbuilding/utilities/PlaceChecker.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/PlaceChecker.java @@ -9,8 +9,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BedPart; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; -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 nl.requios.effortlessbuilding.EffortlessBuildingClient; @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/nl/requios/effortlessbuilding/utilities/PowerLevelCommand.java b/src/main/java/nl/requios/effortlessbuilding/utilities/PowerLevelCommand.java index ffe07d8..9e298a5 100644 --- a/src/main/java/nl/requios/effortlessbuilding/utilities/PowerLevelCommand.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/PowerLevelCommand.java @@ -9,12 +9,10 @@ import net.minecraft.commands.arguments.EntityArgument; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.PacketDistributor; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.capability.IPowerLevel; -import nl.requios.effortlessbuilding.capability.PowerLevelCapability; -import nl.requios.effortlessbuilding.network.PacketHandler; -import nl.requios.effortlessbuilding.network.PowerLevelPacket; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; +import nl.requios.effortlessbuilding.attachment.PowerLevel; +import nl.requios.effortlessbuilding.network.message.PowerLevelPacket; public class PowerLevelCommand { @@ -37,7 +35,7 @@ public class PowerLevelCommand { }))) .then(Commands.literal("set") .then(Commands.argument("target", EntityArgument.player()) - .then(Commands.argument("value", IntegerArgumentType.integer(0, PowerLevelCapability.MAX_POWER_LEVEL)).executes(ctx -> { + .then(Commands.argument("value", IntegerArgumentType.integer(0, PowerLevel.MAX_POWER_LEVEL)).executes(ctx -> { //Set power level setPowerLevel(ctx.getSource(), EntityArgument.getPlayer(ctx, "target"), ctx.getArgument("value", Integer.class)); @@ -47,15 +45,14 @@ public class PowerLevelCommand { } private static void logPowerLevel(CommandSourceStack source, Player player) { - int powerLevel = CapabilityHandler.getPowerLevel(player); + int powerLevel = AttachmentHandler.getPowerLevel(player); source.sendSuccess(() -> Component.translatable("effortlessbuilding.commands.powerlevel", player.getDisplayName(), powerLevel), false); } private static void setPowerLevel(CommandSourceStack source, Player player, int powerLevel) throws CommandSyntaxException { - IPowerLevel powerCap = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); - if (powerCap == null) return; //Should never be null but just to be sure + PowerLevel powerCap = player.getData(EffortlessBuilding.POWER_LEVEL); powerCap.setPowerLevel(powerLevel); - PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new PowerLevelPacket(powerLevel)); + ((ServerPlayer)player).connection.send(new PowerLevelPacket(powerLevel)); source.sendSuccess(() -> Component.translatable("effortlessbuilding.commands.powerlevel.success", player.getDisplayName(), powerLevel), true); } diff --git a/src/main/java/nl/requios/effortlessbuilding/utilities/SurvivalHelper.java b/src/main/java/nl/requios/effortlessbuilding/utilities/SurvivalHelper.java index 6bfb9bc..172d47d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/utilities/SurvivalHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/SurvivalHelper.java @@ -8,7 +8,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.SlabBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.event.ForgeEventFactory; +import net.neoforged.neoforge.event.EventHooks; import nl.requios.effortlessbuilding.compatibility.CompatHelper; public class SurvivalHelper { @@ -21,7 +21,7 @@ public class SurvivalHelper { if (player.isCreative()) return true; - return ForgeEventFactory.doPlayerHarvestCheck(player, blockState, true); + return EventHooks.doPlayerHarvestCheck(player, blockState, true); } public static boolean doesBecomeDoubleSlab(Player player, BlockPos pos) { diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 3b3cd51..04b0964 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,49 +1,49 @@ -public net.minecraft.client.gui.components.AbstractSelectionList f_93398_ # renderHeader -public net.minecraft.client.gui.Font m_92803_(Ljava/lang/String;FFILcom/mojang/math/Matrix4f;ZZ)I # renderString -public net.minecraft.world.inventory.MenuType m_39988_(Ljava/lang/String;Lnet/minecraft/world/inventory/MenuType$MenuSupplier;)Lnet/minecraft/world/inventory/MenuType; # register +public net.minecraft.client.gui.components.AbstractSelectionList renderHeader # renderHeader +public net.minecraft.client.gui.Font renderString(Ljava/lang/String;FFILcom/mojang/math/Matrix4f;ZZ)I # renderString +public net.minecraft.world.inventory.MenuType register(Ljava/lang/String;Lnet/minecraft/world/inventory/MenuType$MenuSupplier;)Lnet/minecraft/world/inventory/MenuType; # register #create -public net.minecraft.client.Minecraft f_91013_ # pausePartialTick -public net.minecraft.client.gui.Font m_92863_(Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/gui/font/FontSet; # getFontSet -public net.minecraft.client.gui.screens.TitleScreen f_96729_ # panorama -public net.minecraft.client.multiplayer.ClientPacketListener f_104897_ # serverChunkRadius -protected net.minecraft.client.particle.Particle f_107205_ # stoppedByCollision -public net.minecraft.client.renderer.ItemInHandRenderer f_109300_ # mainHandItem -public net.minecraft.client.renderer.ItemInHandRenderer f_109301_ # offHandItem -public net.minecraft.client.renderer.entity.ItemRenderer f_115096_ # textureManager -public net.minecraft.world.entity.Entity f_19853_ # level -public-f net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket f_132663_ # flyingSpeed +public net.minecraft.client.Minecraft pausePartialTick # pausePartialTick +public net.minecraft.client.gui.Font getFontSet(Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/gui/font/FontSet; # getFontSet +public net.minecraft.client.gui.screens.TitleScreen panorama # panorama +public net.minecraft.client.multiplayer.ClientPacketListener serverChunkRadius # serverChunkRadius +protected net.minecraft.client.particle.Particle stoppedByCollision # stoppedByCollision +public net.minecraft.client.renderer.ItemInHandRenderer mainHandItem # mainHandItem +public net.minecraft.client.renderer.ItemInHandRenderer offHandItem # offHandItem +public net.minecraft.client.renderer.entity.ItemRenderer textureManager # textureManager +public net.minecraft.world.entity.Entity level # level +public-f net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket flyingSpeed # flyingSpeed -public net.minecraft.server.MinecraftServer f_129744_ # storageSource -public net.minecraft.server.network.ServerGamePacketListenerImpl f_9737_ # aboveGroundTickCount -public net.minecraft.server.network.ServerGamePacketListenerImpl f_9739_ # aboveGroundVehicleTickCount +public net.minecraft.server.MinecraftServer storageSource # storageSource +public net.minecraft.server.network.ServerGamePacketListenerImpl aboveGroundTickCount # aboveGroundTickCount +public net.minecraft.server.network.ServerGamePacketListenerImpl aboveGroundVehicleTickCount # aboveGroundVehicleTickCount -public net.minecraft.world.entity.Entity f_146795_ # removalReason -protected net.minecraft.world.entity.Entity m_19956_(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity$MoveFunction;)V # positionRider -public net.minecraft.world.entity.LivingEntity f_20899_ # jumping +public net.minecraft.world.entity.Entity removalReason # removalReason +protected net.minecraft.world.entity.Entity positionRider(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity$MoveFunction;)V # positionRider +public net.minecraft.world.entity.LivingEntity jumping # jumping -public-f net.minecraft.world.item.HoneycombItem f_150863_ # WAXABLES -public net.minecraft.world.item.alchemy.PotionBrewing f_43494_ # POTION_MIXES -public net.minecraft.world.item.alchemy.PotionBrewing f_43495_ # CONTAINER_MIXES -public net.minecraft.world.item.alchemy.PotionBrewing f_43497_ # ALLOWED_CONTAINER -public net.minecraft.world.item.crafting.Ingredient f_43902_ # values -public net.minecraft.world.item.crafting.RecipeManager f_44007_ # recipes +public-f net.minecraft.world.item.HoneycombItem WAXABLES # WAXABLES +public net.minecraft.world.item.alchemy.PotionBrewing POTION_MIXES # POTION_MIXES +public net.minecraft.world.item.alchemy.PotionBrewing CONTAINER_MIXES # CONTAINER_MIXES +public net.minecraft.world.item.alchemy.PotionBrewing ALLOWED_CONTAINER # ALLOWED_CONTAINER +public net.minecraft.world.item.crafting.Ingredient values # values +public net.minecraft.world.item.crafting.RecipeManager recipes # recipes -public net.minecraft.world.level.BaseSpawner f_45443_ # spawnPotentials -public net.minecraft.world.level.BaseSpawner f_45444_ # nextSpawnData -public net.minecraft.world.level.biome.BiomeManager f_47863_ # biomeZoomSeed -public net.minecraft.world.level.block.entity.BeaconBlockEntity f_58648_ # beamSections -public net.minecraft.world.level.chunk.HashMapPalette f_62658_ # values +public net.minecraft.world.level.BaseSpawner spawnPotentials # spawnPotentials +public net.minecraft.world.level.BaseSpawner nextSpawnData # nextSpawnData +public net.minecraft.world.level.biome.BiomeManager biomeZoomSeed # biomeZoomSeed +public net.minecraft.world.level.block.entity.BeaconBlockEntity beamSections # beamSections +public net.minecraft.world.level.chunk.HashMapPalette values # values public net.minecraft.world.level.chunk.PaletteResize -public net.minecraft.client.model.geom.ModelPart f_104212_ # cubes -public net.minecraft.client.model.geom.ModelPart f_104213_ # children -public net.minecraft.client.model.AgeableListModel f_102007_ # scaleHead -public net.minecraft.client.model.AgeableListModel f_170338_ # babyYHeadOffset -public net.minecraft.client.model.AgeableListModel f_170339_ # babyZHeadOffset -public net.minecraft.client.model.AgeableListModel f_102010_ # babyHeadScale -public net.minecraft.client.model.AgeableListModel f_102011_ # babyBodyScale -public net.minecraft.client.model.AgeableListModel f_102012_ # bodyYOffset +public net.minecraft.client.model.geom.ModelPart cubes # cubes +public net.minecraft.client.model.geom.ModelPart children # children +public net.minecraft.client.model.AgeableListModel scaleHead # scaleHead +public net.minecraft.client.model.AgeableListModel babyYHeadOffset # babyYHeadOffset +public net.minecraft.client.model.AgeableListModel babyZHeadOffset # babyZHeadOffset +public net.minecraft.client.model.AgeableListModel babyHeadScale # babyHeadScale +public net.minecraft.client.model.AgeableListModel babyBodyScale # babyBodyScale +public net.minecraft.client.model.AgeableListModel bodyYOffset # bodyYOffset -public net.minecraft.client.gui.components.CommandSuggestions f_93866_ # suggestions +public net.minecraft.client.gui.components.CommandSuggestions suggestions # suggestions public net.minecraft.client.gui.components.CommandSuggestions$SuggestionsList (Lnet/minecraft/client/gui/components/CommandSuggestions;IIILjava/util/List;Z)V # \ No newline at end of file diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 4afac51..9cd6234 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader="javafml" -loaderVersion="[47,)" +loaderVersion="[2,)" license="GNU LESSER GENERAL PUBLIC LICENSE" issueTrackerURL="https://bitbucket.org/Requios/effortless-building/issues?status=new&status=open&status=submitted&is_spam=%21spam" showAsResourcePack=false @@ -17,22 +17,25 @@ Makes building easier by providing tools like mirrors, arrays, build modes and a ''' [[dependencies.effortlessbuilding]] - modId="forge" - mandatory=true - versionRange="[47.1.3,)" + modId="neoforge" + type="required" + versionRange="[20.4.167,)" ordering="NONE" side="BOTH" [[dependencies.effortlessbuilding]] modId="minecraft" - mandatory=true - versionRange="[1.20,1.21)" + type="required" + versionRange="[1.20.4,1.21)" ordering="NONE" side="BOTH" [[dependencies.effortlessbuilding]] modId="flywheel" - mandatory=true + type="required" versionRange="[0.6.10,0.7)" ordering="AFTER" - side="CLIENT" \ No newline at end of file + side="CLIENT" + +#[[accessTransformers]] +# file="META-INF/accesstransformer.cfg" \ No newline at end of file diff --git a/src/main/resources/assets/effortlessbuilding/lang/en_us.json b/src/main/resources/assets/effortlessbuilding/lang/en_us.json index 94ddf2b..8d6640d 100644 --- a/src/main/resources/assets/effortlessbuilding/lang/en_us.json +++ b/src/main/resources/assets/effortlessbuilding/lang/en_us.json @@ -117,5 +117,15 @@ "effortlessbuilding.tooltip.keybind": "[%1$s]", "effortlessbuilding.commands.powerlevel": "[Effortless Building] %s's Building Power Level is: %s", - "effortlessbuilding.commands.powerlevel.success": "[Effortless Building] Set %s's Building Power Level to: %s" + "effortlessbuilding.commands.powerlevel.success": "[Effortless Building] Set %s's Building Power Level to: %s", + + "effortlessbuilding.networking.is_using_build_mode.failed": "Failed to set player build mode: %s", + "effortlessbuilding.networking.is_quick_replacing.failed": "Failed to set player quick replacing: %s", + "effortlessbuilding.networking.server_place_blocks.failed": "Failed to place blocks on the server: %s", + "effortlessbuilding.networking.server_break_blocks.failed": "Failed to break blocks on the server: %s", + "effortlessbuilding.networking.perform_undo.failed": "Failed to perform undo on the server: %s", + "effortlessbuilding.networking.perform_redo.failed": "Failed to perform redo on the server: %s", + "effortlessbuilding.networking.modifier_settings.failed": "Failed to set modifier settings: %s", + "effortlessbuilding.networking.power_level.failed": "Failed to set player power level: %s", + "effortlessbuilding.networking.translated_log.failed": "Failed to log a translated message: %s" } diff --git a/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_library_loot_modifier.json b/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_library_loot_modifier.json index 692cadc..fea4634 100644 --- a/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_library_loot_modifier.json +++ b/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_library_loot_modifier.json @@ -2,7 +2,7 @@ "type": "effortlessbuilding:single_item_loot_modifier", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_library" } ], diff --git a/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_loot_modifier.json b/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_loot_modifier.json index af02842..069c792 100644 --- a/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_loot_modifier.json +++ b/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_loot_modifier.json @@ -5,83 +5,83 @@ "condition": "minecraft:any_of", "terms": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/abandoned_mineshaft" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ancient_city" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_bridge" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_other" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/buried_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/desert_pyramid" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/end_city_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/igloo_chest" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/jungle_temple" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/nether_bridge" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/pillager_outpost" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ruined_portal" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_supply" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/simple_dungeon" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_corridor" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_crossing" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_library" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/woodland_mansion" } ] diff --git a/src/main/resources/data/effortlessbuilding/loot_modifiers/elastic_hand_loot_modifier.json b/src/main/resources/data/effortlessbuilding/loot_modifiers/elastic_hand_loot_modifier.json index 3c750db..bd04684 100644 --- a/src/main/resources/data/effortlessbuilding/loot_modifiers/elastic_hand_loot_modifier.json +++ b/src/main/resources/data/effortlessbuilding/loot_modifiers/elastic_hand_loot_modifier.json @@ -5,83 +5,83 @@ "condition": "minecraft:any_of", "terms": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/abandoned_mineshaft" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ancient_city" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_bridge" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_other" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/buried_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/desert_pyramid" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/end_city_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/igloo_chest" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/jungle_temple" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/nether_bridge" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/pillager_outpost" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ruined_portal" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_supply" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/simple_dungeon" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_corridor" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_crossing" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_library" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/woodland_mansion" } ] diff --git a/src/main/resources/data/effortlessbuilding/loot_modifiers/muscles_loot_modifier.json b/src/main/resources/data/effortlessbuilding/loot_modifiers/muscles_loot_modifier.json index 0d95130..b5256ee 100644 --- a/src/main/resources/data/effortlessbuilding/loot_modifiers/muscles_loot_modifier.json +++ b/src/main/resources/data/effortlessbuilding/loot_modifiers/muscles_loot_modifier.json @@ -5,83 +5,83 @@ "condition": "minecraft:any_of", "terms": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/abandoned_mineshaft" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ancient_city" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_bridge" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_other" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/buried_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/desert_pyramid" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/end_city_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/igloo_chest" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/jungle_temple" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/nether_bridge" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/pillager_outpost" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ruined_portal" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_supply" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/simple_dungeon" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_corridor" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_crossing" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_library" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/woodland_mansion" } ] diff --git a/src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json b/src/main/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json similarity index 100% rename from src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json rename to src/main/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json