diff --git a/README.md b/README.md index 6f0ba3b2..c5af804a 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,33 @@ Mod for Minecraft that adds Worker Villagers. https://www.curseforge.com/minecraft/mc-mods/workers +## NeoForge 1.21.1 build + +Requirements: + +- Java 21 +- NeoForge 21.1.219 +- A built Recruits 1.21.1 development checkout + +By default, the build uses: + +```text +../recruits-neoforge-1.21.1/build/libs/recruits-1.21.1-1.15.0-all.jar +``` + +Build Recruits first, then run: + +```bash +./gradlew clean build +``` + +To use a Recruits jar in another location: + +```bash +./gradlew clean build -Precruits_jar=/absolute/path/to/recruits-1.21.1-1.15.0-all.jar +``` + +The distributable Workers artifact is the `-all.jar` file in `build/libs`. +It contains the relocated CoreLib classes and still requires Recruits 1.21.1. + All Rights Reserved unless otherwise explicitly stated. diff --git a/build.gradle b/build.gradle index 64e7169c..7684c159 100644 --- a/build.gradle +++ b/build.gradle @@ -1,25 +1,9 @@ -buildscript { - repositories { - maven { url = 'https://maven.minecraftforge.net' } - maven { url = 'https://repo.spongepowered.org/maven' } - jcenter() - mavenCentral() - } - dependencies { - classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '6.+', changing: true - classpath group: 'org.spongepowered', name: 'mixingradle', version: '0.7-SNAPSHOT' - } -} -// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. - plugins { - id "com.matthewprenger.cursegradle" version "1.4.0" - id "com.github.johnrengelman.shadow" version "7.1.0" + id 'net.neoforged.moddev' version '2.0.107' + id 'com.gradleup.shadow' version '8.3.10' } -apply plugin: 'net.minecraftforge.gradle' + apply plugin: 'idea' -apply plugin: 'com.github.johnrengelman.shadow' -apply plugin: 'org.spongepowered.mixin' idea { module { @@ -28,124 +12,88 @@ idea { } } -mixin{ - add sourceSets.main, 'mixins.workers.refmap.json' - config 'mixins.workers.json' +version = mod_version +group = mod_group_id +archivesBaseName = "workers-${minecraft_version}" - disableTargetValidator = true - overwriteErrorLevel = 'error' -} - -version = '2.0.3' - -group = 'com.talhanation.workers' -archivesBaseName = 'workers-1.20.1' +java.toolchain.languageVersion = JavaLanguageVersion.of(21) +tasks.withType(JavaCompile).configureEach { + options.compilerArgs.addAll(['-Xmaxerrs', '1000']) +} +sourceSets.main.resources { + srcDir 'src/generated/resources' + srcDir 'src/main/templates' +} -java.toolchain.languageVersion = JavaLanguageVersion.of(17) +def workersRunDirectory = findProperty('workers_run_dir') ?: 'run' -minecraft { - mappings channel: 'official', version: '1.20.1' - accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Currently, this location cannot be changed from the default. +neoForge { + version = neo_version + accessTransformers = files('src/main/resources/META-INF/accesstransformer.cfg') runs { - client { - workingDirectory project.file('run') - - property 'forge.logging.markers', 'REGISTRIES' - property 'forge.logging.console.level', 'debug' - - property 'forge.enabledGameTestNamespaces', 'workers' - - Random rnd = new Random() - - args = ['--username', 'talhanation'] - //args = ['--username', 'ezgination'] + configureEach { + logLevel = org.slf4j.event.Level.INFO + systemProperty 'neoforge.enabledGameTestNamespaces', mod_id + } - mods { - 'workers' { - source sourceSets.main - } - } + client { + client() + gameDirectory = project.file(workersRunDirectory) + programArgument '--username' + programArgument 'talhanation' } server { - workingDirectory project.file('run') - property 'forge.logging.markers', 'REGISTRIES' - property 'forge.logging.console.level', 'debug' - property 'forge.enabledGameTestNamespaces', 'workers' - - - mods { - 'workers' { - source sourceSets.main - } - } + server() + gameDirectory = project.file(workersRunDirectory) + programArgument 'nogui' } data { - workingDirectory project.file('run') - property 'forge.logging.markers', 'REGISTRIES' - property 'forge.logging.console.level', 'debug' - - // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. - args '--mod', 'workers', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') - - mods { - 'workers' { - source sourceSets.main - } - } + data() + gameDirectory = project.file(workersRunDirectory) + programArguments.addAll '--mod', mod_id, '--all', + '--output', file('src/generated/resources/').absolutePath, + '--existing', file('src/main/resources/').absolutePath } } -} - -sourceSets.main.resources { srcDir 'src/generated/resources' } + mods { + workers { + sourceSet sourceSets.main + } + } +} repositories { maven { - name = "henkelmax.public" + name = 'henkelmax.public' url = 'https://maven.maxhenkel.de/repository/public' } - mavenLocal() maven { - - url "https://www.cursemaven.com" + name = 'NeoForge' + url = 'https://maven.neoforged.net/releases' } } -dependencies { - minecraft 'net.minecraftforge:forge:1.20.1-47.4.1' - shadow fg.deobf("de.maxhenkel.corelib:corelib:1.20.1-1.1.3:api") - runtimeOnly fg.deobf("de.maxhenkel.corelib:corelib:1.20.1-1.1.3") - runtimeOnly fg.deobf("de.maxhenkel.corelib:corelib:1.20.1-1.1.3:javadoc") - - annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' - - implementation fg.deobf("curse.maven:recruits-523860:8253342") - - implementation fg.deobf("curse.maven:dynamictrees-252818:8227003") - implementation fg.deobf("curse.maven:architectury-api-419699:5137938") - implementation fg.deobf("curse.maven:lets-do-herbal-brews-951221:6458889") - implementation fg.deobf("curse.maven:supplementaries-412082:6615104") - implementation fg.deobf("curse.maven:selene-499980:6681465") - - //implementation fg.deobf("curse.maven:small-ships-450659:5324996") - - implementation fg.deobf("curse.maven:farmers-delight-398521:8083474") - implementation fg.deobf("curse.maven:worldedit-225608:4586218") - +def recruitsJar = file(recruits_jar) +if (!recruitsJar.exists()) { + throw new GradleException( + "Recruits 1.21.1 dependency not found at ${recruitsJar}. " + + "Build ../recruits-neoforge-1.21.1 first." + ) } -// Example for how to get properties into the manifest for reading at runtime. -jar { +dependencies { + shadow "de.maxhenkel.corelib:corelib:${corelib_version}:api" + runtimeOnly "de.maxhenkel.corelib:corelib:${corelib_version}" + implementation files(recruitsJar) } -jar.finalizedBy('reobfJar') - artifacts { archives shadowJar } @@ -153,10 +101,25 @@ artifacts { shadowJar { project.configurations.shadow.setTransitive(true) configurations = [project.configurations.shadow] - //classifier = "" - relocate 'de.maxhenkel.corelib', "de.maxhenkel.workers.corelib" + relocate 'de.maxhenkel.corelib', 'de.maxhenkel.workers.corelib' } -reobf { - shadowJar {} +tasks.named('processResources') { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + def replaceProperties = [ + minecraft_version_range: minecraft_version_range, + neo_version_range : neo_version_range, + loader_version_range : loader_version_range, + mod_id : mod_id, + mod_name : mod_name, + mod_license : mod_license, + mod_version : mod_version, + mod_authors : mod_authors, + mod_description : mod_description, + recruits_version_range : recruits_version_range + ] + inputs.properties replaceProperties + filesMatching('META-INF/neoforge.mods.toml') { + expand replaceProperties + } } diff --git a/gradle.properties b/gradle.properties index 91727be0..f555d8ad 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,59 +1,20 @@ -# Sets default memory used for gradle commands. Can be overridden by user or command line properties. -# This is required to provide enough memory for the Minecraft decompilation process. org.gradle.jvmargs=-Xmx4G org.gradle.daemon=false +minecraft_version=1.21.1 +minecraft_version_range=[1.21.1,1.22) +neo_version=21.1.219 +neo_version_range=[21.1,) +loader_version_range=[4,) -## Environment Properties - -# The Minecraft version must agree with the Forge version to get a valid artifact -minecraft_version=1.20.1 -# The Minecraft version range can use any release version of Minecraft as bounds. -# Snapshots, pre-releases, and release candidates are not guaranteed to sort properly -# as they do not follow standard versioning conventions. -minecraft_version_range=[1.20.1,1.21) -# The Forge version must agree with the Minecraft version to get a valid artifact -forge_version=47.1.0 -# The Forge version range can use any version of Forge as bounds or match the loader version range -forge_version_range=[47,) -# The loader version range can only use the major version of Forge/FML as bounds -loader_version_range=[47,) -# The mapping channel to use for mappings. -# The default set of supported mapping channels are ["official", "snapshot", "snapshot_nodoc", "stable", "stable_nodoc"]. -# Additional mapping channels can be registered through the "channelProviders" extension in a Gradle plugin. -# -# | Channel | Version | | -# |-----------|----------------------|--------------------------------------------------------------------------------| -# | official | MCVersion | Official field/method names from Mojang mapping files | -# | parchment | YYYY.MM.DD-MCVersion | Open community-sourced parameter names and javadocs layered on top of official | -# -# You must be aware of the Mojang license when using the 'official' or 'parchment' mappings. -# See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md -# -# Parchment is an unofficial project maintained by ParchmentMC, separate from Minecraft Forge. -# Additional setup is needed to use their mappings, see https://parchmentmc.org/docs/getting-started -mapping_channel=official -# The mapping version to query from the mapping channel. -# This must match the format required by the mapping channel. -mapping_version=1.20.1 - - -## Mod Properties - -# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63} -# Must match the String constant located in the main mod class annotated with @Mod. -mod_id=examplemod -# The human-readable display name for the mod. -mod_name=Example Mod -# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. +mod_id=workers +mod_name=Villager Workers Mod mod_license=All Rights Reserved -# The mod version. See https://semver.org/ -mod_version=1.0.0 -# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. -# This should match the base package used for the mod sources. -# See https://maven.apache.org/guides/mini/guide-naming-conventions.html -mod_group_id=com.example.examplemod -# The authors of the mod. This is a simple text string that is used for display purposes in the mod list. -mod_authors=YourNameHere, OtherNameHere -# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list. -mod_description=Example mod description.\nNewline characters can be used and will be replaced properly. \ No newline at end of file +mod_version=2.0.3 +mod_group_id=com.talhanation.workers +mod_authors=talhanation +mod_description=Adds hireable Villager Workers into Minecraft. + +corelib_version=1.21.1-2.1.11 +recruits_version_range=[1.15.0,) +recruits_jar=../recruits-neoforge-1.21.1/build/libs/recruits-1.21.1-1.15.0-all.jar diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cbf..c1962a79 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 37aef8d3..2617362f 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.8-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle b/settings.gradle index 93f1b806..3bd96814 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,13 +1,18 @@ pluginManagement { repositories { gradlePluginPortal() + mavenCentral() maven { name = 'MinecraftForge' url = 'https://maven.minecraftforge.net/' } + maven { + name = 'NeoForge' + url = 'https://maven.neoforged.net/releases' + } } } plugins { id 'org.gradle.toolchains.foojay-resolver-convention' version '0.7.0' -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/AttributeEvent.java b/src/main/java/com/talhanation/workers/AttributeEvent.java index a3480d75..318e7aa0 100644 --- a/src/main/java/com/talhanation/workers/AttributeEvent.java +++ b/src/main/java/com/talhanation/workers/AttributeEvent.java @@ -2,11 +2,11 @@ import com.talhanation.workers.entities.*; import com.talhanation.workers.init.ModEntityTypes; -import net.minecraftforge.event.entity.EntityAttributeCreationEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; -@Mod.EventBusSubscriber(modid = WorkersMain.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) +@EventBusSubscriber(modid = WorkersMain.MOD_ID) public class AttributeEvent { @SubscribeEvent @@ -21,4 +21,4 @@ public static void entityAttributeEvent(final EntityAttributeCreationEvent event event.put(ModEntityTypes.COURIER.get(), AnimalFarmerEntity.setAttributes().build()); event.put(ModEntityTypes.COOK.get(), CookEntity.setAttributes().build()); } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/UpdateChecker.java b/src/main/java/com/talhanation/workers/UpdateChecker.java index e69c6394..901b0f43 100644 --- a/src/main/java/com/talhanation/workers/UpdateChecker.java +++ b/src/main/java/com/talhanation/workers/UpdateChecker.java @@ -6,11 +6,11 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.event.server.ServerStartedEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.VersionChecker; +import net.neoforged.neoforge.event.entity.player.PlayerEvent; +import net.neoforged.neoforge.event.server.ServerStartedEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.ModList; +import net.neoforged.fml.VersionChecker; public class UpdateChecker { diff --git a/src/main/java/com/talhanation/workers/VillagerEvents.java b/src/main/java/com/talhanation/workers/VillagerEvents.java index e400e491..a38f477e 100644 --- a/src/main/java/com/talhanation/workers/VillagerEvents.java +++ b/src/main/java/com/talhanation/workers/VillagerEvents.java @@ -33,16 +33,15 @@ import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.event.ClientPlayerNetworkEvent; -import net.minecraftforge.event.entity.EntityJoinLevelEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.event.server.ServerStartedEvent; -import net.minecraftforge.event.server.ServerStoppingEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.network.PacketDistributor; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent; +import net.neoforged.neoforge.event.entity.EntityJoinLevelEvent; +import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; +import net.neoforged.neoforge.event.server.ServerStartedEvent; +import net.neoforged.neoforge.event.server.ServerStoppingEvent; +import net.neoforged.bus.api.SubscribeEvent; +import com.talhanation.workers.network.compat.WorkersPacketDistributor; import java.util.List; import java.util.UUID; @@ -72,7 +71,7 @@ public void onPlayerJoinWorld(EntityJoinLevelEvent event) { if(event.getLevel().isClientSide()) return; if(event.getEntity() instanceof ServerPlayer player){ - WorkersMain.SIMPLE_CHANNEL.send(PacketDistributor.PLAYER.with(() -> player), + WorkersMain.SIMPLE_CHANNEL.send(WorkersPacketDistributor.PLAYER.with(() -> player), new MessageToClientUpdateConfig( WorkersServerConfig.ShouldWorkAreaOnlyBeInFactionClaim.get(), WorkersServerConfig.ShouldOnlyPlacingBuildingsBePossible.get(), @@ -148,7 +147,7 @@ public void onAnimalJoinWorld(EntityJoinLevelEvent event) { } if (entity instanceof Chicken chicken) { - chicken.goalSelector.addGoal(3, new WorkerTemptGoal(chicken,1.0, Chicken.FOOD_ITEMS)); + chicken.goalSelector.addGoal(3, new WorkerTemptGoal(chicken, 1.0, Ingredient.of(net.minecraft.tags.ItemTags.CHICKEN_FOOD))); } else if(entity instanceof Cow cow) { cow.goalSelector.addGoal(3, new WorkerTemptGoal(cow,1.0, Ingredient.of(Items.WHEAT))); @@ -157,7 +156,7 @@ else if(entity instanceof Sheep sheep) { sheep.goalSelector.addGoal(3, new WorkerTemptGoal(sheep,1.0, Ingredient.of(Items.WHEAT))); } else if(entity instanceof Pig pig) { - pig.goalSelector.addGoal(3, new WorkerTemptGoal(pig,1.0, Pig.FOOD_ITEMS)); + pig.goalSelector.addGoal(3, new WorkerTemptGoal(pig, 1.0, Ingredient.of(net.minecraft.tags.ItemTags.PIG_FOOD))); } else if(entity instanceof Villager villager) { villager.goalSelector.addGoal(4, new VillagerRespondToInvitationGoal(villager)); @@ -172,7 +171,7 @@ else if(entity instanceof Allay allay){ } private void createWorkerFromAllay(Allay allay) { - List>> types = ModEntityTypes.WORKER_TYPES.getEntries().stream().toList(); + var types = new java.util.ArrayList<>(ModEntityTypes.WORKER_TYPES.getEntries()); int rnd = allay.getRandom().nextInt(types.size() -1); var type = types.get(rnd).get().create(allay.getCommandSenderWorld()); @@ -190,15 +189,22 @@ private void createWorkerFromAllay(Allay allay) { } @SubscribeEvent - public void onRightClickBlock(PlayerInteractEvent event) { - if (event.getLevel() == null || event.getEntity() == null) return; + public void onRightClickBlock(PlayerInteractEvent.RightClickBlock event) { + handleBlockInteraction(event); + } - if(!(event instanceof PlayerInteractEvent.RightClickBlock) && !(event instanceof PlayerInteractEvent.LeftClickBlock)) { - return; - } + @SubscribeEvent + public void onLeftClickBlock(PlayerInteractEvent.LeftClickBlock event) { + handleBlockInteraction(event); + } + + private void handleBlockInteraction(PlayerInteractEvent event) { + if (event.getLevel() == null || event.getEntity() == null) return; if(disableInteractionInPermissionArea(event.getEntity(), event.getLevel(), event.getPos())){ - event.setCanceled(true); + if (event instanceof net.neoforged.bus.api.ICancellableEvent cancellable) { + cancellable.setCanceled(true); + } } } @@ -228,4 +234,4 @@ public static boolean disableInteractionInPermissionArea(Player player, Level le return !isOwner && !isTeamMate && !isAdmin; } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/WorkerClaimEvents.java b/src/main/java/com/talhanation/workers/WorkerClaimEvents.java index 0e43523e..bc40606d 100644 --- a/src/main/java/com/talhanation/workers/WorkerClaimEvents.java +++ b/src/main/java/com/talhanation/workers/WorkerClaimEvents.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; import net.minecraft.world.scores.PlayerTeam; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.neoforged.bus.api.SubscribeEvent; import javax.annotation.Nullable; import java.util.List; diff --git a/src/main/java/com/talhanation/workers/WorkersMain.java b/src/main/java/com/talhanation/workers/WorkersMain.java index f9dc17a6..dac1e08b 100644 --- a/src/main/java/com/talhanation/workers/WorkersMain.java +++ b/src/main/java/com/talhanation/workers/WorkersMain.java @@ -4,89 +4,77 @@ import com.talhanation.workers.client.events.ScreenEvents; import com.talhanation.workers.client.gui.WorkerCommandScreen; import com.talhanation.workers.config.WorkersServerConfig; -import com.talhanation.workers.network.*; -import com.talhanation.workers.network.MessageUpdateKitchenArea; -import net.minecraft.world.item.CreativeModeTabs; -import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.event.server.ServerStartingEvent; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.config.ModConfig; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - import com.talhanation.workers.init.ModBlocks; import com.talhanation.workers.init.ModEntityTypes; import com.talhanation.workers.init.ModItems; import com.talhanation.workers.init.ModMenuTypes; import com.talhanation.workers.init.ModPois; import com.talhanation.workers.init.ModProfessions; -import com.talhanation.workers.init.ModShortcuts; - -import de.maxhenkel.corelib.CommonRegistry; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.network.simple.SimpleChannel; +import com.talhanation.workers.network.*; +import com.talhanation.workers.network.compat.WorkersChannel; import com.talhanation.workers.world.StructureManager; +import de.maxhenkel.corelib.CommonRegistry; +import net.minecraft.world.item.CreativeModeTabs; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.IConfigSpec; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.neoforged.neoforge.event.server.ServerStartingEvent; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; @Mod(WorkersMain.MOD_ID) public class WorkersMain { public static final String MOD_ID = "workers"; public static final Logger LOGGER = LogManager.getLogger(MOD_ID); - public static SimpleChannel SIMPLE_CHANNEL; + public static final WorkersChannel SIMPLE_CHANNEL = new WorkersChannel(); public static boolean isDynamicTreesInstalled; public static boolean isFarmersDelightInstalled; - public WorkersMain() { - ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, WorkersServerConfig.SERVER); + public WorkersMain(IEventBus modEventBus, Dist dist, ModContainer modContainer) { + modContainer.registerConfig(ModConfig.Type.SERVER, (IConfigSpec) WorkersServerConfig.SERVER); - final IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBus.addListener(this::setup); + modEventBus.addListener(this::registerPayloads); ModBlocks.BLOCKS.register(modEventBus); ModPois.POIS.register(modEventBus); ModProfessions.PROFESSIONS.register(modEventBus); ModMenuTypes.MENU_TYPES.register(modEventBus); - // ModSounds.SOUNDS.register(modEventBus); ModItems.ITEMS.register(modEventBus); ModEntityTypes.ENTITY_TYPES.register(modEventBus); ModEntityTypes.WORKER_TYPES.register(modEventBus); + modEventBus.addListener(this::addCreativeTabs); - FMLJavaModLoadingContext.get().getModEventBus().addListener(this::addCreativeTabs); - - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - FMLJavaModLoadingContext.get().getModEventBus().addListener(WorkersMain.this::clientSetup); - }); - - MinecraftForge.EVENT_BUS.register(this); - - - //Compat - ModList modList = ModList.get(); + if (dist == Dist.CLIENT) { + modEventBus.addListener(this::clientSetup); + } - isDynamicTreesInstalled = modList.isLoaded("dynamictrees"); - isFarmersDelightInstalled = modList.isLoaded("farmersdelight"); + NeoForge.EVENT_BUS.register(this); } @SubscribeEvent public void onRegisterCommands(RegisterCommandsEvent event) { - //MerchantResetCommand.register(event.getDispatcher()); + // MerchantResetCommand.register(event.getDispatcher()); } @SubscribeEvent public void onServerStarting(ServerStartingEvent event) { if (WorkersServerConfig.BuildModeConfig.get() == com.talhanation.workers.config.BuildMode.PRESET_FACTIONS) { java.io.File factionsDir = event.getServer().getServerDirectory() - .toPath().resolve("workers").resolve("scan").resolve("factions").toFile(); + .resolve("workers").resolve("scan").resolve("factions").toFile(); if (!factionsDir.exists()) { factionsDir.mkdirs(); LOGGER.info("[Workers] Created factions scan folder: {}", factionsDir.getAbsolutePath()); @@ -94,17 +82,19 @@ public void onServerStarting(ServerStartingEvent event) { } } - - @SuppressWarnings({"unchecked", "rawtypes"}) private void setup(final FMLCommonSetupEvent event) { - MinecraftForge.EVENT_BUS.register(new VillagerEvents()); - MinecraftForge.EVENT_BUS.register(new CommandEvents()); - MinecraftForge.EVENT_BUS.register(new WorkerClaimEvents()); - MinecraftForge.EVENT_BUS.register(this); - MinecraftForge.EVENT_BUS.register(new UpdateChecker()); + NeoForge.EVENT_BUS.register(new VillagerEvents()); + NeoForge.EVENT_BUS.register(new WorkerClaimEvents()); + NeoForge.EVENT_BUS.register(new UpdateChecker()); - SIMPLE_CHANNEL = CommonRegistry.registerChannel(WorkersMain.MOD_ID, "default"); + ModList modList = ModList.get(); + isDynamicTreesInstalled = modList.isLoaded("dynamictrees"); + isFarmersDelightInstalled = modList.isLoaded("farmersdelight"); + } + @SuppressWarnings({"unchecked", "rawtypes"}) + private void registerPayloads(RegisterPayloadHandlersEvent event) { + PayloadRegistrar registrar = event.registrar(MOD_ID); Class[] messages = { MessageAddWorkArea.class, MessageToClientOpenWorkAreaScreen.class, @@ -135,16 +125,17 @@ private void setup(final FMLCommonSetupEvent event) { MessageUpdateHomeArea.class, MessageOpenMerchantVillagerTradeScreen.class }; - for (int i = 0; i < messages.length; i++) CommonRegistry.registerMessage(SIMPLE_CHANNEL, i, messages[i]); + for (Class message : messages) { + CommonRegistry.registerMessage(registrar, message); + } } - @SubscribeEvent @OnlyIn(Dist.CLIENT) public void clientSetup(FMLClientSetupEvent event) { event.enqueueWork(ModMenuTypes::registerMenus); event.enqueueWork(StructureManager::copyDefaultStructuresIfMissing); CommandCategoryManager.register(new WorkerCommandScreen()); - MinecraftForge.EVENT_BUS.register(new ScreenEvents()); + NeoForge.EVENT_BUS.register(new ScreenEvents()); } private void addCreativeTabs(BuildCreativeModeTabContentsEvent event) { @@ -160,4 +151,4 @@ private void addCreativeTabs(BuildCreativeModeTabContentsEvent event) { event.accept(ModItems.COOK_SPAWN_EGG.get()); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/client/events/ClientEvent.java b/src/main/java/com/talhanation/workers/client/events/ClientEvent.java index da7ecf1a..619a53dc 100644 --- a/src/main/java/com/talhanation/workers/client/events/ClientEvent.java +++ b/src/main/java/com/talhanation/workers/client/events/ClientEvent.java @@ -8,13 +8,13 @@ import com.talhanation.workers.init.ModEntityTypes; import com.talhanation.workers.client.render.WorkerHumanRenderer; import net.minecraft.client.renderer.entity.EntityRenderers; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.event.EntityRenderersEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.client.event.EntityRenderersEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; -@Mod.EventBusSubscriber(modid = WorkersMain.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD , value = Dist.CLIENT) +@EventBusSubscriber(modid = WorkersMain.MOD_ID, value = Dist.CLIENT) public class ClientEvent { @SubscribeEvent @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/talhanation/workers/client/events/ScreenEvents.java b/src/main/java/com/talhanation/workers/client/events/ScreenEvents.java index cdd0a506..f54bd52e 100644 --- a/src/main/java/com/talhanation/workers/client/events/ScreenEvents.java +++ b/src/main/java/com/talhanation/workers/client/events/ScreenEvents.java @@ -18,12 +18,12 @@ import net.minecraft.world.entity.player.Player; 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.minecraftforge.client.event.RenderLevelStageEvent; -import net.minecraftforge.client.event.ScreenEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.client.event.RenderLevelStageEvent; +import net.neoforged.neoforge.client.event.ScreenEvent; +import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; +import net.neoforged.bus.api.SubscribeEvent; import java.util.List; import java.util.UUID; diff --git a/src/main/java/com/talhanation/workers/client/gui/AnimalPenAreaScreen.java b/src/main/java/com/talhanation/workers/client/gui/AnimalPenAreaScreen.java index abf1c0bc..36abf2ce 100644 --- a/src/main/java/com/talhanation/workers/client/gui/AnimalPenAreaScreen.java +++ b/src/main/java/com/talhanation/workers/client/gui/AnimalPenAreaScreen.java @@ -14,7 +14,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.gui.widget.ExtendedButton; +import net.neoforged.neoforge.client.gui.widget.ExtendedButton; import java.util.ArrayList; import java.util.Arrays; @@ -202,9 +202,9 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { return super.mouseClicked(mouseX, mouseY, button); } @Override - public boolean mouseScrolled(double x, double y, double d) { - if(animalTypesScrollDropDownMenu != null) animalTypesScrollDropDownMenu.mouseScrolled(x,y,d); - return super.mouseScrolled(x, y, d); + public boolean mouseScrolled(double x, double y, double horizontalAmount, double d) { + if(animalTypesScrollDropDownMenu != null) animalTypesScrollDropDownMenu.mouseScrolled(x, y, horizontalAmount, d); + return super.mouseScrolled(x, y, horizontalAmount, d); } @Override public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { diff --git a/src/main/java/com/talhanation/workers/client/gui/BuildAreaScreen.java b/src/main/java/com/talhanation/workers/client/gui/BuildAreaScreen.java index b41ce0a8..386cfab3 100644 --- a/src/main/java/com/talhanation/workers/client/gui/BuildAreaScreen.java +++ b/src/main/java/com/talhanation/workers/client/gui/BuildAreaScreen.java @@ -27,7 +27,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import net.minecraftforge.client.gui.widget.ExtendedButton; +import net.neoforged.neoforge.client.gui.widget.ExtendedButton; import java.nio.file.Path; import java.util.ArrayList; @@ -102,7 +102,6 @@ protected void init() { @Override public void tick() { super.tick(); - if (scanNameEditBox != null && scanNameEditBox.isFocused()) scanNameEditBox.tick(); } @Override @@ -471,11 +470,11 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { } @Override - public boolean mouseScrolled(double x, double y, double d) { - if (structureOptions != null && structureOptions.isMouseOver(x, y)) structureOptions.mouseScrolled(x, y, d); + public boolean mouseScrolled(double x, double y, double horizontalAmount, double d) { + if (structureOptions != null && structureOptions.isMouseOver(x, y)) structureOptions.mouseScrolled(x, y, horizontalAmount, d); if (requiredItemsDropDownMenu != null && requiredItemsDropDownMenu.isMouseOver(x, y)) - requiredItemsDropDownMenu.mouseScrolled(x, y, d); - return super.mouseScrolled(x, y, d); + requiredItemsDropDownMenu.mouseScrolled(x, y, horizontalAmount, d); + return super.mouseScrolled(x, y, horizontalAmount, d); } @Override @@ -504,4 +503,4 @@ public enum Mode { SCAN, LOAD } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/client/gui/CourierScreen.java b/src/main/java/com/talhanation/workers/client/gui/CourierScreen.java index 2956e071..630136de 100644 --- a/src/main/java/com/talhanation/workers/client/gui/CourierScreen.java +++ b/src/main/java/com/talhanation/workers/client/gui/CourierScreen.java @@ -1,11 +1,10 @@ package com.talhanation.workers.client.gui; import com.mojang.blaze3d.systems.RenderSystem; +import com.talhanation.recruits.client.ClientManager; import com.talhanation.recruits.client.gui.worldmap.WorldMapScreen; import com.talhanation.recruits.client.gui.widgets.ScrollDropDownMenu; import com.talhanation.recruits.client.gui.widgets.RecruitsCheckBox; -import com.talhanation.recruits.client.gui.worldmap.route.RouteNamePopup; -import com.talhanation.recruits.client.gui.worldmap.storage.WorldMapStorageId; import com.talhanation.recruits.world.RecruitsRoute; import com.talhanation.workers.WorkersMain; import com.talhanation.workers.entities.CourierEntity; @@ -28,21 +27,22 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.gui.widget.ExtendedButton; +import net.neoforged.neoforge.client.gui.widget.ExtendedButton; import javax.annotation.Nullable; -import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import static net.minecraft.client.gui.components.AbstractWidget.WIDGETS_LOCATION; public class CourierScreen extends ScreenBase { private static final ResourceLocation TEXTURE = - new ResourceLocation(WorkersMain.MOD_ID, "textures/gui/courier.png"); + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "textures/gui/courier.png"); + private static final ResourceLocation BUTTON_TEXTURE = + ResourceLocation.withDefaultNamespace("widget/button"); + private static final ResourceLocation BUTTON_HIGHLIGHTED_TEXTURE = + ResourceLocation.withDefaultNamespace("widget/button_highlighted"); private static final int IMG_W = 256; private static final int IMG_H = 197; @@ -163,23 +163,17 @@ protected void init() { loadWorkingDataFromEntity(); buildWidgets(); } - public static File getRoutesDirectory() { - return new File(Minecraft.getInstance().gameDirectory, "recruits/routes/" + WorldMapStorageId.detectCurrent()); - } private void loadAvailableRoutes() { availableRoutes.clear(); - try { - availableRoutes.addAll(RecruitsRoute.loadAllRoutes(getRoutesDirectory())); - availableRoutes.sort((a, b) -> a.getName().compareToIgnoreCase(b.getName())); - } catch (IOException e) { - WorkersMain.LOGGER.warn("Could not load courier routes: {}", e.getMessage()); - } + ClientManager.loadRoutes(); + availableRoutes.addAll(ClientManager.getRoutesList()); + availableRoutes.sort((a, b) -> a.getName().compareToIgnoreCase(b.getName())); } private void loadWorkingDataFromEntity() { var routeData = courierEntity.getRouteData(); if (routeData.getBoolean("hasRoute") && routeData.contains("route")) - workingRoute = CourierRoute.fromNBT(routeData.getCompound("route")); + workingRoute = CourierRoute.fromNBT(courierEntity.registryAccess(), routeData.getCompound("route")); if (workingRoute != null && workingRoute.getRouteId() != null) { var id = workingRoute.getRouteId(); @@ -287,10 +281,7 @@ private void buildWidgets() { waypointList = new WaypointList( minecraft, WP_W, WP_H, listTop, listBottom, WP_ITEM_H, WP_W); - waypointList.setLeftPos(listLeft); - waypointList.setRenderBackground(false); - waypointList.setRenderTopAndBottom(false); - waypointList.setRenderSelection(false); + waypointList.setX(listLeft); addRenderableWidget(waypointList); if (workingRoute != null) { @@ -469,7 +460,7 @@ private void onWaypointSelected(int index) { private void applyChanges(boolean start) { if (workingRoute == null) return; WorkersMain.SIMPLE_CHANNEL.sendToServer( - new MessageCourierSetRoute(courierEntity.getUUID(), workingRoute, useVehicleInventory, shouldCycle, start)); + new MessageCourierSetRoute(courierEntity.getUUID(), workingRoute, courierEntity.registryAccess(), useVehicleInventory, shouldCycle, start)); } /** Auto-save on close (ESC, map button, etc.). */ @@ -764,13 +755,13 @@ public void mouseMoved(double mx, double my) { } @Override - public boolean mouseScrolled(double mx, double my, double delta) { + public boolean mouseScrolled(double mx, double my, double horizontalAmount, double delta) { // Action dropdowns get priority — isMouseOver() returns true for the expanded list // only when the dropdown is open, so this naturally lets open dropdowns consume scroll. for (var dropDownMenu : actionTypeDropDowns) - if (dropDownMenu.isMouseOver(mx, my)) return dropDownMenu.mouseScrolled(mx, my, delta); + if (dropDownMenu.isMouseOver(mx, my)) return dropDownMenu.mouseScrolled(mx, my, horizontalAmount, delta); for (var dropDownMenu : sourceTypeDropDowns) - if (dropDownMenu.isMouseOver(mx, my)) return dropDownMenu.mouseScrolled(mx, my, delta); + if (dropDownMenu.isMouseOver(mx, my)) return dropDownMenu.mouseScrolled(mx, my, horizontalAmount, delta); // Action area row scroll (only reached when no action dropdown is open over it) if (workingRoute != null && selectedWaypointIndex >= 0 @@ -785,10 +776,10 @@ public boolean mouseScrolled(double mx, double my, double delta) { } } if (routeDropDown != null && routeDropDown.isMouseOver(mx, my)) - return routeDropDown.mouseScrolled(mx, my, delta); + return routeDropDown.mouseScrolled(mx, my, horizontalAmount, delta); if (waypointList != null && waypointList.isMouseOver(mx, my)) - return waypointList.mouseScrolled(mx, my, delta); - return super.mouseScrolled(mx, my, delta); + return waypointList.mouseScrolled(mx, my, horizontalAmount, delta); + return super.mouseScrolled(mx, my, horizontalAmount, delta); } @Override @@ -825,7 +816,7 @@ public boolean mouseReleased(double mx, double my, int button) { private class WaypointList extends ObjectSelectionList { WaypointList(Minecraft mc, int width, int height, int top, int bottom, int itemHeight, int itemWidth) { - super(mc, width, height, top, bottom, itemHeight); + super(mc, width, height, top, itemHeight); } @Override protected int addEntry(WaypointEntry e) { return super.addEntry(e); } @@ -855,12 +846,14 @@ class WaypointEntry extends ObjectSelectionList.Entry { @Override public void render(GuiGraphics g, int index, int top, int left, int entryW, int entryH, int mouseX, int mouseY, boolean hovered, float partial) { boolean selected = (WaypointList.this.getSelected() == this); - int textureY = (selected || hovered) ? 86 : 66; - RenderSystem.enableBlend(); - g.blitNineSliced(WIDGETS_LOCATION, left, top, - WaypointList.this.getRowWidth(), entryH, - 20, 4, 200, 20, 0, textureY); + g.blitSprite( + selected || hovered ? BUTTON_HIGHLIGHTED_TEXTURE : BUTTON_TEXTURE, + left, + top, + WaypointList.this.getRowWidth(), + entryH + ); // Show only the action count; show waypoint name as hover tooltip int actionCount = 0; @@ -895,4 +888,4 @@ public boolean mouseClicked(double x, double y, int button) { @Override public Component getNarration() { return Component.empty(); } } } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/client/gui/CropAreaScreen.java b/src/main/java/com/talhanation/workers/client/gui/CropAreaScreen.java index a56532b7..472b8d3c 100644 --- a/src/main/java/com/talhanation/workers/client/gui/CropAreaScreen.java +++ b/src/main/java/com/talhanation/workers/client/gui/CropAreaScreen.java @@ -8,6 +8,7 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.core.component.DataComponents; import net.minecraft.util.FastColor; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; @@ -53,7 +54,7 @@ public void setButtons() { seedItemSelectionDropDownMenu.setBgFillSelected(FastColor.ARGB32.color(255, 139, 139, 139)); if (currentSeeds.isEmpty()) { - currentSeeds.setHoverName(TEXT_SELECT_SEED); + currentSeeds.set(DataComponents.CUSTOM_NAME, TEXT_SELECT_SEED); } addRenderableWidget(seedItemSelectionDropDownMenu); @@ -108,9 +109,9 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { return super.mouseClicked(mouseX, mouseY, button); } @Override - public boolean mouseScrolled(double x, double y, double d) { - if(seedItemSelectionDropDownMenu != null) seedItemSelectionDropDownMenu.mouseScrolled(x,y,d); - return super.mouseScrolled(x, y, d); + public boolean mouseScrolled(double x, double y, double horizontalAmount, double d) { + if(seedItemSelectionDropDownMenu != null) seedItemSelectionDropDownMenu.mouseScrolled(x, y, horizontalAmount, d); + return super.mouseScrolled(x, y, horizontalAmount, d); } @Override public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { @@ -120,4 +121,4 @@ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partia seedItemSelectionDropDownMenu.renderWidget(guiGraphics, mouseX, mouseY, partialTicks); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/client/gui/HomeAreaScreen.java b/src/main/java/com/talhanation/workers/client/gui/HomeAreaScreen.java index d907cf21..c2d1df84 100644 --- a/src/main/java/com/talhanation/workers/client/gui/HomeAreaScreen.java +++ b/src/main/java/com/talhanation/workers/client/gui/HomeAreaScreen.java @@ -10,7 +10,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.client.gui.widget.ExtendedButton; +import net.neoforged.neoforge.client.gui.widget.ExtendedButton; public class HomeAreaScreen extends WorkAreaScreen { private static final MutableComponent TEXT_RESIDENT = Component.translatable("gui.workers.text.resident"); diff --git a/src/main/java/com/talhanation/workers/client/gui/LumberAreaScreen.java b/src/main/java/com/talhanation/workers/client/gui/LumberAreaScreen.java index acc19ee1..bebdb56c 100644 --- a/src/main/java/com/talhanation/workers/client/gui/LumberAreaScreen.java +++ b/src/main/java/com/talhanation/workers/client/gui/LumberAreaScreen.java @@ -9,6 +9,7 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.core.component.DataComponents; import net.minecraft.util.FastColor; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; @@ -70,7 +71,7 @@ public void setButtons() { // No "any sapling" entry anymore — an unset selection shows a placeholder // instead, so the worker only ever plants the explicitly chosen sapling. if (currentSapling.isEmpty()) { - currentSapling.setHoverName(TEXT_SELECT_SAPLING); + currentSapling.set(DataComponents.CUSTOM_NAME, TEXT_SELECT_SAPLING); } seedItemSelectionDropDownMenu.setBgFillSelected(FastColor.ARGB32.color(255, 139, 139, 139)); @@ -140,9 +141,9 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { return super.mouseClicked(mouseX, mouseY, button); } @Override - public boolean mouseScrolled(double x, double y, double d) { - if(seedItemSelectionDropDownMenu != null) seedItemSelectionDropDownMenu.mouseScrolled(x,y,d); - return super.mouseScrolled(x, y, d); + public boolean mouseScrolled(double x, double y, double horizontalAmount, double d) { + if(seedItemSelectionDropDownMenu != null) seedItemSelectionDropDownMenu.mouseScrolled(x, y, horizontalAmount, d); + return super.mouseScrolled(x, y, horizontalAmount, d); } @Override public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { diff --git a/src/main/java/com/talhanation/workers/client/gui/MerchantAddEditTradeScreen.java b/src/main/java/com/talhanation/workers/client/gui/MerchantAddEditTradeScreen.java index 646fc7c2..89f2c6f8 100644 --- a/src/main/java/com/talhanation/workers/client/gui/MerchantAddEditTradeScreen.java +++ b/src/main/java/com/talhanation/workers/client/gui/MerchantAddEditTradeScreen.java @@ -18,11 +18,11 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import net.minecraftforge.client.gui.widget.ExtendedButton; +import net.neoforged.neoforge.client.gui.widget.ExtendedButton; public class MerchantAddEditTradeScreen extends ScreenBase { - private static final ResourceLocation RESOURCE_LOCATION = new ResourceLocation(WorkersMain.MOD_ID,"textures/gui/merchant_add_edit_trade_screen.png" ); + private static final ResourceLocation RESOURCE_LOCATION = ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/gui/merchant_add_edit_trade_screen.png" ); private static final MutableComponent BUTTON_CANCEL = Component.translatable("gui.workers.button.cancel"); private static final MutableComponent BUTTON_SAVE = Component.translatable("gui.workers.button.save"); private static final MutableComponent BUTTON_EDIT = Component.translatable("gui.workers.button.edit"); @@ -100,7 +100,7 @@ public void setWidgets(){ this.trade.allowDamagedCurrency = allowDamagedCurrency; } - WorkersMain.SIMPLE_CHANNEL.sendToServer(new MessageUpdateMerchantTrade(this.merchantEntity.getUUID(), this.trade, false)); + WorkersMain.SIMPLE_CHANNEL.sendToServer(new MessageUpdateMerchantTrade(this.merchantEntity.getUUID(), this.trade, this.merchantEntity.registryAccess(), false)); new java.util.Timer().schedule(new java.util.TimerTask() { @Override @@ -176,4 +176,4 @@ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) { guiGraphics.drawString(font, Component.literal("auto"), 42, 28, 0x55AA55, false); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/client/gui/MerchantAddEditVillagerTradeScreen.java b/src/main/java/com/talhanation/workers/client/gui/MerchantAddEditVillagerTradeScreen.java index 5b34e9a4..249f89db 100644 --- a/src/main/java/com/talhanation/workers/client/gui/MerchantAddEditVillagerTradeScreen.java +++ b/src/main/java/com/talhanation/workers/client/gui/MerchantAddEditVillagerTradeScreen.java @@ -18,11 +18,11 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import net.minecraftforge.client.gui.widget.ExtendedButton; +import net.neoforged.neoforge.client.gui.widget.ExtendedButton; public class MerchantAddEditVillagerTradeScreen extends ScreenBase { - private static final ResourceLocation RESOURCE_LOCATION = new ResourceLocation(WorkersMain.MOD_ID, "textures/gui/merchant_add_edit_villager_trade_screen.png"); + private static final ResourceLocation RESOURCE_LOCATION = ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "textures/gui/merchant_add_edit_villager_trade_screen.png"); private static final MutableComponent BUTTON_CANCEL = Component.translatable("gui.workers.button.cancel"); private static final MutableComponent BUTTON_SAVE = Component.translatable("gui.workers.button.save"); private static final MutableComponent BUTTON_RESET = Component.translatable("gui.workers.button.reset"); @@ -88,7 +88,7 @@ public void setWidgets() { this.trade.enabled = enabled; WorkersMain.SIMPLE_CHANNEL.sendToServer( - new MessageUpdateMerchantTrade(this.merchantEntity.getUUID(), this.trade, false)); + new MessageUpdateMerchantTrade(this.merchantEntity.getUUID(), this.trade, this.merchantEntity.registryAccess(), false)); new java.util.Timer().schedule(new java.util.TimerTask() { @Override diff --git a/src/main/java/com/talhanation/workers/client/gui/MerchantSelectTradeTypeScreen.java b/src/main/java/com/talhanation/workers/client/gui/MerchantSelectTradeTypeScreen.java index 44ecd751..a1d97f91 100644 --- a/src/main/java/com/talhanation/workers/client/gui/MerchantSelectTradeTypeScreen.java +++ b/src/main/java/com/talhanation/workers/client/gui/MerchantSelectTradeTypeScreen.java @@ -11,14 +11,14 @@ import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.gui.widget.ExtendedButton; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.client.gui.widget.ExtendedButton; @OnlyIn(Dist.CLIENT) public class MerchantSelectTradeTypeScreen extends RecruitsScreenBase { - private static final ResourceLocation TEXTURE = new ResourceLocation(Main.MOD_ID, "textures/gui/gui_small.png"); + private static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(Main.MOD_ID, "textures/gui/gui_small.png"); private static final MutableComponent BUTTON_PLAYER_TRADE = Component.translatable("gui.workers.button.playerTrade"); private static final MutableComponent BUTTON_VILLAGER_TRADE = Component.translatable("gui.workers.button.villagerTrade"); private static final int fontColor = 4210752; diff --git a/src/main/java/com/talhanation/workers/client/gui/MerchantTradeScreen.java b/src/main/java/com/talhanation/workers/client/gui/MerchantTradeScreen.java index 87a30e86..26f77a37 100644 --- a/src/main/java/com/talhanation/workers/client/gui/MerchantTradeScreen.java +++ b/src/main/java/com/talhanation/workers/client/gui/MerchantTradeScreen.java @@ -21,7 +21,7 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.gui.widget.ExtendedButton; +import net.neoforged.neoforge.client.gui.widget.ExtendedButton; import javax.annotation.Nullable; import java.util.List; @@ -29,8 +29,10 @@ public class MerchantTradeScreen extends ScreenBase { - private static final ResourceLocation RESOURCE_LOCATION = new ResourceLocation(WorkersMain.MOD_ID,"textures/gui/merchant.png" ); - private static final ResourceLocation ARROW_IMAGE = new ResourceLocation(WorkersMain.MOD_ID, "textures/gui/arrow.png"); + private static final ResourceLocation RESOURCE_LOCATION = ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/gui/merchant.png" ); + private static final ResourceLocation ARROW_IMAGE = ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "textures/gui/arrow.png"); + private static final ResourceLocation BUTTON_TEXTURE = ResourceLocation.withDefaultNamespace("widget/button"); + private static final ResourceLocation BUTTON_HIGHLIGHTED_TEXTURE = ResourceLocation.withDefaultNamespace("widget/button_highlighted"); private static final MutableComponent BUTTON_ADD = Component.translatable("gui.workers.button.add"); private static final MutableComponent BUTTON_EDIT = Component.translatable("gui.workers.button.edit"); private static final MutableComponent BUTTON_REMOVE = Component.translatable("gui.workers.button.remove"); @@ -98,10 +100,7 @@ public void setWidgets(){ int listBottom = listTop + LIST_H; this.tradeList = new TradeList(Minecraft.getInstance(), LIST_W, LIST_H, listTop, listBottom, LIST_ITEM_H, LIST_W); - this.tradeList.setLeftPos(listLeft); - this.tradeList.setRenderBackground(false); - this.tradeList.setRenderTopAndBottom(false); - this.tradeList.setRenderSelection(false); + this.tradeList.setX(listLeft); this.loadTrades(); this.addRenderableWidget(this.tradeList); @@ -134,7 +133,7 @@ public void setWidgets(){ copyTradeButton = new ExtendedButton(leftPos + 88, topPos + 77, 60, 18, BUTTON_COPY, button -> { WorkersMerchantTrade trade = selection == null ? new WorkersMerchantTrade() : selection.copy(); - WorkersMain.SIMPLE_CHANNEL.sendToServer(new MessageUpdateMerchantTrade(this.merchantEntity.getUUID(), trade, false)); + WorkersMain.SIMPLE_CHANNEL.sendToServer(new MessageUpdateMerchantTrade(this.merchantEntity.getUUID(), trade, this.merchantEntity.registryAccess(), false)); tradeList.addEntry(this.tradeList.new TradeEntry(trade)); this.selection = null; tradeList.setSelected(null); @@ -145,7 +144,7 @@ public void setWidgets(){ removeTradeButton = new ExtendedButton(leftPos + 186, topPos + 77, 60, 18, BUTTON_REMOVE, button -> { tradeList.children().removeIf(tradeEntry -> tradeEntry.trade.uuid.equals(selection.uuid)); - WorkersMain.SIMPLE_CHANNEL.sendToServer(new MessageUpdateMerchantTrade(merchantEntity.getUUID(), selection, true)); + WorkersMain.SIMPLE_CHANNEL.sendToServer(new MessageUpdateMerchantTrade(merchantEntity.getUUID(), selection, merchantEntity.registryAccess(), true)); this.selection = null; tradeList.setSelected(null); updateButtonState(); @@ -359,7 +358,7 @@ private class TradeList extends ObjectSelectionList { final int itemWidth; TradeList(Minecraft mc, int width, int height, int top, int bottom, int itemHeight, int itemWidth) { - super(mc, width, height, top, bottom, itemHeight); + super(mc, width, height, top, itemHeight); this.itemWidth = itemWidth; } @@ -413,7 +412,13 @@ public void render(GuiGraphics guiGraphics, int index, int top, int left, int en RenderSystem.enableBlend(); RenderSystem.enableDepthTest(); guiGraphics.setColor(1.0F, 1.0F, 1.0F, alpha); - guiGraphics.blitNineSliced(AbstractButton.WIDGETS_LOCATION, rowLeft, top, rowWidth, entryHeight, 20, 4, 200, 20, 0, textureY); + guiGraphics.blitSprite( + hovered || selected ? BUTTON_HIGHLIGHTED_TEXTURE : BUTTON_TEXTURE, + rowLeft, + top, + rowWidth, + entryHeight + ); // Vertically centre items in the compacted entry height (28px) final int itemY = top + (entryHeight - 16) / 2; @@ -488,10 +493,10 @@ private int getButtonTextureY(boolean hovered, boolean selected, boolean out) { } @Override - public boolean mouseScrolled(double mouseX, double mouseY, double delta) { + public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double delta) { if (tradeList != null && tradeList.isMouseOver(mouseX, mouseY)) - return tradeList.mouseScrolled(mouseX, mouseY, delta); - return super.mouseScrolled(mouseX, mouseY, delta); + return tradeList.mouseScrolled(mouseX, mouseY, horizontalAmount, delta); + return super.mouseScrolled(mouseX, mouseY, horizontalAmount, delta); } @Override @@ -506,4 +511,4 @@ public void onClose() { super.onClose(); WorkersMain.SIMPLE_CHANNEL.sendToServer(new MessageUpdateMerchant(merchantEntity.getUUID(), isCreative, false, isDailyRefresh)); } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/client/gui/MiningAreaScreen.java b/src/main/java/com/talhanation/workers/client/gui/MiningAreaScreen.java index ef5c8069..61cd9c06 100644 --- a/src/main/java/com/talhanation/workers/client/gui/MiningAreaScreen.java +++ b/src/main/java/com/talhanation/workers/client/gui/MiningAreaScreen.java @@ -19,7 +19,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Blocks; -import net.minecraftforge.client.gui.widget.ExtendedButton; +import net.neoforged.neoforge.client.gui.widget.ExtendedButton; import java.util.List; import java.util.UUID; @@ -301,10 +301,10 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { return super.mouseClicked(mouseX, mouseY, button); } @Override - public boolean mouseScrolled(double x, double y, double d) { - if(modeDropDown != null) modeDropDown.mouseScrolled(x,y,d); - if(fillItemDropDown != null) fillItemDropDown.mouseScrolled(x,y,d); - return super.mouseScrolled(x, y, d); + public boolean mouseScrolled(double x, double y, double horizontalAmount, double d) { + if(modeDropDown != null) modeDropDown.mouseScrolled(x, y, horizontalAmount, d); + if(fillItemDropDown != null) fillItemDropDown.mouseScrolled(x, y, horizontalAmount, d); + return super.mouseScrolled(x, y, horizontalAmount, d); } @Override public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { diff --git a/src/main/java/com/talhanation/workers/client/gui/WorkAreaScreen.java b/src/main/java/com/talhanation/workers/client/gui/WorkAreaScreen.java index 080961b8..febc356f 100644 --- a/src/main/java/com/talhanation/workers/client/gui/WorkAreaScreen.java +++ b/src/main/java/com/talhanation/workers/client/gui/WorkAreaScreen.java @@ -19,11 +19,11 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.client.gui.widget.ExtendedButton; +import net.neoforged.neoforge.client.gui.widget.ExtendedButton; public abstract class WorkAreaScreen extends RecruitsScreenBase { - private static final ResourceLocation TEXTURE = new ResourceLocation(WorkersMain.MOD_ID, "textures/gui/workareascreen.png"); + private static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "textures/gui/workareascreen.png"); private static final MutableComponent TEXT_FORWARD = Component.translatable("gui.workers.command.text.forward"); private static final MutableComponent TEXT_BACKWARD = Component.translatable("gui.workers.command.text.back"); private static final MutableComponent TEXT_LEFT = Component.translatable("gui.workers.command.text.left"); diff --git a/src/main/java/com/talhanation/workers/client/gui/WorkAreaScreenFactory.java b/src/main/java/com/talhanation/workers/client/gui/WorkAreaScreenFactory.java new file mode 100644 index 00000000..56a42c7c --- /dev/null +++ b/src/main/java/com/talhanation/workers/client/gui/WorkAreaScreenFactory.java @@ -0,0 +1,45 @@ +package com.talhanation.workers.client.gui; + +import com.talhanation.workers.entities.workarea.AbstractWorkAreaEntity; +import com.talhanation.workers.entities.workarea.AnimalPenArea; +import com.talhanation.workers.entities.workarea.BuildArea; +import com.talhanation.workers.entities.workarea.CropArea; +import com.talhanation.workers.entities.workarea.FishingArea; +import com.talhanation.workers.entities.workarea.HomeArea; +import com.talhanation.workers.entities.workarea.KitchenArea; +import com.talhanation.workers.entities.workarea.LumberArea; +import com.talhanation.workers.entities.workarea.MarketArea; +import com.talhanation.workers.entities.workarea.MiningArea; +import com.talhanation.workers.entities.workarea.StorageArea; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.world.entity.player.Player; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public final class WorkAreaScreenFactory { + private WorkAreaScreenFactory() { + } + + public static void open(AbstractWorkAreaEntity area, Player player) { + Screen screen = create(area, player); + if (screen != null) { + Minecraft.getInstance().setScreen(screen); + } + } + + private static Screen create(AbstractWorkAreaEntity area, Player player) { + if (area instanceof AnimalPenArea value) return new AnimalPenAreaScreen(value, player); + if (area instanceof BuildArea value) return new BuildAreaScreen(value, player); + if (area instanceof CropArea value) return new CropAreaScreen(value, player); + if (area instanceof FishingArea value) return new FishingAreaScreen(value, player); + if (area instanceof HomeArea value) return new HomeAreaScreen(value, player); + if (area instanceof KitchenArea value) return new KitchenAreaScreen(value, player); + if (area instanceof LumberArea value) return new LumberAreaScreen(value, player); + if (area instanceof MarketArea value) return new MarketAreaScreen(value, player); + if (area instanceof MiningArea value) return new MiningAreaScreen(value, player); + if (area instanceof StorageArea value) return new StorageAreaScreen(value, player); + return null; + } +} diff --git a/src/main/java/com/talhanation/workers/client/gui/structureRenderer/StructurePreviewWidget.java b/src/main/java/com/talhanation/workers/client/gui/structureRenderer/StructurePreviewWidget.java index ae863af2..f2942a93 100644 --- a/src/main/java/com/talhanation/workers/client/gui/structureRenderer/StructurePreviewWidget.java +++ b/src/main/java/com/talhanation/workers/client/gui/structureRenderer/StructurePreviewWidget.java @@ -28,7 +28,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.AABB; -import net.minecraftforge.client.model.data.ModelData; +import net.neoforged.neoforge.client.model.data.ModelData; import com.talhanation.workers.entities.workarea.BuildArea; import java.util.ArrayList; @@ -256,7 +256,7 @@ private void resetView() { } @Override - public boolean mouseScrolled(double mouseX, double mouseY, double x) { + public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double x) { if (isHoveredOrFocused()) { zoom += x; zoom = Mth.clamp(zoom, 3f, 20f); diff --git a/src/main/java/com/talhanation/workers/client/gui/widgets/CourierDropDownMenu.java b/src/main/java/com/talhanation/workers/client/gui/widgets/CourierDropDownMenu.java index 4e6da3e1..63fa2d5d 100644 --- a/src/main/java/com/talhanation/workers/client/gui/widgets/CourierDropDownMenu.java +++ b/src/main/java/com/talhanation/workers/client/gui/widgets/CourierDropDownMenu.java @@ -189,7 +189,7 @@ public void onMouseMove(double mouseX, double mouseY) { } @Override - public boolean mouseScrolled(double mouseX, double mouseY, double delta) { + public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double delta) { if (!visible) return false; if (isOpen) { scrollOffset -= (int) delta; diff --git a/src/main/java/com/talhanation/workers/client/gui/widgets/DisplayTextItemScrollDropDownMenu.java b/src/main/java/com/talhanation/workers/client/gui/widgets/DisplayTextItemScrollDropDownMenu.java index abe7e526..93a00118 100644 --- a/src/main/java/com/talhanation/workers/client/gui/widgets/DisplayTextItemScrollDropDownMenu.java +++ b/src/main/java/com/talhanation/workers/client/gui/widgets/DisplayTextItemScrollDropDownMenu.java @@ -7,6 +7,7 @@ import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.network.chat.Component; +import net.minecraft.core.component.DataComponents; import net.minecraft.util.FastColor; import net.minecraft.world.item.ItemStack; @@ -135,7 +136,7 @@ public void insertOption(int index, ItemStack stack, String text) { if (stack.isEmpty()) { toInsert = ItemStack.EMPTY; - toInsert.setHoverName(Component.literal(text)); + toInsert.set(DataComponents.CUSTOM_NAME, Component.literal(text)); } if (index < 0 || index > options.size()) { @@ -198,7 +199,7 @@ public void onMouseMove(double mouseX, double mouseY) { } } - public boolean mouseScrolled(double mouseX, double mouseY, double delta) { + public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double delta) { if (!this.visible) { return false; } else if (this.isOpen) { @@ -284,4 +285,4 @@ public void setDisplayColor(int displayColor) { public void setOptionTextColor(int optionTextColor) { this.optionTextColor = optionTextColor; } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/client/gui/widgets/ItemScrollDropDownMenu.java b/src/main/java/com/talhanation/workers/client/gui/widgets/ItemScrollDropDownMenu.java index b6f9fb91..f349166c 100644 --- a/src/main/java/com/talhanation/workers/client/gui/widgets/ItemScrollDropDownMenu.java +++ b/src/main/java/com/talhanation/workers/client/gui/widgets/ItemScrollDropDownMenu.java @@ -6,6 +6,7 @@ import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.network.chat.Component; +import net.minecraft.core.component.DataComponents; import net.minecraft.util.FastColor; import net.minecraft.world.item.ItemStack; @@ -133,7 +134,7 @@ public void insertOption(int index, ItemStack stack, String text) { if (stack.isEmpty()) { toInsert = ItemStack.EMPTY; - toInsert.setHoverName(Component.literal(text)); + toInsert.set(DataComponents.CUSTOM_NAME, Component.literal(text)); } if (index < 0 || index > options.size()) { @@ -196,7 +197,7 @@ public void onMouseMove(double mouseX, double mouseY) { } } - public boolean mouseScrolled(double mouseX, double mouseY, double delta) { + public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double delta) { if (!this.visible) { return false; } else if (this.isOpen) { @@ -283,4 +284,4 @@ public void setDisplayColor(int displayColor) { public void setOptionTextColor(int optionTextColor) { this.optionTextColor = optionTextColor; } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/client/gui/widgets/ScrollDropDownMenuWithFolders.java b/src/main/java/com/talhanation/workers/client/gui/widgets/ScrollDropDownMenuWithFolders.java index 6bcba3a9..197bf70f 100644 --- a/src/main/java/com/talhanation/workers/client/gui/widgets/ScrollDropDownMenuWithFolders.java +++ b/src/main/java/com/talhanation/workers/client/gui/widgets/ScrollDropDownMenuWithFolders.java @@ -23,7 +23,7 @@ public class ScrollDropDownMenuWithFolders extends AbstractWidget { - private static final ResourceLocation FOLDER_ICON = new ResourceLocation(WorkersMain.MOD_ID, "textures/gui/folder_image.png"); + private static final ResourceLocation FOLDER_ICON = ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "textures/gui/folder_image.png"); private static final ItemStack PICKAXE_STACK = new ItemStack(Items.IRON_PICKAXE); private static final int ICON_SIZE = 16; private static final int ICON_MARGIN = 2; @@ -289,7 +289,7 @@ public void onMouseMove(double mouseX, double mouseY) { } @Override - public boolean mouseScrolled(double mouseX, double mouseY, double delta) { + public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double delta) { if (!visible || !isOpen) return false; scrollOffset -= (int) delta; scrollOffset = Math.max(0, Math.min(scrollOffset, entries.size() - maxVisibleOptions)); diff --git a/src/main/java/com/talhanation/workers/client/render/FishingBobberRenderer.java b/src/main/java/com/talhanation/workers/client/render/FishingBobberRenderer.java index 01d18c05..a203ec5f 100644 --- a/src/main/java/com/talhanation/workers/client/render/FishingBobberRenderer.java +++ b/src/main/java/com/talhanation/workers/client/render/FishingBobberRenderer.java @@ -14,14 +14,14 @@ import net.minecraft.util.Mth; import net.minecraft.world.entity.HumanoidArm; import net.minecraft.world.item.ItemStack; -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 org.joml.Matrix3f; import org.joml.Matrix4f; @OnlyIn(Dist.CLIENT) public class FishingBobberRenderer extends EntityRenderer { - private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation("textures/entity/fishing_hook.png"); + private static final ResourceLocation TEXTURE_LOCATION = ResourceLocation.withDefaultNamespace("textures/entity/fishing_hook.png"); private static final RenderType RENDER_TYPE = RenderType.entityCutout(TEXTURE_LOCATION); private static final double VIEW_BOBBING_SCALE = 960.0D; @@ -38,17 +38,15 @@ public void render(FishingBobberEntity fishingBobber, float entityYaw, float par poseStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); poseStack.mulPose(Axis.YP.rotationDegrees(180.0F)); PoseStack.Pose posestack$pose = poseStack.last(); - Matrix4f matrix4f = posestack$pose.pose(); - Matrix3f matrix3f = posestack$pose.normal(); VertexConsumer vertexconsumer = multiBufferSource.getBuffer(RENDER_TYPE); - vertex(vertexconsumer, matrix4f, matrix3f, packetLight, 0.0F, 0, 0, 1); - vertex(vertexconsumer, matrix4f, matrix3f, packetLight, 1.0F, 0, 1, 1); - vertex(vertexconsumer, matrix4f, matrix3f, packetLight, 1.0F, 1, 1, 0); - vertex(vertexconsumer, matrix4f, matrix3f, packetLight, 0.0F, 1, 0, 0); + vertex(vertexconsumer, posestack$pose, packetLight, 0.0F, 0, 0, 1); + vertex(vertexconsumer, posestack$pose, packetLight, 1.0F, 0, 1, 1); + vertex(vertexconsumer, posestack$pose, packetLight, 1.0F, 1, 1, 0); + vertex(vertexconsumer, posestack$pose, packetLight, 0.0F, 1, 0, 0); poseStack.popPose(); int i = fisherman.getMainArm() == HumanoidArm.RIGHT ? 1 : -1; ItemStack itemstack = fisherman.getMainHandItem(); - if (!itemstack.canPerformAction(net.minecraftforge.common.ToolActions.FISHING_ROD_CAST)) { + if (!itemstack.canPerformAction(net.neoforged.neoforge.common.ItemAbilities.FISHING_ROD_CAST)) { i = -i; } @@ -93,8 +91,13 @@ private static float fraction(int p_114691_, int p_114692_) { return (float) p_114691_ / (float) p_114692_; } - private static void vertex(VertexConsumer p_254464_, Matrix4f p_254085_, Matrix3f p_253962_, int p_254296_, float p_253632_, int p_254132_, int p_254171_, int p_254026_) { - p_254464_.vertex(p_254085_, p_253632_ - 0.5F, (float) p_254132_ - 0.5F, 0.0F).color(255, 255, 255, 255).uv((float) p_254171_, (float) p_254026_).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(p_254296_).normal(p_253962_, 0.0F, 1.0F, 0.0F).endVertex(); + private static void vertex(VertexConsumer p_254464_, PoseStack.Pose pose, int p_254296_, float p_253632_, int p_254132_, int p_254171_, int p_254026_) { + p_254464_.addVertex(pose, p_253632_ - 0.5F, (float) p_254132_ - 0.5F, 0.0F) + .setColor(255, 255, 255, 255) + .setUv((float) p_254171_, (float) p_254026_) + .setOverlay(OverlayTexture.NO_OVERLAY) + .setLight(p_254296_) + .setNormal(pose, 0.0F, 1.0F, 0.0F); } private static void stringVertex(float p_174119_, float p_174120_, float p_174121_, VertexConsumer p_174122_, PoseStack.Pose p_174123_, float p_174124_, float p_174125_) { @@ -108,7 +111,7 @@ private static void stringVertex(float p_174119_, float p_174120_, float p_17412 f3 /= f6; f4 /= f6; f5 /= f6; - p_174122_.vertex(p_174123_.pose(), f, f1, f2).color(0, 0, 0, 255).normal(p_174123_.normal(), f3, f4, f5).endVertex(); + p_174122_.addVertex(p_174123_, f, f1, f2).setColor(0, 0, 0, 255).setNormal(p_174123_, f3, f4, f5); } public ResourceLocation getTextureLocation(FishingBobberEntity p_114703_) { diff --git a/src/main/java/com/talhanation/workers/client/render/IRenderWorkArea.java b/src/main/java/com/talhanation/workers/client/render/IRenderWorkArea.java index 4e6c9032..18238727 100644 --- a/src/main/java/com/talhanation/workers/client/render/IRenderWorkArea.java +++ b/src/main/java/com/talhanation/workers/client/render/IRenderWorkArea.java @@ -15,14 +15,12 @@ default void renderWorkArea(PoseStack poseStack, VertexConsumer vertexConsumer, default void drawLine(PoseStack stack, VertexConsumer buffer, Vec3 from, Vec3 to, float r, float g, float b, float a) { Matrix4f matrix = stack.last().pose(); - buffer.vertex(matrix, (float) from.x, (float) from.y, (float) from.z) - .color(r, g, b, a) - .normal(0, 1, 0) // Dummy normal – Forge verlangt sie manchmal - .endVertex(); - buffer.vertex(matrix, (float) to.x, (float) to.y, (float) to.z) - .color(r, g, b, a) - .normal(0, 1, 0) - .endVertex(); + buffer.addVertex(matrix, (float) from.x, (float) from.y, (float) from.z) + .setColor(r, g, b, a) + .setNormal(0, 1, 0); + buffer.addVertex(matrix, (float) to.x, (float) to.y, (float) to.z) + .setColor(r, g, b, a) + .setNormal(0, 1, 0); } } diff --git a/src/main/java/com/talhanation/workers/client/render/WorkerAreaRenderer.java b/src/main/java/com/talhanation/workers/client/render/WorkerAreaRenderer.java index f1ccaa71..2f66a854 100644 --- a/src/main/java/com/talhanation/workers/client/render/WorkerAreaRenderer.java +++ b/src/main/java/com/talhanation/workers/client/render/WorkerAreaRenderer.java @@ -37,9 +37,9 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.AABB; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.model.data.ModelData; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.client.model.data.ModelData; import org.jetbrains.annotations.NotNull; import java.util.List; diff --git a/src/main/java/com/talhanation/workers/client/render/layer/WorkersHumanProfessionLayer.java b/src/main/java/com/talhanation/workers/client/render/layer/WorkersHumanProfessionLayer.java index b1ea640c..7c5ef6b3 100644 --- a/src/main/java/com/talhanation/workers/client/render/layer/WorkersHumanProfessionLayer.java +++ b/src/main/java/com/talhanation/workers/client/render/layer/WorkersHumanProfessionLayer.java @@ -16,15 +16,15 @@ public class WorkersHumanProfessionLayer extends RenderLayer> { private static final ResourceLocation[] TEXTURE = { - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/human/human_miner_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/human/human_farmer_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/human/human_fisherman_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/human/human_animalfarmer_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/human/human_lumberjack_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/human/human_merchant_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/human/human_courier_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/human/human_builder_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/human/human_cook_cloth.png") + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/human/human_miner_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/human/human_farmer_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/human/human_fisherman_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/human/human_animalfarmer_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/human/human_lumberjack_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/human/human_merchant_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/human/human_courier_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/human/human_builder_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/human/human_cook_cloth.png") }; public WorkersHumanProfessionLayer(LivingEntityRenderer> renderer) { @@ -34,7 +34,7 @@ public WorkersHumanProfessionLayer(LivingEntityRenderer> { private static final ResourceLocation[] TEXTURE = { - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/villager/villager_miner_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/villager/villager_farmer_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/villager/villager_fisherman_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/villager/villager_animalfarmer_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/villager/villager_lumberjack_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/villager/villager_merchant_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/villager/villager_courier_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/villager/villager_builder_cloth.png"), - new ResourceLocation(WorkersMain.MOD_ID,"textures/entity/villager/villager_cook_cloth.png") + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/villager/villager_miner_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/villager/villager_farmer_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/villager/villager_fisherman_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/villager/villager_animalfarmer_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/villager/villager_lumberjack_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/villager/villager_merchant_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/villager/villager_courier_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/villager/villager_builder_cloth.png"), + ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID,"textures/entity/villager/villager_cook_cloth.png") }; public WorkersVillagerProfessionLayer(LivingEntityRenderer> renderer) { @@ -34,7 +34,7 @@ public WorkersVillagerProfessionLayer(LivingEntityRenderer KNIVES_FD = ItemTags.create(new ResourceLocation(MOD_ID, "tools/knives")); - private static final TagKey KNIVES_FORGE = ItemTags.create(new ResourceLocation("forge", "tools/knives")); + private static final TagKey KNIVES_FD = ItemTags.create(ResourceLocation.fromNamespaceAndPath(MOD_ID, "tools/knives")); + private static final TagKey KNIVES_FORGE = ItemTags.create(ResourceLocation.fromNamespaceAndPath("forge", "tools/knives")); private static final GameProfile FARMER_FAKE_PROFILE = new GameProfile( UUID.fromString("b1d4f6a2-7c8e-4d3a-9f0b-1e2c3d4e5f60"), "WorkerFarmer" diff --git a/src/main/java/com/talhanation/workers/config/WorkersServerConfig.java b/src/main/java/com/talhanation/workers/config/WorkersServerConfig.java index 8593bc8f..a7f50528 100644 --- a/src/main/java/com/talhanation/workers/config/WorkersServerConfig.java +++ b/src/main/java/com/talhanation/workers/config/WorkersServerConfig.java @@ -1,36 +1,34 @@ package com.talhanation.workers.config; -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.fml.common.Mod; +import net.neoforged.neoforge.common.ModConfigSpec; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -@Mod.EventBusSubscriber public class WorkersServerConfig { - private static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder(); - public static ForgeConfigSpec SERVER; - public static ForgeConfigSpec.IntValue FarmerCost; - public static ForgeConfigSpec.IntValue LumberjackCost; - public static ForgeConfigSpec.IntValue MinerCost; - public static ForgeConfigSpec.IntValue BuilderCost; - public static ForgeConfigSpec.IntValue MerchantCost; - public static ForgeConfigSpec.IntValue CourierCost; - public static ForgeConfigSpec.IntValue CookCost; - public static ForgeConfigSpec.BooleanValue VillagerBreedMixinEnabled; - public static ForgeConfigSpec.IntValue VillagerBreedSaturationThreshold; - public static ForgeConfigSpec.IntValue AnimalPenMaxAnimals; - public static ForgeConfigSpec.BooleanValue ShouldWorkAreaOnlyBeInFactionClaim; - public static ForgeConfigSpec.BooleanValue ShouldOnlyPlacingBuildingsBePossible; - public static ForgeConfigSpec.EnumValue BuildModeConfig; - public static ForgeConfigSpec.ConfigValue> MinerPickup; - public static ForgeConfigSpec.ConfigValue> MinerIgnore; - public static ForgeConfigSpec.ConfigValue> FarmerPickup; - public static ForgeConfigSpec.ConfigValue> AnimalFarmerPickup; - public static ForgeConfigSpec.ConfigValue> LumberjackPickup; - public static ForgeConfigSpec.ConfigValue> FishermanPickup; - public static ForgeConfigSpec.BooleanValue WorkersReplaceAllay; + private static final ModConfigSpec.Builder BUILDER = new ModConfigSpec.Builder(); + public static ModConfigSpec SERVER; + public static ModConfigSpec.IntValue FarmerCost; + public static ModConfigSpec.IntValue LumberjackCost; + public static ModConfigSpec.IntValue MinerCost; + public static ModConfigSpec.IntValue BuilderCost; + public static ModConfigSpec.IntValue MerchantCost; + public static ModConfigSpec.IntValue CourierCost; + public static ModConfigSpec.IntValue CookCost; + public static ModConfigSpec.BooleanValue VillagerBreedMixinEnabled; + public static ModConfigSpec.IntValue VillagerBreedSaturationThreshold; + public static ModConfigSpec.IntValue AnimalPenMaxAnimals; + public static ModConfigSpec.BooleanValue ShouldWorkAreaOnlyBeInFactionClaim; + public static ModConfigSpec.BooleanValue ShouldOnlyPlacingBuildingsBePossible; + public static ModConfigSpec.EnumValue BuildModeConfig; + public static ModConfigSpec.ConfigValue> MinerPickup; + public static ModConfigSpec.ConfigValue> MinerIgnore; + public static ModConfigSpec.ConfigValue> FarmerPickup; + public static ModConfigSpec.ConfigValue> AnimalFarmerPickup; + public static ModConfigSpec.ConfigValue> LumberjackPickup; + public static ModConfigSpec.ConfigValue> FishermanPickup; + public static ModConfigSpec.BooleanValue WorkersReplaceAllay; public static ArrayList FARMER_PICKUP = new ArrayList<>( Arrays.asList( "minecraft:wheat", diff --git a/src/main/java/com/talhanation/workers/entities/AbstractWorkerEntity.java b/src/main/java/com/talhanation/workers/entities/AbstractWorkerEntity.java index e5d3e339..df65376f 100644 --- a/src/main/java/com/talhanation/workers/entities/AbstractWorkerEntity.java +++ b/src/main/java/com/talhanation/workers/entities/AbstractWorkerEntity.java @@ -12,6 +12,7 @@ import com.talhanation.workers.entities.workarea.HomeArea; import com.talhanation.workers.world.NeededItem; import net.minecraft.core.BlockPos; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; @@ -38,8 +39,8 @@ import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; 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 org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; @@ -129,11 +130,11 @@ public boolean canAddItem(ItemStack itemToAdd) { boolean flag = false; List inventorySlots = new ArrayList<>(); for(int i = 6; i < this.inventory.getContainerSize(); i++){ - inventorySlots.add(inventory.items.get(i)); + inventorySlots.add(inventory.getItems().get(i)); } for(ItemStack itemstack : inventorySlots) { - if (itemstack.isEmpty() || ItemStack.isSameItemSameTags(itemstack, itemToAdd) && itemstack.getCount() < itemstack.getMaxStackSize()) { + if (itemstack.isEmpty() || ItemStack.isSameItemSameComponents(itemstack, itemToAdd) && itemstack.getCount() < itemstack.getMaxStackSize()) { flag = true; break; } @@ -142,7 +143,8 @@ public boolean canAddItem(ItemStack itemToAdd) { return flag; } public boolean wantsToKeep(ItemStack itemStack) { - return (itemStack.isEdible() && itemStack.getFoodProperties(this).getNutrition() > 4); + return itemStack.has(DataComponents.FOOD) + && itemStack.get(DataComponents.FOOD).nutrition() > 4; } @Override public boolean wantsToPickUp(ItemStack itemStack) { @@ -197,7 +199,7 @@ public ItemStack addItem(ItemStack itemStackToAdd) { private void moveItemToOccupiedSlotsWithSameType(ItemStack itemStackToMove) { for(int i = 6; i < this.getInventory().getContainerSize(); ++i) { ItemStack itemstack = this.getInventory().getItem(i); - if (ItemStack.isSameItemSameTags(itemstack, itemStackToMove)) { + if (ItemStack.isSameItemSameComponents(itemstack, itemStackToMove)) { this.moveItemsBetweenStacks(itemStackToMove, itemstack); if (itemStackToMove.isEmpty()) { return; @@ -238,8 +240,8 @@ public void setDropEquipment() { //////////////////////////////////// REGISTER//////////////////////////////////// - protected void defineSynchedData() { - super.defineSynchedData(); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); } public void addAdditionalSaveData(@NotNull CompoundTag nbt) { @@ -317,7 +319,7 @@ public boolean needsToDeposit() { } @Nullable public ItemStack getMatchingItem(Predicate predicate) { - for (ItemStack stack : this.getInventory().items) { + for (ItemStack stack : this.getInventory().getItems()) { if (!stack.isEmpty() && predicate.test(stack)) { return stack; } @@ -328,7 +330,7 @@ public ItemStack getMatchingItem(Predicate predicate) { public int countMatchingItems(Predicate predicate) { int count = 0; - for (ItemStack stack : this.getInventory().items) { + for (ItemStack stack : this.getInventory().getItems()) { if (!stack.isEmpty() && predicate.test(stack)) { count += stack.getCount(); } @@ -340,7 +342,7 @@ public int countMatchingItems(Predicate predicate) { public int countMatchingStacks(Predicate predicate) { int count = 0; - for (ItemStack stack : this.getInventory().items) { + for (ItemStack stack : this.getInventory().getItems()) { if (!stack.isEmpty() && predicate.test(stack)) { count++; } @@ -629,4 +631,4 @@ public boolean hasFreeInvSlot() { public boolean shouldWork() { return this.isOwned() && (this.getFollowState() == 0 || this.getFollowState() == 6); } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/AnimalFarmerEntity.java b/src/main/java/com/talhanation/workers/entities/AnimalFarmerEntity.java index f71175b0..403b8e9f 100644 --- a/src/main/java/com/talhanation/workers/entities/AnimalFarmerEntity.java +++ b/src/main/java/com/talhanation/workers/entities/AnimalFarmerEntity.java @@ -23,8 +23,8 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraftforge.common.ForgeMod; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.common.NeoForgeMod; +import net.minecraft.core.registries.BuiltInRegistries; import javax.annotation.Nullable; import java.util.List; @@ -46,11 +46,11 @@ public static AttributeSupplier.Builder setAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, 40.0D) .add(Attributes.MOVEMENT_SPEED, 0.3D) - .add(ForgeMod.SWIM_SPEED.get(), 0.3D) + .add(NeoForgeMod.SWIM_SPEED, 0.3D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.1D) .add(Attributes.ATTACK_DAMAGE, 0.5D) .add(Attributes.FOLLOW_RANGE, 32.0D) - .add(ForgeMod.ENTITY_REACH.get(), 0D) + .add(Attributes.ENTITY_INTERACTION_RANGE, 0D) .add(Attributes.ATTACK_SPEED); } @@ -60,15 +60,15 @@ public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstanc RandomSource randomsource = world.getRandom(); SpawnGroupData ilivingentitydata = super.finalizeSpawn(world, difficultyInstance, reason, data, nbt); ((WorkersGroundPathNavigation)this.getNavigation()).setCanOpenDoors(true); - this.populateDefaultEquipmentEnchantments(randomsource, difficultyInstance); + this.populateDefaultEquipmentEnchantments(world, randomsource, difficultyInstance); this.initSpawn(); return ilivingentitydata; } - protected void defineSynchedData() { - super.defineSynchedData(); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); } @Override//not used @@ -111,7 +111,7 @@ public boolean wantsToKeep(ItemStack itemStack) { return super.wantsToKeep(itemStack); } public boolean wantsToPickUp(ItemStack itemStack) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(itemStack.getItem()); + ResourceLocation id = BuiltInRegistries.ITEM.getKey(itemStack.getItem()); if(id == null) return false; if(WorkersServerConfig.AnimalFarmerPickup.get().contains(id.toString())) return true; diff --git a/src/main/java/com/talhanation/workers/entities/BuilderEntity.java b/src/main/java/com/talhanation/workers/entities/BuilderEntity.java index 2a4a2012..30d4deec 100644 --- a/src/main/java/com/talhanation/workers/entities/BuilderEntity.java +++ b/src/main/java/com/talhanation/workers/entities/BuilderEntity.java @@ -24,9 +24,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.common.ForgeMod; -import net.minecraftforge.common.TierSortingRegistry; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.common.NeoForgeMod; +import net.minecraft.core.registries.BuiltInRegistries; import javax.annotation.Nullable; import java.util.List; @@ -48,11 +47,11 @@ public static AttributeSupplier.Builder setAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, 40.0D) .add(Attributes.MOVEMENT_SPEED, 0.3D) - .add(ForgeMod.SWIM_SPEED.get(), 0.3D) + .add(NeoForgeMod.SWIM_SPEED, 0.3D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.1D) .add(Attributes.ATTACK_DAMAGE, 0.5D) .add(Attributes.FOLLOW_RANGE, 32.0D) - .add(ForgeMod.ENTITY_REACH.get(), 0D) + .add(Attributes.ENTITY_INTERACTION_RANGE, 0D) .add(Attributes.ATTACK_SPEED); } @@ -62,15 +61,15 @@ public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstanc RandomSource randomsource = world.getRandom(); SpawnGroupData ilivingentitydata = super.finalizeSpawn(world, difficultyInstance, reason, data, nbt); ((WorkersGroundPathNavigation)this.getNavigation()).setCanOpenDoors(true); - this.populateDefaultEquipmentEnchantments(randomsource, difficultyInstance); + this.populateDefaultEquipmentEnchantments(world, randomsource, difficultyInstance); this.initSpawn(); return ilivingentitydata; } - protected void defineSynchedData() { - super.defineSynchedData(); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); } @Override//not used @@ -114,7 +113,7 @@ public boolean wantsToKeep(ItemStack itemStack) { return super.wantsToKeep(itemStack); } public boolean wantsToPickUp(ItemStack itemStack) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(itemStack.getItem()); + ResourceLocation id = BuiltInRegistries.ITEM.getKey(itemStack.getItem()); if(id == null) return false; if(WorkersServerConfig.MinerPickup.get().contains(id.toString())) return true; @@ -128,15 +127,15 @@ public AbstractWorkAreaEntity getCurrentWorkArea() { } public boolean shouldIgnoreBlock(BlockState blockState) { - ResourceLocation id = ForgeRegistries.BLOCKS.getKey(blockState.getBlock()); + ResourceLocation id = BuiltInRegistries.BLOCK.getKey(blockState.getBlock()); if(id == null) return false; return (id.toString().equals("minecraft:air") || id.toString().equals("minecraft:cave_air")) && !canBreakBlock(blockState); } public boolean canBreakBlock(BlockState state){ ItemStack tool = this.getMainHandItem(); - if(tool.getItem() instanceof DiggerItem diggerItem){ - return TierSortingRegistry.isCorrectTierForDrops(diggerItem.getTier(), state); + if(tool.getItem() instanceof DiggerItem){ + return tool.isCorrectToolForDrops(state); } else return false; diff --git a/src/main/java/com/talhanation/workers/entities/CookEntity.java b/src/main/java/com/talhanation/workers/entities/CookEntity.java index 9da220ac..62279c1b 100644 --- a/src/main/java/com/talhanation/workers/entities/CookEntity.java +++ b/src/main/java/com/talhanation/workers/entities/CookEntity.java @@ -25,7 +25,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraftforge.common.ForgeMod; +import net.neoforged.neoforge.common.NeoForgeMod; import javax.annotation.Nullable; import java.util.List; @@ -80,11 +80,11 @@ public static AttributeSupplier.Builder setAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, 40.0D) .add(Attributes.MOVEMENT_SPEED, 0.3D) - .add(ForgeMod.SWIM_SPEED.get(), 0.3D) + .add(NeoForgeMod.SWIM_SPEED, 0.3D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.1D) .add(Attributes.ATTACK_DAMAGE, 0.5D) .add(Attributes.FOLLOW_RANGE, 32.0D) - .add(ForgeMod.ENTITY_REACH.get(), 0D) + .add(Attributes.ENTITY_INTERACTION_RANGE, 0D) .add(Attributes.ATTACK_SPEED); } @@ -93,7 +93,7 @@ public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstanc RandomSource randomsource = world.getRandom(); SpawnGroupData ilivingentitydata = super.finalizeSpawn(world, difficultyInstance, reason, data, nbt); ((WorkersGroundPathNavigation) this.getNavigation()).setCanOpenDoors(true); - this.populateDefaultEquipmentEnchantments(randomsource, difficultyInstance); + this.populateDefaultEquipmentEnchantments(world, randomsource, difficultyInstance); this.initSpawn(); return ilivingentitydata; } diff --git a/src/main/java/com/talhanation/workers/entities/CourierEntity.java b/src/main/java/com/talhanation/workers/entities/CourierEntity.java index 6eec3e54..4b9de97d 100644 --- a/src/main/java/com/talhanation/workers/entities/CourierEntity.java +++ b/src/main/java/com/talhanation/workers/entities/CourierEntity.java @@ -9,7 +9,6 @@ import com.talhanation.workers.entities.workarea.AbstractWorkAreaEntity; import com.talhanation.workers.inventory.CourierContainer; import com.talhanation.workers.world.CourierRoute; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.syncher.EntityDataAccessor; @@ -32,8 +31,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraftforge.common.ForgeMod; -import net.minecraftforge.network.NetworkHooks; +import net.neoforged.neoforge.common.NeoForgeMod; +import com.talhanation.workers.network.compat.WorkersNetworkHooks; import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; @@ -64,16 +63,16 @@ public CourierEntity(EntityType entityType, Leve // ── Synced data ──────────────────────────────────────────────────────────── @Override - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(ROUTE_DATA, new CompoundTag()); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(ROUTE_DATA, new CompoundTag()); } public void syncRouteData() { CompoundTag nbt = new CompoundTag(); nbt.putBoolean("hasRoute", currentRoute != null); if (currentRoute != null) { - nbt.put("route", currentRoute.toNBT()); + nbt.put("route", currentRoute.toNBT(this.registryAccess())); nbt.putInt("currentIndex", currentWaypointIndex); } nbt.putBoolean("useVehicleInventory", useVehicleInventory); @@ -215,11 +214,11 @@ public static AttributeSupplier.Builder setAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, 30.0D) .add(Attributes.MOVEMENT_SPEED, 0.3D) - .add(ForgeMod.SWIM_SPEED.get(), 0.3D) + .add(NeoForgeMod.SWIM_SPEED, 0.3D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.1D) .add(Attributes.ATTACK_DAMAGE, 0.5D) .add(Attributes.FOLLOW_RANGE, 32.0D) - .add(ForgeMod.ENTITY_REACH.get(), 0D) + .add(Attributes.ENTITY_INTERACTION_RANGE, 0D) .add(Attributes.ATTACK_SPEED); } @@ -231,7 +230,7 @@ public SpawnGroupData finalizeSpawn(@NotNull ServerLevelAccessor world, @NotNull ((WorkersGroundPathNavigation) this.getNavigation()).setCanOpenDoors(true); - this.populateDefaultEquipmentEnchantments(rand, difficulty); + this.populateDefaultEquipmentEnchantments(world, rand, difficulty); this.initSpawn(); @@ -276,7 +275,7 @@ public void addAdditionalSaveData(@NotNull CompoundTag nbt) { nbt.putBoolean("pendingShouldCycle", pendingShouldCycle); if (currentRoute != null) { - nbt.put("CourierRoute", currentRoute.toNBT()); + nbt.put("CourierRoute", currentRoute.toNBT(this.registryAccess())); } } @@ -286,7 +285,7 @@ public void readAdditionalSaveData(@NotNull CompoundTag nbt) { this.currentRoute = null; if (nbt.contains("CourierRoute")) { - this.currentRoute = CourierRoute.fromNBT(nbt.getCompound("CourierRoute")); + this.currentRoute = CourierRoute.fromNBT(this.registryAccess(), nbt.getCompound("CourierRoute")); } int savedIndex = nbt.getInt("currentWaypointIndex"); @@ -330,14 +329,9 @@ public InteractionResult mobInteract(@NotNull Player player, @NotNull Interactio return super.mobInteract(player, hand); } - @Override - public Screen getSpecialScreen(AbstractRecruitEntity abstractRecruitEntity, Player player) { - return null; - } - @Override public void openSpecialGUI(ServerPlayer serverPlayer) { - NetworkHooks.openScreen(serverPlayer, new MenuProvider() { + WorkersNetworkHooks.openScreen(serverPlayer, new MenuProvider() { @Override public @NotNull Component getDisplayName(){ return CourierEntity.this.getName(); @@ -354,4 +348,4 @@ public void openSpecialGUI(ServerPlayer serverPlayer) { public boolean hasOnlyScreen() { return false; } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/FarmerEntity.java b/src/main/java/com/talhanation/workers/entities/FarmerEntity.java index 1c8de5c7..9c186811 100644 --- a/src/main/java/com/talhanation/workers/entities/FarmerEntity.java +++ b/src/main/java/com/talhanation/workers/entities/FarmerEntity.java @@ -33,8 +33,8 @@ import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.WaterFluid; -import net.minecraftforge.common.ForgeMod; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.common.NeoForgeMod; +import net.minecraft.core.registries.BuiltInRegistries; import javax.annotation.Nullable; import java.util.List; @@ -64,11 +64,11 @@ public static AttributeSupplier.Builder setAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, 20.0D) .add(Attributes.MOVEMENT_SPEED, 0.3D) - .add(ForgeMod.SWIM_SPEED.get(), 0.3D) + .add(NeoForgeMod.SWIM_SPEED, 0.3D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.1D) .add(Attributes.ATTACK_DAMAGE, 0.5D) .add(Attributes.FOLLOW_RANGE, 32.0D) - .add(ForgeMod.ENTITY_REACH.get(), 0D) + .add(Attributes.ENTITY_INTERACTION_RANGE, 0D) .add(Attributes.ATTACK_SPEED); } @@ -78,15 +78,15 @@ public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstanc RandomSource randomsource = world.getRandom(); SpawnGroupData ilivingentitydata = super.finalizeSpawn(world, difficultyInstance, reason, data, nbt); ((WorkersGroundPathNavigation)this.getNavigation()).setCanOpenDoors(true); - this.populateDefaultEquipmentEnchantments(randomsource, difficultyInstance); + this.populateDefaultEquipmentEnchantments(world, randomsource, difficultyInstance); this.initSpawn(); return ilivingentitydata; } - protected void defineSynchedData() { - super.defineSynchedData(); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); } @Override//not used @@ -114,7 +114,7 @@ public List inventoryInputHelp() { } public boolean isBucketWithWater(ItemStack itemStack) { if(itemStack.getItem() instanceof BucketItem bucketItem){ - Fluid fluid = bucketItem.getFluid(); + Fluid fluid = bucketItem.content; if(fluid instanceof WaterFluid || fluid.isSame(Fluids.WATER)) return true; } return false; @@ -136,7 +136,7 @@ public boolean wantsToKeep(ItemStack itemStack) { return super.wantsToKeep(itemStack); } public boolean wantsToPickUp(ItemStack itemStack) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(itemStack.getItem()); + ResourceLocation id = BuiltInRegistries.ITEM.getKey(itemStack.getItem()); if(id == null) return false; if(WorkersServerConfig.FarmerPickup.get().contains(id.toString())) return true; @@ -171,4 +171,4 @@ protected void finalizeBlockBreak(BlockPos pos) { public AbstractWorkAreaEntity getCurrentWorkArea(){ return currentCropArea; } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/FishermanEntity.java b/src/main/java/com/talhanation/workers/entities/FishermanEntity.java index 54d0eb3b..f7368e9e 100644 --- a/src/main/java/com/talhanation/workers/entities/FishermanEntity.java +++ b/src/main/java/com/talhanation/workers/entities/FishermanEntity.java @@ -23,8 +23,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.common.ForgeMod; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.common.NeoForgeMod; +import net.minecraft.core.registries.BuiltInRegistries; import javax.annotation.Nullable; import java.util.List; @@ -46,11 +46,11 @@ public static AttributeSupplier.Builder setAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, 20.0D) .add(Attributes.MOVEMENT_SPEED, 0.3D) - .add(ForgeMod.SWIM_SPEED.get(), 0.3D) + .add(NeoForgeMod.SWIM_SPEED, 0.3D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.1D) .add(Attributes.ATTACK_DAMAGE, 0.5D) .add(Attributes.FOLLOW_RANGE, 32.0D) - .add(ForgeMod.ENTITY_REACH.get(), 0D) + .add(Attributes.ENTITY_INTERACTION_RANGE, 0D) .add(Attributes.ATTACK_SPEED); } @@ -59,15 +59,15 @@ public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstanc RandomSource randomsource = world.getRandom(); SpawnGroupData ilivingentitydata = super.finalizeSpawn(world, difficultyInstance, reason, data, nbt); ((WorkersGroundPathNavigation)this.getNavigation()).setCanOpenDoors(true); - this.populateDefaultEquipmentEnchantments(randomsource, difficultyInstance); + this.populateDefaultEquipmentEnchantments(world, randomsource, difficultyInstance); this.initSpawn(); return ilivingentitydata; } - protected void defineSynchedData() { - super.defineSynchedData(); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); } @Override//not used @@ -105,7 +105,7 @@ public boolean wantsToKeep(ItemStack itemStack) { } public boolean wantsToPickUp(ItemStack itemStack) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(itemStack.getItem()); + ResourceLocation id = BuiltInRegistries.ITEM.getKey(itemStack.getItem()); if(id == null) return false; if(WorkersServerConfig.FishermanPickup.get().contains(id.toString())) return true; diff --git a/src/main/java/com/talhanation/workers/entities/FishingBobberEntity.java b/src/main/java/com/talhanation/workers/entities/FishingBobberEntity.java index 0473eada..029d3b12 100644 --- a/src/main/java/com/talhanation/workers/entities/FishingBobberEntity.java +++ b/src/main/java/com/talhanation/workers/entities/FishingBobberEntity.java @@ -20,7 +20,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.network.NetworkHooks; +import com.talhanation.workers.network.compat.WorkersNetworkHooks; import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; @@ -46,8 +46,8 @@ public FishingBobberEntity(Level level, FishermanEntity owner) { } @Override - protected void defineSynchedData() { - this.entityData.define(OWNER_UUID, Optional.empty()); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + builder.define(OWNER_UUID, Optional.empty()); } @Override @@ -193,7 +193,7 @@ public void addAdditionalSaveData(CompoundTag nbt) { } @Override - public @NotNull Packet getAddEntityPacket() { - return NetworkHooks.getEntitySpawningPacket(this); + public @NotNull Packet getAddEntityPacket(net.minecraft.server.level.ServerEntity serverEntity) { + return super.getAddEntityPacket(serverEntity); } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/LumberjackEntity.java b/src/main/java/com/talhanation/workers/entities/LumberjackEntity.java index fad0efab..916f6f44 100644 --- a/src/main/java/com/talhanation/workers/entities/LumberjackEntity.java +++ b/src/main/java/com/talhanation/workers/entities/LumberjackEntity.java @@ -30,8 +30,8 @@ import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.SaplingBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.common.ForgeMod; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.common.NeoForgeMod; +import net.minecraft.core.registries.BuiltInRegistries; import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; @@ -54,11 +54,11 @@ public static AttributeSupplier.Builder setAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, 20.0D) .add(Attributes.MOVEMENT_SPEED, 0.3D) - .add(ForgeMod.SWIM_SPEED.get(), 0.3D) + .add(NeoForgeMod.SWIM_SPEED, 0.3D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.1D) .add(Attributes.ATTACK_DAMAGE, 0.5D) .add(Attributes.FOLLOW_RANGE, 32.0D) - .add(ForgeMod.ENTITY_REACH.get(), 0D) + .add(Attributes.ENTITY_INTERACTION_RANGE, 0D) .add(Attributes.ATTACK_SPEED); } @@ -68,15 +68,15 @@ public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstanc RandomSource randomsource = world.getRandom(); SpawnGroupData ilivingentitydata = super.finalizeSpawn(world, difficultyInstance, reason, data, nbt); ((WorkersGroundPathNavigation)this.getNavigation()).setCanOpenDoors(true); - this.populateDefaultEquipmentEnchantments(randomsource, difficultyInstance); + this.populateDefaultEquipmentEnchantments(world, randomsource, difficultyInstance); this.initSpawn(); return ilivingentitydata; } - protected void defineSynchedData() { - super.defineSynchedData(); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); } @Override//not used @@ -117,7 +117,7 @@ public boolean wantsToKeep(ItemStack itemStack) { return super.wantsToKeep(itemStack); } public boolean wantsToPickUp(ItemStack itemStack) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(itemStack.getItem()); + ResourceLocation id = BuiltInRegistries.ITEM.getKey(itemStack.getItem()); if(id == null) return false; if(WorkersServerConfig.LumberjackPickup.get().contains(id.toString())) return true; diff --git a/src/main/java/com/talhanation/workers/entities/MerchantEntity.java b/src/main/java/com/talhanation/workers/entities/MerchantEntity.java index c5483cb8..4edb5822 100644 --- a/src/main/java/com/talhanation/workers/entities/MerchantEntity.java +++ b/src/main/java/com/talhanation/workers/entities/MerchantEntity.java @@ -42,8 +42,8 @@ import net.minecraft.world.item.trading.MerchantOffer; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraftforge.common.ForgeMod; -import net.minecraftforge.network.NetworkHooks; +import net.neoforged.neoforge.common.NeoForgeMod; +import com.talhanation.workers.network.compat.WorkersNetworkHooks; import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; @@ -88,15 +88,15 @@ public boolean shouldLoadChunk() { } @Override - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(TRADES, new CompoundTag()); - this.entityData.define(TRADER_PROGRESS, 0); - this.entityData.define(TRADER_LEVEL, 1); - this.entityData.define(IS_TRADING, false); - this.entityData.define(IS_CREATIVE, false); - this.entityData.define(MARKET_NAME, ""); - this.entityData.define(DAILY_REFRESH, false); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(TRADES, new CompoundTag()); + builder.define(TRADER_PROGRESS, 0); + builder.define(TRADER_LEVEL, 1); + builder.define(IS_TRADING, false); + builder.define(IS_CREATIVE, false); + builder.define(MARKET_NAME, ""); + builder.define(DAILY_REFRESH, false); } @Override @@ -139,7 +139,7 @@ protected void registerGoals() { @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); - nbt.put("Trades", WorkersMerchantTrade.listToNbt(getTrades())); + nbt.put("Trades", WorkersMerchantTrade.listToNbt(this.registryAccess(), getTrades())); nbt.putInt("TraderProgress", this.getTraderProgress()); nbt.putInt("TraderLevel", this.getTraderLevel()); nbt.putBoolean("isCreative", this.isCreative()); @@ -150,7 +150,7 @@ public void addAdditionalSaveData(CompoundTag nbt) { @Override public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); - this.setTrades(WorkersMerchantTrade.listFromNbt(nbt.getCompound("Trades"))); + this.setTrades(WorkersMerchantTrade.listFromNbt(this.registryAccess(), nbt.getCompound("Trades"))); this.setTraderProgress(nbt.getInt("TraderProgress")); this.setTraderLevel(nbt.getInt("TraderLevel")); this.setCreative(nbt.getBoolean("isCreative")); @@ -181,11 +181,11 @@ public static AttributeSupplier.Builder setAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, 50.0D) .add(Attributes.MOVEMENT_SPEED, 0.3D) - .add(ForgeMod.SWIM_SPEED.get(), 0.3D) + .add(NeoForgeMod.SWIM_SPEED, 0.3D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.1D) .add(Attributes.ATTACK_DAMAGE, 0.5D) .add(Attributes.FOLLOW_RANGE, 32.0D) - .add(ForgeMod.ENTITY_REACH.get(), 0D) + .add(Attributes.ENTITY_INTERACTION_RANGE, 0D) .add(Attributes.ATTACK_SPEED); } @@ -194,7 +194,7 @@ public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstanc RandomSource randomsource = world.getRandom(); SpawnGroupData ilivingentitydata = super.finalizeSpawn(world, difficultyInstance, reason, data, nbt); ((WorkersGroundPathNavigation) this.getNavigation()).setCanOpenDoors(true); - this.populateDefaultEquipmentEnchantments(randomsource, difficultyInstance); + this.populateDefaultEquipmentEnchantments(world, randomsource, difficultyInstance); this.initSpawn(); return ilivingentitydata; } @@ -249,7 +249,7 @@ public boolean canHoldItem(ItemStack itemStack) { public void openTradeGUI(Player player) { this.setTrading(true); if (player instanceof ServerPlayer sp) { - NetworkHooks.openScreen(sp, new MenuProvider() { + WorkersNetworkHooks.openScreen(sp, new MenuProvider() { public @NotNull Component getDisplayName() { return MerchantEntity.this.getName(); } public @NotNull AbstractContainerMenu createMenu(int i, @NotNull Inventory inv, @NotNull Player p) { return new MerchantTradeContainer(i, MerchantEntity.this, inv); @@ -263,12 +263,12 @@ public void openTradeGUI(Player player) { public void openAddEditTradeGUI(Player player, WorkersMerchantTrade trade) { if (player instanceof ServerPlayer sp) { this.setTrading(true); - NetworkHooks.openScreen(sp, new MenuProvider() { + WorkersNetworkHooks.openScreen(sp, new MenuProvider() { public @NotNull Component getDisplayName() { return Component.literal("trade_edit_screen"); } public @NotNull AbstractContainerMenu createMenu(int i, @NotNull Inventory inv, @NotNull Player p) { return new MerchantAddEditTradeContainer(i, MerchantEntity.this, inv, trade); } - }, buf -> { buf.writeUUID(this.getUUID()); buf.writeNbt(trade.toNbt()); }); + }, buf -> { buf.writeUUID(this.getUUID()); buf.writeNbt(trade.toNbt(this.registryAccess())); }); } else { WorkersMain.SIMPLE_CHANNEL.sendToServer(new MessageOpenMerchantEditTradeScreen(player, this.getUUID(), trade)); } @@ -277,12 +277,12 @@ public void openAddEditTradeGUI(Player player, WorkersMerchantTrade trade) { public void openVillagerTradeGUI(Player player, WorkersMerchantTrade trade) { if (player instanceof ServerPlayer sp) { this.setTrading(true); - NetworkHooks.openScreen(sp, new MenuProvider() { + WorkersNetworkHooks.openScreen(sp, new MenuProvider() { public @NotNull Component getDisplayName() { return Component.literal("villager_trade_edit_screen"); } public @NotNull AbstractContainerMenu createMenu(int i, @NotNull Inventory inv, @NotNull Player p) { return new MerchantAddEditVillagerTradeContainer(i, MerchantEntity.this, inv, trade); } - }, buf -> { buf.writeUUID(this.getUUID()); buf.writeNbt(trade.toNbt()); }); + }, buf -> { buf.writeUUID(this.getUUID()); buf.writeNbt(trade.toNbt(this.registryAccess())); }); } else { WorkersMain.SIMPLE_CHANNEL.sendToServer(new MessageOpenMerchantVillagerTradeScreen(player, this.getUUID(), trade)); } @@ -322,11 +322,11 @@ public int getMaxAvailableTrades(){ } public List getTrades() { - return WorkersMerchantTrade.listFromNbt(this.entityData.get(TRADES)); + return WorkersMerchantTrade.listFromNbt(this.registryAccess(), this.entityData.get(TRADES)); } public void setTrades(List list) { - this.entityData.set(TRADES, WorkersMerchantTrade.listToNbt(list)); + this.entityData.set(TRADES, WorkersMerchantTrade.listToNbt(this.registryAccess(), list)); } public void addOrUpdateTrade(WorkersMerchantTrade trade) { @@ -590,7 +590,7 @@ public static boolean areItemStacksEqual(ItemStack a, ItemStack b, boolean allow return a.getItem() == b.getItem(); } else{ - return ItemStack.isSameItemSameTags(a, b); + return ItemStack.isSameItemSameComponents(a, b); } } @@ -713,4 +713,4 @@ public Component TEXT_NO_SPACE_OWNER(){ public String getEmbargoTeamID() { return this.getTeam() != null ? this.getTeam().getName() : ""; } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/MinerEntity.java b/src/main/java/com/talhanation/workers/entities/MinerEntity.java index ea3cba39..6deb7c8d 100644 --- a/src/main/java/com/talhanation/workers/entities/MinerEntity.java +++ b/src/main/java/com/talhanation/workers/entities/MinerEntity.java @@ -25,10 +25,9 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.common.ForgeMod; -import net.minecraftforge.common.Tags; -import net.minecraftforge.common.TierSortingRegistry; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.common.NeoForgeMod; +import net.neoforged.neoforge.common.Tags; +import net.minecraft.core.registries.BuiltInRegistries; import javax.annotation.Nullable; import java.util.List; @@ -50,11 +49,11 @@ public static AttributeSupplier.Builder setAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, 40.0D) .add(Attributes.MOVEMENT_SPEED, 0.3D) - .add(ForgeMod.SWIM_SPEED.get(), 0.3D) + .add(NeoForgeMod.SWIM_SPEED, 0.3D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.1D) .add(Attributes.ATTACK_DAMAGE, 0.5D) .add(Attributes.FOLLOW_RANGE, 32.0D) - .add(ForgeMod.ENTITY_REACH.get(), 0D) + .add(Attributes.ENTITY_INTERACTION_RANGE, 0D) .add(Attributes.ATTACK_SPEED); } @@ -63,15 +62,15 @@ public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstanc RandomSource randomsource = world.getRandom(); SpawnGroupData ilivingentitydata = super.finalizeSpawn(world, difficultyInstance, reason, data, nbt); ((WorkersGroundPathNavigation)this.getNavigation()).setCanOpenDoors(true); - this.populateDefaultEquipmentEnchantments(randomsource, difficultyInstance); + this.populateDefaultEquipmentEnchantments(world, randomsource, difficultyInstance); this.initSpawn(); return ilivingentitydata; } - protected void defineSynchedData() { - super.defineSynchedData(); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); } @Override//not used @@ -121,17 +120,17 @@ public boolean wantsToKeep(ItemStack itemStack) { return super.wantsToKeep(itemStack); } public boolean wantsToPickUp(ItemStack itemStack) { - ResourceLocation id = ForgeRegistries.ITEMS.getKey(itemStack.getItem()); + ResourceLocation id = BuiltInRegistries.ITEM.getKey(itemStack.getItem()); if(id == null) return false; if(WorkersServerConfig.MinerPickup.get().contains(id.toString())) return true; if(itemStack.getItem() instanceof BlockItem blockItem && blockItem.getBlock().defaultBlockState().is(BlockTags.BASE_STONE_OVERWORLD)) return true; - if(itemStack.getItem() instanceof BlockItem blockItem && blockItem.getBlock().defaultBlockState().is(Tags.Blocks.STONE)) return true; + if(itemStack.getItem() instanceof BlockItem blockItem && blockItem.getBlock().defaultBlockState().is(Tags.Blocks.STONES)) return true; if(itemStack.getItem() instanceof BlockItem blockItem && blockItem.getBlock().defaultBlockState().is(BlockTags.BASE_STONE_NETHER)) return true; if(itemStack.is(Tags.Items.RAW_MATERIALS)) return true; - if(itemStack.is(Tags.Items.SAND)) return true; - if(itemStack.is(Tags.Items.STONE)) return true; + if(itemStack.is(Tags.Items.SANDS)) return true; + if(itemStack.is(Tags.Items.STONES)) return true; if(itemStack.is(ItemTags.STONE_BRICKS)) return true; if(itemStack.is(ItemTags.COAL_ORES)) return true; if(itemStack.is(ItemTags.IRON_ORES)) return true; @@ -153,15 +152,15 @@ public AbstractWorkAreaEntity getCurrentWorkArea() { } public boolean shouldIgnoreBlock(BlockState blockState) { - ResourceLocation id = ForgeRegistries.BLOCKS.getKey(blockState.getBlock()); + ResourceLocation id = BuiltInRegistries.BLOCK.getKey(blockState.getBlock()); if(id == null) return false; return (WorkersServerConfig.MinerIgnore.get().contains(id.toString()) || !canBreakBlock(blockState)); } public boolean canBreakBlock(BlockState state){ ItemStack tool = this.getMainHandItem(); - if(tool.getItem() instanceof DiggerItem diggerItem){ - return TierSortingRegistry.isCorrectTierForDrops(diggerItem.getTier(), state); + if(tool.getItem() instanceof DiggerItem){ + return tool.isCorrectToolForDrops(state); } else return false; diff --git a/src/main/java/com/talhanation/workers/entities/ai/BuilderWorkGoal.java b/src/main/java/com/talhanation/workers/entities/ai/BuilderWorkGoal.java index 3c198344..03252c98 100644 --- a/src/main/java/com/talhanation/workers/entities/ai/BuilderWorkGoal.java +++ b/src/main/java/com/talhanation/workers/entities/ai/BuilderWorkGoal.java @@ -32,7 +32,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.core.registries.BuiltInRegistries; import javax.annotation.Nullable; import java.util.*; @@ -457,8 +457,8 @@ private void spawnScannedEntities(BuildArea buildArea) { int scanFacingVal = entityTag.getInt("facing"); // Look up entity type - ResourceLocation rl = new ResourceLocation(typeId); - EntityType entityType = ForgeRegistries.ENTITY_TYPES.getValue(rl); + ResourceLocation rl = ResourceLocation.parse(typeId); + EntityType entityType = BuiltInRegistries.ENTITY_TYPE.get(rl); if (entityType == null) continue; // Compute world position using same formula as setStartBuild / WorkerAreaRenderer @@ -717,4 +717,4 @@ public enum State{ DONE, ERROR } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/ai/CookWorkGoal.java b/src/main/java/com/talhanation/workers/entities/ai/CookWorkGoal.java index d393310a..9c5a9315 100644 --- a/src/main/java/com/talhanation/workers/entities/ai/CookWorkGoal.java +++ b/src/main/java/com/talhanation/workers/entities/ai/CookWorkGoal.java @@ -4,6 +4,7 @@ import com.talhanation.workers.entities.workarea.KitchenArea; import com.talhanation.workers.world.VillagerInviteRegistry; import net.minecraft.core.BlockPos; +import net.minecraft.core.component.DataComponents; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; @@ -332,14 +333,14 @@ private void loadIngredient(KitchenArea area, AbstractFurnaceBlockEntity furnace } private boolean isSmeltableFood(ItemStack stack, ServerLevel level) { - Optional recipe = level.getRecipeManager() - .getRecipeFor(RecipeType.SMELTING, new SimpleContainer(stack), level); + var recipe = level.getRecipeManager() + .getRecipeFor(RecipeType.SMELTING, new net.minecraft.world.item.crafting.SingleRecipeInput(stack), level); if (recipe.isEmpty()) return false; // Only accept if result is a food item - ItemStack result = recipe.get().getResultItem(level.registryAccess()); - return !result.isEmpty() && result.getItem().isEdible(); + ItemStack result = recipe.get().value().getResultItem(level.registryAccess()); + return !result.isEmpty() && result.has(DataComponents.FOOD); } // ── Villager trading ────────────────────────────────────────────────────── @@ -440,7 +441,7 @@ private ItemStack findCookedFood(KitchenArea area) { for (int i = 0; i < container.getContainerSize(); i++) { ItemStack slot = container.getItem(i); if (slot.isEmpty()) continue; - if (slot.getItem().isEdible()) return slot.copy(); + if (slot.has(DataComponents.FOOD)) return slot.copy(); } } return null; @@ -510,4 +511,4 @@ public enum State { WALK_TO_CENTER, WORKING } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/ai/CourierWorkGoal.java b/src/main/java/com/talhanation/workers/entities/ai/CourierWorkGoal.java index b639c4eb..dc0103a9 100644 --- a/src/main/java/com/talhanation/workers/entities/ai/CourierWorkGoal.java +++ b/src/main/java/com/talhanation/workers/entities/ai/CourierWorkGoal.java @@ -523,7 +523,7 @@ private int insertIntoContainer(Container destination, ItemStack stack, int amou int inserted = 0; for (int j = 0; j < destination.getContainerSize() && inserted < amount; j++){ ItemStack d = destination.getItem(j); - if (d.isEmpty() || !ItemStack.isSameItemSameTags(d, stack)) continue; + if (d.isEmpty() || !ItemStack.isSameItemSameComponents(d, stack)) continue; int canAdd = d.getMaxStackSize() - d.getCount(); if (canAdd <= 0) continue; int add = Math.min(canAdd, amount - inserted); diff --git a/src/main/java/com/talhanation/workers/entities/ai/FarmerWorkGoal.java b/src/main/java/com/talhanation/workers/entities/ai/FarmerWorkGoal.java index 457b6502..0369cff1 100644 --- a/src/main/java/com/talhanation/workers/entities/ai/FarmerWorkGoal.java +++ b/src/main/java/com/talhanation/workers/entities/ai/FarmerWorkGoal.java @@ -23,10 +23,9 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.common.IPlantable; -import net.minecraftforge.common.PlantType; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.FakePlayerFactory; +import net.neoforged.neoforge.common.SpecialPlantable; +import net.neoforged.neoforge.common.util.FakePlayer; +import net.neoforged.neoforge.common.util.FakePlayerFactory; import javax.annotation.Nullable; import java.util.*; @@ -258,7 +257,7 @@ else if(itemStack.getItem() instanceof BucketItem bucketItem){ ItemStack seedFromInv = farmer.getMatchingItem(itemStack -> itemStack.is(this.farmer.currentCropArea.getSeedStack().getItem())); if(seedFromInv == null){ ItemStack seedStack = this.farmer.currentCropArea.getSeedStack(); - this.neededItems.add(new NeededItem(itemStack -> ItemStack.isSameItemSameTags(itemStack, seedStack), stackToPlant.size(), true, this.farmer.currentCropArea.getUUID())); + this.neededItems.add(new NeededItem(itemStack -> ItemStack.isSameItemSameComponents(itemStack, seedStack), stackToPlant.size(), true, this.farmer.currentCropArea.getUUID())); setState(State.DONE); this.blockPos = null; return; @@ -400,14 +399,12 @@ else if (seedFromInv.getItem() instanceof BlockItem blockItem) { seedFromInv.shrink(1); this.farmer.swing(InteractionHand.MAIN_HAND); } - else if (seedFromInv.getItem() instanceof IPlantable plantable) { - if (plantable.getPlantType(farmer.getCommandSenderWorld(), blockPos) == PlantType.CROP) { - farmer.getCommandSenderWorld().setBlock(blockPos, plantable.getPlant(farmer.getCommandSenderWorld(), blockPos), 3); - - farmer.getCommandSenderWorld().playSound(null, blockPos.getX(), blockPos.getY(), blockPos.getZ(), SoundEvents.CROP_PLANTED, SoundSource.BLOCKS, 1.0F, 1.0F); - seedFromInv.shrink(1); - this.farmer.swing(InteractionHand.MAIN_HAND); - } + else if (seedFromInv.getItem() instanceof SpecialPlantable plantable + && plantable.canPlacePlantAtPosition(seedFromInv, farmer.getCommandSenderWorld(), blockPos, Direction.DOWN)) { + plantable.spawnPlantAtPosition(seedFromInv, farmer.getCommandSenderWorld(), blockPos, Direction.DOWN); + farmer.getCommandSenderWorld().playSound(null, blockPos.getX(), blockPos.getY(), blockPos.getZ(), SoundEvents.CROP_PLANTED, SoundSource.BLOCKS, 1.0F, 1.0F); + seedFromInv.shrink(1); + this.farmer.swing(InteractionHand.MAIN_HAND); } return true; } @@ -488,7 +485,7 @@ private void pickAt(BlockPos pos, BlockState state){ Vec3 hitVec = new Vec3(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); BlockHitResult hitResult = new BlockHitResult(hitVec, Direction.UP, pos, false); - state.use(level, fake, InteractionHand.MAIN_HAND, hitResult); + state.useWithoutItem(level, fake, hitResult); } /** @@ -651,4 +648,4 @@ public enum State{ ERROR } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/ai/FishermanWorkGoal.java b/src/main/java/com/talhanation/workers/entities/ai/FishermanWorkGoal.java index 4159d879..452b54e1 100644 --- a/src/main/java/com/talhanation/workers/entities/ai/FishermanWorkGoal.java +++ b/src/main/java/com/talhanation/workers/entities/ai/FishermanWorkGoal.java @@ -249,17 +249,23 @@ public boolean moveToPosition(BlockPos pos, int threshold){ public void spawnFishingLoot() { if(fishingBobber == null ) return; - double luckFromTool = EnchantmentHelper.getFishingLuckBonus(this.fisherman.getItemInHand(InteractionHand.MAIN_HAND)); + ServerLevel serverLevel = (ServerLevel) this.fisherman.getCommandSenderWorld(); + double luckFromTool = EnchantmentHelper.getFishingLuckBonus( + serverLevel, + this.fisherman.getItemInHand(InteractionHand.MAIN_HAND), + this.fisherman + ); double luckFromDepth = Math.min(25, fishingBobber.getWaterDepth())/10F; double luck = 0.1D + luckFromTool + luckFromDepth; - LootParams lootparams = (new LootParams.Builder((ServerLevel)this.fisherman.getCommandSenderWorld())) + LootParams lootparams = (new LootParams.Builder(serverLevel)) .withParameter(LootContextParams.ORIGIN, this.fisherman.position()) .withParameter(LootContextParams.TOOL, fisherman.getMainHandItem()) - .withParameter(LootContextParams.KILLER_ENTITY, this.fisherman) + .withParameter(LootContextParams.THIS_ENTITY, this.fishingBobber) + .withParameter(LootContextParams.ATTACKING_ENTITY, this.fisherman) .withLuck((float)(luck + luckFromTool)) .create(LootContextParamSets.FISHING); - LootTable loottable = this.fisherman.getCommandSenderWorld().getServer().getLootData().getLootTable(BuiltInLootTables.FISHING); + LootTable loottable = serverLevel.getServer().reloadableRegistries().getLootTable(BuiltInLootTables.FISHING); List list = loottable.getRandomItems(lootparams); MinecraftServer server = fisherman.getServer(); diff --git a/src/main/java/com/talhanation/workers/entities/ai/VillagerPickupFoodGoal.java b/src/main/java/com/talhanation/workers/entities/ai/VillagerPickupFoodGoal.java index e1f91674..07bcb370 100644 --- a/src/main/java/com/talhanation/workers/entities/ai/VillagerPickupFoodGoal.java +++ b/src/main/java/com/talhanation/workers/entities/ai/VillagerPickupFoodGoal.java @@ -4,6 +4,7 @@ import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.npc.Villager; import net.minecraft.world.food.FoodProperties; +import net.minecraft.core.component.DataComponents; import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.AABB; @@ -106,7 +107,7 @@ private ItemEntity findNearbyFoodItem() { private static boolean isFood(ItemStack stack) { if (stack.isEmpty()) return false; - FoodProperties food = stack.getItem().getFoodProperties(); - return food != null && food.getNutrition() > 0; + FoodProperties food = stack.get(DataComponents.FOOD); + return food != null && food.nutrition() > 0; } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/ai/navigation/WorkersAsyncPathfinder.java b/src/main/java/com/talhanation/workers/entities/ai/navigation/WorkersAsyncPathfinder.java index c707c812..0a8c8ab3 100644 --- a/src/main/java/com/talhanation/workers/entities/ai/navigation/WorkersAsyncPathfinder.java +++ b/src/main/java/com/talhanation/workers/entities/ai/navigation/WorkersAsyncPathfinder.java @@ -72,7 +72,7 @@ public Path findPath(@NotNull PathNavigationRegion p_77428_, @NotNull Mob p_7742 } else { List> map = Lists.newArrayList(); for (BlockPos pos : p_77430_) { - map.add(new java.util.AbstractMap.SimpleEntry<>(nodeEvaluator.getGoal(pos.getX(), pos.getY(), pos.getZ()), pos)); + map.add(new java.util.AbstractMap.SimpleEntry<>(nodeEvaluator.getTarget(pos.getX(), pos.getY(), pos.getZ()), pos)); } if (this.nodeEvaluatorGenerator == null) { @@ -271,4 +271,4 @@ private float trueDistance(Node node, Target target) { float dz = (float) target.z - node.z; return (float) Math.sqrt(dx * dx + dy * dy + dz * dz); } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/ai/navigation/WorkersGroundPathNavigation.java b/src/main/java/com/talhanation/workers/entities/ai/navigation/WorkersGroundPathNavigation.java index 18d9bc52..cfc11d7d 100644 --- a/src/main/java/com/talhanation/workers/entities/ai/navigation/WorkersGroundPathNavigation.java +++ b/src/main/java/com/talhanation/workers/entities/ai/navigation/WorkersGroundPathNavigation.java @@ -42,7 +42,7 @@ public WorkersGroundPathNavigation(PathfinderMob p_26448_, Level p_26449_) { } protected boolean canUpdatePath() { - return this.mob.onGround() || this.isInLiquid() || this.mob.isPassenger(); + return this.mob.onGround() || this.mob.isInLiquid() || this.mob.isPassenger(); } protected @NotNull Vec3 getTempMobPos() { @@ -101,13 +101,13 @@ protected void trimPath() { } - protected boolean hasValidPathType(BlockPathTypes p_26467_) { - if (p_26467_ == BlockPathTypes.WATER) { + protected boolean hasValidPathType(PathType p_26467_) { + if (p_26467_ == PathType.WATER) { return false; - } else if (p_26467_ == BlockPathTypes.LAVA) { + } else if (p_26467_ == PathType.LAVA) { return false; } else { - return p_26467_ != BlockPathTypes.OPEN; + return p_26467_ != PathType.OPEN; } } @@ -130,4 +130,4 @@ public boolean canOpenDoors() { public void setAvoidSun(boolean p_26491_) { this.avoidSun = p_26491_; } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/ai/navigation/WorkersNodeEvaluator.java b/src/main/java/com/talhanation/workers/entities/ai/navigation/WorkersNodeEvaluator.java index 07347148..844ff2a4 100644 --- a/src/main/java/com/talhanation/workers/entities/ai/navigation/WorkersNodeEvaluator.java +++ b/src/main/java/com/talhanation/workers/entities/ai/navigation/WorkersNodeEvaluator.java @@ -92,16 +92,16 @@ public void prepare(PathNavigationRegion region, Mob mob) { // made even a single stream block effectively impassable, so recruits // never set foot in water at all. Keep a modest base so shallow crossings // are allowed when clearly shorter. - mob.setPathfindingMalus(BlockPathTypes.WATER, WATER_CROSS_BASE); - mob.setPathfindingMalus(BlockPathTypes.WATER_BORDER, WATER_ADJACENT_MALUS); - mob.setPathfindingMalus(BlockPathTypes.TRAPDOOR, -1.0F); - mob.setPathfindingMalus(BlockPathTypes.DAMAGE_FIRE, 32.0F); - mob.setPathfindingMalus(BlockPathTypes.DAMAGE_CAUTIOUS, 32.0F); - mob.setPathfindingMalus(BlockPathTypes.DANGER_POWDER_SNOW, -1.0F); - mob.setPathfindingMalus(BlockPathTypes.DOOR_WOOD_CLOSED, 0.0F); - mob.setPathfindingMalus(BlockPathTypes.FENCE, -1.0F); - mob.setPathfindingMalus(BlockPathTypes.LAVA, -1.0F); - mob.setPathfindingMalus(BlockPathTypes.LEAVES, -1.0F); + mob.setPathfindingMalus(PathType.WATER, WATER_CROSS_BASE); + mob.setPathfindingMalus(PathType.WATER_BORDER, WATER_ADJACENT_MALUS); + mob.setPathfindingMalus(PathType.TRAPDOOR, -1.0F); + mob.setPathfindingMalus(PathType.DAMAGE_FIRE, 32.0F); + mob.setPathfindingMalus(PathType.DAMAGE_CAUTIOUS, 32.0F); + mob.setPathfindingMalus(PathType.DANGER_POWDER_SNOW, -1.0F); + mob.setPathfindingMalus(PathType.DOOR_WOOD_CLOSED, 0.0F); + mob.setPathfindingMalus(PathType.FENCE, -1.0F); + mob.setPathfindingMalus(PathType.LAVA, -1.0F); + mob.setPathfindingMalus(PathType.LEAVES, -1.0F); mob.onPathfindingStart(); } @@ -118,7 +118,7 @@ public void setTarget(int x, int y, int z) { protected @NotNull Node getNode(int x, int y, int z) { Node node = super.getNode(x, y, z); - BlockPathTypes blockpathtypes = this.getCachedBlockType(this.mob, x, y, z); + PathType blockpathtypes = this.getCachedBlockType(this.mob, x, y, z); float f = this.mob.getPathfindingMalus(blockpathtypes); if (f < 0.0F) { @@ -142,7 +142,7 @@ public void setTarget(int x, int y, int z) { int fall = scanFallDepth(pos); if (fall > MAX_SAFE_FALL) { node.costMalus = -1.0F; - node.type = BlockPathTypes.BLOCKED; + node.type = PathType.BLOCKED; return node; } else if (fall >= HARD_FALL_MIN) { node.costMalus += HARD_FALL_MALUS; @@ -151,7 +151,7 @@ public void setTarget(int x, int y, int z) { } // --- water ----------------------------------------------------------- - if (blockpathtypes == BlockPathTypes.WATER) { + if (blockpathtypes == PathType.WATER) { // node.costMalus already carries the base WATER malus (WATER_CROSS_BASE) // from the pathfinding malus set in prepare(). Here we only ADD the // width-dependent surcharge: a single block stays at ~base, a lake @@ -179,8 +179,8 @@ public void setTarget(int x, int y, int z) { // Prefer walking on top of configured path blocks (defaults: dirt_path, // gravel, cobblestone; plus anything in the PreferredPathBlocks config). - Block below = this.level.getBlockState(pos.below()).getBlock(); - if (below instanceof DirtPathBlock || below instanceof GravelBlock) { + Block below = this.currentContext.getBlockState(pos.below()).getBlock(); + if (below instanceof DirtPathBlock || below == Blocks.GRAVEL) { node.costMalus = Math.max(0.0F, node.costMalus - PATH_BLOCK_BONUS); } @@ -193,8 +193,8 @@ private int scanFallDepth(BlockPos pos) { int depth = 0; for (int dy = 1; dy <= MAX_SAFE_FALL + 2; dy++) { m.set(pos.getX(), pos.getY() - dy, pos.getZ()); - BlockPathTypes t = getBlockPathTypeStatic(this.level, m); - if (t != BlockPathTypes.OPEN && t != BlockPathTypes.WATER && t != BlockPathTypes.LAVA) { + PathType t = getBlockPathTypeStatic(this.currentContext.level(), m); + if (t != PathType.OPEN && t != PathType.WATER && t != PathType.LAVA) { return depth; } depth++; @@ -208,7 +208,7 @@ private boolean isWaterAdjacent(BlockPos pos) { BlockPos.MutableBlockPos m = new BlockPos.MutableBlockPos(); for (Direction dir : Direction.Plane.HORIZONTAL) { m.set(pos.getX() + dir.getStepX(), pos.getY(), pos.getZ() + dir.getStepZ()); - if (this.level.getFluidState(m).is(FluidTags.WATER)) { + if (this.currentContext.level().getFluidState(m).is(FluidTags.WATER)) { return true; } } @@ -237,13 +237,13 @@ private int waterSpanAlongAxis(BlockPos pos, int dx, int dz) { // forward for (int n = 1; n <= WATER_CROSS_MAX_PROBE; n++) { m.set(pos.getX() + dx * n, pos.getY(), pos.getZ() + dz * n); - if (this.level.getFluidState(m).is(FluidTags.WATER)) span++; + if (this.currentContext.level().getFluidState(m).is(FluidTags.WATER)) span++; else break; } // backward for (int n = 1; n <= WATER_CROSS_MAX_PROBE; n++) { m.set(pos.getX() - dx * n, pos.getY(), pos.getZ() - dz * n); - if (this.level.getFluidState(m).is(FluidTags.WATER)) span++; + if (this.currentContext.level().getFluidState(m).is(FluidTags.WATER)) span++; else break; } return span; @@ -255,10 +255,10 @@ private int countWalkableNeighbours(BlockPos pos) { BlockPos.MutableBlockPos m = new BlockPos.MutableBlockPos(); for (Direction dir : Direction.Plane.HORIZONTAL) { m.set(pos.getX() + dir.getStepX(), pos.getY(), pos.getZ() + dir.getStepZ()); - BlockPathTypes type = getBlockPathTypeStatic(this.level, m); - if (type != BlockPathTypes.BLOCKED - && type != BlockPathTypes.FENCE - && type != BlockPathTypes.LAVA + PathType type = getBlockPathTypeStatic(this.currentContext.level(), m); + if (type != PathType.BLOCKED + && type != PathType.FENCE + && type != PathType.LAVA && this.mob.getPathfindingMalus(type) >= 0.0F) { exits++; } @@ -266,63 +266,63 @@ private int countWalkableNeighbours(BlockPos pos) { return exits; } - protected static BlockPathTypes getBlockPathTypeRaw(BlockGetter p_77644_, BlockPos p_77645_) { + protected static PathType getBlockPathTypeRaw(BlockGetter p_77644_, BlockPos p_77645_) { BlockState blockstate = p_77644_.getBlockState(p_77645_); - BlockPathTypes type = blockstate.getBlockPathType(p_77644_, p_77645_, null); + PathType type = blockstate.getBlockPathType(p_77644_, p_77645_, null); if (type != null) return type; Block block = blockstate.getBlock(); if (blockstate.isAir()) { - return BlockPathTypes.OPEN; + return PathType.OPEN; } else if (!blockstate.is(BlockTags.TRAPDOORS) && !blockstate.is(Blocks.LILY_PAD) && !blockstate.is(Blocks.BIG_DRIPLEAF)) { if (blockstate.is(Blocks.POWDER_SNOW)) { - return BlockPathTypes.POWDER_SNOW; + return PathType.POWDER_SNOW; } else if (!blockstate.is(Blocks.CACTUS) && !blockstate.is(Blocks.SWEET_BERRY_BUSH)) { if (blockstate.is(Blocks.HONEY_BLOCK)) { - return BlockPathTypes.STICKY_HONEY; + return PathType.STICKY_HONEY; } else if (blockstate.is(Blocks.COCOA)) { - return BlockPathTypes.COCOA; + return PathType.COCOA; } else if (!blockstate.is(Blocks.WITHER_ROSE) && !blockstate.is(Blocks.POINTED_DRIPSTONE)) { FluidState fluidstate = p_77644_.getFluidState(p_77645_); - BlockPathTypes nonLoggableFluidPathType = fluidstate.getBlockPathType(p_77644_, p_77645_, null, false); + PathType nonLoggableFluidPathType = fluidstate.getBlockPathType(p_77644_, p_77645_, null, false); if (nonLoggableFluidPathType != null) return nonLoggableFluidPathType; if (fluidstate.is(FluidTags.LAVA)) { - return BlockPathTypes.LAVA; + return PathType.LAVA; } else if (isBurningBlock(blockstate)) { - return BlockPathTypes.DAMAGE_FIRE; + return PathType.DAMAGE_FIRE; } else if (block instanceof DoorBlock) { DoorBlock doorblock = (DoorBlock) block; if (blockstate.getValue(DoorBlock.OPEN)) { - return BlockPathTypes.DOOR_OPEN; + return PathType.DOOR_OPEN; } else { - return doorblock.type().canOpenByHand() ? BlockPathTypes.DOOR_WOOD_CLOSED : BlockPathTypes.DOOR_IRON_CLOSED; + return doorblock.type().canOpenByHand() ? PathType.DOOR_WOOD_CLOSED : PathType.DOOR_IRON_CLOSED; } } else if (block instanceof FenceGateBlock && !blockstate.getValue(DoorBlock.OPEN)) { - return BlockPathTypes.DOOR_WOOD_CLOSED; + return PathType.DOOR_WOOD_CLOSED; } else if (block instanceof FenceGateBlock && blockstate.getValue(DoorBlock.OPEN)) { - return BlockPathTypes.DOOR_OPEN; + return PathType.DOOR_OPEN; } else if (block instanceof BaseRailBlock) { - return BlockPathTypes.RAIL; + return PathType.RAIL; } else if (block instanceof LeavesBlock) { - return BlockPathTypes.LEAVES; + return PathType.LEAVES; } else if (!blockstate.is(BlockTags.FENCES) && !blockstate.is(BlockTags.WALLS) && (!(block instanceof FenceGateBlock) || blockstate.getValue(FenceGateBlock.OPEN))) { - if (!blockstate.isPathfindable(p_77644_, p_77645_, PathComputationType.LAND)) { - return BlockPathTypes.BLOCKED; + if (!blockstate.isPathfindable(PathComputationType.LAND)) { + return PathType.BLOCKED; } else { - BlockPathTypes loggableFluidPathType = fluidstate.getBlockPathType(p_77644_, p_77645_, null, true); + PathType loggableFluidPathType = fluidstate.getBlockPathType(p_77644_, p_77645_, null, true); if (loggableFluidPathType != null) return loggableFluidPathType; - return fluidstate.is(FluidTags.WATER) ? BlockPathTypes.WATER : BlockPathTypes.OPEN; + return fluidstate.is(FluidTags.WATER) ? PathType.WATER : PathType.OPEN; } } else { - return BlockPathTypes.FENCE; + return PathType.FENCE; } } else { - return BlockPathTypes.DAMAGE_CAUTIOUS; + return PathType.DAMAGE_CAUTIOUS; } } else { - return BlockPathTypes.DAMAGE_OTHER; + return PathType.DAMAGE_OTHER; } } else { - return BlockPathTypes.TRAPDOOR; + return PathType.TRAPDOOR; } } @@ -331,7 +331,7 @@ protected static BlockPathTypes getBlockPathTypeRaw(BlockGetter p_77644_, BlockP **/ public static final double SPACE_BETWEEN_WALL_POSTS = 0.5D; private static final double DEFAULT_MOB_JUMP_HEIGHT = 1.125D; - private final Long2ObjectMap pathTypesByPosCache = new Long2ObjectOpenHashMap<>(); + private final Long2ObjectMap pathTypesByPosCache = new Long2ObjectOpenHashMap<>(); private final Object2BooleanMap collisionCache = new Object2BooleanOpenHashMap<>(); /** positions whose custom cost shaping has already been applied this search. */ private final LongSet shapedPositions = new LongOpenHashSet(); @@ -347,7 +347,7 @@ public void done() { public Node getStart() { BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); int i = this.mob.getBlockY(); - BlockState blockstate = this.level.getBlockState(blockpos$mutableblockpos.set(this.mob.getX(), (double) i, this.mob.getZ())); + BlockState blockstate = this.currentContext.getBlockState(blockpos$mutableblockpos.set(this.mob.getX(), (double) i, this.mob.getZ())); if (!this.mob.canStandOnFluid(blockstate.getFluidState())) { if (this.canFloat() && this.mob.isInWater()) { while (true) { @@ -357,13 +357,13 @@ public Node getStart() { } ++i; - blockstate = this.level.getBlockState(blockpos$mutableblockpos.set(this.mob.getX(), (double) i, this.mob.getZ())); + blockstate = this.currentContext.getBlockState(blockpos$mutableblockpos.set(this.mob.getX(), (double) i, this.mob.getZ())); } } else if (this.mob.onGround()) { i = Mth.floor(this.mob.getY() + 0.5D); } else { BlockPos blockpos; - for (blockpos = this.mob.blockPosition(); (this.level.getBlockState(blockpos).isAir() || this.level.getBlockState(blockpos).isPathfindable(this.level, blockpos, PathComputationType.LAND)) && blockpos.getY() > this.mob.level().getMinBuildHeight(); blockpos = blockpos.below()) { + for (blockpos = this.mob.blockPosition(); (this.currentContext.getBlockState(blockpos).isAir() || this.currentContext.getBlockState(blockpos).isPathfindable(PathComputationType.LAND)) && blockpos.getY() > this.mob.level().getMinBuildHeight(); blockpos = blockpos.below()) { } i = blockpos.above().getY(); @@ -371,7 +371,7 @@ public Node getStart() { } else { while (this.mob.canStandOnFluid(blockstate.getFluidState())) { ++i; - blockstate = this.level.getBlockState(blockpos$mutableblockpos.set(this.mob.getX(), (double) i, this.mob.getZ())); + blockstate = this.currentContext.getBlockState(blockpos$mutableblockpos.set(this.mob.getX(), (double) i, this.mob.getZ())); } --i; @@ -396,21 +396,21 @@ protected Node getStartNode(BlockPos p_230632_) { } protected boolean canStartAt(BlockPos p_262596_) { - BlockPathTypes blockpathtypes = this.getBlockPathType(this.mob, p_262596_); - return blockpathtypes != BlockPathTypes.OPEN && this.mob.getPathfindingMalus(blockpathtypes) >= 0.0F; + PathType blockpathtypes = this.getBlockPathType(this.mob, p_262596_); + return blockpathtypes != PathType.OPEN && this.mob.getPathfindingMalus(blockpathtypes) >= 0.0F; } - public Target getGoal(double p_77550_, double p_77551_, double p_77552_) { - return this.getTargetFromNode(this.getNode(Mth.floor(p_77550_), Mth.floor(p_77551_), Mth.floor(p_77552_))); + public Target getTarget(double p_77550_, double p_77551_, double p_77552_) { + return this.getTargetNodeAt(p_77550_, p_77551_, p_77552_); } public int getNeighbors(Node[] p_77640_, Node p_77641_) { int i = 0; int j = 0; - BlockPathTypes blockpathtypes = this.getCachedBlockType(this.mob, p_77641_.x, p_77641_.y + 1, p_77641_.z); - BlockPathTypes blockpathtypes1 = this.getCachedBlockType(this.mob, p_77641_.x, p_77641_.y, p_77641_.z); - if (this.mob.getPathfindingMalus(blockpathtypes) >= 0.0F && blockpathtypes1 != BlockPathTypes.STICKY_HONEY) { - j = Mth.floor(Math.max(1.0F, this.mob.getStepHeight())); + PathType blockpathtypes = this.getCachedBlockType(this.mob, p_77641_.x, p_77641_.y + 1, p_77641_.z); + PathType blockpathtypes1 = this.getCachedBlockType(this.mob, p_77641_.x, p_77641_.y, p_77641_.z); + if (this.mob.getPathfindingMalus(blockpathtypes) >= 0.0F && blockpathtypes1 != PathType.STICKY_HONEY) { + j = Mth.floor(Math.max(1.0F, this.mob.maxUpStep())); } double d0 = this.getFloorLevel(new BlockPos(p_77641_.x, p_77641_.y, p_77641_.z)); @@ -466,8 +466,8 @@ protected boolean isDiagonalValid(Node p_77630_, @Nullable Node p_77631_, @Nulla if (p_77633_.closed) { return false; } else if (p_77632_.y <= p_77630_.y && p_77631_.y <= p_77630_.y) { - if (p_77631_.type != BlockPathTypes.WALKABLE_DOOR && p_77632_.type != BlockPathTypes.WALKABLE_DOOR && p_77633_.type != BlockPathTypes.WALKABLE_DOOR) { - boolean flag = p_77632_.type == BlockPathTypes.FENCE && p_77631_.type == BlockPathTypes.FENCE && (double) this.mob.getBbWidth() < 0.5D; + if (p_77631_.type != PathType.WALKABLE_DOOR && p_77632_.type != PathType.WALKABLE_DOOR && p_77633_.type != PathType.WALKABLE_DOOR) { + boolean flag = p_77632_.type == PathType.FENCE && p_77631_.type == PathType.FENCE && (double) this.mob.getBbWidth() < 0.5D; return p_77633_.costMalus >= 0.0F && (p_77632_.y < p_77630_.y || p_77632_.costMalus >= 0.0F || flag) && (p_77631_.y < p_77630_.y || p_77631_.costMalus >= 0.0F || flag); } else { return false; @@ -480,8 +480,8 @@ protected boolean isDiagonalValid(Node p_77630_, @Nullable Node p_77631_, @Nulla } } - private static boolean doesBlockHavePartialCollision(BlockPathTypes p_230626_) { - return p_230626_ == BlockPathTypes.FENCE || p_230626_ == BlockPathTypes.DOOR_WOOD_CLOSED || p_230626_ == BlockPathTypes.DOOR_IRON_CLOSED; + private static boolean doesBlockHavePartialCollision(PathType p_230626_) { + return p_230626_ == PathType.FENCE || p_230626_ == PathType.DOOR_WOOD_CLOSED || p_230626_ == PathType.DOOR_IRON_CLOSED; } private boolean canReachWithoutCollision(Node p_77625_) { @@ -501,7 +501,7 @@ private boolean canReachWithoutCollision(Node p_77625_) { } protected double getFloorLevel(BlockPos p_164733_) { - return (this.canFloat() || this.isAmphibious()) && this.level.getFluidState(p_164733_).is(FluidTags.WATER) ? (double) p_164733_.getY() + 0.5D : getFloorLevel(this.level, p_164733_); + return (this.canFloat() || this.isAmphibious()) && this.currentContext.level().getFluidState(p_164733_).is(FluidTags.WATER) ? (double) p_164733_.getY() + 0.5D : getFloorLevel(this.currentContext.level(), p_164733_); } public static double getFloorLevel(BlockGetter p_77612_, BlockPos p_77613_) { @@ -515,14 +515,14 @@ protected boolean isAmphibious() { } @Nullable - protected Node findAcceptedNode(int p_164726_, int p_164727_, int p_164728_, int p_164729_, double p_164730_, Direction p_164731_, BlockPathTypes p_164732_) { + protected Node findAcceptedNode(int p_164726_, int p_164727_, int p_164728_, int p_164729_, double p_164730_, Direction p_164731_, PathType p_164732_) { Node node = null; BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); double d0 = this.getFloorLevel(blockpos$mutableblockpos.set(p_164726_, p_164727_, p_164728_)); if (d0 - p_164730_ > this.getMobJumpHeight()) { return null; } else { - BlockPathTypes blockpathtypes = this.getCachedBlockType(this.mob, p_164726_, p_164727_, p_164728_); + PathType blockpathtypes = this.getCachedBlockType(this.mob, p_164726_, p_164727_, p_164728_); float f = this.mob.getPathfindingMalus(blockpathtypes); double d1 = (double) this.mob.getBbWidth() / 2.0D; if (f >= 0.0F) { @@ -533,10 +533,10 @@ protected Node findAcceptedNode(int p_164726_, int p_164727_, int p_164728_, int node = null; } - if (blockpathtypes != BlockPathTypes.WALKABLE && (!this.isAmphibious() || blockpathtypes != BlockPathTypes.WATER)) { - if ((node == null || node.costMalus < 0.0F) && p_164729_ > 0 && (blockpathtypes != BlockPathTypes.FENCE || this.canWalkOverFences()) && blockpathtypes != BlockPathTypes.UNPASSABLE_RAIL && blockpathtypes != BlockPathTypes.TRAPDOOR && blockpathtypes != BlockPathTypes.POWDER_SNOW) { + if (blockpathtypes != PathType.WALKABLE && (!this.isAmphibious() || blockpathtypes != PathType.WATER)) { + if ((node == null || node.costMalus < 0.0F) && p_164729_ > 0 && (blockpathtypes != PathType.FENCE || this.canWalkOverFences()) && blockpathtypes != PathType.UNPASSABLE_RAIL && blockpathtypes != PathType.TRAPDOOR && blockpathtypes != PathType.POWDER_SNOW) { node = this.findAcceptedNode(p_164726_, p_164727_ + 1, p_164728_, p_164729_ - 1, p_164730_, p_164731_, p_164732_); - if (node != null && (node.type == BlockPathTypes.OPEN || node.type == BlockPathTypes.WALKABLE) && this.mob.getBbWidth() < 1.0F) { + if (node != null && (node.type == PathType.OPEN || node.type == PathType.WALKABLE) && this.mob.getBbWidth() < 1.0F) { double d2 = (double) (p_164726_ - p_164731_.getStepX()) + 0.5D; double d3 = (double) (p_164728_ - p_164731_.getStepZ()) + 0.5D; AABB aabb = new AABB(d2 - d1, this.getFloorLevel(blockpos$mutableblockpos.set(d2, (double) (p_164727_ + 1), d3)) + 0.001D, d3 - d1, d2 + d1, (double) this.mob.getBbHeight() + this.getFloorLevel(blockpos$mutableblockpos.set((double) node.x, (double) node.y, (double) node.z)) - 0.002D, d3 + d1); @@ -546,15 +546,15 @@ protected Node findAcceptedNode(int p_164726_, int p_164727_, int p_164728_, int } } - if (!this.isAmphibious() && blockpathtypes == BlockPathTypes.WATER && !this.canFloat()) { - if (this.getCachedBlockType(this.mob, p_164726_, p_164727_ - 1, p_164728_) != BlockPathTypes.WATER) { + if (!this.isAmphibious() && blockpathtypes == PathType.WATER && !this.canFloat()) { + if (this.getCachedBlockType(this.mob, p_164726_, p_164727_ - 1, p_164728_) != PathType.WATER) { return node; } while (p_164727_ > this.mob.level().getMinBuildHeight()) { --p_164727_; blockpathtypes = this.getCachedBlockType(this.mob, p_164726_, p_164727_, p_164728_); - if (blockpathtypes != BlockPathTypes.WATER) { + if (blockpathtypes != PathType.WATER) { return node; } @@ -562,11 +562,11 @@ protected Node findAcceptedNode(int p_164726_, int p_164727_, int p_164728_, int } } - if (blockpathtypes == BlockPathTypes.OPEN) { + if (blockpathtypes == PathType.OPEN) { int j = 0; int i = p_164727_; - while (blockpathtypes == BlockPathTypes.OPEN) { + while (blockpathtypes == PathType.OPEN) { --p_164727_; if (p_164727_ < this.mob.level().getMinBuildHeight()) { return this.getBlockedNode(p_164726_, i, p_164728_); @@ -578,7 +578,7 @@ protected Node findAcceptedNode(int p_164726_, int p_164727_, int p_164728_, int blockpathtypes = this.getCachedBlockType(this.mob, p_164726_, p_164727_, p_164728_); f = this.mob.getPathfindingMalus(blockpathtypes); - if (blockpathtypes != BlockPathTypes.OPEN && f >= 0.0F) { + if (blockpathtypes != PathType.OPEN && f >= 0.0F) { node = this.getNodeAndUpdateCostToMax(p_164726_, p_164727_, p_164728_, blockpathtypes, f); break; } @@ -604,10 +604,10 @@ protected Node findAcceptedNode(int p_164726_, int p_164727_, int p_164728_, int } private double getMobJumpHeight() { - return Math.max(1.125D, (double) this.mob.getStepHeight()); + return Math.max(1.125D, (double) this.mob.maxUpStep()); } - private Node getNodeAndUpdateCostToMax(int p_230620_, int p_230621_, int p_230622_, BlockPathTypes p_230623_, float p_230624_) { + private Node getNodeAndUpdateCostToMax(int p_230620_, int p_230621_, int p_230622_, PathType p_230623_, float p_230624_) { Node node = this.getNode(p_230620_, p_230621_, p_230622_); node.type = p_230623_; node.costMalus = Math.max(node.costMalus, p_230624_); @@ -616,29 +616,39 @@ private Node getNodeAndUpdateCostToMax(int p_230620_, int p_230621_, int p_23062 private Node getBlockedNode(int p_230628_, int p_230629_, int p_230630_) { Node node = this.getNode(p_230628_, p_230629_, p_230630_); - node.type = BlockPathTypes.BLOCKED; + node.type = PathType.BLOCKED; node.costMalus = -1.0F; return node; } private boolean hasCollisions(AABB p_77635_) { return this.collisionCache.computeIfAbsent(p_77635_, (p_192973_) -> { - return !this.level.noCollision(this.mob, p_77635_); + return !this.currentContext.level().noCollision(this.mob, p_77635_); }); } - public BlockPathTypes getBlockPathType(BlockGetter p_265141_, int p_265661_, int p_265757_, int p_265716_, Mob p_265398_) { - EnumSet enumset = EnumSet.noneOf(BlockPathTypes.class); - BlockPathTypes blockpathtypes = BlockPathTypes.BLOCKED; - blockpathtypes = this.getBlockPathTypes(p_265141_, p_265661_, p_265757_, p_265716_, enumset, blockpathtypes, p_265398_.blockPosition()); - if (enumset.contains(BlockPathTypes.FENCE)) { - return BlockPathTypes.FENCE; - } else if (enumset.contains(BlockPathTypes.UNPASSABLE_RAIL)) { - return BlockPathTypes.UNPASSABLE_RAIL; + @Override + public PathType getPathTypeOfMob(PathfindingContext context, int x, int y, int z, Mob mob) { + return this.getBlockPathType(context.level(), x, y, z, mob); + } + + @Override + public PathType getPathType(PathfindingContext context, int x, int y, int z) { + return this.getBlockPathType(context.level(), x, y, z); + } + + public PathType getBlockPathType(BlockGetter p_265141_, int p_265661_, int p_265757_, int p_265716_, Mob p_265398_) { + EnumSet enumset = EnumSet.noneOf(PathType.class); + PathType blockpathtypes = PathType.BLOCKED; + blockpathtypes = this.getPathType(p_265141_, p_265661_, p_265757_, p_265716_, enumset, blockpathtypes, p_265398_.blockPosition()); + if (enumset.contains(PathType.FENCE)) { + return PathType.FENCE; + } else if (enumset.contains(PathType.UNPASSABLE_RAIL)) { + return PathType.UNPASSABLE_RAIL; } else { - BlockPathTypes blockpathtypes1 = BlockPathTypes.BLOCKED; + PathType blockpathtypes1 = PathType.BLOCKED; - for (BlockPathTypes blockpathtypes2 : enumset) { + for (PathType blockpathtypes2 : enumset) { if (p_265398_.getPathfindingMalus(blockpathtypes2) < 0.0F) { return blockpathtypes2; } @@ -648,18 +658,18 @@ public BlockPathTypes getBlockPathType(BlockGetter p_265141_, int p_265661_, int } } - return blockpathtypes == BlockPathTypes.OPEN && p_265398_.getPathfindingMalus(blockpathtypes1) == 0.0F && this.entityWidth <= 1 ? BlockPathTypes.OPEN : blockpathtypes1; + return blockpathtypes == PathType.OPEN && p_265398_.getPathfindingMalus(blockpathtypes1) == 0.0F && this.entityWidth <= 1 ? PathType.OPEN : blockpathtypes1; } } - public BlockPathTypes getBlockPathTypes(BlockGetter p_265227_, int p_265066_, int p_265537_, int p_265771_, EnumSet p_265263_, BlockPathTypes p_265458_, BlockPos p_265515_) { + public PathType getPathType(BlockGetter p_265227_, int p_265066_, int p_265537_, int p_265771_, EnumSet p_265263_, PathType p_265458_, BlockPos p_265515_) { for (int i = 0; i < this.entityWidth; ++i) { for (int j = 0; j < this.entityHeight; ++j) { for (int k = 0; k < this.entityDepth; ++k) { int l = i + p_265066_; int i1 = j + p_265537_; int j1 = k + p_265771_; - BlockPathTypes blockpathtypes = this.getBlockPathType(p_265227_, l, i1, j1); + PathType blockpathtypes = this.getBlockPathType(p_265227_, l, i1, j1); blockpathtypes = this.evaluateBlockPathType(p_265227_, p_265515_, blockpathtypes); if (i == 0 && j == 0 && k == 0) { p_265458_ = blockpathtypes; @@ -673,74 +683,74 @@ public BlockPathTypes getBlockPathTypes(BlockGetter p_265227_, int p_265066_, in return p_265458_; } - protected BlockPathTypes evaluateBlockPathType(BlockGetter p_265305_, BlockPos p_265350_, BlockPathTypes p_265551_) { + protected PathType evaluateBlockPathType(BlockGetter p_265305_, BlockPos p_265350_, PathType p_265551_) { boolean flag = this.canPassDoors(); - if (p_265551_ == BlockPathTypes.DOOR_WOOD_CLOSED && this.canOpenDoors() && flag) { - p_265551_ = BlockPathTypes.WALKABLE_DOOR; + if (p_265551_ == PathType.DOOR_WOOD_CLOSED && this.canOpenDoors() && flag) { + p_265551_ = PathType.WALKABLE_DOOR; } - if (p_265551_ == BlockPathTypes.DOOR_OPEN && !flag) { - p_265551_ = BlockPathTypes.BLOCKED; + if (p_265551_ == PathType.DOOR_OPEN && !flag) { + p_265551_ = PathType.BLOCKED; } - if (p_265551_ == BlockPathTypes.RAIL && !(p_265305_.getBlockState(p_265350_).getBlock() instanceof BaseRailBlock) && !(p_265305_.getBlockState(p_265350_.below()).getBlock() instanceof BaseRailBlock)) { - p_265551_ = BlockPathTypes.UNPASSABLE_RAIL; + if (p_265551_ == PathType.RAIL && !(p_265305_.getBlockState(p_265350_).getBlock() instanceof BaseRailBlock) && !(p_265305_.getBlockState(p_265350_.below()).getBlock() instanceof BaseRailBlock)) { + p_265551_ = PathType.UNPASSABLE_RAIL; } return p_265551_; } - protected BlockPathTypes getBlockPathType(Mob p_77573_, BlockPos p_77574_) { + protected PathType getBlockPathType(Mob p_77573_, BlockPos p_77574_) { return this.getCachedBlockType(p_77573_, p_77574_.getX(), p_77574_.getY(), p_77574_.getZ()); } - protected BlockPathTypes getCachedBlockType(Mob p_77568_, int p_77569_, int p_77570_, int p_77571_) { + protected PathType getCachedBlockType(Mob p_77568_, int p_77569_, int p_77570_, int p_77571_) { return this.pathTypesByPosCache.computeIfAbsent(BlockPos.asLong(p_77569_, p_77570_, p_77571_), (p_265015_) -> { - return this.getBlockPathType(this.level, p_77569_, p_77570_, p_77571_, p_77568_); + return this.getPathTypeOfMob(this.currentContext, p_77569_, p_77570_, p_77571_, p_77568_); }); } - public BlockPathTypes getBlockPathType(BlockGetter p_77576_, int p_77577_, int p_77578_, int p_77579_) { + public PathType getBlockPathType(BlockGetter p_77576_, int p_77577_, int p_77578_, int p_77579_) { return getBlockPathTypeStatic(p_77576_, new BlockPos.MutableBlockPos(p_77577_, p_77578_, p_77579_)); } - public static BlockPathTypes getBlockPathTypeStatic(BlockGetter p_77605_, BlockPos.MutableBlockPos p_77606_) { + public static PathType getBlockPathTypeStatic(BlockGetter p_77605_, BlockPos.MutableBlockPos p_77606_) { int i = p_77606_.getX(); int j = p_77606_.getY(); int k = p_77606_.getZ(); - BlockPathTypes blockpathtypes = getBlockPathTypeRaw(p_77605_, p_77606_); - if (blockpathtypes == BlockPathTypes.OPEN && j >= p_77605_.getMinBuildHeight() + 1) { - BlockPathTypes blockpathtypes1 = getBlockPathTypeRaw(p_77605_, p_77606_.set(i, j - 1, k)); - blockpathtypes = blockpathtypes1 != BlockPathTypes.WALKABLE && blockpathtypes1 != BlockPathTypes.OPEN && blockpathtypes1 != BlockPathTypes.WATER && blockpathtypes1 != BlockPathTypes.LAVA ? BlockPathTypes.WALKABLE : BlockPathTypes.OPEN; - if (blockpathtypes1 == BlockPathTypes.DAMAGE_FIRE) { - blockpathtypes = BlockPathTypes.DAMAGE_FIRE; + PathType blockpathtypes = getBlockPathTypeRaw(p_77605_, p_77606_); + if (blockpathtypes == PathType.OPEN && j >= p_77605_.getMinBuildHeight() + 1) { + PathType blockpathtypes1 = getBlockPathTypeRaw(p_77605_, p_77606_.set(i, j - 1, k)); + blockpathtypes = blockpathtypes1 != PathType.WALKABLE && blockpathtypes1 != PathType.OPEN && blockpathtypes1 != PathType.WATER && blockpathtypes1 != PathType.LAVA ? PathType.WALKABLE : PathType.OPEN; + if (blockpathtypes1 == PathType.DAMAGE_FIRE) { + blockpathtypes = PathType.DAMAGE_FIRE; } - if (blockpathtypes1 == BlockPathTypes.DAMAGE_OTHER) { - blockpathtypes = BlockPathTypes.DAMAGE_OTHER; + if (blockpathtypes1 == PathType.DAMAGE_OTHER) { + blockpathtypes = PathType.DAMAGE_OTHER; } - if (blockpathtypes1 == BlockPathTypes.STICKY_HONEY) { - blockpathtypes = BlockPathTypes.STICKY_HONEY; + if (blockpathtypes1 == PathType.STICKY_HONEY) { + blockpathtypes = PathType.STICKY_HONEY; } - if (blockpathtypes1 == BlockPathTypes.POWDER_SNOW) { - blockpathtypes = BlockPathTypes.DANGER_POWDER_SNOW; + if (blockpathtypes1 == PathType.POWDER_SNOW) { + blockpathtypes = PathType.DANGER_POWDER_SNOW; } - if (blockpathtypes1 == BlockPathTypes.DAMAGE_CAUTIOUS) { - blockpathtypes = BlockPathTypes.DAMAGE_CAUTIOUS; + if (blockpathtypes1 == PathType.DAMAGE_CAUTIOUS) { + blockpathtypes = PathType.DAMAGE_CAUTIOUS; } } - if (blockpathtypes == BlockPathTypes.WALKABLE) { + if (blockpathtypes == PathType.WALKABLE) { blockpathtypes = checkNeighbourBlocks(p_77605_, p_77606_.set(i, j, k), blockpathtypes); } return blockpathtypes; } - public static BlockPathTypes checkNeighbourBlocks(BlockGetter p_77608_, BlockPos.MutableBlockPos p_77609_, BlockPathTypes p_77610_) { + public static PathType checkNeighbourBlocks(BlockGetter p_77608_, BlockPos.MutableBlockPos p_77609_, PathType p_77610_) { int i = p_77609_.getX(); int j = p_77609_.getY(); int k = p_77609_.getZ(); @@ -751,25 +761,25 @@ public static BlockPathTypes checkNeighbourBlocks(BlockGetter p_77608_, BlockPos if (l != 0 || j1 != 0) { p_77609_.set(i + l, j + i1, k + j1); BlockState blockstate = p_77608_.getBlockState(p_77609_); - BlockPathTypes blockPathType = blockstate.getAdjacentBlockPathType(p_77608_, p_77609_, null, p_77610_); + PathType blockPathType = blockstate.getAdjacentBlockPathType(p_77608_, p_77609_, null, p_77610_); if (blockPathType != null) return blockPathType; FluidState fluidState = blockstate.getFluidState(); - BlockPathTypes fluidPathType = fluidState.getAdjacentBlockPathType(p_77608_, p_77609_, null, p_77610_); + PathType fluidPathType = fluidState.getAdjacentBlockPathType(p_77608_, p_77609_, null, p_77610_); if (fluidPathType != null) return fluidPathType; if (blockstate.is(Blocks.CACTUS) || blockstate.is(Blocks.SWEET_BERRY_BUSH)) { - return BlockPathTypes.DANGER_OTHER; + return PathType.DANGER_OTHER; } if (isBurningBlock(blockstate)) { - return BlockPathTypes.DANGER_FIRE; + return PathType.DANGER_FIRE; } if (p_77608_.getFluidState(p_77609_).is(FluidTags.WATER)) { - return BlockPathTypes.WATER_BORDER; + return PathType.WATER_BORDER; } if (blockstate.is(Blocks.WITHER_ROSE) || blockstate.is(Blocks.POINTED_DRIPSTONE)) { - return BlockPathTypes.DAMAGE_CAUTIOUS; + return PathType.DAMAGE_CAUTIOUS; } } } @@ -782,4 +792,4 @@ public static BlockPathTypes checkNeighbourBlocks(BlockGetter p_77608_, BlockPos public static boolean isBurningBlock(BlockState p_77623_) { return p_77623_.is(BlockTags.FIRE) || p_77623_.is(Blocks.LAVA) || p_77623_.is(Blocks.MAGMA_BLOCK) || CampfireBlock.isLitCampfire(p_77623_) || p_77623_.is(Blocks.LAVA_CAULDRON); } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/workarea/AbstractWorkAreaEntity.java b/src/main/java/com/talhanation/workers/entities/workarea/AbstractWorkAreaEntity.java index 70858f38..ff6de7fa 100644 --- a/src/main/java/com/talhanation/workers/entities/workarea/AbstractWorkAreaEntity.java +++ b/src/main/java/com/talhanation/workers/entities/workarea/AbstractWorkAreaEntity.java @@ -3,7 +3,6 @@ import com.talhanation.workers.WorkersMain; import com.talhanation.workers.entities.AbstractWorkerEntity; import com.talhanation.workers.network.MessageToClientOpenWorkAreaScreen; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -25,9 +24,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.network.PacketDistributor; +import com.talhanation.workers.network.compat.WorkersPacketDistributor; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -58,15 +55,15 @@ public AbstractWorkAreaEntity(EntityType type, Level level) { } @Override - protected void defineSynchedData() { - this.entityData.define(PLAYER_NAME, ""); - this.entityData.define(PLAYER_UUID, Optional.empty()); - this.entityData.define(WIDTH, 0); - this.entityData.define(HEIGHT, 0); - this.entityData.define(DEPTH, 0); - this.entityData.define(FACING, Direction.SOUTH); - this.entityData.define(TEAM_STRING_ID, ""); - this.entityData.define(TEAM_ACCESS, true); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + builder.define(PLAYER_NAME, ""); + builder.define(PLAYER_UUID, Optional.empty()); + builder.define(WIDTH, 0); + builder.define(HEIGHT, 0); + builder.define(DEPTH, 0); + builder.define(FACING, Direction.SOUTH); + builder.define(TEAM_STRING_ID, ""); + builder.define(TEAM_ACCESS, true); } @Override @@ -117,7 +114,7 @@ public void tick() { } else{ - WorkersMain.SIMPLE_CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MessageToClientOpenWorkAreaScreen(this.getUUID())); + WorkersMain.SIMPLE_CHANNEL.send(WorkersPacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MessageToClientOpenWorkAreaScreen(this.getUUID())); return InteractionResult.SUCCESS; } } @@ -226,7 +223,7 @@ public AABB createArea() { case EAST -> end = start.offset(depth, height, width); // depth entlang +X, width entlang +Z default -> end = start.offset(-depth, height, -width); // WEST: depth entlang -X, width entlang -Z } - return new AABB(start, end); + return AABB.encapsulatingFullBlocks(start, end); } public static List getNearbyAreas(Level level, BlockPos center, int radius) { List nearby = new ArrayList<>(); @@ -339,8 +336,6 @@ public UUID getPlayerUUID(){ } public abstract Item getRenderItem(); - @OnlyIn(Dist.CLIENT) - public abstract Screen getScreen(Player player); public BlockPos getOriginPos() { return this.getOnPos(); @@ -350,4 +345,4 @@ public BlockPos getOriginPos() { public boolean isCustomNameVisible() { return false; } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/workarea/AnimalPenArea.java b/src/main/java/com/talhanation/workers/entities/workarea/AnimalPenArea.java index 21f0d337..70165c3d 100644 --- a/src/main/java/com/talhanation/workers/entities/workarea/AnimalPenArea.java +++ b/src/main/java/com/talhanation/workers/entities/workarea/AnimalPenArea.java @@ -1,8 +1,6 @@ package com.talhanation.workers.entities.workarea; -import com.talhanation.workers.client.gui.AnimalPenAreaScreen; import com.talhanation.workers.entities.AnimalFarmerEntity; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; @@ -18,9 +16,7 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.pathfinder.BlockPathTypes; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.world.level.pathfinder.PathType; import java.util.Stack; @@ -41,13 +37,13 @@ public class AnimalPenArea extends AbstractWorkAreaEntity { public AnimalPenArea(EntityType type, Level level) { super(type, level); } - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(ANIMAL_TYPE, 0); - this.entityData.define(MAX_ANIMALS, 12); - this.entityData.define(BREED, true); - this.entityData.define(SLAUGHTER, true); - this.entityData.define(SPECIAL, true); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(ANIMAL_TYPE, 0); + builder.define(MAX_ANIMALS, 12); + builder.define(BREED, true); + builder.define(SLAUGHTER, true); + builder.define(SPECIAL, true); } @Override @@ -87,12 +83,6 @@ public void tick() { if(breedTime > 0) breedTime--; } - @Override - @OnlyIn(Dist.CLIENT) - public Screen getScreen(Player player) { - return new AnimalPenAreaScreen(this, player); - } - public boolean isWorkerPerfectCandidate(AnimalFarmerEntity animalWorker) { if(animalWorker.getMatchingItem(stack -> stack.getItem() instanceof AxeItem) == ItemStack.EMPTY) { return false; diff --git a/src/main/java/com/talhanation/workers/entities/workarea/BuildArea.java b/src/main/java/com/talhanation/workers/entities/workarea/BuildArea.java index 68a609e1..ed9b6d11 100644 --- a/src/main/java/com/talhanation/workers/entities/workarea/BuildArea.java +++ b/src/main/java/com/talhanation/workers/entities/workarea/BuildArea.java @@ -1,12 +1,10 @@ package com.talhanation.workers.entities.workarea; import com.talhanation.workers.WorkersMain; -import com.talhanation.workers.client.gui.BuildAreaScreen; import com.talhanation.workers.entities.workarea.AbstractWorkAreaEntity; import com.talhanation.workers.network.MessageToClientOpenWorkAreaScreen; import com.talhanation.workers.world.BuildBlock; import com.talhanation.workers.world.BuildBlockParse; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.registries.BuiltInRegistries; @@ -23,7 +21,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; -import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -33,9 +31,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.*; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.network.PacketDistributor; +import com.talhanation.workers.network.compat.WorkersPacketDistributor; import javax.annotation.Nullable; import java.util.*; @@ -54,11 +50,11 @@ public BuildArea(EntityType type, Level level) { super(type, level); } - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(STRUCTURE, new CompoundTag()); - this.entityData.define(FREE_AREA, false); - this.entityData.define(ALWAYS_SHOW_PROJECTION, false); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(STRUCTURE, new CompoundTag()); + builder.define(FREE_AREA, false); + builder.define(ALWAYS_SHOW_PROJECTION, false); } @Override public void readAdditionalSaveData(CompoundTag tag) { @@ -90,12 +86,6 @@ public Item getRenderItem() { return Items.IRON_SHOVEL; } - @Override - @OnlyIn(Dist.CLIENT) - public Screen getScreen(Player player) { - return new BuildAreaScreen(this, player); - } - @Override public void tick() { super.tick(); @@ -182,8 +172,8 @@ private void spawnScannedEntities(CompoundTag tag, Direction scanFacing, Directi int relZ = entityTag.getInt("z"); int scanFacingVal = entityTag.getInt("facing"); - ResourceLocation rl = new ResourceLocation(typeId); - EntityType entityType = ForgeRegistries.ENTITY_TYPES.getValue(rl); + ResourceLocation rl = ResourceLocation.parse(typeId); + EntityType entityType = BuiltInRegistries.ENTITY_TYPE.get(rl); if (entityType == null) continue; BlockPos worldPos = origin @@ -421,4 +411,4 @@ public void removeBuildBlockToPlace(BlockPos blockPos) { public void removeMultiBlockToPlace(BlockPos blockPos) { stackToPlaceMultiBlock.removeIf(buildBlock -> buildBlock.getPos().equals(blockPos)); } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/workarea/CropArea.java b/src/main/java/com/talhanation/workers/entities/workarea/CropArea.java index 6af9a4e7..cdc4ab06 100644 --- a/src/main/java/com/talhanation/workers/entities/workarea/CropArea.java +++ b/src/main/java/com/talhanation/workers/entities/workarea/CropArea.java @@ -1,10 +1,8 @@ package com.talhanation.workers.entities.workarea; import com.talhanation.workers.WorkersMain; -import com.talhanation.workers.client.gui.CropAreaScreen; import com.talhanation.workers.compat.FarmersDelight; import com.talhanation.workers.entities.FarmerEntity; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -19,8 +17,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import java.util.Stack; @@ -38,16 +34,16 @@ public class CropArea extends AbstractWorkAreaEntity { public CropArea(EntityType type, Level level) { super(type, level); } - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(SEED_STACK, ItemStack.EMPTY); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(SEED_STACK, ItemStack.EMPTY); } @Override public void readAdditionalSaveData(CompoundTag tag) { super.readAdditionalSaveData(tag); if(tag.contains("seedItem")){ - ItemStack stack = ItemStack.of(tag.getCompound("seedItem")); + ItemStack stack = ItemStack.parseOptional(this.registryAccess(), tag.getCompound("seedItem")); this.setSeedStack(stack); } fieldType = FieldType.fromIndex(tag.getInt("fieldType")); @@ -56,21 +52,13 @@ public void readAdditionalSaveData(CompoundTag tag) { @Override public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); - CompoundTag nbt = new CompoundTag(); - this.getSeedStack().save(nbt); - tag.put("seedItem", nbt); + tag.put("seedItem", this.getSeedStack().saveOptional(this.registryAccess())); if(fieldType != null) tag.putInt("fieldType", fieldType.getIndex()); } public Item getRenderItem(){ return Items.IRON_HOE; } - - @Override - @OnlyIn(Dist.CLIENT) - public Screen getScreen(Player player) { - return new CropAreaScreen(this, player); - } public void scanBoneMealArea(){ if(area == null) area = this.getArea(); @@ -126,7 +114,7 @@ public void scanBreakArea(){ } } else if(fieldType == FieldType.STEM){ - if (state.getBlock() instanceof MelonBlock || state.getBlock() instanceof PumpkinBlock || (isBush(state) && !isStem(state))) { + if (state.is(Blocks.MELON) || state.is(Blocks.PUMPKIN) || (isBush(state) && !isStem(state))) { stackToBreak.push(pos.immutable()); } } @@ -269,7 +257,7 @@ public boolean isCrop(BlockState state){ } public boolean isStem(BlockState state){ - return state.getBlock() instanceof StemBlock || state.getBlock() instanceof StemGrownBlock || state.getBlock() instanceof AttachedStemBlock; + return state.getBlock() instanceof StemBlock || state.getBlock() instanceof AttachedStemBlock; } public boolean isCropDone(BlockState state){ @@ -277,7 +265,7 @@ public boolean isCropDone(BlockState state){ } public boolean isBoneMealable(BlockState state, Level level, BlockPos pos){ - return state.getBlock() instanceof BonemealableBlock bonemealable && bonemealable.isValidBonemealTarget(level, pos, state, level.isClientSide()); + return state.getBlock() instanceof BonemealableBlock bonemealable && bonemealable.isValidBonemealTarget(level, pos, state); } public void scanPickArea(){ @@ -378,4 +366,4 @@ public static FieldType fromIndex(int index) { throw new IllegalArgumentException("Invalid State index: " + index); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/workarea/FishingArea.java b/src/main/java/com/talhanation/workers/entities/workarea/FishingArea.java index 5d5683da..90886205 100644 --- a/src/main/java/com/talhanation/workers/entities/workarea/FishingArea.java +++ b/src/main/java/com/talhanation/workers/entities/workarea/FishingArea.java @@ -1,9 +1,7 @@ package com.talhanation.workers.entities.workarea; -import com.talhanation.workers.client.gui.FishingAreaScreen; import com.talhanation.workers.entities.AbstractWorkerEntity; import com.talhanation.workers.entities.FishermanEntity; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.EntityType; @@ -12,8 +10,6 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import java.util.ArrayList; import java.util.List; @@ -27,8 +23,8 @@ public class FishingArea extends AbstractWorkAreaEntity { public FishingArea(EntityType type, Level level) { super(type, level); } - protected void defineSynchedData() { - super.defineSynchedData(); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); } @Override @@ -45,12 +41,6 @@ public Item getRenderItem(){ return Items.FISHING_ROD; } - @Override - @OnlyIn(Dist.CLIENT) - public Screen getScreen(Player player) { - return new FishingAreaScreen(this, player); - } - @Override public boolean canWorkHere(AbstractWorkerEntity worker){ if(super.canWorkHere(worker)) { diff --git a/src/main/java/com/talhanation/workers/entities/workarea/HomeArea.java b/src/main/java/com/talhanation/workers/entities/workarea/HomeArea.java index 6e87c0f3..f8b6b7e1 100644 --- a/src/main/java/com/talhanation/workers/entities/workarea/HomeArea.java +++ b/src/main/java/com/talhanation/workers/entities/workarea/HomeArea.java @@ -1,8 +1,6 @@ package com.talhanation.workers.entities.workarea; -import com.talhanation.workers.client.gui.HomeAreaScreen; import com.talhanation.workers.entities.AbstractWorkerEntity; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -22,8 +20,6 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.phys.AABB; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nullable; import java.util.*; @@ -52,11 +48,11 @@ public HomeArea(EntityType type, Level level) { //////////////////////////////// LIFECYCLE ////////////////////////////////// @Override - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(RESIDENT_NAME, ""); - this.entityData.define(IS_PLAYER_HOME, false); - this.entityData.define(ROOM_QUALITY, 0); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(RESIDENT_NAME, ""); + builder.define(IS_PLAYER_HOME, false); + builder.define(ROOM_QUALITY, 0); } @Override @@ -128,12 +124,6 @@ public Item getRenderItem() { return Items.RED_BED; } - @Override - @OnlyIn(Dist.CLIENT) - public Screen getScreen(Player player) { - return new HomeAreaScreen(this, player); - } - //////////////////////////////// RESIDENT /////////////////////////////////// public boolean isOccupied() { diff --git a/src/main/java/com/talhanation/workers/entities/workarea/KitchenArea.java b/src/main/java/com/talhanation/workers/entities/workarea/KitchenArea.java index 2b436a14..39174283 100644 --- a/src/main/java/com/talhanation/workers/entities/workarea/KitchenArea.java +++ b/src/main/java/com/talhanation/workers/entities/workarea/KitchenArea.java @@ -1,9 +1,7 @@ package com.talhanation.workers.entities.workarea; -import com.talhanation.workers.client.gui.KitchenAreaScreen; import com.talhanation.workers.entities.AbstractWorkerEntity; import com.talhanation.workers.entities.CookEntity; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -20,8 +18,6 @@ import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import java.util.HashMap; import java.util.Map; @@ -43,14 +39,14 @@ public KitchenArea(EntityType type, Level level) { } @Override - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(FEED_VILLAGERS, true); - this.entityData.define(FURNACE_COUNT, 0); - this.entityData.define(CONTAINER_COUNT, 0); - this.entityData.define(COOK_NAME, "None"); - this.entityData.define(TOTAL_SLOTS, 0); - this.entityData.define(FREE_SLOTS, 0); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(FEED_VILLAGERS, true); + builder.define(FURNACE_COUNT, 0); + builder.define(CONTAINER_COUNT, 0); + builder.define(COOK_NAME, "None"); + builder.define(TOTAL_SLOTS, 0); + builder.define(FREE_SLOTS, 0); } @Override @@ -77,12 +73,6 @@ public Item getRenderItem() { return Items.FURNACE; } - @Override - @OnlyIn(Dist.CLIENT) - public Screen getScreen(Player player) { - return new KitchenAreaScreen(this, player); - } - // ── Scanning ────────────────────────────────────────────────────────────── public void scanArea() { @@ -139,7 +129,7 @@ public int countItemInContainers(ItemStack stack) { for (Container container : containerMap.values()) { for (int i = 0; i < container.getContainerSize(); i++) { ItemStack slot = container.getItem(i); - if (!slot.isEmpty() && ItemStack.isSameItemSameTags(slot, stack)) { + if (!slot.isEmpty() && ItemStack.isSameItemSameComponents(slot, stack)) { total += slot.getCount(); } } @@ -154,7 +144,7 @@ public boolean shrinkItemFromContainers(ItemStack stack, int count) { boolean changed = false; for (int i = 0; i < container.getContainerSize() && toShrink > 0; i++) { ItemStack slot = container.getItem(i); - if (!slot.isEmpty() && ItemStack.isSameItemSameTags(slot, stack)) { + if (!slot.isEmpty() && ItemStack.isSameItemSameComponents(slot, stack)) { int take = Math.min(toShrink, slot.getCount()); slot.shrink(take); toShrink -= take; @@ -182,7 +172,7 @@ public boolean depositItemToContainers(ItemStack stack, int count) { remaining -= put; changed = true; } - else if (ItemStack.isSameItemSameTags(slot, stack) && slot.getCount() < slot.getMaxStackSize()) { + else if (ItemStack.isSameItemSameComponents(slot, stack) && slot.getCount() < slot.getMaxStackSize()) { int put = Math.min(remaining, slot.getMaxStackSize() - slot.getCount()); slot.grow(put); remaining -= put; @@ -200,7 +190,7 @@ public boolean canAddItem(ItemStack toAdd) { for (int i = 0; i < container.getContainerSize(); i++) { ItemStack slot = container.getItem(i); if (slot.isEmpty()) return true; - if (ItemStack.isSameItemSameTags(slot, toAdd) && slot.getCount() < slot.getMaxStackSize()) return true; + if (ItemStack.isSameItemSameComponents(slot, toAdd) && slot.getCount() < slot.getMaxStackSize()) return true; } } return false; @@ -213,7 +203,7 @@ public int countFurnaceOutput(ItemStack stack) { int total = 0; for (AbstractFurnaceBlockEntity furnace : furnaceMap.values()) { ItemStack output = furnace.getItem(2); - if (!output.isEmpty() && ItemStack.isSameItemSameTags(output, stack)) { + if (!output.isEmpty() && ItemStack.isSameItemSameComponents(output, stack)) { total += output.getCount(); } } diff --git a/src/main/java/com/talhanation/workers/entities/workarea/LumberArea.java b/src/main/java/com/talhanation/workers/entities/workarea/LumberArea.java index 4f845b08..4993257a 100644 --- a/src/main/java/com/talhanation/workers/entities/workarea/LumberArea.java +++ b/src/main/java/com/talhanation/workers/entities/workarea/LumberArea.java @@ -1,11 +1,9 @@ package com.talhanation.workers.entities.workarea; import com.talhanation.workers.WorkersMain; -import com.talhanation.workers.client.gui.LumberAreaScreen; import com.talhanation.workers.compat.DynamicTrees; import com.talhanation.workers.entities.LumberjackEntity; import com.talhanation.workers.world.Tree; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.registries.BuiltInRegistries; @@ -24,8 +22,6 @@ import net.minecraft.world.level.block.SaplingBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nullable; import java.util.*; @@ -45,19 +41,19 @@ public LumberArea(EntityType type, Level level) { super(type, level); } - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(SAPLING_STACK, ItemStack.EMPTY); - this.entityData.define(REPLANT, true); - this.entityData.define(SHEAR_LEAVES, false); - this.entityData.define(STRIP_LOGS, false); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(SAPLING_STACK, ItemStack.EMPTY); + builder.define(REPLANT, true); + builder.define(SHEAR_LEAVES, false); + builder.define(STRIP_LOGS, false); } @Override public void readAdditionalSaveData(CompoundTag tag) { super.readAdditionalSaveData(tag); if(tag.contains("saplingItem")){ - ItemStack stack = ItemStack.of(tag.getCompound("saplingItem")); + ItemStack stack = ItemStack.parseOptional(this.registryAccess(), tag.getCompound("saplingItem")); this.setSaplingStack(stack); } this.setReplant(tag.getBoolean("replantTrees")); @@ -68,9 +64,7 @@ public void readAdditionalSaveData(CompoundTag tag) { @Override public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); - CompoundTag nbt = new CompoundTag(); - this.getSaplingStack().save(nbt); - tag.put("saplingItem", nbt); + tag.put("saplingItem", this.getSaplingStack().saveOptional(this.registryAccess())); tag.putBoolean("replantTrees", getReplant()); tag.putBoolean("shearLeaves", getShearLeaves()); tag.putBoolean("stripLogs", getStripLogs()); @@ -80,12 +74,6 @@ public Item getRenderItem(){ return Items.IRON_AXE; } - @Override - @OnlyIn(Dist.CLIENT) - public Screen getScreen(Player player) { - return new LumberAreaScreen(this, player); - } - public boolean isWorkerPerfectCandidate(LumberjackEntity lumberjack) { boolean needsSapling = this.getReplant(); boolean needsAxe = this.getStripLogs(); @@ -371,13 +359,13 @@ private boolean isLog(BlockState state) { @Nullable public static Block getStrippedBlock(BlockState state) { - Block strippedBlock = AxeItem.STRIPPABLES.get(state.getBlock()); - if(strippedBlock != null) return strippedBlock; + BlockState strippedState = AxeItem.getAxeStrippingState(state); + if (strippedState != null) return strippedState.getBlock(); ResourceLocation id = BuiltInRegistries.BLOCK.getKey(state.getBlock()); if(id == null) return null; - ResourceLocation strippedId = new ResourceLocation(id.getNamespace(), "stripped_" + id.getPath()); + ResourceLocation strippedId = ResourceLocation.fromNamespaceAndPath(id.getNamespace(), "stripped_" + id.getPath()); Block candidate = BuiltInRegistries.BLOCK.get(strippedId); if(candidate.getDescriptionId().contains("dynamictrees")){ @@ -429,4 +417,4 @@ public void setStripLogs(boolean replant) { public boolean getStripLogs(){ return entityData.get(STRIP_LOGS); } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/workarea/MarketArea.java b/src/main/java/com/talhanation/workers/entities/workarea/MarketArea.java index 64eb8207..43e7b0d7 100644 --- a/src/main/java/com/talhanation/workers/entities/workarea/MarketArea.java +++ b/src/main/java/com/talhanation/workers/entities/workarea/MarketArea.java @@ -1,9 +1,7 @@ package com.talhanation.workers.entities.workarea; -import com.talhanation.workers.client.gui.MarketAreaScreen; import com.talhanation.workers.entities.AbstractWorkerEntity; import com.talhanation.workers.entities.MerchantEntity; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import javax.annotation.Nullable; @@ -22,8 +20,6 @@ import net.minecraft.world.level.block.ChestBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import java.util.*; @@ -44,13 +40,13 @@ public MarketArea(EntityType type, Level level) { } @Override - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(IS_OPEN, true); - this.entityData.define(MARKET_NAME, "Market"); - this.entityData.define(MERCHANT_NAME, "None"); - this.entityData.define(TOTAL_SLOTS, 0); - this.entityData.define(FREE_SLOTS, 0); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(IS_OPEN, true); + builder.define(MARKET_NAME, "Market"); + builder.define(MERCHANT_NAME, "None"); + builder.define(TOTAL_SLOTS, 0); + builder.define(FREE_SLOTS, 0); } @Override @@ -78,12 +74,6 @@ public Item getRenderItem() { return Items.EMERALD; } - @Override - @OnlyIn(Dist.CLIENT) - public Screen getScreen(Player player) { - return new MarketAreaScreen(this, player); - } - public void scanContainers() { if (area == null) area = this.getArea(); containerMap.clear(); @@ -159,7 +149,7 @@ public void depositItemToContainers(ItemStack stack, int count) { container.setItem(i, newStack); remaining -= put; } - else if (ItemStack.isSameItemSameTags(slot, stack) && slot.getCount() < slot.getMaxStackSize()) { + else if (ItemStack.isSameItemSameComponents(slot, stack) && slot.getCount() < slot.getMaxStackSize()) { int put = Math.min(remaining, slot.getMaxStackSize() - slot.getCount()); slot.grow(put); remaining -= put; @@ -174,7 +164,7 @@ public boolean canAddItem(ItemStack toAdd) { for (Container container : containerMap.values()) { for(int i = 0; i < container.getContainerSize(); i ++) { ItemStack itemStack = container.getItem(i); - if (itemStack.isEmpty() || ItemStack.isSameItemSameTags(itemStack, toAdd) && itemStack.getCount() < itemStack.getMaxStackSize()) { + if (itemStack.isEmpty() || ItemStack.isSameItemSameComponents(itemStack, toAdd) && itemStack.getCount() < itemStack.getMaxStackSize()) { flag = true; break; } @@ -186,7 +176,7 @@ public boolean canAddItem(ItemStack toAdd) { private static boolean itemsMatch(ItemStack a, ItemStack b, boolean allowDamaged) { if (allowDamaged) return a.getItem() == b.getItem(); - return ItemStack.isSameItemSameTags(a, b); + return ItemStack.isSameItemSameComponents(a, b); } @Override public boolean canWorkHere(AbstractWorkerEntity worker) { diff --git a/src/main/java/com/talhanation/workers/entities/workarea/MiningArea.java b/src/main/java/com/talhanation/workers/entities/workarea/MiningArea.java index e3d00938..6c128be6 100644 --- a/src/main/java/com/talhanation/workers/entities/workarea/MiningArea.java +++ b/src/main/java/com/talhanation/workers/entities/workarea/MiningArea.java @@ -1,9 +1,7 @@ package com.talhanation.workers.entities.workarea; -import com.talhanation.workers.client.gui.MiningAreaScreen; import com.talhanation.workers.config.WorkersServerConfig; import com.talhanation.workers.entities.MinerEntity; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -20,10 +18,8 @@ import net.minecraft.world.level.material.FluidState; 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.minecraftforge.common.Tags; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.common.Tags; +import net.minecraft.core.registries.BuiltInRegistries; import java.util.Stack; import java.util.stream.Stream; @@ -42,15 +38,15 @@ public class MiningArea extends AbstractWorkAreaEntity { public MiningArea(EntityType type, Level level) { super(type, level); } - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(HEIGHT_OFFSET, 1); - this.entityData.define(CLOSE_FLOOR, false); - this.entityData.define(CLOSE_FLUIDS, true); - this.entityData.define(MINE_WALL_ORES, true); - this.entityData.define(FILL_ITEM, new ItemStack(Blocks.COBBLESTONE)); - this.entityData.define(MODE, MiningMode.CUSTOM.getIndex()); - this.entityData.define(KEEP_ON, false); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(HEIGHT_OFFSET, 1); + builder.define(CLOSE_FLOOR, false); + builder.define(CLOSE_FLUIDS, true); + builder.define(MINE_WALL_ORES, true); + builder.define(FILL_ITEM, new ItemStack(Blocks.COBBLESTONE)); + builder.define(MODE, MiningMode.CUSTOM.getIndex()); + builder.define(KEEP_ON, false); } @Override @@ -60,7 +56,7 @@ public void readAdditionalSaveData(CompoundTag tag) { this.setCloseFluids(tag.getBoolean("closeFluids")); this.setMineWallOres(tag.getBoolean("mineWallOres")); if (tag.contains("fillItem")) { - this.setFillItem(ItemStack.of(tag.getCompound("fillItem"))); + this.setFillItem(ItemStack.parseOptional(this.registryAccess(), tag.getCompound("fillItem"))); } this.setMode(tag.getInt("miningMode")); this.setKeepOn(tag.getBoolean("keepOn")); @@ -72,7 +68,7 @@ public void addAdditionalSaveData(CompoundTag tag) { tag.putBoolean("closeFloor", this.getCloseFloor()); tag.putBoolean("closeFluids", this.getCloseFluids()); tag.putBoolean("mineWallOres", this.getMineWallOres()); - tag.put("fillItem", this.getFillItem().save(new CompoundTag())); + tag.put("fillItem", this.getFillItem().saveOptional(this.registryAccess())); tag.putInt("miningMode", this.getMode().getIndex()); tag.putBoolean("keepOn", this.getKeepOn()); } @@ -86,12 +82,6 @@ public void tick() { public Item getRenderItem() { return Items.IRON_PICKAXE; } - - @Override - @OnlyIn(Dist.CLIENT) - public Screen getScreen(Player player) { - return new MiningAreaScreen(this, player); - } @Override public AABB createArea() { Direction facing = getFacing(); @@ -114,12 +104,12 @@ public AABB createArea() { int yReach = (getMode() == MiningMode.STAIRS_UP) ? (height - 1) : -(height - 1); BlockPos start = (getMode() == MiningMode.STAIRS_UP) ? getOnPos().above() : getOnPos().above(3); BlockPos end = start.offset(fwdX * width + sideX * depth, yReach, fwdZ * width + sideZ * depth); - return new AABB(start, end); + return AABB.encapsulatingFullBlocks(start, end); } BlockPos start = this.getOnPos().offset(0, this.getHeightOffset(), 0); BlockPos end = start.offset(fwdX * width + sideX * depth, height, fwdZ * width + sideZ * depth); - return new AABB(start, end); + return AABB.encapsulatingFullBlocks(start, end); } public boolean isStairs() { @@ -268,7 +258,7 @@ public boolean isStairsAir(BlockPos pos) { } public boolean shouldIgnore(BlockState state){ - ResourceLocation id = ForgeRegistries.BLOCKS.getKey(state.getBlock()); + ResourceLocation id = BuiltInRegistries.BLOCK.getKey(state.getBlock()); if(id == null) return false; return WorkersServerConfig.MinerIgnore.get().contains(id.toString()); } @@ -425,4 +415,4 @@ public static MiningMode fromIndex(int index) { } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/entities/workarea/StorageArea.java b/src/main/java/com/talhanation/workers/entities/workarea/StorageArea.java index 4eb8eb12..3ec43c22 100644 --- a/src/main/java/com/talhanation/workers/entities/workarea/StorageArea.java +++ b/src/main/java/com/talhanation/workers/entities/workarea/StorageArea.java @@ -1,8 +1,6 @@ package com.talhanation.workers.entities.workarea; -import com.talhanation.workers.client.gui.StorageAreaScreen; import com.talhanation.workers.entities.*; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -16,28 +14,27 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import java.util.*; public class StorageArea extends AbstractWorkAreaEntity implements IPermissionArea, Container { public static final EntityDataAccessor STORAGE_TYPES = SynchedEntityData.defineId(StorageArea.class, EntityDataSerializers.INT); - public Map storageMap = new HashMap<>(); + public Map storageMap = new LinkedHashMap<>(); public StorageArea(EntityType type, Level level) { super(type, level); } - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(STORAGE_TYPES, 0); + protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(STORAGE_TYPES, 0); } @Override public void readAdditionalSaveData(CompoundTag tag) { super.readAdditionalSaveData(tag); this.entityData.set(STORAGE_TYPES, tag.getInt("StorageTypes")); + this.storageMap.clear(); } @Override @@ -49,12 +46,6 @@ public void addAdditionalSaveData(CompoundTag tag) { public Item getRenderItem(){ return Items.CHEST; } - - @Override - @OnlyIn(Dist.CLIENT) - public Screen getScreen(Player player) { - return new StorageAreaScreen(this, player); - } public void scanStorageBlocks(){ if(area == null) area = this.getArea(); @@ -95,52 +86,99 @@ public EnumSet getStorageTypes() { } return set; } - //TODO: REMOVE ONCE RECRUITS HAS UPDATED OTHERWISE UPKEEP ON STORAGE DOES NOT WORK + /** + * Exposes every detected storage block as one logical container. Slot order follows the + * deterministic scan order of {@link BlockPos#betweenClosedStream}, so a global slot keeps + * referring to the same underlying chest until the area is rescanned. + */ @Override public int getContainerSize() { - return 0; + ensureStorageScanned(); + return storageMap.values().stream().mapToInt(Container::getContainerSize).sum(); } @Override public boolean isEmpty() { - return false; + ensureStorageScanned(); + return storageMap.values().stream().allMatch(Container::isEmpty); } @Override - public ItemStack getItem(int p_18941_) { - return null; + public ItemStack getItem(int slot) { + ContainerSlot resolved = resolveSlot(slot); + return resolved == null ? ItemStack.EMPTY : resolved.container().getItem(resolved.slot()); } @Override - public ItemStack removeItem(int p_18942_, int p_18943_) { - return null; + public ItemStack removeItem(int slot, int amount) { + ContainerSlot resolved = resolveSlot(slot); + return resolved == null + ? ItemStack.EMPTY + : resolved.container().removeItem(resolved.slot(), amount); } @Override - public ItemStack removeItemNoUpdate(int p_18951_) { - return null; + public ItemStack removeItemNoUpdate(int slot) { + ContainerSlot resolved = resolveSlot(slot); + return resolved == null + ? ItemStack.EMPTY + : resolved.container().removeItemNoUpdate(resolved.slot()); } @Override - public void setItem(int p_18944_, ItemStack p_18945_) { - + public void setItem(int slot, ItemStack stack) { + ContainerSlot resolved = resolveSlot(slot); + if (resolved != null) { + resolved.container().setItem(resolved.slot(), stack); + } } @Override public void setChanged() { - + ensureStorageScanned(); + storageMap.values().forEach(Container::setChanged); } @Override - public boolean stillValid(Player p_18946_) { - return false; + public boolean stillValid(Player player) { + if (this.isRemoved()) { + return false; + } + ensureStorageScanned(); + return storageMap.values().stream().allMatch(container -> container.stillValid(player)); } @Override public void clearContent() { + ensureStorageScanned(); + storageMap.values().forEach(Container::clearContent); + } + + private void ensureStorageScanned() { + if (storageMap.isEmpty() && !this.getCommandSenderWorld().isClientSide()) { + scanStorageBlocks(); + } + } + + private ContainerSlot resolveSlot(int globalSlot) { + if (globalSlot < 0) { + return null; + } + + ensureStorageScanned(); + int slot = globalSlot; + for (Container container : storageMap.values()) { + int size = container.getContainerSize(); + if (slot < size) { + return new ContainerSlot(container, slot); + } + slot -= size; + } + return null; + } + private record ContainerSlot(Container container, int slot) { } - //TODO ABOVE IS DESCRIPTION public enum StorageType { MINERS(0), LUMBERS(1), @@ -202,4 +240,4 @@ else if( worker instanceof CookEntity){ } return false; } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/init/ModBlocks.java b/src/main/java/com/talhanation/workers/init/ModBlocks.java index be35cfc7..2ca000b4 100644 --- a/src/main/java/com/talhanation/workers/init/ModBlocks.java +++ b/src/main/java/com/talhanation/workers/init/ModBlocks.java @@ -2,12 +2,12 @@ import com.talhanation.workers.WorkersMain; import net.minecraft.world.level.block.Block; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.minecraft.core.registries.Registries; public class ModBlocks { - public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, WorkersMain.MOD_ID); + public static final DeferredRegister BLOCKS = DeferredRegister.create(Registries.BLOCK, WorkersMain.MOD_ID); /* public static final RegistryObject MINER_BLOCK = BLOCKS.register("miner_block", diff --git a/src/main/java/com/talhanation/workers/init/ModEntityTypes.java b/src/main/java/com/talhanation/workers/init/ModEntityTypes.java index 3f9585fc..ae63160e 100644 --- a/src/main/java/com/talhanation/workers/init/ModEntityTypes.java +++ b/src/main/java/com/talhanation/workers/init/ModEntityTypes.java @@ -7,149 +7,141 @@ import net.minecraft.world.entity.MobCategory; import net.minecraft.world.entity.EntityType; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.minecraft.core.registries.Registries; +import net.neoforged.neoforge.registries.DeferredHolder; public class ModEntityTypes { public static final DeferredRegister> WORKER_TYPES = DeferredRegister - .create(ForgeRegistries.ENTITY_TYPES, WorkersMain.MOD_ID); + .create(Registries.ENTITY_TYPE, WorkersMain.MOD_ID); public static final DeferredRegister> ENTITY_TYPES = DeferredRegister - .create(ForgeRegistries.ENTITY_TYPES, WorkersMain.MOD_ID); - public static final RegistryObject> CROPAREA = ENTITY_TYPES.register("croparea", + .create(Registries.ENTITY_TYPE, WorkersMain.MOD_ID); + public static final DeferredHolder, EntityType> CROPAREA = ENTITY_TYPES.register("croparea", () -> EntityType.Builder.of(CropArea::new, MobCategory.MISC) .sized(1.2F, 2.00F) .fireImmune().noSummon() - .build(new ResourceLocation(WorkersMain.MOD_ID, "croparea").toString())); - public static final RegistryObject> LUMBERAREA = ENTITY_TYPES.register("lumberarea", + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "croparea").toString())); + public static final DeferredHolder, EntityType> LUMBERAREA = ENTITY_TYPES.register("lumberarea", () -> EntityType.Builder.of(LumberArea::new, MobCategory.MISC) .sized(1.2F, 2.00F) .fireImmune().noSummon() - .build(new ResourceLocation(WorkersMain.MOD_ID, "lumberarea").toString())); - public static final RegistryObject> BUILDAREA = ENTITY_TYPES.register("buildarea", + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "lumberarea").toString())); + public static final DeferredHolder, EntityType> BUILDAREA = ENTITY_TYPES.register("buildarea", () -> EntityType.Builder.of(BuildArea::new, MobCategory.MISC) .sized(1.2F, 2.00F) .fireImmune().noSummon() - .build(new ResourceLocation(WorkersMain.MOD_ID, "buildarea").toString())); - public static final RegistryObject> MININGAREA = ENTITY_TYPES.register("miningarea", + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "buildarea").toString())); + public static final DeferredHolder, EntityType> MININGAREA = ENTITY_TYPES.register("miningarea", () -> EntityType.Builder.of(MiningArea::new, MobCategory.MISC) .sized(1.2F, 2.00F) .fireImmune().noSummon() - .build(new ResourceLocation(WorkersMain.MOD_ID, "miningarea").toString())); - public static final RegistryObject> STORAGEAREA = ENTITY_TYPES.register("storagearea", + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "miningarea").toString())); + public static final DeferredHolder, EntityType> STORAGEAREA = ENTITY_TYPES.register("storagearea", () -> EntityType.Builder.of(StorageArea::new, MobCategory.MISC) .sized(1.2F, 2.00F) .fireImmune().noSummon() - .build(new ResourceLocation(WorkersMain.MOD_ID, "storagearea").toString())); + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "storagearea").toString())); - public static final RegistryObject> MARKETAREA = ENTITY_TYPES.register("marketarea", + public static final DeferredHolder, EntityType> MARKETAREA = ENTITY_TYPES.register("marketarea", () -> EntityType.Builder.of(MarketArea::new, MobCategory.MISC) .sized(1.2F, 2.00F) .fireImmune().noSummon() - .build(new ResourceLocation(WorkersMain.MOD_ID, "marketarea").toString())); + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "marketarea").toString())); - public static final RegistryObject> KITCHEN_AREA = ENTITY_TYPES.register("kitchenarea", + public static final DeferredHolder, EntityType> KITCHEN_AREA = ENTITY_TYPES.register("kitchenarea", () -> EntityType.Builder.of(KitchenArea::new, MobCategory.MISC) .sized(1.2F, 2.00F) .fireImmune().noSummon() - .build(new ResourceLocation(WorkersMain.MOD_ID, "kitchenarea").toString())); + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "kitchenarea").toString())); - public static final RegistryObject> FISHINGAREA = ENTITY_TYPES.register("fishingarea", + public static final DeferredHolder, EntityType> FISHINGAREA = ENTITY_TYPES.register("fishingarea", () -> EntityType.Builder.of(FishingArea::new, MobCategory.MISC) .sized(1.2F, 2.00F) .fireImmune().noSummon() - .build(new ResourceLocation(WorkersMain.MOD_ID, "fishingarea").toString())); + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "fishingarea").toString())); - public static final RegistryObject> ANIMAL_PEN_AREA = ENTITY_TYPES.register("animalpenarea", + public static final DeferredHolder, EntityType> ANIMAL_PEN_AREA = ENTITY_TYPES.register("animalpenarea", () -> EntityType.Builder.of(AnimalPenArea::new, MobCategory.MISC) .sized(1.2F, 2.00F) .fireImmune().noSummon() - .build(new ResourceLocation(WorkersMain.MOD_ID, "animalpenarea").toString())); + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "animalpenarea").toString())); - public static final RegistryObject> HOMEAREA = ENTITY_TYPES.register("homearea", + public static final DeferredHolder, EntityType> HOMEAREA = ENTITY_TYPES.register("homearea", () -> EntityType.Builder.of(HomeArea::new, MobCategory.MISC) .sized(1.2F, 2.00F) .fireImmune().noSummon() - .build(new ResourceLocation(WorkersMain.MOD_ID, "homearea").toString())); + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "homearea").toString())); - public static final RegistryObject> ANIMAL_FARMER = WORKER_TYPES.register("animal_farmer", + public static final DeferredHolder, EntityType> ANIMAL_FARMER = WORKER_TYPES.register("animal_farmer", () -> EntityType.Builder.of(AnimalFarmerEntity::new, MobCategory.CREATURE) .sized(0.6F, 1.95F) .canSpawnFarFromPlayer() - .setTrackingRange(32) - .setShouldReceiveVelocityUpdates(true) - .build(new ResourceLocation(WorkersMain.MOD_ID, "animal_farmer").toString())); + .clientTrackingRange(32) + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "animal_farmer").toString())); - public static final RegistryObject> LUMBERJACK = WORKER_TYPES.register("lumberjack", + public static final DeferredHolder, EntityType> LUMBERJACK = WORKER_TYPES.register("lumberjack", () -> EntityType.Builder.of(LumberjackEntity::new, MobCategory.CREATURE) .sized(0.6F, 1.95F) .canSpawnFarFromPlayer() - .setTrackingRange(32) - .setShouldReceiveVelocityUpdates(true) - .build(new ResourceLocation(WorkersMain.MOD_ID, "lumberjack").toString())); + .clientTrackingRange(32) + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "lumberjack").toString())); - public static final RegistryObject> FARMER = WORKER_TYPES.register("farmer", + public static final DeferredHolder, EntityType> FARMER = WORKER_TYPES.register("farmer", () -> EntityType.Builder.of(FarmerEntity::new, MobCategory.CREATURE) .sized(0.6F, 1.95F) .canSpawnFarFromPlayer() - .setTrackingRange(32) - .setShouldReceiveVelocityUpdates(true) - .build(new ResourceLocation(WorkersMain.MOD_ID, "farmer").toString())); + .clientTrackingRange(32) + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "farmer").toString())); - public static final RegistryObject> MINER = WORKER_TYPES.register("miner", + public static final DeferredHolder, EntityType> MINER = WORKER_TYPES.register("miner", () -> EntityType.Builder.of(MinerEntity::new, MobCategory.CREATURE) .sized(0.6F, 1.95F) .canSpawnFarFromPlayer() - .setTrackingRange(32) - .setShouldReceiveVelocityUpdates(true) - .build(new ResourceLocation(WorkersMain.MOD_ID, "miner").toString())); + .clientTrackingRange(32) + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "miner").toString())); - public static final RegistryObject> BUILDER = WORKER_TYPES.register("builder", + public static final DeferredHolder, EntityType> BUILDER = WORKER_TYPES.register("builder", () -> EntityType.Builder.of(BuilderEntity::new, MobCategory.CREATURE) .sized(0.6F, 1.95F) .canSpawnFarFromPlayer() - .setTrackingRange(32) - .setShouldReceiveVelocityUpdates(true) - .build(new ResourceLocation(WorkersMain.MOD_ID, "builder").toString())); + .clientTrackingRange(32) + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "builder").toString())); - public static final RegistryObject> MERCHANT = WORKER_TYPES.register("merchant", + public static final DeferredHolder, EntityType> MERCHANT = WORKER_TYPES.register("merchant", () -> EntityType.Builder.of(MerchantEntity::new, MobCategory.CREATURE) .sized(0.6F, 1.95F) .canSpawnFarFromPlayer() - .setTrackingRange(32) - .setShouldReceiveVelocityUpdates(true) - .build(new ResourceLocation(WorkersMain.MOD_ID, "merchant").toString())); + .clientTrackingRange(32) + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "merchant").toString())); - public static final RegistryObject> FISHERMAN = WORKER_TYPES.register("fisherman", + public static final DeferredHolder, EntityType> FISHERMAN = WORKER_TYPES.register("fisherman", () -> EntityType.Builder.of(FishermanEntity::new, MobCategory.CREATURE) .sized(0.6F, 1.95F) .canSpawnFarFromPlayer() - .setTrackingRange(32) - .setShouldReceiveVelocityUpdates(true) - .build(new ResourceLocation(WorkersMain.MOD_ID, "fisherman").toString())); + .clientTrackingRange(32) + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "fisherman").toString())); - public static final RegistryObject> COOK = WORKER_TYPES.register("cook", + public static final DeferredHolder, EntityType> COOK = WORKER_TYPES.register("cook", () -> EntityType.Builder.of(CookEntity::new, MobCategory.CREATURE) .sized(0.6F, 1.95F) .canSpawnFarFromPlayer() - .setTrackingRange(32) - .setShouldReceiveVelocityUpdates(true) - .build(new ResourceLocation(WorkersMain.MOD_ID, "cook").toString())); + .clientTrackingRange(32) + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "cook").toString())); - public static final RegistryObject> FISHING_BOBBER = ENTITY_TYPES.register("fishing_bobber", + public static final DeferredHolder, EntityType> FISHING_BOBBER = ENTITY_TYPES.register("fishing_bobber", () -> EntityType.Builder.of(FishingBobberEntity::new, MobCategory.MISC) .sized(0.25F, 0.25F) .clientTrackingRange(4) .updateInterval(5) - .build(new ResourceLocation(WorkersMain.MOD_ID, "fishing_bobber").toString())); + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "fishing_bobber").toString())); - public static final RegistryObject> COURIER = WORKER_TYPES.register("courier", + public static final DeferredHolder, EntityType> COURIER = WORKER_TYPES.register("courier", () -> EntityType.Builder.of(CourierEntity::new, MobCategory.MISC) .sized(0.6F, 1.95F) .canSpawnFarFromPlayer() - .setTrackingRange(32) - .build(new ResourceLocation(WorkersMain.MOD_ID, "courier").toString())); + .clientTrackingRange(32) + .build(ResourceLocation.fromNamespaceAndPath(WorkersMain.MOD_ID, "courier").toString())); } diff --git a/src/main/java/com/talhanation/workers/init/ModItems.java b/src/main/java/com/talhanation/workers/init/ModItems.java index c0f669f9..e642f2a9 100644 --- a/src/main/java/com/talhanation/workers/init/ModItems.java +++ b/src/main/java/com/talhanation/workers/init/ModItems.java @@ -7,32 +7,32 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.Item; import net.minecraft.world.item.SpawnEggItem; -import net.minecraftforge.registries.RegistryObject; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.minecraft.core.registries.Registries; +import net.neoforged.neoforge.registries.DeferredRegister; import java.util.List; import java.util.function.Supplier; public class ModItems { - public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, WorkersMain.MOD_ID); - public static final List> SPAWN_EGGS; + public static final DeferredRegister ITEMS = DeferredRegister.create(Registries.ITEM, WorkersMain.MOD_ID); + public static final List> SPAWN_EGGS; static { SPAWN_EGGS = Lists.newArrayList(); } - public static final RegistryObject FARMER_SPAWN_EGG = createSpawnEggItem("farmer", ModEntityTypes.FARMER, 16755200, 16777045); - public static final RegistryObject LUMBERJACK_SPAWN_EGG = createSpawnEggItem("lumberjack", ModEntityTypes.LUMBERJACK, 16755200, 16777045); - public static final RegistryObject MINER_SPAWN_EGG = createSpawnEggItem("miner", ModEntityTypes.MINER, 16755200, 16777045); - public static final RegistryObject MERCHANT_SPAWN_EGG = createSpawnEggItem("merchant", ModEntityTypes.MERCHANT, 16755200, 16777045); - public static final RegistryObject BUILDER_SPAWN_EGG = createSpawnEggItem("builder", ModEntityTypes.BUILDER, 16755200, 16777045); - public static final RegistryObject FISHERMAN_SPAWN_EGG = createSpawnEggItem("fisherman", ModEntityTypes.FISHERMAN, 16755200, 16777045); - public static final RegistryObject ANIMAL_FARMER_SPAWN_EGG = createSpawnEggItem("animal_farmer", ModEntityTypes.ANIMAL_FARMER, 16755200, 16777045); - public static final RegistryObject COURIER_SPAWN_EGG = createSpawnEggItem("courier", ModEntityTypes.COURIER, 16755200, 16777045); - public static final RegistryObject COOK_SPAWN_EGG = createSpawnEggItem("cook", ModEntityTypes.COOK, 16755200, 16777045); + public static final DeferredHolder FARMER_SPAWN_EGG = createSpawnEggItem("farmer", ModEntityTypes.FARMER, 16755200, 16777045); + public static final DeferredHolder LUMBERJACK_SPAWN_EGG = createSpawnEggItem("lumberjack", ModEntityTypes.LUMBERJACK, 16755200, 16777045); + public static final DeferredHolder MINER_SPAWN_EGG = createSpawnEggItem("miner", ModEntityTypes.MINER, 16755200, 16777045); + public static final DeferredHolder MERCHANT_SPAWN_EGG = createSpawnEggItem("merchant", ModEntityTypes.MERCHANT, 16755200, 16777045); + public static final DeferredHolder BUILDER_SPAWN_EGG = createSpawnEggItem("builder", ModEntityTypes.BUILDER, 16755200, 16777045); + public static final DeferredHolder FISHERMAN_SPAWN_EGG = createSpawnEggItem("fisherman", ModEntityTypes.FISHERMAN, 16755200, 16777045); + public static final DeferredHolder ANIMAL_FARMER_SPAWN_EGG = createSpawnEggItem("animal_farmer", ModEntityTypes.ANIMAL_FARMER, 16755200, 16777045); + public static final DeferredHolder COURIER_SPAWN_EGG = createSpawnEggItem("courier", ModEntityTypes.COURIER, 16755200, 16777045); + public static final DeferredHolder COOK_SPAWN_EGG = createSpawnEggItem("cook", ModEntityTypes.COOK, 16755200, 16777045); - public static RegistryObject createSpawnEggItem(String entityName, Supplier> supplier, int primaryColor, int secondaryColor) { - RegistryObject spawnEgg = ModItems.ITEMS.register(entityName + "_spawn_egg", () -> { + public static DeferredHolder createSpawnEggItem(String entityName, Supplier> supplier, int primaryColor, int secondaryColor) { + DeferredHolder spawnEgg = ModItems.ITEMS.register(entityName + "_spawn_egg", () -> { return new WorkersSpawnEgg(supplier, primaryColor, secondaryColor, new Item.Properties()); }); ModItems.SPAWN_EGGS.add(spawnEgg); diff --git a/src/main/java/com/talhanation/workers/init/ModMenuTypes.java b/src/main/java/com/talhanation/workers/init/ModMenuTypes.java index 5584e773..4927e4cf 100644 --- a/src/main/java/com/talhanation/workers/init/ModMenuTypes.java +++ b/src/main/java/com/talhanation/workers/init/ModMenuTypes.java @@ -16,8 +16,9 @@ import com.talhanation.workers.inventory.MerchantAddEditVillagerTradeContainer; import com.talhanation.workers.world.WorkersMerchantTrade; import net.minecraft.nbt.CompoundTag; -import net.minecraftforge.common.extensions.IForgeMenuType; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.neoforge.common.extensions.IMenuTypeExtension; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.minecraft.core.registries.Registries; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.talhanation.workers.WorkersMain; @@ -32,45 +33,53 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.phys.AABB; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; +@EventBusSubscriber(modid = WorkersMain.MOD_ID, value = Dist.CLIENT) public class ModMenuTypes { private static final Logger logger = LogManager.getLogger(WorkersMain.MOD_ID); public static final DeferredRegister> MENU_TYPES = - DeferredRegister.create(ForgeRegistries.MENU_TYPES, WorkersMain.MOD_ID); + DeferredRegister.create(Registries.MENU, WorkersMain.MOD_ID); public static void registerMenus() { - registerMenu(MERCHANT_ADD_EDIT_TRADE_CONTAINER_TYPE.get(), MerchantAddEditTradeScreen::new); - registerMenu(MERCHANT_VILLAGER_TRADE_CONTAINER_TYPE.get(), MerchantAddEditVillagerTradeScreen::new); - registerMenu(MERCHANT_TRADE_CONTAINER_TYPE.get(), MerchantTradeScreen::new); - registerMenu(COURIER_CONTAINER_TYPE.get(), CourierScreen::new); } - public static final RegistryObject> MERCHANT_ADD_EDIT_TRADE_CONTAINER_TYPE = - MENU_TYPES.register("merchant_add_edit_trade_container", () -> IForgeMenuType.create((windowId, inv, data) -> { + @SubscribeEvent + public static void registerMenuScreens(RegisterMenuScreensEvent event) { + registerMenu(event, MERCHANT_ADD_EDIT_TRADE_CONTAINER_TYPE.get(), MerchantAddEditTradeScreen::new); + registerMenu(event, MERCHANT_VILLAGER_TRADE_CONTAINER_TYPE.get(), MerchantAddEditVillagerTradeScreen::new); + registerMenu(event, MERCHANT_TRADE_CONTAINER_TYPE.get(), MerchantTradeScreen::new); + registerMenu(event, COURIER_CONTAINER_TYPE.get(), CourierScreen::new); + } + + public static final DeferredHolder, MenuType> MERCHANT_ADD_EDIT_TRADE_CONTAINER_TYPE = + MENU_TYPES.register("merchant_add_edit_trade_container", () -> IMenuTypeExtension.create((windowId, inv, data) -> { MerchantEntity merchant = (MerchantEntity) getRecruitByUUID(inv.player, data.readUUID()); CompoundTag nbt = data.readNbt(); if (merchant == null || nbt == null) { return null; } - WorkersMerchantTrade trade = WorkersMerchantTrade.fromNbt(nbt); + WorkersMerchantTrade trade = WorkersMerchantTrade.fromNbt(data.registryAccess(), nbt); return new MerchantAddEditTradeContainer(windowId, merchant, inv, trade); })); - public static final RegistryObject> MERCHANT_VILLAGER_TRADE_CONTAINER_TYPE = - MENU_TYPES.register("merchant_villager_trade_container", () -> IForgeMenuType.create((windowId, inv, data) -> { + public static final DeferredHolder, MenuType> MERCHANT_VILLAGER_TRADE_CONTAINER_TYPE = + MENU_TYPES.register("merchant_villager_trade_container", () -> IMenuTypeExtension.create((windowId, inv, data) -> { MerchantEntity merchant = (MerchantEntity) getRecruitByUUID(inv.player, data.readUUID()); CompoundTag nbt = data.readNbt(); if (merchant == null || nbt == null) { return null; } - WorkersMerchantTrade trade = WorkersMerchantTrade.fromNbt(nbt); + WorkersMerchantTrade trade = WorkersMerchantTrade.fromNbt(data.registryAccess(), nbt); return new MerchantAddEditVillagerTradeContainer(windowId, merchant, inv, trade); })); - public static final RegistryObject> MERCHANT_TRADE_CONTAINER_TYPE = - MENU_TYPES.register("merchant_trade_container", () -> IForgeMenuType.create((windowId, inv, data) -> { + public static final DeferredHolder, MenuType> MERCHANT_TRADE_CONTAINER_TYPE = + MENU_TYPES.register("merchant_trade_container", () -> IMenuTypeExtension.create((windowId, inv, data) -> { MerchantEntity merchant = (MerchantEntity) getRecruitByUUID(inv.player, data.readUUID()); if (merchant == null) { return null; @@ -78,8 +87,8 @@ public static void registerMenus() { return new MerchantTradeContainer(windowId, merchant, inv); })); - public static final RegistryObject> COURIER_CONTAINER_TYPE = - MENU_TYPES.register("courier_container", () -> IForgeMenuType.create((windowId, inv, data) -> { + public static final DeferredHolder, MenuType> COURIER_CONTAINER_TYPE = + MENU_TYPES.register("courier_container", () -> IMenuTypeExtension.create((windowId, inv, data) -> { CourierEntity courier = (CourierEntity) getRecruitByUUID(inv.player, data.readUUID()); if (courier == null) return null; return new CourierContainer(windowId, courier, inv); @@ -91,8 +100,8 @@ public static void registerMenus() { * It has a try/catch block because the Forge screen constructor fails silently. */ private static > void registerMenu( - MenuType menuType, ScreenConstructor screenConstructor) { - MenuScreens.register(menuType, (ScreenConstructor) (menu, inventory, title) -> { + RegisterMenuScreensEvent event, MenuType menuType, ScreenConstructor screenConstructor) { + event.register(menuType, (ScreenConstructor) (menu, inventory, title) -> { try { return screenConstructor.create(menu, inventory, title); } catch (Exception e) { diff --git a/src/main/java/com/talhanation/workers/init/ModPois.java b/src/main/java/com/talhanation/workers/init/ModPois.java index 631d57e9..d5a7a8ab 100644 --- a/src/main/java/com/talhanation/workers/init/ModPois.java +++ b/src/main/java/com/talhanation/workers/init/ModPois.java @@ -11,16 +11,16 @@ import net.minecraft.world.entity.ai.village.poi.PoiType; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.minecraft.core.registries.Registries; +import net.neoforged.neoforge.registries.DeferredHolder; public class ModPois { private static final Logger logger = LogManager.getLogger(WorkersMain.MOD_ID); public static final DeferredRegister POIS = - DeferredRegister.create(ForgeRegistries.POI_TYPES, WorkersMain.MOD_ID); + DeferredRegister.create(Registries.POINT_OF_INTEREST_TYPE, WorkersMain.MOD_ID); - private static RegistryObject makePoi(String name, RegistryObject block) { + private static DeferredHolder makePoi(String name, DeferredHolder block) { logger.info("Registering POI for " + block.getKey().toString()); return POIS.register(name, () -> { Set blockStates = ImmutableSet.copyOf(block.get().getStateDefinition().getPossibleStates()); diff --git a/src/main/java/com/talhanation/workers/init/ModProfessions.java b/src/main/java/com/talhanation/workers/init/ModProfessions.java index 8819e900..352e8a43 100644 --- a/src/main/java/com/talhanation/workers/init/ModProfessions.java +++ b/src/main/java/com/talhanation/workers/init/ModProfessions.java @@ -9,21 +9,21 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.world.entity.ai.village.poi.PoiType; import net.minecraft.world.entity.npc.VillagerProfession; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.minecraft.core.registries.Registries; +import net.neoforged.neoforge.registries.DeferredHolder; public class ModProfessions { private static final Logger logger = LogManager.getLogger(WorkersMain.MOD_ID); public static final DeferredRegister PROFESSIONS = - DeferredRegister.create(ForgeRegistries.VILLAGER_PROFESSIONS, WorkersMain.MOD_ID); + DeferredRegister.create(Registries.VILLAGER_PROFESSION, WorkersMain.MOD_ID); - private static final RegistryObject makeProfession(String name, - RegistryObject pointOfInterest) { + private static final DeferredHolder makeProfession(String name, + DeferredHolder pointOfInterest) { logger.info("Registering profession for {} with POI {}", name, pointOfInterest); return PROFESSIONS.register(name, - () -> new VillagerProfession(name, poi -> poi.get() == pointOfInterest.get(), - poi -> poi.get() == pointOfInterest.get(), ImmutableSet.of(), ImmutableSet.of(), + () -> new VillagerProfession(name, poi -> poi.value() == pointOfInterest.get(), + poi -> poi.value() == pointOfInterest.get(), ImmutableSet.of(), ImmutableSet.of(), SoundEvents.VILLAGER_CELEBRATE)); } } diff --git a/src/main/java/com/talhanation/workers/init/ModShortcuts.java b/src/main/java/com/talhanation/workers/init/ModShortcuts.java index ebe53318..85056c33 100644 --- a/src/main/java/com/talhanation/workers/init/ModShortcuts.java +++ b/src/main/java/com/talhanation/workers/init/ModShortcuts.java @@ -4,10 +4,10 @@ import net.minecraft.client.KeyMapping; import net.minecraft.network.chat.Component; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.event.RegisterKeyMappingsEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; +import net.neoforged.bus.api.SubscribeEvent; import org.lwjgl.glfw.GLFW; public class ModShortcuts { diff --git a/src/main/java/com/talhanation/workers/items/WorkersSpawnEgg.java b/src/main/java/com/talhanation/workers/items/WorkersSpawnEgg.java index 0edc9312..3e9066e6 100644 --- a/src/main/java/com/talhanation/workers/items/WorkersSpawnEgg.java +++ b/src/main/java/com/talhanation/workers/items/WorkersSpawnEgg.java @@ -27,9 +27,9 @@ public InteractionResult useOn(UseOnContext context) { } else { ItemStack stack = context.getItemInHand(); BlockPos pos = context.getClickedPos(); - EntityType entitytype = this.getType(stack.getTag()); + EntityType entitytype = this.getType(stack); Entity entity = entitytype.create(world); - CompoundTag entityTag = stack.getTag(); + CompoundTag entityTag = readEntityData(stack); if (entity instanceof AbstractRecruitEntity) { AbstractRecruitEntity recruit = (AbstractRecruitEntity)entity; if (entityTag != null) { @@ -53,7 +53,7 @@ public InteractionResult useOn(UseOnContext context) { public void fillMerchant(MerchantEntity merchant, CompoundTag entityTag, BlockPos pos){ fillRecruit(merchant, entityTag, pos); - entityTag.put("Trades", WorkersMerchantTrade.listToNbt(merchant.getTrades())); + entityTag.put("Trades", WorkersMerchantTrade.listToNbt(merchant.registryAccess(), merchant.getTrades())); entityTag.putBoolean("isCreative", merchant.isCreative()); entityTag.putInt("TraderProgress", merchant.getTraderProgress()); entityTag.putInt("TraderLevel", merchant.getTraderLevel()); diff --git a/src/main/java/com/talhanation/workers/mixin/MixinVillager.java b/src/main/java/com/talhanation/workers/mixin/MixinVillager.java index 035b8805..0db66947 100644 --- a/src/main/java/com/talhanation/workers/mixin/MixinVillager.java +++ b/src/main/java/com/talhanation/workers/mixin/MixinVillager.java @@ -4,6 +4,7 @@ import net.minecraft.world.SimpleContainer; import net.minecraft.world.entity.npc.Villager; import net.minecraft.world.food.FoodProperties; +import net.minecraft.core.component.DataComponents; import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -99,7 +100,7 @@ private void workers_eatAndDigestFood(CallbackInfo ci) { ItemStack stack = inv.getItem(i); if (stack.isEmpty()) continue; - FoodProperties food = stack.getItem().getFoodProperties(); + FoodProperties food = stack.get(DataComponents.FOOD); if (food == null) continue; int satInt = workers_saturationOf(food); @@ -127,7 +128,7 @@ private static int workers_countSaturationInInventory(SimpleContainer inv) { for (int i = 0; i < inv.getContainerSize(); i++) { ItemStack stack = inv.getItem(i); if (stack.isEmpty()) continue; - FoodProperties food = stack.getItem().getFoodProperties(); + FoodProperties food = stack.get(DataComponents.FOOD); if (food == null) continue; total += workers_saturationOf(food) * stack.getCount(); } @@ -135,7 +136,7 @@ private static int workers_countSaturationInInventory(SimpleContainer inv) { } private static int workers_saturationOf(FoodProperties food) { - float sat = food.getNutrition() * food.getSaturationModifier() * 2.0f; + float sat = food.saturation(); return Math.max(1, Math.round(sat)); } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/network/MessageAddWorkArea.java b/src/main/java/com/talhanation/workers/network/MessageAddWorkArea.java index d1fd8b2a..e732b325 100644 --- a/src/main/java/com/talhanation/workers/network/MessageAddWorkArea.java +++ b/src/main/java/com/talhanation/workers/network/MessageAddWorkArea.java @@ -8,16 +8,16 @@ import com.talhanation.workers.config.WorkersServerConfig; import com.talhanation.workers.entities.workarea.*; import com.talhanation.workers.init.ModEntityTypes; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.ChunkPos; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; -public class MessageAddWorkArea implements Message { +public class MessageAddWorkArea implements WorkersMessage { public BlockPos pos; public int typeIndex; public MessageAddWorkArea() { @@ -29,11 +29,11 @@ public MessageAddWorkArea(BlockPos pos, WorkAreaTypes type) { this.typeIndex = type.getIndex(); } - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if(player == null) return; String teamStringID = ""; diff --git a/src/main/java/com/talhanation/workers/network/MessageCourierSetRoute.java b/src/main/java/com/talhanation/workers/network/MessageCourierSetRoute.java index afb5cc30..48079573 100644 --- a/src/main/java/com/talhanation/workers/network/MessageCourierSetRoute.java +++ b/src/main/java/com/talhanation/workers/network/MessageCourierSetRoute.java @@ -2,20 +2,21 @@ import com.talhanation.workers.entities.CourierEntity; import com.talhanation.workers.world.CourierRoute; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.UUID; -public class MessageCourierSetRoute implements Message { +public class MessageCourierSetRoute implements WorkersMessage { private UUID courierUuid; private boolean hasRoute; @@ -25,11 +26,11 @@ public class MessageCourierSetRoute implements Message { private boolean start; public MessageCourierSetRoute() {} - public MessageCourierSetRoute(UUID courierUuid, CourierRoute routeNBT, boolean useVehicleInventory, boolean shouldCycle, boolean start) { + public MessageCourierSetRoute(UUID courierUuid, CourierRoute routeNBT, HolderLookup.Provider registries, boolean useVehicleInventory, boolean shouldCycle, boolean start) { this.courierUuid = courierUuid; this.hasRoute = routeNBT != null; if(hasRoute){ - this.routeNBT = routeNBT.toNBT(); + this.routeNBT = routeNBT.toNBT(registries); } this.useVehicleInventory = useVehicleInventory; @@ -43,12 +44,12 @@ public MessageCourierSetRoute(UUID courierUuid) { } @Override - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } @Override - public void executeServerSide(NetworkEvent.Context context) { + public void executeServerSide(WorkersNetworkContext context) { ServerPlayer player = context.getSender(); if (player == null) return; @@ -79,7 +80,7 @@ public void executeServerSide(NetworkEvent.Context context) { courier.clearRoute(); return; } - CourierRoute route = CourierRoute.fromNBT(routeNBT); + CourierRoute route = CourierRoute.fromNBT(player.registryAccess(), routeNBT); if (this.start) { courier.loadRouteFromNearestWaypoint(route); @@ -101,7 +102,7 @@ public MessageCourierSetRoute fromBytes(FriendlyByteBuf buf) { if (this.hasRoute) { byte[] compressed = buf.readByteArray(); try { - this.routeNBT = NbtIo.readCompressed(new ByteArrayInputStream(compressed)); + this.routeNBT = NbtIo.readCompressed(new ByteArrayInputStream(compressed), net.minecraft.nbt.NbtAccounter.unlimitedHeap()); } catch (IOException e) { e.printStackTrace(); this.routeNBT = new CompoundTag(); @@ -132,4 +133,4 @@ public void toBytes(FriendlyByteBuf buf) { buf.writeBoolean(start); } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/network/MessageDoTradeWithMerchant.java b/src/main/java/com/talhanation/workers/network/MessageDoTradeWithMerchant.java index dbfe0dd8..7049811b 100644 --- a/src/main/java/com/talhanation/workers/network/MessageDoTradeWithMerchant.java +++ b/src/main/java/com/talhanation/workers/network/MessageDoTradeWithMerchant.java @@ -1,15 +1,15 @@ package com.talhanation.workers.network; import com.talhanation.workers.entities.MerchantEntity; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageDoTradeWithMerchant implements Message { +public class MessageDoTradeWithMerchant implements WorkersMessage { public UUID merchantUuid; public UUID trade; @@ -20,11 +20,11 @@ public MessageDoTradeWithMerchant(UUID merchantUuid, UUID trade) { } @Override - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if(player == null) return; diff --git a/src/main/java/com/talhanation/workers/network/MessageMoveMerchantTrade.java b/src/main/java/com/talhanation/workers/network/MessageMoveMerchantTrade.java index cbebc0f3..29797530 100644 --- a/src/main/java/com/talhanation/workers/network/MessageMoveMerchantTrade.java +++ b/src/main/java/com/talhanation/workers/network/MessageMoveMerchantTrade.java @@ -1,15 +1,15 @@ package com.talhanation.workers.network; import com.talhanation.workers.entities.MerchantEntity; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageMoveMerchantTrade implements Message { +public class MessageMoveMerchantTrade implements WorkersMessage { public UUID merchantUuid; public UUID tradeUuid; @@ -23,10 +23,10 @@ public MessageMoveMerchantTrade(UUID merchantUuid, UUID tradeUuid, boolean moveU } @Override - public Dist getExecutingSide() { return Dist.DEDICATED_SERVER; } + public PacketFlow getExecutingSide() { return PacketFlow.SERVERBOUND; } @Override - public void executeServerSide(NetworkEvent.Context context) { + public void executeServerSide(WorkersNetworkContext context) { ServerPlayer player = context.getSender(); if (player == null) return; diff --git a/src/main/java/com/talhanation/workers/network/MessageOpenCourierScreen.java b/src/main/java/com/talhanation/workers/network/MessageOpenCourierScreen.java index 0e23666f..528f6381 100644 --- a/src/main/java/com/talhanation/workers/network/MessageOpenCourierScreen.java +++ b/src/main/java/com/talhanation/workers/network/MessageOpenCourierScreen.java @@ -1,15 +1,15 @@ package com.talhanation.workers.network; import com.talhanation.workers.entities.CourierEntity; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageOpenCourierScreen implements Message { +public class MessageOpenCourierScreen implements WorkersMessage { private UUID courierUuid; @@ -20,12 +20,12 @@ public MessageOpenCourierScreen(UUID courierUuid){ } @Override - public Dist getExecutingSide(){ - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide(){ + return PacketFlow.SERVERBOUND; } @Override - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if (player == null) return; diff --git a/src/main/java/com/talhanation/workers/network/MessageOpenMerchantEditTradeScreen.java b/src/main/java/com/talhanation/workers/network/MessageOpenMerchantEditTradeScreen.java index d9c4cb82..5d42951c 100644 --- a/src/main/java/com/talhanation/workers/network/MessageOpenMerchantEditTradeScreen.java +++ b/src/main/java/com/talhanation/workers/network/MessageOpenMerchantEditTradeScreen.java @@ -3,17 +3,17 @@ import com.talhanation.workers.CommandEvents; import com.talhanation.workers.entities.MerchantEntity; import com.talhanation.workers.world.WorkersMerchantTrade; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageOpenMerchantEditTradeScreen implements Message { +public class MessageOpenMerchantEditTradeScreen implements WorkersMessage { private UUID player; private UUID merchantUuid; private CompoundTag nbt; @@ -24,14 +24,14 @@ public MessageOpenMerchantEditTradeScreen() { public MessageOpenMerchantEditTradeScreen(Player player, UUID merchantUuid, WorkersMerchantTrade trade) { this.player = player.getUUID(); this.merchantUuid = merchantUuid; - this.nbt = trade.toNbt(); + this.nbt = trade.toNbt(player.registryAccess()); } @Override - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } @Override - public void executeServerSide(NetworkEvent.Context context) { + public void executeServerSide(WorkersNetworkContext context) { if (!context.getSender().getUUID().equals(player)) { return; } @@ -42,7 +42,7 @@ public void executeServerSide(NetworkEvent.Context context) { .equals(this.merchantUuid)) .stream() .findAny() - .ifPresent(merchant -> merchant.openAddEditTradeGUI(player, WorkersMerchantTrade.fromNbt(nbt))); + .ifPresent(merchant -> merchant.openAddEditTradeGUI(player, WorkersMerchantTrade.fromNbt(player.registryAccess(), nbt))); } @Override public MessageOpenMerchantEditTradeScreen fromBytes(FriendlyByteBuf buf) { @@ -58,4 +58,3 @@ public void toBytes(FriendlyByteBuf buf) { buf.writeNbt(this.nbt); } } - diff --git a/src/main/java/com/talhanation/workers/network/MessageOpenMerchantTradeScreen.java b/src/main/java/com/talhanation/workers/network/MessageOpenMerchantTradeScreen.java index 8a00e3ce..3f7987d5 100644 --- a/src/main/java/com/talhanation/workers/network/MessageOpenMerchantTradeScreen.java +++ b/src/main/java/com/talhanation/workers/network/MessageOpenMerchantTradeScreen.java @@ -2,16 +2,16 @@ import com.talhanation.workers.entities.MerchantEntity; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageOpenMerchantTradeScreen implements Message { +public class MessageOpenMerchantTradeScreen implements WorkersMessage { private UUID player; private UUID merchantUuid; public MessageOpenMerchantTradeScreen() { @@ -23,11 +23,11 @@ public MessageOpenMerchantTradeScreen(Player player, UUID merchant) { this.merchantUuid = merchant; } @Override - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } @Override - public void executeServerSide(NetworkEvent.Context context) { + public void executeServerSide(WorkersNetworkContext context) { ServerPlayer player = context.getSender(); player.getCommandSenderWorld().getEntitiesOfClass(MerchantEntity.class, player.getBoundingBox() .inflate(32.0D), v -> v diff --git a/src/main/java/com/talhanation/workers/network/MessageOpenMerchantVillagerTradeScreen.java b/src/main/java/com/talhanation/workers/network/MessageOpenMerchantVillagerTradeScreen.java index 6d6cf652..8f6fbb98 100644 --- a/src/main/java/com/talhanation/workers/network/MessageOpenMerchantVillagerTradeScreen.java +++ b/src/main/java/com/talhanation/workers/network/MessageOpenMerchantVillagerTradeScreen.java @@ -2,17 +2,17 @@ import com.talhanation.workers.entities.MerchantEntity; import com.talhanation.workers.world.WorkersMerchantTrade; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageOpenMerchantVillagerTradeScreen implements Message { +public class MessageOpenMerchantVillagerTradeScreen implements WorkersMessage { private UUID player; private UUID merchantUuid; @@ -25,16 +25,16 @@ public MessageOpenMerchantVillagerTradeScreen() { public MessageOpenMerchantVillagerTradeScreen(Player player, UUID merchantUuid, WorkersMerchantTrade trade) { this.player = player.getUUID(); this.merchantUuid = merchantUuid; - this.nbt = trade.toNbt(); + this.nbt = trade.toNbt(player.registryAccess()); } @Override - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } @Override - public void executeServerSide(NetworkEvent.Context context) { + public void executeServerSide(WorkersNetworkContext context) { if (!context.getSender().getUUID().equals(player)) { return; } @@ -44,7 +44,7 @@ public void executeServerSide(NetworkEvent.Context context) { v -> v.getUUID().equals(this.merchantUuid)) .stream() .findAny() - .ifPresent(merchant -> merchant.openVillagerTradeGUI(player, WorkersMerchantTrade.fromNbt(nbt))); + .ifPresent(merchant -> merchant.openVillagerTradeGUI(player, WorkersMerchantTrade.fromNbt(player.registryAccess(), nbt))); } @Override diff --git a/src/main/java/com/talhanation/workers/network/MessageRequestPresetContent.java b/src/main/java/com/talhanation/workers/network/MessageRequestPresetContent.java index 106079d2..98dff53c 100644 --- a/src/main/java/com/talhanation/workers/network/MessageRequestPresetContent.java +++ b/src/main/java/com/talhanation/workers/network/MessageRequestPresetContent.java @@ -3,21 +3,21 @@ import com.talhanation.workers.WorkersMain; import com.talhanation.workers.config.BuildMode; import com.talhanation.workers.config.WorkersServerConfig; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.scores.Team; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkDirection; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; +import com.talhanation.workers.network.compat.WorkersPacketDistributor; import java.io.File; import java.io.IOException; import java.nio.file.Path; -public class MessageRequestPresetContent implements Message { +public class MessageRequestPresetContent implements WorkersMessage { public String presetName; @@ -27,19 +27,19 @@ public MessageRequestPresetContent(String presetName){ } @Override - public Dist getExecutingSide(){ - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide(){ + return PacketFlow.SERVERBOUND; } @Override - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if (player == null) return; String safe = presetName.replace("..", "").replace("/", "").replace("\\", ""); BuildMode mode = WorkersServerConfig.BuildModeConfig.get(); - Path scanRoot = Path.of(player.server.getServerDirectory().getAbsolutePath(), "workers", "scan"); + Path scanRoot = player.server.getServerDirectory().resolve("workers").resolve("scan"); if (mode == BuildMode.PRESET_FACTIONS) { try { @@ -57,8 +57,11 @@ public void executeServerSide(NetworkEvent.Context context){ if (!file.exists()) return; try { - CompoundTag nbt = NbtIo.readCompressed(file); - WorkersMain.SIMPLE_CHANNEL.sendTo(new MessageToClientPresetContent(safe, nbt), player.connection.connection, NetworkDirection.PLAY_TO_CLIENT); + CompoundTag nbt = NbtIo.readCompressed(file.toPath(), net.minecraft.nbt.NbtAccounter.unlimitedHeap()); + WorkersMain.SIMPLE_CHANNEL.send( + WorkersPacketDistributor.PLAYER.with(() -> player), + new MessageToClientPresetContent(safe, nbt) + ); } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/com/talhanation/workers/network/MessageRequestPresetList.java b/src/main/java/com/talhanation/workers/network/MessageRequestPresetList.java index 2e9f5349..d0337aa6 100644 --- a/src/main/java/com/talhanation/workers/network/MessageRequestPresetList.java +++ b/src/main/java/com/talhanation/workers/network/MessageRequestPresetList.java @@ -2,15 +2,14 @@ import com.talhanation.workers.config.BuildMode; import com.talhanation.workers.config.WorkersServerConfig; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.scores.Team; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkDirection; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import com.talhanation.workers.WorkersMain; -import net.minecraftforge.network.PacketDistributor; +import com.talhanation.workers.network.compat.WorkersPacketDistributor; import java.io.IOException; import java.nio.file.Files; @@ -19,24 +18,24 @@ import java.util.List; import java.util.stream.Stream; -public class MessageRequestPresetList implements Message { +public class MessageRequestPresetList implements WorkersMessage { public MessageRequestPresetList(){} @Override - public Dist getExecutingSide(){ - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide(){ + return PacketFlow.SERVERBOUND; } @Override - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if (player == null) return; BuildMode mode = WorkersServerConfig.BuildModeConfig.get(); if (mode == BuildMode.FREE) return; - Path scanRoot = Path.of(player.server.getServerDirectory().getAbsolutePath(), "workers", "scan"); + Path scanRoot = player.server.getServerDirectory().resolve("workers").resolve("scan"); String teamId = null; if (mode == BuildMode.PRESET_FACTIONS) { @@ -49,7 +48,7 @@ public void executeServerSide(NetworkEvent.Context context){ catch (Exception ignored) {} if (teamId == null) { - WorkersMain.SIMPLE_CHANNEL.send(PacketDistributor.PLAYER.with(() -> player), new MessageToClientPresetList(new ArrayList<>())); + WorkersMain.SIMPLE_CHANNEL.send(WorkersPacketDistributor.PLAYER.with(() -> player), new MessageToClientPresetList(new ArrayList<>())); return; } scanRoot = scanRoot.resolve("factions").resolve(teamId); @@ -57,7 +56,7 @@ public void executeServerSide(NetworkEvent.Context context){ List names = collectNbtNames(scanRoot); - WorkersMain.SIMPLE_CHANNEL.send(PacketDistributor.PLAYER.with(() -> player), new MessageToClientPresetList(names)); + WorkersMain.SIMPLE_CHANNEL.send(WorkersPacketDistributor.PLAYER.with(() -> player), new MessageToClientPresetList(names)); } private static List collectNbtNames(Path root) { diff --git a/src/main/java/com/talhanation/workers/network/MessageRotateWorkArea.java b/src/main/java/com/talhanation/workers/network/MessageRotateWorkArea.java index eaaf4b44..9dc15c3d 100644 --- a/src/main/java/com/talhanation/workers/network/MessageRotateWorkArea.java +++ b/src/main/java/com/talhanation/workers/network/MessageRotateWorkArea.java @@ -2,16 +2,16 @@ import com.talhanation.workers.entities.workarea.AbstractWorkAreaEntity; import com.talhanation.workers.entities.workarea.MiningArea; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.core.Direction; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageRotateWorkArea implements Message { +public class MessageRotateWorkArea implements WorkersMessage { public UUID uuid; public boolean clockwise; @@ -24,12 +24,12 @@ public MessageRotateWorkArea(UUID uuid, boolean clockwise) { } @Override - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } @Override - public void executeServerSide(NetworkEvent.Context context) { + public void executeServerSide(WorkersNetworkContext context) { ServerPlayer player = context.getSender(); if (player == null) return; diff --git a/src/main/java/com/talhanation/workers/network/MessageToClientOpenWorkAreaScreen.java b/src/main/java/com/talhanation/workers/network/MessageToClientOpenWorkAreaScreen.java index 7548cbb1..79ab9491 100644 --- a/src/main/java/com/talhanation/workers/network/MessageToClientOpenWorkAreaScreen.java +++ b/src/main/java/com/talhanation/workers/network/MessageToClientOpenWorkAreaScreen.java @@ -1,17 +1,19 @@ package com.talhanation.workers.network; +import com.talhanation.workers.client.gui.WorkAreaScreenFactory; import com.talhanation.workers.entities.workarea.AbstractWorkAreaEntity; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageToClientOpenWorkAreaScreen implements Message { +public class MessageToClientOpenWorkAreaScreen implements WorkersMessage { private UUID uuid; @@ -24,13 +26,13 @@ public MessageToClientOpenWorkAreaScreen(UUID uuid) { } @Override - public Dist getExecutingSide() { - return Dist.CLIENT; + public PacketFlow getExecutingSide() { + return PacketFlow.CLIENTBOUND; } @Override @OnlyIn(Dist.CLIENT) - public void executeClientSide(NetworkEvent.Context context) { + public void executeClientSide(WorkersNetworkContext context) { Player player = Minecraft.getInstance().player; player.getCommandSenderWorld().getEntitiesOfClass(AbstractWorkAreaEntity.class, player.getBoundingBox() .inflate(16.0D), v -> v @@ -38,7 +40,7 @@ public void executeClientSide(NetworkEvent.Context context) { .equals(this.uuid)) .stream() .findAny() - .ifPresent(areaEntity -> Minecraft.getInstance().setScreen(areaEntity.getScreen(player))); + .ifPresent(areaEntity -> WorkAreaScreenFactory.open(areaEntity, player)); } @Override diff --git a/src/main/java/com/talhanation/workers/network/MessageToClientPresetContent.java b/src/main/java/com/talhanation/workers/network/MessageToClientPresetContent.java index 862008af..6c97bd2c 100644 --- a/src/main/java/com/talhanation/workers/network/MessageToClientPresetContent.java +++ b/src/main/java/com/talhanation/workers/network/MessageToClientPresetContent.java @@ -1,13 +1,14 @@ package com.talhanation.workers.network; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import com.talhanation.workers.network.compat.WorkersNetworkContext; -public class MessageToClientPresetContent implements Message { +public class MessageToClientPresetContent implements WorkersMessage { public String presetName; public CompoundTag nbt; @@ -21,11 +22,11 @@ public MessageToClientPresetContent(String presetName, CompoundTag nbt) { } @Override - public Dist getExecutingSide() { return Dist.CLIENT; } + public PacketFlow getExecutingSide() { return PacketFlow.CLIENTBOUND; } @Override @OnlyIn(Dist.CLIENT) - public void executeClientSide(NetworkEvent.Context context) { + public void executeClientSide(WorkersNetworkContext context) { if (pendingCallback != null) { pendingCallback.accept(this); pendingCallback = null; diff --git a/src/main/java/com/talhanation/workers/network/MessageToClientPresetList.java b/src/main/java/com/talhanation/workers/network/MessageToClientPresetList.java index c6aa96cc..4a465f5f 100644 --- a/src/main/java/com/talhanation/workers/network/MessageToClientPresetList.java +++ b/src/main/java/com/talhanation/workers/network/MessageToClientPresetList.java @@ -1,17 +1,18 @@ package com.talhanation.workers.network; import com.talhanation.workers.client.WorkersClientManager; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.ArrayList; import java.util.List; /** Server → Client: delivers the list of available preset file names. */ -public class MessageToClientPresetList implements Message { +public class MessageToClientPresetList implements WorkersMessage { public List names; @@ -19,11 +20,11 @@ public class MessageToClientPresetList implements Message names) { this.names = names; } @Override - public Dist getExecutingSide() { return Dist.CLIENT; } + public PacketFlow getExecutingSide() { return PacketFlow.CLIENTBOUND; } @Override @OnlyIn(Dist.CLIENT) - public void executeClientSide(NetworkEvent.Context context) { + public void executeClientSide(WorkersNetworkContext context) { WorkersClientManager.serverBuildingPresetNames = new ArrayList<>(names); } diff --git a/src/main/java/com/talhanation/workers/network/MessageToClientUpdateConfig.java b/src/main/java/com/talhanation/workers/network/MessageToClientUpdateConfig.java index 54e3ea5c..8ab0d790 100644 --- a/src/main/java/com/talhanation/workers/network/MessageToClientUpdateConfig.java +++ b/src/main/java/com/talhanation/workers/network/MessageToClientUpdateConfig.java @@ -2,13 +2,14 @@ import com.talhanation.workers.client.WorkersClientManager; import com.talhanation.workers.config.BuildMode; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import com.talhanation.workers.network.compat.WorkersNetworkContext; -public class MessageToClientUpdateConfig implements Message { +public class MessageToClientUpdateConfig implements WorkersMessage { private boolean allowWorkAreaOnlyInFactionClaim; private boolean allowOnlyBuildings; private BuildMode buildMode; @@ -22,13 +23,13 @@ public MessageToClientUpdateConfig(boolean allowWorkAreaOnlyInFactionClaim, bool } @Override - public Dist getExecutingSide() { - return Dist.CLIENT; + public PacketFlow getExecutingSide() { + return PacketFlow.CLIENTBOUND; } @Override @OnlyIn(Dist.CLIENT) - public void executeClientSide(NetworkEvent.Context context) { + public void executeClientSide(WorkersNetworkContext context) { WorkersClientManager.configValueWorkAreaOnlyInFactionClaim = this.allowWorkAreaOnlyInFactionClaim; WorkersClientManager.configValueOnlyBuildings = this.allowOnlyBuildings; WorkersClientManager.buildMode = this.buildMode; diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateAnimalPenArea.java b/src/main/java/com/talhanation/workers/network/MessageUpdateAnimalPenArea.java index e1609354..a9462d6f 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateAnimalPenArea.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateAnimalPenArea.java @@ -1,19 +1,19 @@ package com.talhanation.workers.network; import com.talhanation.workers.entities.workarea.AnimalPenArea; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; import static com.talhanation.workers.entities.workarea.AbstractWorkAreaEntity.DONE_TIME; -public class MessageUpdateAnimalPenArea implements Message { +public class MessageUpdateAnimalPenArea implements WorkersMessage { public UUID uuid; public boolean slaughter; @@ -32,11 +32,11 @@ public MessageUpdateAnimalPenArea(UUID uuid, AnimalPenArea.AnimalTypes animalTyp this.maxAnimals = maxAnimals; } - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if(player == null) return; diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateBuildArea.java b/src/main/java/com/talhanation/workers/network/MessageUpdateBuildArea.java index 0c728498..ccbf8757 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateBuildArea.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateBuildArea.java @@ -1,19 +1,19 @@ package com.talhanation.workers.network; import com.talhanation.workers.entities.workarea.BuildArea; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.UUID; -public class MessageUpdateBuildArea implements Message { +public class MessageUpdateBuildArea implements WorkersMessage { public UUID uuid; public CompoundTag structureNBT; @@ -47,11 +47,11 @@ public MessageUpdateBuildArea(UUID uuid, int xSize, int ySize, int zSize, Compou } @Override - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if(player == null) return; @@ -88,7 +88,7 @@ public MessageUpdateBuildArea fromBytes(FriendlyByteBuf buf) { byte[] compressed = buf.readByteArray(); try { - this.structureNBT = NbtIo.readCompressed(new ByteArrayInputStream(compressed)); + this.structureNBT = NbtIo.readCompressed(new ByteArrayInputStream(compressed), net.minecraft.nbt.NbtAccounter.unlimitedHeap()); } catch (IOException e) { e.printStackTrace(); this.structureNBT = new CompoundTag(); // Fallback diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateCropArea.java b/src/main/java/com/talhanation/workers/network/MessageUpdateCropArea.java index cc34354f..b4955c0a 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateCropArea.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateCropArea.java @@ -1,22 +1,22 @@ package com.talhanation.workers.network; import com.talhanation.workers.entities.workarea.CropArea; -import de.maxhenkel.corelib.net.Message; -import net.minecraft.nbt.CompoundTag; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; import static com.talhanation.workers.entities.workarea.AbstractWorkAreaEntity.DONE_TIME; -public class MessageUpdateCropArea implements Message { +public class MessageUpdateCropArea implements WorkersMessage { public UUID uuid; - public CompoundTag tag; + public ItemStack cropItem = ItemStack.EMPTY; public MessageUpdateCropArea() { } @@ -24,15 +24,14 @@ public MessageUpdateCropArea() { public MessageUpdateCropArea(UUID uuid, ItemStack cropItem) { this.uuid = uuid; - CompoundTag compoundnbt = new CompoundTag(); - this.tag = cropItem.save(compoundnbt); + this.cropItem = cropItem.copy(); } - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if(player == null) return; @@ -47,21 +46,20 @@ public void executeServerSide(NetworkEvent.Context context){ } public void update(CropArea cropArea){ - ItemStack itemStack = ItemStack.of(tag); - cropArea.setSeedStack(itemStack); + cropArea.setSeedStack(this.cropItem); cropArea.updateType(); cropArea.setTime(cropArea.getTime() + DONE_TIME); } public MessageUpdateCropArea fromBytes(FriendlyByteBuf buf) { this.uuid = buf.readUUID(); - this.tag = buf.readNbt(); + this.cropItem = ItemStack.OPTIONAL_STREAM_CODEC.decode((RegistryFriendlyByteBuf) buf); return this; } public void toBytes(FriendlyByteBuf buf) { buf.writeUUID(uuid); - buf.writeNbt(tag); + ItemStack.OPTIONAL_STREAM_CODEC.encode((RegistryFriendlyByteBuf) buf, cropItem); } diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateHomeArea.java b/src/main/java/com/talhanation/workers/network/MessageUpdateHomeArea.java index 15bebd09..af46a253 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateHomeArea.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateHomeArea.java @@ -1,17 +1,17 @@ package com.talhanation.workers.network; import com.talhanation.workers.entities.workarea.HomeArea; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; import static com.talhanation.workers.entities.workarea.AbstractWorkAreaEntity.DONE_TIME; -public class MessageUpdateHomeArea implements Message { +public class MessageUpdateHomeArea implements WorkersMessage { public UUID uuid; public boolean teamAccess; @@ -27,11 +27,11 @@ public MessageUpdateHomeArea(UUID uuid, boolean teamAccess, boolean evict) { this.evict = evict; } - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context) { + public void executeServerSide(WorkersNetworkContext context) { ServerPlayer player = context.getSender(); if (player == null) return; diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateKitchenArea.java b/src/main/java/com/talhanation/workers/network/MessageUpdateKitchenArea.java index d50b858c..6dea26d0 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateKitchenArea.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateKitchenArea.java @@ -1,15 +1,15 @@ package com.talhanation.workers.network; import com.talhanation.workers.entities.workarea.KitchenArea; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageUpdateKitchenArea implements Message { +public class MessageUpdateKitchenArea implements WorkersMessage { public UUID uuid; public boolean sellToVillagers; @@ -22,10 +22,10 @@ public MessageUpdateKitchenArea(UUID uuid, boolean sellToVillagers) { } @Override - public Dist getExecutingSide() { return Dist.DEDICATED_SERVER; } + public PacketFlow getExecutingSide() { return PacketFlow.SERVERBOUND; } @Override - public void executeServerSide(NetworkEvent.Context context) { + public void executeServerSide(WorkersNetworkContext context) { ServerPlayer player = context.getSender(); if (player == null) return; diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateLumberArea.java b/src/main/java/com/talhanation/workers/network/MessageUpdateLumberArea.java index ade6bae9..90880787 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateLumberArea.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateLumberArea.java @@ -1,22 +1,22 @@ package com.talhanation.workers.network; import com.talhanation.workers.entities.workarea.LumberArea; -import de.maxhenkel.corelib.net.Message; -import net.minecraft.nbt.CompoundTag; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; import static com.talhanation.workers.entities.workarea.AbstractWorkAreaEntity.DONE_TIME; -public class MessageUpdateLumberArea implements Message { +public class MessageUpdateLumberArea implements WorkersMessage { public UUID uuid; - public CompoundTag tag; + public ItemStack saplingItem = ItemStack.EMPTY; public boolean shearLeaves; public boolean stripLogs; public boolean replant; @@ -26,18 +26,17 @@ public MessageUpdateLumberArea() { public MessageUpdateLumberArea(UUID uuid, ItemStack saplingItem, boolean shearLeaves, boolean stripLogs, boolean replant) { this.uuid = uuid; - CompoundTag compoundnbt = new CompoundTag(); - this.tag = saplingItem.save(compoundnbt); + this.saplingItem = saplingItem.copy(); this.shearLeaves = shearLeaves; this.stripLogs = stripLogs; this.replant = replant; } - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if(player == null) return; @@ -52,8 +51,7 @@ public void executeServerSide(NetworkEvent.Context context){ } public void update(LumberArea lumberArea){ - ItemStack itemStack = ItemStack.of(tag); - lumberArea.setSaplingStack(itemStack); + lumberArea.setSaplingStack(this.saplingItem); lumberArea.setShearLeaves(this.shearLeaves); lumberArea.setStripLogs(this.stripLogs); lumberArea.setReplant(this.replant); @@ -63,7 +61,7 @@ public void update(LumberArea lumberArea){ public MessageUpdateLumberArea fromBytes(FriendlyByteBuf buf) { this.uuid = buf.readUUID(); - this.tag = buf.readNbt(); + this.saplingItem = ItemStack.OPTIONAL_STREAM_CODEC.decode((RegistryFriendlyByteBuf) buf); this.shearLeaves = buf.readBoolean(); this.stripLogs = buf.readBoolean(); this.replant = buf.readBoolean(); @@ -72,7 +70,7 @@ public MessageUpdateLumberArea fromBytes(FriendlyByteBuf buf) { public void toBytes(FriendlyByteBuf buf) { buf.writeUUID(uuid); - buf.writeNbt(tag); + ItemStack.OPTIONAL_STREAM_CODEC.encode((RegistryFriendlyByteBuf) buf, saplingItem); buf.writeBoolean(shearLeaves); buf.writeBoolean(stripLogs); buf.writeBoolean(replant); diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateMarketArea.java b/src/main/java/com/talhanation/workers/network/MessageUpdateMarketArea.java index 89fed449..06de1259 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateMarketArea.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateMarketArea.java @@ -1,15 +1,15 @@ package com.talhanation.workers.network; import com.talhanation.workers.entities.workarea.MarketArea; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageUpdateMarketArea implements Message { +public class MessageUpdateMarketArea implements WorkersMessage { public UUID uuid; public boolean isOpen; @@ -24,10 +24,10 @@ public MessageUpdateMarketArea(UUID uuid, boolean isOpen, String marketName) { } @Override - public Dist getExecutingSide() { return Dist.DEDICATED_SERVER; } + public PacketFlow getExecutingSide() { return PacketFlow.SERVERBOUND; } @Override - public void executeServerSide(NetworkEvent.Context context) { + public void executeServerSide(WorkersNetworkContext context) { ServerPlayer player = context.getSender(); if (player == null) return; diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateMerchant.java b/src/main/java/com/talhanation/workers/network/MessageUpdateMerchant.java index 0553aa5f..2b766560 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateMerchant.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateMerchant.java @@ -2,16 +2,16 @@ import com.talhanation.workers.entities.MerchantEntity; import com.talhanation.workers.world.WorkersMerchantTrade; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageUpdateMerchant implements Message { +public class MessageUpdateMerchant implements WorkersMessage { public UUID merchantUuid; public boolean isCreative; @@ -31,11 +31,11 @@ public MessageUpdateMerchant(UUID merchantUuid, boolean isCreative, boolean isTr } @Override - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if(player == null) return; diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateMerchantTrade.java b/src/main/java/com/talhanation/workers/network/MessageUpdateMerchantTrade.java index 9fd4d3bf..4e03cde8 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateMerchantTrade.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateMerchantTrade.java @@ -2,33 +2,34 @@ import com.talhanation.workers.entities.MerchantEntity; import com.talhanation.workers.world.WorkersMerchantTrade; -import de.maxhenkel.corelib.net.Message; +import net.minecraft.core.HolderLookup; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageUpdateMerchantTrade implements Message { +public class MessageUpdateMerchantTrade implements WorkersMessage { public UUID merchantUuid; public CompoundTag nbt; public boolean remove; public MessageUpdateMerchantTrade() {} - public MessageUpdateMerchantTrade(UUID merchantUuid, WorkersMerchantTrade trade, boolean remove) { + public MessageUpdateMerchantTrade(UUID merchantUuid, WorkersMerchantTrade trade, HolderLookup.Provider registries, boolean remove) { this.merchantUuid = merchantUuid; - this.nbt = trade.toNbt(); + this.nbt = trade.toNbt(registries); this.remove = remove; } @Override - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if(player == null) return; @@ -44,10 +45,10 @@ public void executeServerSide(NetworkEvent.Context context){ public void update(MerchantEntity merchant){ if(remove){ - merchant.removeTrade(WorkersMerchantTrade.fromNbt(nbt)); + merchant.removeTrade(WorkersMerchantTrade.fromNbt(merchant.registryAccess(), nbt)); } else{ - merchant.addOrUpdateTrade(WorkersMerchantTrade.fromNbt(nbt)); + merchant.addOrUpdateTrade(WorkersMerchantTrade.fromNbt(merchant.registryAccess(), nbt)); } } diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateMiningArea.java b/src/main/java/com/talhanation/workers/network/MessageUpdateMiningArea.java index af33e912..880b8e50 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateMiningArea.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateMiningArea.java @@ -1,15 +1,16 @@ package com.talhanation.workers.network; import com.talhanation.workers.entities.workarea.MiningArea; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageUpdateMiningArea implements Message { +public class MessageUpdateMiningArea implements WorkersMessage { public UUID uuid; public int xSize; @@ -39,11 +40,11 @@ public MessageUpdateMiningArea(UUID uuid, int xSize, int ySize, int zSize, int y } @Override - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if(player == null) return; @@ -79,7 +80,7 @@ public MessageUpdateMiningArea fromBytes(FriendlyByteBuf buf) { this.closeFloor = buf.readBoolean(); this.closeFluids = buf.readBoolean(); this.mineWallOres = buf.readBoolean(); - this.fillItem = buf.readItem(); + this.fillItem = net.minecraft.world.item.ItemStack.OPTIONAL_STREAM_CODEC.decode((RegistryFriendlyByteBuf) buf); this.mode = buf.readInt(); this.keepOn = buf.readBoolean(); return this; @@ -94,8 +95,8 @@ public void toBytes(FriendlyByteBuf buf) { buf.writeBoolean(closeFloor); buf.writeBoolean(closeFluids); buf.writeBoolean(mineWallOres); - buf.writeItem(fillItem); + net.minecraft.world.item.ItemStack.OPTIONAL_STREAM_CODEC.encode((RegistryFriendlyByteBuf) buf, fillItem); buf.writeInt(mode); buf.writeBoolean(keepOn); } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateOwner.java b/src/main/java/com/talhanation/workers/network/MessageUpdateOwner.java index 89fd7ac2..dddaffef 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateOwner.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateOwner.java @@ -2,17 +2,17 @@ import com.talhanation.recruits.world.RecruitsPlayerInfo; import com.talhanation.workers.entities.workarea.AbstractWorkAreaEntity; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageUpdateOwner implements Message { +public class MessageUpdateOwner implements WorkersMessage { public UUID uuid; public UUID playerUUID; @@ -27,11 +27,11 @@ public MessageUpdateOwner(UUID uuid, RecruitsPlayerInfo playerInfo) { this.playerName = playerInfo.getName(); } - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if(player == null) return; diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateStorageArea.java b/src/main/java/com/talhanation/workers/network/MessageUpdateStorageArea.java index 93ba5490..77cd64a2 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateStorageArea.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateStorageArea.java @@ -1,16 +1,16 @@ package com.talhanation.workers.network; import com.talhanation.workers.entities.workarea.StorageArea; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; -public class MessageUpdateStorageArea implements Message { +public class MessageUpdateStorageArea implements WorkersMessage { public UUID uuid; public int mask; @@ -25,11 +25,11 @@ public MessageUpdateStorageArea(UUID uuid, int mask, String name) { this.name = name; } - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if(player == null) return; diff --git a/src/main/java/com/talhanation/workers/network/MessageUpdateWorkArea.java b/src/main/java/com/talhanation/workers/network/MessageUpdateWorkArea.java index 9cec128d..06b34fdc 100644 --- a/src/main/java/com/talhanation/workers/network/MessageUpdateWorkArea.java +++ b/src/main/java/com/talhanation/workers/network/MessageUpdateWorkArea.java @@ -3,7 +3,7 @@ import com.talhanation.recruits.world.RecruitsPlayerInfo; import com.talhanation.workers.entities.workarea.AbstractWorkAreaEntity; import com.talhanation.workers.entities.workarea.MiningArea; -import de.maxhenkel.corelib.net.Message; +import com.talhanation.workers.network.compat.WorkersMessage; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; @@ -11,14 +11,14 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.protocol.PacketFlow; +import com.talhanation.workers.network.compat.WorkersNetworkContext; import java.util.UUID; import static com.talhanation.workers.entities.workarea.AbstractWorkAreaEntity.DONE_TIME; -public class MessageUpdateWorkArea implements Message { +public class MessageUpdateWorkArea implements WorkersMessage { public float x; public float y; public float z; @@ -41,11 +41,11 @@ public MessageUpdateWorkArea(UUID uuid, String name, Vec3 vec3, boolean destroy, this.teamAccess = teamAccess; } - public Dist getExecutingSide() { - return Dist.DEDICATED_SERVER; + public PacketFlow getExecutingSide() { + return PacketFlow.SERVERBOUND; } - public void executeServerSide(NetworkEvent.Context context){ + public void executeServerSide(WorkersNetworkContext context){ ServerPlayer player = context.getSender(); if(player == null) return; diff --git a/src/main/java/com/talhanation/workers/network/compat/WorkersChannel.java b/src/main/java/com/talhanation/workers/network/compat/WorkersChannel.java new file mode 100644 index 00000000..b5a59870 --- /dev/null +++ b/src/main/java/com/talhanation/workers/network/compat/WorkersChannel.java @@ -0,0 +1,13 @@ +package com.talhanation.workers.network.compat; + +import de.maxhenkel.corelib.net.Message; + +public final class WorkersChannel { + public void sendToServer(Message message) { + net.neoforged.neoforge.network.PacketDistributor.sendToServer(message); + } + + public void send(WorkersPacketDistributor.Target target, Message message) { + target.send(message); + } +} diff --git a/src/main/java/com/talhanation/workers/network/compat/WorkersMessage.java b/src/main/java/com/talhanation/workers/network/compat/WorkersMessage.java new file mode 100644 index 00000000..a98ab1fd --- /dev/null +++ b/src/main/java/com/talhanation/workers/network/compat/WorkersMessage.java @@ -0,0 +1,118 @@ +package com.talhanation.workers.network.compat; + +import com.talhanation.workers.WorkersMain; +import de.maxhenkel.corelib.net.Message; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.IPayloadContext; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Locale; +import java.util.concurrent.ConcurrentHashMap; + +public interface WorkersMessage> extends Message { + ConcurrentHashMap METHOD_CACHE = new ConcurrentHashMap<>(); + Method ABSENT_METHOD = AbsentMethodHolder.SENTINEL; + + record MethodKey(Class owner, String name, Class parameterType) { + } + + final class AbsentMethodHolder { + private static final Method SENTINEL; + + static { + try { + SENTINEL = AbsentMethodHolder.class.getDeclaredMethod("sentinel"); + } catch (NoSuchMethodException e) { + throw new ExceptionInInitializerError(e); + } + } + + private AbsentMethodHolder() { + } + + @SuppressWarnings("unused") + private static void sentinel() { + } + } + + default T fromBytes(FriendlyByteBuf buf) { + @SuppressWarnings("unchecked") + T self = (T) this; + return self; + } + + default void toBytes(FriendlyByteBuf buf) { + } + + default void executeServerSide(WorkersNetworkContext context) { + } + + default void executeClientSide(WorkersNetworkContext context) { + } + + @Override + default CustomPacketPayload.Type type() { + return new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath( + WorkersMain.MOD_ID, + getClass().getSimpleName().replaceAll("([a-z])([A-Z])", "$1_$2").toLowerCase(Locale.ROOT) + )); + } + + @SuppressWarnings("unchecked") + @Override + default T fromBytes(RegistryFriendlyByteBuf buf) { + invokeLegacy("fromBytes", FriendlyByteBuf.class, buf); + return (T) this; + } + + @Override + default void toBytes(RegistryFriendlyByteBuf buf) { + invokeLegacy("toBytes", FriendlyByteBuf.class, buf); + } + + @Override + default void executeServerSide(IPayloadContext context) { + invokeLegacy("executeServerSide", WorkersNetworkContext.class, new WorkersNetworkContext(context)); + } + + @Override + default void executeClientSide(IPayloadContext context) { + invokeLegacy("executeClientSide", WorkersNetworkContext.class, new WorkersNetworkContext(context)); + } + + default void invokeLegacy(String methodName, Class parameterType, Object argument) { + Method method = METHOD_CACHE.computeIfAbsent( + new MethodKey(getClass(), methodName, parameterType), + WorkersMessage::resolveMethod + ); + if (method == ABSENT_METHOD) { + return; + } + try { + method.invoke(this, argument); + } catch (IllegalAccessException e) { + throw new IllegalStateException("Cannot access packet method " + methodName + " on " + getClass().getName(), e); + } catch (InvocationTargetException e) { + Throwable cause = e.getCause(); + if (cause instanceof RuntimeException runtimeException) { + throw runtimeException; + } + if (cause instanceof Error error) { + throw error; + } + throw new IllegalStateException("Packet method " + methodName + " failed on " + getClass().getName(), cause); + } + } + + private static Method resolveMethod(MethodKey key) { + try { + return key.owner().getMethod(key.name(), key.parameterType()); + } catch (NoSuchMethodException e) { + return ABSENT_METHOD; + } + } +} diff --git a/src/main/java/com/talhanation/workers/network/compat/WorkersNetworkContext.java b/src/main/java/com/talhanation/workers/network/compat/WorkersNetworkContext.java new file mode 100644 index 00000000..6e7e9899 --- /dev/null +++ b/src/main/java/com/talhanation/workers/network/compat/WorkersNetworkContext.java @@ -0,0 +1,22 @@ +package com.talhanation.workers.network.compat; + +import net.minecraft.server.level.ServerPlayer; +import net.neoforged.neoforge.network.handling.IPayloadContext; + +import java.util.concurrent.CompletableFuture; + +public final class WorkersNetworkContext { + private final IPayloadContext delegate; + + public WorkersNetworkContext(IPayloadContext delegate) { + this.delegate = delegate; + } + + public ServerPlayer getSender() { + return delegate.player() instanceof ServerPlayer serverPlayer ? serverPlayer : null; + } + + public CompletableFuture enqueueWork(Runnable runnable) { + return delegate.enqueueWork(runnable); + } +} diff --git a/src/main/java/com/talhanation/workers/network/compat/WorkersNetworkHooks.java b/src/main/java/com/talhanation/workers/network/compat/WorkersNetworkHooks.java new file mode 100644 index 00000000..2f8abb59 --- /dev/null +++ b/src/main/java/com/talhanation/workers/network/compat/WorkersNetworkHooks.java @@ -0,0 +1,23 @@ +package com.talhanation.workers.network.compat; + +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.Entity; + +import java.util.function.Consumer; + +public final class WorkersNetworkHooks { + private WorkersNetworkHooks() { + } + + public static void openScreen(ServerPlayer player, MenuProvider provider, Consumer extraDataWriter) { + player.openMenu(provider, extraDataWriter); + } + + public static Packet getEntitySpawningPacket(Entity entity) { + return entity.getAddEntityPacket(null); + } +} diff --git a/src/main/java/com/talhanation/workers/network/compat/WorkersPacketDistributor.java b/src/main/java/com/talhanation/workers/network/compat/WorkersPacketDistributor.java new file mode 100644 index 00000000..df97d274 --- /dev/null +++ b/src/main/java/com/talhanation/workers/network/compat/WorkersPacketDistributor.java @@ -0,0 +1,30 @@ +package com.talhanation.workers.network.compat; + +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.server.level.ServerPlayer; + +import java.util.function.Supplier; + +public final class WorkersPacketDistributor { + public static final PlayerTarget PLAYER = new PlayerTarget(); + + private WorkersPacketDistributor() { + } + + public interface Target { + void send(CustomPacketPayload payload); + } + + public record PlayerPacketTarget(ServerPlayer player) implements Target { + @Override + public void send(CustomPacketPayload payload) { + net.neoforged.neoforge.network.PacketDistributor.sendToPlayer(player, payload); + } + } + + public static final class PlayerTarget { + public Target with(Supplier player) { + return new PlayerPacketTarget(player.get()); + } + } +} diff --git a/src/main/java/com/talhanation/workers/world/BuildBlockParse.java b/src/main/java/com/talhanation/workers/world/BuildBlockParse.java index 8939d97b..ac67feed 100644 --- a/src/main/java/com/talhanation/workers/world/BuildBlockParse.java +++ b/src/main/java/com/talhanation/workers/world/BuildBlockParse.java @@ -103,7 +103,9 @@ private static Item resolveBaseItem(Block block, Level level) { Item resolved = null; try { - for (CraftingRecipe recipe : level.getRecipeManager().getAllRecipesFor(RecipeType.CRAFTING)) { + for (net.minecraft.world.item.crafting.RecipeHolder holder + : level.getRecipeManager().getAllRecipesFor(RecipeType.CRAFTING)) { + CraftingRecipe recipe = holder.value(); ItemStack result = recipe.getResultItem(level.registryAccess()); if (result.isEmpty() || result.getItem() != ownItem) continue; @@ -145,4 +147,4 @@ else if (found != candidate) { } return found; } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/world/CourierAction.java b/src/main/java/com/talhanation/workers/world/CourierAction.java index 7bff60ac..89160944 100644 --- a/src/main/java/com/talhanation/workers/world/CourierAction.java +++ b/src/main/java/com/talhanation/workers/world/CourierAction.java @@ -1,5 +1,6 @@ package com.talhanation.workers.world; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.ItemStack; @@ -125,24 +126,26 @@ private CourierAction() {} public void setWaitSeconds(int s) { this.waitSeconds = s; } // NBT - public CompoundTag toNBT() { + public CompoundTag toNBT(HolderLookup.Provider registries) { CompoundTag nbt = new CompoundTag(); nbt.putString("ActionType", actionType.name()); if (sourceType != null) nbt.putString("SourceType", sourceType.name()); - if (itemStack != null && !itemStack.isEmpty()) nbt.put("Item", itemStack.serializeNBT()); + if (itemStack != null && !itemStack.isEmpty()) nbt.put("Item", itemStack.saveOptional(registries)); nbt.putInt("WaitSeconds", waitSeconds); return nbt; } @Nullable - public static CourierAction fromNBT(CompoundTag nbt) { + public static CourierAction fromNBT(HolderLookup.Provider registries, CompoundTag nbt) { if (nbt == null || nbt.isEmpty()) return null; String raw = nbt.getString("ActionType"); // Backward compatibility: the old single "FILL" action behaved like PUT_FILL. ActionType type = "FILL".equals(raw) ? ActionType.PUT_FILL : ActionType.fromString(raw); if (type == ActionType.WAIT) return wait(nbt.getInt("WaitSeconds")); SourceType source = SourceType.fromString(nbt.getString("SourceType")); - ItemStack item = nbt.contains("Item") ? ItemStack.of(nbt.getCompound("Item")) : ItemStack.EMPTY; + ItemStack item = nbt.contains("Item") + ? ItemStack.parseOptional(registries, nbt.getCompound("Item")) + : ItemStack.EMPTY; return switch (type) { case TAKE -> take(source, item); case PUT -> put(source, item); @@ -155,4 +158,4 @@ public static CourierAction fromNBT(CompoundTag nbt) { default -> null; }; } -} \ No newline at end of file +} diff --git a/src/main/java/com/talhanation/workers/world/CourierRoute.java b/src/main/java/com/talhanation/workers/world/CourierRoute.java index 01efd276..37b5ee4a 100644 --- a/src/main/java/com/talhanation/workers/world/CourierRoute.java +++ b/src/main/java/com/talhanation/workers/world/CourierRoute.java @@ -2,6 +2,7 @@ import com.talhanation.recruits.world.RecruitsRoute; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; @@ -64,20 +65,20 @@ public int size() { // ── NBT ──────────────────────────────────────────────────────────────────── - public CompoundTag toNBT() { + public CompoundTag toNBT(HolderLookup.Provider registries) { CompoundTag nbt = new CompoundTag(); if (routeId != null) nbt.putUUID("RouteId", routeId); ListTag waypointList = new ListTag(); for (CourierWaypoint wp : waypoints) { - waypointList.add(wp.toNBT()); + waypointList.add(wp.toNBT(registries)); } nbt.put("Waypoints", waypointList); return nbt; } @Nullable - public static CourierRoute fromNBT(CompoundTag nbt) { + public static CourierRoute fromNBT(HolderLookup.Provider registries, CompoundTag nbt) { if (nbt == null || nbt.isEmpty()) return null; UUID routeId = nbt.hasUUID("RouteId") ? nbt.getUUID("RouteId") : null; @@ -85,7 +86,7 @@ public static CourierRoute fromNBT(CompoundTag nbt) { List wps = new ArrayList<>(); ListTag waypointList = nbt.getList("Waypoints", Tag.TAG_COMPOUND); for (int i = 0; i < waypointList.size(); i++) { - CourierWaypoint wp = CourierWaypoint.fromNBT(waypointList.getCompound(i)); + CourierWaypoint wp = CourierWaypoint.fromNBT(registries, waypointList.getCompound(i)); if (wp != null) wps.add(wp); } @@ -108,7 +109,7 @@ public BlockPos getPosition() { return position; } - public CompoundTag toNBT() { + public CompoundTag toNBT(HolderLookup.Provider registries) { CompoundTag nbt = new CompoundTag(); nbt.putInt("X", position.getX()); nbt.putInt("Y", position.getY()); @@ -117,14 +118,14 @@ public CompoundTag toNBT() { ListTag actionList = new ListTag(); for (CourierAction action : actions) { - actionList.add(action.toNBT()); + actionList.add(action.toNBT(registries)); } nbt.put("Actions", actionList); return nbt; } @Nullable - public static CourierWaypoint fromNBT(CompoundTag nbt) { + public static CourierWaypoint fromNBT(HolderLookup.Provider registries, CompoundTag nbt) { if (nbt == null || nbt.isEmpty()) return null; BlockPos pos = new BlockPos(nbt.getInt("X"), nbt.getInt("Y"), nbt.getInt("Z")); @@ -133,7 +134,7 @@ public static CourierWaypoint fromNBT(CompoundTag nbt) { List actions = new ArrayList<>(); ListTag actionList = nbt.getList("Actions", Tag.TAG_COMPOUND); for (int i = 0; i < Math.min(actionList.size(), 8); i++) { - CourierAction action = CourierAction.fromNBT(actionList.getCompound(i)); + CourierAction action = CourierAction.fromNBT(registries, actionList.getCompound(i)); if (action != null) actions.add(action); } diff --git a/src/main/java/com/talhanation/workers/world/StructureManager.java b/src/main/java/com/talhanation/workers/world/StructureManager.java index c20b6466..eeaf104c 100644 --- a/src/main/java/com/talhanation/workers/world/StructureManager.java +++ b/src/main/java/com/talhanation/workers/world/StructureManager.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BushBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.core.registries.BuiltInRegistries; import java.io.File; import java.io.IOException; @@ -61,7 +61,7 @@ public static CompoundTag scanStructure(Level level, BuildArea buildArea, String ListTag entityList = new ListTag(); List workAreas = level.getEntitiesOfClass(AbstractWorkAreaEntity.class, buildArea.getArea()); for (AbstractWorkAreaEntity wa : workAreas) { - ResourceLocation typeKey = ForgeRegistries.ENTITY_TYPES.getKey(wa.getType()); + ResourceLocation typeKey = BuiltInRegistries.ENTITY_TYPE.getKey(wa.getType()); if (typeKey == null || wa instanceof BuildArea) continue; BlockPos delta = wa.getOnPos().subtract(origin); int relZ = dotHorizontal(delta, facing); @@ -104,7 +104,7 @@ public static void saveStructureToFile(String filename, CompoundTag root) { File file = new File(dir, filename.endsWith(".nbt") ? filename : filename + ".nbt"); root.putString("name", filename); try { - NbtIo.writeCompressed(root, file); + NbtIo.writeCompressed(root, file.toPath()); Minecraft.getInstance().player.displayClientMessage( Component.literal("Scan saved to: " + file.getPath()), true); } catch (IOException e) { @@ -119,7 +119,7 @@ public static CompoundTag loadScanNbt(String scanRelativePath) { for (int i = 0; i < parts.length - 1; i++) base = base.resolve(parts[i]); Path scanFile = base.resolve(parts[parts.length - 1] + ".nbt"); try (InputStream input = Files.newInputStream(scanFile)) { - return NbtIo.readCompressed(input); + return NbtIo.readCompressed(input, net.minecraft.nbt.NbtAccounter.unlimitedHeap()); } catch (IOException e) { e.printStackTrace(); return null; diff --git a/src/main/java/com/talhanation/workers/world/WorkersMerchantTrade.java b/src/main/java/com/talhanation/workers/world/WorkersMerchantTrade.java index 4f14f58c..85998c78 100644 --- a/src/main/java/com/talhanation/workers/world/WorkersMerchantTrade.java +++ b/src/main/java/com/talhanation/workers/world/WorkersMerchantTrade.java @@ -3,6 +3,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; +import net.minecraft.core.HolderLookup; import net.minecraft.world.item.ItemStack; import java.util.ArrayList; @@ -42,11 +43,11 @@ private WorkersMerchantTrade(UUID uuid, ItemStack currencyItem, ItemStack tradeI this.isVillagerTrade = false; } - public CompoundTag toNbt() { + public CompoundTag toNbt(HolderLookup.Provider registries) { CompoundTag tag = new CompoundTag(); tag.putUUID("uuid", this.uuid); - tag.put("currencyItem", this.currencyItem.serializeNBT()); - tag.put("tradeItem", this.tradeItem.serializeNBT()); + tag.put("currencyItem", this.currencyItem.saveOptional(registries)); + tag.put("tradeItem", this.tradeItem.saveOptional(registries)); tag.putInt("maxTrades", maxTrades); tag.putInt("currentTrades", currentTrades); tag.putBoolean("allowDamagedCurrency", this.allowDamagedCurrency); @@ -55,9 +56,9 @@ public CompoundTag toNbt() { return tag; } - public static WorkersMerchantTrade fromNbt(CompoundTag tag) { - ItemStack currencyItem = ItemStack.of(tag.getCompound("currencyItem")); - ItemStack tradeItem = ItemStack.of(tag.getCompound("tradeItem")); + public static WorkersMerchantTrade fromNbt(HolderLookup.Provider registries, CompoundTag tag) { + ItemStack currencyItem = ItemStack.parseOptional(registries, tag.getCompound("currencyItem")); + ItemStack tradeItem = ItemStack.parseOptional(registries, tag.getCompound("tradeItem")); UUID uuid = tag.getUUID("uuid"); int maxTrades = tag.getInt("maxTrades"); int currentTrades = tag.getInt("currentTrades"); @@ -71,20 +72,20 @@ public static WorkersMerchantTrade fromNbt(CompoundTag tag) { trade.isVillagerTrade = tag.getBoolean("isVillagerTrade"); return trade; } - public static CompoundTag listToNbt(List trades) { + public static CompoundTag listToNbt(HolderLookup.Provider registries, List trades) { CompoundTag compound = new CompoundTag(); if (trades == null) return compound; ListTag list = new ListTag(); for (WorkersMerchantTrade t : trades) { - list.add(t.toNbt()); + list.add(t.toNbt(registries)); } compound.put("Trades", list); return compound; } - public static List listFromNbt(CompoundTag compound) { + public static List listFromNbt(HolderLookup.Provider registries, CompoundTag compound) { List out = new ArrayList<>(); if (compound == null || !compound.contains("Trades", Tag.TAG_LIST)) { return out; @@ -93,7 +94,7 @@ public static List listFromNbt(CompoundTag compound) { ListTag list = compound.getList("Trades", Tag.TAG_COMPOUND); for (int i = 0; i < list.size(); i++) { CompoundTag entry = list.getCompound(i); - out.add(WorkersMerchantTrade.fromNbt(entry)); + out.add(WorkersMerchantTrade.fromNbt(registries, entry)); } return out; } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index e4f214b4..9a8c4484 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,13 +1,6 @@ -public net.minecraft.world.SimpleContainer f_19147_ # items -public net.minecraft.world.item.AxeItem f_150683_ # STRIPPABLES -public net.minecraft.world.entity.npc.Villager m_35527_()Z # shouldIncreaseLevel -public net.minecraft.world.entity.animal.horse.AbstractHorse f_30520_ # inventory -public net.minecraft.world.item.AxeItem f_150683_ # STRIPPABLES -public net.minecraft.world.entity.animal.Pig f_29458_ # FOOD_ITEMS -public net.minecraft.world.CompoundContainer f_18910_ # container1 -public net.minecraft.world.CompoundContainer f_18911_ # container2 - -public net.minecraft.world.entity.animal.Chicken f_28233_ # FOOD_ITEMS -public net.minecraft.world.entity.npc.Villager f_35373_ # updateMerchantTimer -public net.minecraft.world.entity.npc.Villager f_35374_ # increaseProfessionLevelOnUpdate - +public net.minecraft.world.CompoundContainer container1 +public net.minecraft.world.CompoundContainer container2 +public net.minecraft.world.entity.animal.horse.AbstractHorse inventory +public net.minecraft.world.entity.npc.Villager shouldIncreaseLevel()Z +public net.minecraft.world.entity.npc.Villager updateMerchantTimer +public net.minecraft.world.entity.npc.Villager increaseProfessionLevelOnUpdate diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml deleted file mode 100644 index 72c4a2f5..00000000 --- a/src/main/resources/META-INF/mods.toml +++ /dev/null @@ -1,33 +0,0 @@ -license="All rights reserved" - -modLoader="javafml" - -loaderVersion="[47,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. - -[[mods]] #mandatory - -modId="workers" - -version="2.0.3" - -displayName="Villager Workers Mod" -updateJSONURL="https://raw.githubusercontent.com/talhanation/workers/main/update.json" -displayURL="https://modrinth.com/mod/villager-workers" - -logoFile="logo.png" - -credits="talhanation" - -authors="talhanation" -# The description text for the mod (multi line!) (#mandatory) -description=''' -Adds hireable Villager Workers into Minecraft. -''' - - -[[dependencies.workers]] - modId="recruits" - mandatory=true - versionRange="[1.15.0,)" - ordering="AFTER" - side="BOTH" diff --git a/src/main/resources/mixins.workers.json b/src/main/resources/mixins.workers.json index 099d2a88..3b6c235b 100644 --- a/src/main/resources/mixins.workers.json +++ b/src/main/resources/mixins.workers.json @@ -2,8 +2,7 @@ "required": true, "minVersion": "0.8", "package": "com.talhanation.workers.mixin", - "compatibilityLevel": "JAVA_17", - "refmap": "mixins.workers.refmap.json", + "compatibilityLevel": "JAVA_21", "mixins": [ "MixinVillager" ], @@ -12,4 +11,4 @@ "injectors": { "defaultRequire": 1 } -} \ No newline at end of file +} diff --git a/src/main/templates/META-INF/neoforge.mods.toml b/src/main/templates/META-INF/neoforge.mods.toml new file mode 100644 index 00000000..cd0a4d2a --- /dev/null +++ b/src/main/templates/META-INF/neoforge.mods.toml @@ -0,0 +1,38 @@ +license="${mod_license}" +modLoader="javafml" +loaderVersion="${loader_version_range}" + +[[mods]] +modId="${mod_id}" +version="${mod_version}" +displayName="${mod_name}" +updateJSONURL="https://raw.githubusercontent.com/talhanation/workers/main/update.json" +displayURL="https://modrinth.com/mod/villager-workers" +logoFile="logo.png" +credits="talhanation" +authors="${mod_authors}" +description='''${mod_description}''' + +[[mixins]] +config="mixins.workers.json" + +[[dependencies.${mod_id}]] +modId="neoforge" +type="required" +versionRange="${neo_version_range}" +ordering="NONE" +side="BOTH" + +[[dependencies.${mod_id}]] +modId="minecraft" +type="required" +versionRange="${minecraft_version_range}" +ordering="NONE" +side="BOTH" + +[[dependencies.${mod_id}]] +modId="recruits" +type="required" +versionRange="${recruits_version_range}" +ordering="AFTER" +side="BOTH"