From 778ae7ddd933cb2fa15a160cd308fef3559d53dc Mon Sep 17 00:00:00 2001 From: Mrbysco Date: Wed, 20 Nov 2024 17:06:19 +0100 Subject: [PATCH] Port to 1.20.4 --- .gitignore | 6 +- build.gradle | 128 ++++----- gradle.properties | 18 +- gradle/wrapper/gradle-wrapper.jar | Bin 61574 -> 62076 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 11 +- settings.gradle | 7 +- .../effortlessbuilding/AllGuiTextures.java | 4 +- .../requios/effortlessbuilding/AllIcons.java | 4 +- .../effortlessbuilding/ClientConfig.java | 6 +- .../effortlessbuilding/ClientEvents.java | 26 +- .../effortlessbuilding/CommonConfig.java | 6 +- .../effortlessbuilding/CommonEvents.java | 59 ++-- .../EffortlessBuilding.java | 99 ++++--- .../EffortlessBuildingClient.java | 4 +- .../effortlessbuilding/ServerConfig.java | 6 +- .../AttachmentHandler.java} | 39 ++- .../attachment/PowerLevel.java | 105 +++++++ .../buildmode/BuildModes.java | 10 +- .../buildmode/ModeOptions.java | 14 +- .../buildmode/ThreeClicksBuildMode.java | 8 +- .../buildmode/TwoClicksBuildMode.java | 4 +- .../buildmode/buildmodes/Floor.java | 4 +- .../buildmode/buildmodes/Line.java | 4 +- .../buildmode/buildmodes/SlopeFloor.java | 4 +- .../buildmode/buildmodes/Wall.java | 4 +- .../buildmodifier/BuildModifiers.java | 10 +- .../buildmodifier/Mirror.java | 4 +- .../buildmodifier/RadialMirror.java | 4 +- .../capability/IPowerLevel.java | 38 --- .../capability/PowerLevelCapability.java | 127 --------- .../compatibility/CompatHelper.java | 2 +- .../create/CreateClientTest.java | 5 +- .../create/events/ClientEvents.java | 18 +- .../create/events/CommonEvents.java | 10 +- .../foundation/ModFilePackResources.java | 50 ++-- .../foundation/gui/AbstractSimiScreen.java | 13 +- .../create/foundation/gui/AllGuiTextures.java | 4 +- .../create/foundation/gui/AllIcons.java | 4 +- .../foundation/gui/RemovedGuiUtils.java | 18 +- .../AbstractSimiContainerScreen.java | 6 +- .../gui/container/ClearMenuPacket.java | 60 ++-- .../gui/container/GhostItemMenu.java | 4 +- .../gui/container/GhostItemSubmitPacket.java | 90 +++--- .../gui/container/IClearableMenu.java | 2 +- .../foundation/gui/container/MenuBase.java | 4 +- .../gui/element/GuiGameElement.java | 4 +- .../foundation/gui/element/ScreenElement.java | 4 +- .../gui/widget/AbstractSimiWidget.java | 10 +- .../foundation/gui/widget/Indicator.java | 3 +- .../foundation/gui/widget/ScrollInput.java | 8 +- .../foundation/item/ItemHandlerWrapper.java | 2 +- .../create/foundation/item/ItemHelper.java | 4 +- .../item/TagDependentIngredientItem.java | 6 +- .../item/render/CustomRenderedItemModel.java | 2 +- .../item/render/PartialItemModelRenderer.java | 4 +- .../networking/ISyncPersistentData.java | 106 +++---- .../networking/SimplePacketBase.java | 24 +- .../render/SuperRenderTypeBuffer.java | 47 ++-- .../utility/AbstractBlockBreakQueue.java | 4 +- .../foundation/utility/BlockHelper.java | 8 +- .../foundation/utility/CreateRegistry.java | 202 +++++++------- .../create/foundation/utility/Debug.java | 6 +- .../create/foundation/utility/Lang.java | 2 +- .../create/foundation/utility/NBTHelper.java | 6 +- .../foundation/utility/RegisteredObjects.java | 22 +- .../foundation/utility/ResetableLazy.java | 2 +- .../utility/ghost/GhostBlockRenderer.java | 2 +- .../worldWrappers/WrappedClientWorld.java | 4 +- .../utility/worldWrappers/WrappedWorld.java | 6 + .../gui/DiamondRandomizerBagContainer.java | 6 +- .../gui/DiamondRandomizerBagScreen.java | 5 +- .../gui/GoldenRandomizerBagContainer.java | 6 +- .../gui/GoldenRandomizerBagScreen.java | 6 +- .../gui/RandomizerBagContainer.java | 6 +- .../gui/RandomizerBagScreen.java | 6 +- .../gui/buildmode/PlayerSettingsGui.java | 213 +++++++------- .../gui/buildmode/RadialMenu.java | 28 +- .../gui/buildmodifier/ArrayEntry.java | 12 +- .../gui/buildmodifier/BaseModifierEntry.java | 2 +- .../gui/buildmodifier/MirrorEntry.java | 12 +- .../gui/buildmodifier/ModifiersScreen.java | 8 +- .../buildmodifier/ModifiersScreenList.java | 47 ++-- .../gui/buildmodifier/RadialMirrorEntry.java | 12 +- .../gui/elements/GuiCheckBoxFixed.java | 9 +- .../elements/GuiCollapsibleScrollEntry.java | 4 +- .../gui/elements/GuiIconButton.java | 4 +- .../gui/elements/GuiNumberField.java | 6 +- .../gui/elements/GuiScrollPane.java | 12 +- .../gui/elements/SlotGui.java | 29 +- .../item/AbstractRandomizerBagItem.java | 263 +++++++++--------- .../item/ItemHandlerCapabilityProvider.java | 74 ++--- .../item/PowerLevelItem.java | 9 +- .../item/ReachUpgrade1Item.java | 9 +- .../item/ReachUpgrade2Item.java | 8 +- .../item/ReachUpgrade3Item.java | 9 +- .../item/SingleItemLootModifier.java | 29 +- .../network/IsQuickReplacingPacket.java | 35 --- .../network/IsUsingBuildModePacket.java | 36 --- .../network/ModifierSettingsPacket.java | 57 ---- .../network/PacketHandler.java | 66 ++--- .../network/PerformRedoPacket.java | 27 -- .../network/PerformUndoPacket.java | 27 -- .../network/PowerLevelPacket.java | 50 ---- .../network/ServerBreakBlocksPacket.java | 44 --- .../network/ServerPlaceBlocksPacket.java | 48 ---- .../network/TranslatedLogPacket.java | 74 ----- .../message/IsQuickReplacingPacket.java | 42 +++ .../message/IsUsingBuildModePacket.java | 42 +++ .../message/ModifierSettingsPacket.java | 69 +++++ .../network/message/PerformRedoPacket.java | 40 +++ .../network/message/PerformUndoPacket.java | 39 +++ .../network/message/PowerLevelPacket.java | 47 ++++ .../message/ServerBreakBlocksPacket.java | 45 +++ .../message/ServerPlaceBlocksPacket.java | 47 ++++ .../network/message/TranslatedLogPacket.java | 70 +++++ .../effortlessbuilding/proxy/ClientProxy.java | 12 +- .../effortlessbuilding/proxy/IProxy.java | 5 - .../effortlessbuilding/proxy/ServerProxy.java | 13 +- .../render/BlockPreviews.java | 4 +- .../render/ModifierRenderer.java | 4 +- .../render/RenderHandler.java | 14 +- .../systems/BuildSettings.java | 14 +- .../systems/BuilderChain.java | 27 +- .../systems/BuilderFilter.java | 4 +- .../systems/ServerBuildState.java | 4 +- .../effortlessbuilding/systems/UndoRedo.java | 2 +- .../utilities/BlockPlacerHelper.java | 10 +- .../utilities/BlockSet.java | 22 +- .../utilities/ClientBlockUtilities.java | 8 +- .../utilities/PlaceChecker.java | 4 +- .../utilities/PowerLevelCommand.java | 19 +- .../utilities/SurvivalHelper.java | 4 +- .../resources/META-INF/accesstransformer.cfg | 78 +++--- src/main/resources/META-INF/mods.toml | 19 +- .../assets/effortlessbuilding/lang/en_us.json | 12 +- ...techniques_book_library_loot_modifier.json | 2 +- ...uilding_techniques_book_loot_modifier.json | 40 +-- .../elastic_hand_loot_modifier.json | 40 +-- .../loot_modifiers/muscles_loot_modifier.json | 40 +-- .../loot_modifiers/global_loot_modifiers.json | 0 141 files changed, 1806 insertions(+), 1877 deletions(-) rename src/main/java/nl/requios/effortlessbuilding/{capability/CapabilityHandler.java => attachment/AttachmentHandler.java} (62%) create mode 100644 src/main/java/nl/requios/effortlessbuilding/attachment/PowerLevel.java delete mode 100644 src/main/java/nl/requios/effortlessbuilding/capability/IPowerLevel.java delete mode 100644 src/main/java/nl/requios/effortlessbuilding/capability/PowerLevelCapability.java delete mode 100644 src/main/java/nl/requios/effortlessbuilding/network/IsQuickReplacingPacket.java delete mode 100644 src/main/java/nl/requios/effortlessbuilding/network/IsUsingBuildModePacket.java delete mode 100644 src/main/java/nl/requios/effortlessbuilding/network/ModifierSettingsPacket.java delete mode 100644 src/main/java/nl/requios/effortlessbuilding/network/PerformRedoPacket.java delete mode 100644 src/main/java/nl/requios/effortlessbuilding/network/PerformUndoPacket.java delete mode 100644 src/main/java/nl/requios/effortlessbuilding/network/PowerLevelPacket.java delete mode 100644 src/main/java/nl/requios/effortlessbuilding/network/ServerBreakBlocksPacket.java delete mode 100644 src/main/java/nl/requios/effortlessbuilding/network/ServerPlaceBlocksPacket.java delete mode 100644 src/main/java/nl/requios/effortlessbuilding/network/TranslatedLogPacket.java create mode 100644 src/main/java/nl/requios/effortlessbuilding/network/message/IsQuickReplacingPacket.java create mode 100644 src/main/java/nl/requios/effortlessbuilding/network/message/IsUsingBuildModePacket.java create mode 100644 src/main/java/nl/requios/effortlessbuilding/network/message/ModifierSettingsPacket.java create mode 100644 src/main/java/nl/requios/effortlessbuilding/network/message/PerformRedoPacket.java create mode 100644 src/main/java/nl/requios/effortlessbuilding/network/message/PerformUndoPacket.java create mode 100644 src/main/java/nl/requios/effortlessbuilding/network/message/PowerLevelPacket.java create mode 100644 src/main/java/nl/requios/effortlessbuilding/network/message/ServerBreakBlocksPacket.java create mode 100644 src/main/java/nl/requios/effortlessbuilding/network/message/ServerPlaceBlocksPacket.java create mode 100644 src/main/java/nl/requios/effortlessbuilding/network/message/TranslatedLogPacket.java rename src/main/resources/data/{forge => neoforge}/loot_modifiers/global_loot_modifiers.json (100%) diff --git a/.gitignore b/.gitignore index 74c1d06..31d2550 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,7 @@ build # other eclipse run -logs/* +runs +run-data -# Files from Forge MDK -forge*changelog.txt +repo \ No newline at end of file diff --git a/build.gradle b/build.gradle index 68fb06f..67ed01f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,25 +1,11 @@ -buildscript { - repositories { - maven { url = 'https://maven.minecraftforge.net' } - mavenCentral() - maven { url = 'https://repo.spongepowered.org/repository/maven-public' } - maven { url = 'https://maven.parchmentmc.org' } - } - dependencies { - classpath "net.minecraftforge.gradle:ForgeGradle:${forgegradle_version}" - classpath "org.spongepowered:mixingradle:${mixingradle_version}" - classpath "org.parchmentmc:librarian:${librarian_version}" - } -} - plugins { + id 'java-library' + id 'eclipse' + id 'idea' + id 'maven-publish' + id 'net.neoforged.gradle.userdev' version "${neogradle_version}" id 'com.matthewprenger.cursegradle' version "${cursegradle_version}" } -apply plugin: 'net.minecraftforge.gradle' -apply plugin: 'org.parchmentmc.librarian.forgegradle' -apply plugin: 'eclipse' -apply plugin: 'maven-publish' -apply plugin: 'org.spongepowered.mixin' jarJar.enable() @@ -37,57 +23,48 @@ java.toolchain.languageVersion = JavaLanguageVersion.of(17) println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + ' (' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) -minecraft { - mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}" - accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') +minecraft.accessTransformers.file rootProject.file('src/main/resources/META-INF/accesstransformer.cfg') - runs { - client { - workingDirectory project.file('run') - arg '-mixin.config=flywheel.mixins.json' - //jvmArgs '-XX:+UnlockCommercialFeatures' // uncomment for profiling - property 'forge.logging.console.level', 'info' +runs { + // applies to all the run configs below + configureEach { net.neoforged.gradle.dsl.common.runs.run.Run run -> + // Recommended logging data for a userdev environment + systemProperty 'forge.logging.markers', 'REGISTRIES' - mods { - effortlessbuilding { - source sourceSets.main - } + // Recommended logging level for the console + systemProperty 'forge.logging.console.level', 'debug' - if (flywheelInWorkspace) { - flywheel { - source project(":Flywheel").sourceSets.main - } - } - } + //Limit ram usage for the dev environment to 4GB + jvmArgument '-Xmx4G' + if (run.project.javaToolchains.launcherFor(java.toolchain).map { it.metadata.vendor }.getOrElse("").contains("JetBrains")) { + jvmArgument '-XX:+AllowEnhancedClassRedefinition' } - server { - workingDirectory project.file('run/server') - property 'forge.logging.console.level', 'info' - mods { - effortlessbuilding { - source sourceSets.main - } + modSource project.sourceSets.main + } + + client { + // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. + systemProperty 'neoforge.enabledGameTestNamespaces', "effortlessbuilding" + + if (flywheelInWorkspace) { + dependencies { + runtime project(':Flywheel') } } + } - data { - workingDirectory project.file('run') - property 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP' - property 'forge.logging.console.level', 'debug' - args '--mod', 'effortlessbuilding', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources') - mods { - effortlessbuilding { - source sourceSets.main - } + server { + systemProperty 'neoforge.enabledGameTestNamespaces', "effortlessbuilding" + programArgument '--nogui' + } - if (flywheelInWorkspace) { - flywheel { - source project(":Flywheel").sourceSets.main - } - } - } - } + data { + // example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it + // workingDirectory project.file('run-data') + + // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. + programArguments.addAll '--mod', "effortlessbuilding", '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() } } @@ -97,10 +74,13 @@ repositories { name = 'tterrag maven' url = 'https://maven.tterrag.com' } - - maven { - url = 'https://www.cursemaven.com' - content { + exclusiveContent { + forRepository { + maven { + url "https://cursemaven.com" + } + } + filter { includeGroup "curse.maven" } } @@ -119,22 +99,16 @@ repositories { } dependencies { - minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" + implementation "net.neoforged:neoforge:${neo_version}" jarJar("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") { - jarJar.ranged(it, '[0.6.10,0.7)') + version { prefer "0.6.10" } } if (flywheelInWorkspace) { implementation project(':Flywheel') } else { - implementation fg.deobf("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") - } - - // Prevent Mixin annotation processor from getting into IntelliJ's annotation processor settings - // This allows 'Settings > Build, Execution, and Deployment > Build Tools > Gradle > Build and run using' set to IntelliJ to work correctly - if (!Boolean.getBoolean('idea.sync.active')) { - annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor" + implementation "com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}" } } @@ -179,8 +153,7 @@ java { withJavadocJar() } -jar.finalizedBy('reobfJar') -tasks.jarJar.finalizedBy('reobfJarJar') +tasks.build.dependsOn tasks.jarJar publishing { publications { @@ -188,8 +161,7 @@ publishing { artifactId = base.archivesName.get() from components.java - fg.component(it) - jarJar.component(it) +// fg.component(it) } } diff --git a/gradle.properties b/gradle.properties index 5c965dc..9781bc5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,17 +4,15 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false mod_version = 3.5 -artifact_minecraft_version = 1.20.1 +artifact_minecraft_version = 1.20.4 -minecraft_version = 1.20.1 -forge_version = 47.1.3 +minecraft_version = 1.20.4 +neo_version = 20.4.232 +neogradle.subsystems.parchment.minecraftVersion = 1.20.4 +neogradle.subsystems.parchment.mappingsVersion = 2024.02.25 -forgegradle_version = 6.0.7 -mixingradle_version = 0.7-SNAPSHOT -mixin_version = 0.8.5 -librarian_version = 1.+ +neogradle_version = 7.0.107 cursegradle_version = 1.4.0 -parchment_version = 2023.09.03 -flywheel_minecraft_version = 1.20.1 -flywheel_version = 0.6.10-7 \ No newline at end of file +flywheel_minecraft_version = 1.20.4 +flywheel_version = 0.6.10 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cbfa754578e88a3dae77fce6e3dea56edbf..c1962a79e29d3e0ab67b14947c167a862655af9b 100644 GIT binary patch delta 13895 zcmZ8|Wmp``)-~=Hdu)0n3Y-8OvyK$p9^s9MM|Aj$miotNhy-{udLczZyd9uWtD)X_{|!LhIEF9y8(e*Z zW>^w$u&x|i9OjL=#6Nl~*ERulzX>8C-}o;iSMRYdfCU5d`~U{V4>HCg0HG4Xg2uP;fn!>S9+>LbuWbc0bETMQfo9~h}yI*TSv;Oikl~t-+xqI-`P$Rj@yi{mr2zC~s1snMT3!OPBdJ%IDnPXq+pl*Z>=+?qo${lkCSKmwTlVjfb3thU6B8yFjr!tphOs*G6 zwL`RyVAUXj4p=9&@PpWK)m+REuvHaq838TEhY^7W+JAp$ zZ^y;8`Z*@VqJ{sFFj?<|7SKS@G`$Yi)gx%nOi@Lr zCv0IJlFz0bP(eDIW(uWNq?;8zEAb+uGgnkLk;y!4XhA6=Eoa<`+|;6mOq>z`%ir@z$4)Mkd3 zF=hFo zyd{*bRQ4YUe^bU*Y`__)Uhu5NIjVJ~a}{lHp-_7wI?#EB11XcqmdY>pk`JJ) zW9Rt!tK=N>fZ!UDomwMnb`0EOvTjcNl=yW@$c!OAg*=l()GjZwSyJ+o^;Zi#I5*uP z$6qeih8&g8E(pNSneK>93A(8*%gvwv!0V|SqGcj55Y7`=N*@pJx_ig3uVuf-G~LJbm`7nxNcZ>Jgqy(LTHu_C2e>STp^Pm{}f&^)XU}vzuU`UV&>e& zqsXNXSs;Wri|?NhCq0vXC5$>9Cag$adyWz^x@NCiy2${9Dc)Y;J8k1Z933W$3$H}g zCQFU1XwzGm_WUheXvnDisH_%BdzMgNwk2^mHcQu*x>U%iN*B^8U(eVz1~(%`kV1Vb z=9T0xmN?bQMyrrd?u}jer}zV&sCK6zSm!zV8A8dP6THF=4*V{_K*E*K<)I(Q^(eV!m!vu##-2g|G z{RB;{gJB_X-w{ANq?ft_n!@=O8_gj6FxW&zO$7L3@NjWt@R{NxMbpHLk6;=2$0P5P=kKc1_85inX z#s$&s0zhV1cz>nRb#|D#N8Z-=Tphm)sGH>9cz3K3I)6XpimJW0(6$GtLzN(YPu9%R zdFXG9|30AZME4r@joC0IdvBBe08mF@+5Dd97p$h=n|pi80Cn2n{ev!S$llPGLqHva zZ3*OmW%!Qj>C$F!Ffafl7#I_1(gz!aa)b{ebU*=yH%^kr=~N?|2&2Df2o9X=2B?U!#R#+Cj45=f@=EcQx+9J z=X3~A=zbX29Fqn23m3dm}0Voj^Q9BjI=MiG+NZ)YCYn@r^qv(xE3=)&i z=(ML301=rNTptvUt2tnsPb1~G*DWFWoZfv)wV|uNW%?!)jju`jN(K-0$JYi!ofNup z9K%_ucHwutbZsl~vDQ!Jtj8uI6WA6K--@?8+_=t>g|kgUeC=w`IP9m&*fuoO3#A;t z&3@=3;J0>yjM89?h5MG$S`wW+=vyYOWQGhIP`^vScM8^JL{mGan5uTJPvAg$0z}8; z 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 J*WbtZ{{Z#P!zlm& delta 13442 zcmY*=Wk4Lu)-CStgS)!~5AMM=xVr|o3>Mr6cNpB=LvVsyAXspBcgQ1o=R5aaest|x zYp|Ud;3g1aLn46!*8mAJI&Z-nf(`=#0paw?iVYg# zKUs^o|DOcGK$5&gPV0aMK}b!cw=e}1HdMgiC8Pg8*>1^32Z5FfsER!G3mZ%qKjJOpfesiQ2!1wa9roW6I&DK_t$shg|m=c2cE{QdM|NtSH0rXoXzvmNP+5U2LV{^QbB?sv0VKm95!eQeL4~+?=ho^^MZI zi4QY0fsKBbqrOh39Z!#mM!z2}i6F-BHKbV_Q&qzRsaF`l1Vjpm1sC-ZseEjRhHlco zfXoyCv0NC5K}!1s)zB(Gd8sKQIBYyB)bFK(2G2GM&K4S`>_HR&4tr1?iRab0FsEbp z*Jv*zm^-fRK+ctLcyDjn-afw<1S1jM(4q5ykfHQzL_}qIFL}{AIQ>4(4ufTO5LOPw z_jW{#M|)nyUycekv0yq3ALu*Gjx4MO>bHe*!#3>nE^vCCDgcN>sA^k$Zux742g7MRGS5YWh9J!2T zS<0JF@`%w;58G&U(_V6*RvcGc?)SP#I!b=^l;;8|2L56hb1X6;bd2imS_1e~0c%T; z1T8HGf8HR3ELFmM^n?Su6+Q7D+$t^=tIK-pWi`W;i!lHwI+jG7m{1RRjBU0~dzp zhN*kX9bAON4=>l-DWvYo*J$Q4Xp~|yYTaabShU@ns@lubZE3xU%6MYv&e|3AuK8?k zu?#J5JQ%%TJ7Bb$Gs;&*)*UAk%Oo-5q=+2(Jm zIuppiu)ZJ9p`Q{Ox6P5{rbDkZk#-Qv`%KHjq9XiNOUl8kb7aZj*E~>vv^dbHH4oOd zczWr1LJT!^o_(O*2>j}6lOtE3Z)Pht?L5pyzPpntJ|r!%j z5uggS6oZWkpVt^698p3fEKA&|+deWq)ldqZGKG?a|~=1V2xdW$8-mayFlC zJWmagu;BBJC#|ZHrUXfE&`4P20AGgWC5=H0HjYm~^E~OwgAnMps?;#CY=ahb7%?H$ ziejQ`%0Proz9+myGwpEQf^)-=KkUK?uyDVM9dcP_xwRPl?asXN_w$2*H zua=Dr(GFqiFLl870&u+1P>>n@QI(3gk(rj0%e8Ar$G7fdFyGel0{sZrPuEX12l`k< z5>lA+*xaiLY{Vo_72dq>E!s&D_ z0I)&YzOCXkxi;^DvcHbfU{x!;>3?+f!px_0&rPIW~iPmIG@n7rmiC;XiLC?f3vTJUz`Gg=p9 zK8)mv-V6dl|9;(R_$VaJ&lBtE0aw!=g-iJ(;|-J>nsF(42in0{Gp)Wy}WNr3llis^vYk0y2t{zC9G7SQW8GEvz>ZPi09E9wH*yE=+9`RdARy$??) z&b{^h_aIn=A*FNBQ7ATjvh&tjsQ~1FV3r;lW1~f8kh24Aagu#Jxb89ZAs>t(Qw(FD zS|S=1m#oMS;Dwi>0@KkG0*-OHaJb4?~;#3j^WrKgCx}3YozM}uF#0{&QFMled>Mo$+hUe%lY}nvK|5GwA1fTy@ z(^KJxKj6OT*`H=XLgP=vBF+Dn0wO;EGz7>+V7(zo`X~r*4Zb>n+<&CFW^ zx;O-Yo^0{nqPJTC5S<;>8>L{^1C9Ql@|#RETigaBa*_pJOL-@W8p+w%^}Gv*)l3j& zWma|3USri z5Z(cKy3rMvzZlR?nR7E6wO%( zDf&3(AqN7_lQ~96t?KD<`i5K_pH$aIxYeiWm}ICd!1&&$NJHxywzKXt0v0W~ZuFwG z5rq7KRa$-&A|tYU(+b&T6VxMx2Qmg$O$VM!XY^ciTE+)P^vMMLl^U-ySP1P83$*2u zNcQ@)+ok4pN7x{9Z?XBZPr*Vr7wr91_FvBH=xc%RZ4TH$W+0R#VWB0Ua`8O;-2Pnqo5QG!{#(=RmvtM({fuA>4ai&IW$2`P<|D!v-qs^RSsZ z2+y{qc6(Io-Ywwf<$c?(7ay7Q&wZ)JAdk<#iTYCy`PaXy(4aeKd-6d}u}-UT9jad< zPB+QbuZWqQGTG)@?W;;TDUqxD9Q+ao``pz(B`&cPTFR3|P6fz8&WRjU<4 zKLyJI>Cm{uI!saN=y6~Pp0Yiw`YLo6*z$^aOS8b)G@I&C3g&BsS$8cSG8QK(iy>kZ`195!*f-ndgPIM}p9?J=GYwFDqRYmdSymmgW9=>uiSN z{#DAsx#ke6UQ;6!o#~HR_BN1VnmUn=c$;LY0ajlu+#0J~E8a8UlvxiJ7^)K-FrJE% z<2gebNA1Z==jc$B(7~TXXM6&Q)3pToSPkWWSOl$HC)oA zgNe5(5xkR+BQco*Qiy6ns0vv|LP>(bx@_3vrzwIU;zwexl)cvpL>(yu=LHEOokp5L zRA9~H_ysBBuJrkjur_&)92IMj*o{ClU=^%$`6*Q~>ISJTt7*aljn)-ljW+BK3w>s| zLN#{_x{$hhj7jvX2)Uy)P$0MUVAnPRgU&7jijQ%_?AODC$j+(yrkEJnuiw`IZ7!R2 zPB4GAo_x+e`MWBlrj}-+i-p zjlo(;u36|+c@du3o(ChHTb!CNG1uvA!k!ACwEt{gFz)!#yl79^=yNgIS(ucgbSZVj zR+{Nqx!hUAVk>-}*j$=WTI$Wgh61lQum5C;c&WKWY;gwydc@?bv+*)FqXm13fAnj~ z7*E%gV-~u|mTx|mAw-ZO`Bi*+jS3ZWr4V0~ zh0jG$(j(1RVT&D>u$wVNqIc}P&MlcPYg z_5|^fraxyhG$cMGT+&0SEe)_*oGW>KQZ~0~Rq(Ly?T1~r;_P(>cUwlKd0k}|K>BjD zPqf(ox&pVUNt_0FAu<5Ry?hfTydm-bPTF3CYZH!1pu(4}QAR&!8!uXdc*_CBC>{%1 zA#ZnKhO=T2`m_g!lt@+#fsRc8DFky1Glal5Y`)UPr+ffyzIo=U{^j>S8)Iva%|F%A zGycyWb;bAUPc@wa68+gwA19vu!9Z~EZ_QRl-&-LDp`8Ih-Pu$4|EZ)baFvDzZ+qHA zEC>in&_*!{DEABjn62&YhoepMyX%-^)Evr&KA*^%h@n}5{G)gq78)|*fHeX)qcQ9U*FEo?pAZ2&Lq&Gb-n;6#E_Xu)r30J;4{Oxf#|W(TISTm37EaLAz)5( zb1#?ZZ;q%NG(z8!JPil?M!oqa`W!eDy}m>{b|!``@2#VCMt(D7+2Uyh$(<&;@EQ{J z9;IF1P;>@bd{rIHJhxo+R-ifU(Mvyf==AfYG4+z6+4Q1Ar=nOHUA`Ok!e3Kj@w~@yTV|fh zG~45!>b!@cwCpXeD#8WQ?o1;`s8Gotuz$`fbvPoAP1e|d71`QPX&ZV+oBm-u;`HE@ zym&N?*)l!sMsiRqUCH=ki3ME&qFxMUJEEzrkRkAmSMOkwUCrLg(Ig%_Sr!ztKfZ&I&V|;hkBz1&x)60kft|N;0kXv~YbhB+EPM4N&!QS#}gP3tLBgQpm6pCr<>GQPu|KzFkk@ zOl|mn?>(D2)rZDbhsv1rnmK?{HP{lsAt^U^B+7vBxyOSavbz-KuGLmVO-nU=o z6S)#sswKHb>egmHw;{EM^SRV1M`pAk%gw4o7vPVDDKws)dfEG=5Opk4ayvRjWd%MK zXYcoEj?$jD=(Zg5!X+}wY2~0gxnC&q#zc-9wV0VW_PZP2tztcR_L@_n9AKCBu2fRHnbjeyv<*yJx~og`}k@A0HvO@R|K|$hBMLQ=WrVx>{$Ar3jVpsHmuC z$t3qeB>3$4EYSl>!zj&+H1r&FyDogkkYpysdb~}}mQ$u9=gVLTQ=Ns$4fWH&Gy=E_ z%CR%}(Hu1zm@)A~It;A3Re$W4q#uP;pyBCK6ta|7RTit)0mWh==&(r2UnTNDxk6om zmC>MJQS((G-uhP&ZPN^6Ry(Rrvz$XAhg$K8((*`87J)?Ujsv1THp9U~zMz*LJ2W|s(*ZTJ+2yv_eH*%dgVNuT(K!EpdvA^glL-!ujzY3Y z`KD{RAk{+dBc8b1NkgVVuh7c{#ta>ikwf9R&>BXBG@;6@!IJ8s!{^!TOSnoiXhJKq z?$^tc4t>w-N4X8((semr5<}q8VoD}!Pl|ZIk^JZ=leGyf(d(I2BU2>tl34u@7+jql z4N!&y&O_{Zbr!2bT8oPEH#c3eTM8Y6ab=2t-SM_`QpwW~PL!U-RtbW$9TA_Y9`}KQ zIm#;}*G*)&@z!0tS3P?A^WhYQLr zSy4ZZ5rI9~P9E!9?O~2mtyH;!ESE4k4@kzyhIRzCqRn~`#JT5k1Y*8$8zo4k?H~CF z=kwf&U*-m^wM5Lnx-bI|b%lcR0g5_8HsTc`$CD9QTdkZjx~{mG+?Fmpm=>yMB=5rp z!d|Ru`@?G2Kpu)ttD7#&4(`giOjCpi@DuC0ftdE2HAgVQY!X#HSTvYwSZIlvIXwJQ z8|!>2H#uIGlyv;@QWAKhAIV;3HzHTWzLYdyz@Rn3$xF(}6y`f2O2*-W=5m1`Ts3JXDuiYr z6d`uOh7w_AtN~-(cK;qFotu@Cr2}!C4)Mmfbmo~F$bUPd9bZU7p8bTd6>_dmBH53< z4^|H}aUq*qgxnNnJ?$CS$bK(GbLfnWmY8&GM)SB4&z#XOi3IpYi84+{|@ngymx$~Rj(n;X6$p3B%0|6q}h`vw| z5P-LTue1EUBRM<61|}yNC}WG^gs$1N7_|QquUfm;ERxkj(nHF?7$A@fr^X(L0Yd+JlyIbivAQ_WnVN+;*y|^d-o0gj@Sj0@Ll9H0=1@hE$Hta zR2PzZH0j!kKBea;ePh?Jrz9Ko7nOq28iGI}i($3?7&Jc!m;GLB*io;%#<2JUVUyNS z!x!dd5#uN<(@nza%(Q+QY+5y16l%qlK@t)s6jyvV^GzU}5{h^k#n=pC00#k<0GqHun4N7jH*p5NKxwY-`-poyrq98zAIn(Pqelhp@wBZS z;VPUpIZzh2>BSRb$Z?b~p?EPDjb#@KnB}){l5^=Naz&X^lrUaq`pipVbPx&kM1xpN z6F(xQqnZQL23bVMsk6$`?ca%u_*|N#<8zPrmThWVf6KSa&6A2d5O?dgv*@;Cgjp*B zq9km)rsQ-BmlK{>#^X~h*KOtJG(cw&oGPG2kQwhrr;VYA)J|^_Tgrrk@v%jYPrQtt zNfNI58EA5j9B%W{vgy!n`D;ueZJM60hba*peuxnK?;^EQuvlBbfq($AfL4p?fFBY4 zH0I_+=o&hQ&ljK|L&sGS&1sHDVe%tu)bbFl9j zT><}db*{&yjtx=~fNtE&hISi_2$bbgHKcne3!$?U8jyO9f`8uLE93M`HT*Vz6ZRT1~`1F?D!-$WNc;<&((Ib08Ag&yg|t zgjctZts}}?Z4*NkMIsVgJ|ZmJJcPXWHXI8k&Q;t;h5YLKm8n%R?^nsGhnP=8*y={8CBq{b z{Z1z2l0k`Rey6&pI09&?tw5cO;>4>RN@eM;5S9L+n!_|Sv1%ql{6v*EAj?yZ53f0e zGuz;q!pFarb_lP-92?X@yK2iBQ;9w_7OK&>_`#l?oq;sGg&;vunv(hKK&)jBGjxwu z@Kdut>cI;O;%x00?ndE2=bbq|pIxuF6kh^vxsjCt#~RjYlIH>zABUiYp4!%AA4{6OoRsk@aiB5-scca{ zgAc*xCz9H^EL)%*w$84D!Nm3-fZNkzve)G0*kYJ`?d zIpjut2dLm)=AZ34RwGb!v*GfMJf3||p%&~r!JRCSvmq2}EZT|TU?LW<#WEpSedEKH z9rtUHv@iE7LQ_c-f8H1-Znqi5p#pMe90Z!{VAf*dI)stltyRxJvofFk(yti0 zx|9WUkxLZkVJ0Wam1udF5}C2ce5Qug{)O+Ie*AF8Rv1#EQjKet91DYB#y(b#(fqxD z=vSK6#ca?)n&qt?EibeHleq-0r6&V>JLM+Sw|sprhxy8nA5LOrEOzx@et+=rHfShJ zXBp4>%&;4QGXd`*jU>amD8M9P-G!n1X*1*#@TeB03U;X2eat>Nze&YfGYg@L?*?Yu(P`DMIR42wH#Yo+>sAW0hA$p6f!s92m}jI%+zHV@~WpCT;m8=%^DqO zW|QW@yFWsIEu5wBkt~^=L1}fQ&MWCTUWZ%^n+FxEYE&eo_{k&hvMGy1Ca`awgh#=pynJdeU{rREf6`K z((@f%xEN&nCFyJP#M;K$;j{2-z>T|#ZvC_xM`?+X1vDf{lyKwxeBPPRdLkF-l{ z&(J5~U}ZMBvu8z(iVsZBPqjeE3+mAUt{@d`Hbpx#TlcruF$Zq(v+_Gz*1q%Cg0J$b zMWqv)I_|9_JwTh7s6NVxU@S6fZ5rP*(b;?P6W#M|Q{E%HF!*3aq8ZM8My=ByJRL_H zIB|FJLP+-G0rGRa%}pH--cJA`MaG=)el2nma18yxjp$ePRo^pqHhNFtN}b#Yu-G|j zWV6RBb9UZ16LPOPM<0hNk_U1n)~-O>v$k)+5iV1a3$HQSx&#Nahs319%u@A(zX5fD zSVdp$R9X)pb`6ayC_94ho$fEO{b`m?`*5v73IQ%*^kBH6Af!-`iXg>&@Ti`J!j!CN zqZ=tqJ5I;-t+5^@=@Nk)boU~N=edVvmmizr$_7cy*AqEy`naa4JCM)h0g`Batz z0j|PMD9#>RO=h(8sRzt1$QxCWuK5yEEk0YzBLc*B8CA_|tF=SP-u)Du$}6+$f{C~* zYylAlW#yhgHyzX7HR9N!Egb}*7{*O&+yw|Xt1d<%7LsW`dD@@74_EH5Kn7D(jhyKR ztLMrI5&Z5r*J_k>D73H^;gT!1`&99L?U`qv0JX&t)xEWFsTEV@i260l6x2!x_s>cx ziZADsDqDN*uO#2{u1torx59SQ8WH8~Hp^ryB8iiR!+Snt6CWS5B?UWNNYc|k>`BD{ zYp%%pIdp~ixk4jVw^H3+fmGirFLK>JfB9W`WprPYwrcV-Rp8qQaQ1=cGYL(V8K7uZ z?>ThBDUxb!^P3g3P@%`n16g9n@3O0J_ZHc|Sx$3=765keIKkMTW?fE`?l(j>Q(D}8 zQeP{s1fLD^F80G9W}~+%!&E+771NZeI!*9j#63ozC6Cq{T4Y>PkO61fyoOnrTT}-v zSoG#e@#Eu}MUm9d2MyH=&hpcJ%DzrGwM2r8sOqYyKfE#eabL&ktLQo`!@2;cd(xWh zT21{``ca`~=^|5c0}5Ee+#QZCT2T+zi`WXMPq1hKjYA9vn+#WnXU(^~L0GU&@Ke$; zuTt~8$=y3*MW{$X4^_dI9c3Z@s!?)NF4{|P7ITA@HNmcI8oHsVU7EylK>KEm78ma) zzv=g=vvQ9L2@^f9$dhf5kDAN))XgGt=_S~1uW`j{fa{a>hB?roaklqoO^aeS$|15X zLS2;v%Q5}uW{+H!rYDB1Wv=w3f7W!H_)^wjm%UP9D}{n?@+r64IwvOlE1ZG(sx8 zxP0lDg_&q3k5(_$>3AH4sMfaF!*3Qd9t0-HH}GiCxS9Ovett?pgkD5~Jr9ZE_b~^# z@@px>rOE}(h6WKV{1nvaZ8{*FHdl4yLh$n<_Wajh@-}ws^C?X0{-QP*|;bR&Co=D@zEYi&qyMo2H@C8da2rC z<@+vZn_uzIsT&C$g9%}5R|&KL7ArBuumo$#kTltOM#2?LO==v=9-(-pJiebc&}?(k z9t6WY7a?z(Lk{pcnht7Ix`EcCdu?XDw`B0#G12gftNye$S~LKY0hNgAlLarMO=Ehx z`1I;djAMh-67)+g@uy&|bh}bWe0Q0?Z&vUVv>>J8Yz=WqQlzPp1Fn8I%+*V4eBAE? zusO)vcoH|M(>vwgf~qA&;OuG&DyBc9Ipspa@;(A>ioPZpEy=tV2bq8mrVVHArq5^U z{R@**&ZwMh2Hq3aX}jDDEk$fg2@(l1*)Wd>qPW^Hj)T>0-Wvp`t7X#q2X@I8=19_N zDN}0Z_+Yi^6TDyldcxyD$l_tj=Vm5u7>$nZ z^<)jSSGVaVI!{W~yjC+okMRu{T;rFWkeYJgpw||gr{RuJ0;^l6C%Pt&voP(cJ#rer zN0`58?^on)hG`iEC+jch$#)#US-(T{S(W8AnPcEicN_$zI`%m7daOnY-xs&sY;}FC)Yyrd6u9s{NWom+mGt2+hV(rC8#Pz zcYNK#5?|CF-@ia`@=hIGOQ^U6KdAxRLAODx1`Awqja1}EbJiu&TRiP=4n-ZXe~43c z857Upg}*5HqFOb64SYa2*QwA4-&&6!-w3^fVC^IMs^&E{tKt%1$$rk>oVValmdxEY zLUgBo@R_j#n``I0Hm_N^>3Px-#P}GMsK!)hE+bh_!N*{{;r?U6WR%UQgCtYjOyUR-fm)Fz1#Q`O$cqA*CQrT4pC-M84+$g04 z$Z<%t#eKQ1(`*GDHvBjAim5>_l;j6PjDe`&FV`43)CWJzn`-jIG)QszRz7u0{hPy{df+b|8lfD)Sq!8;aufj=wu-HojGV53sOYStR| zGb+>GH29hTC&2uply=Fl<31%9N5lD|+wU&~m|sS}yTg)=aW`r=gpT{*9mUnB(&AywS|~%d z(l3)6kI6A#-P*IiYE$@9UHv#IPWEqXFN>S7PP}_G)SXp8r7*v0s=X0dm|B*wdiTXI z%-Tw)^LTL`-G^?m#~g;q8=p<}t0%rr&}x*;zg#GJ zqU~g9JQLJctDdT0VDZ!>q!Jll75s@26bpqw@MqXZQkB~or|urqc7dE6bz>lXRA86} zI~Y#-(bq8WD@NIc=f~QgiIbi%e*OTmtrBVQ4&m3lXp zi(BY@`7@P!13s^Uy1twfSI%{+sfIyBlBT*yeZ*xxTff{{`@IEPz)uB7e%>0oxT9DF z{qRQoI=@wt;QEmY<7?hp-x%rXBZOvN6``+)be&QS=UoA-6L5NnTCWL)q29gC% zd%M(1&m*zE0vYWt86O)s+tNJw+Ez=TVqSaIS78%`9xBw@;k+=;J~Owq#|dm-qw}sa zizvtY1~d<2nvST4eRX z7Oz!)7EL6Pf&bdPq*f2rwwoWet_^TNJx{~JT5%O_>T33*I#laoFmX?+L~9sEtGS?Htoj->OE7d51ez z?s43UVib0q_tavOp?pr3+FrX6LM<_U{S62Ck2kQp;*Z-evTy5;o6m7T=FNEkGQ0pZ zOpe{Y`4d2$Z{gas%pZ>e-5li~=l&mqpV1n{TNJn^_D_FdjrgAkY5mRm_cupko#`!d zTGxI%CLjYq>+8IK832f5L-?PZkPW)GsB**b?TEZ-{dRQQ{1YqS0zk)`f3hm@03eAi zfw$;_7ywG$5_*ePNC2RdE#6J#qRuhOJS80 zkhqHkRlo__pr-<{?fw~q>Mj*j9uH_^mjRT!`)3dvd;sLP*9HFm6b2T7)^|nUP>MY& zs3yU`X-<3iZ@{TA0F<|f1XVBm7i4{p06&7VUY%a#`ck*E~Nf~Py5twAo&3m6qDQ=Knco|gZo$P_6ASrfhhFp|AoH4 zLCa=u5G6>({6AM9XaxWX9wI^gwgkx>iocx^-3Ea2pFz!9gK7@{Ox?vH6;ZM6|9@@6 z>XV7Ny#<@Qn~go&|Bd8rsxbinr-Q(NI1!t-1!W!)ft-&1yndlz2LQz#Awi;pGLG12 z|MR{7b$UX+Jq?0}fMEMq4gpaZIPD0^@56nw4B~(koe)6e$8i58`yXrJ|Hyti|05&( zcjQ6GR8V3bf8o^=1W=X-!oQS)=iA~rMuMXD{FerL(*8@Y_yRzBCrD6DzW>q~et>`J zDIfs!^^GnA{zK!ujr2GX075xMf*MHtS3?fM`&Y990)Xt^=qAu#I{K9MP1A5n1=X4H z7eLSa&xNC%Q9%V{|Al4GaQ|!g|KsZUpW)l){7wIwgUTg9ZNmCL9O;d!f1Zy^)lttY-EmuCD*Ls0=TtpgKnWo-FO+&mW7kxx<=g>fwml$x0zy4h1{{yI$%}4+M diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37aef8d..509c4a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 65dcd68..aeb74cb 100644 --- a/gradlew +++ b/gradlew @@ -85,9 +85,6 @@ done APP_BASE_NAME=${0##*/} APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -144,7 +141,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +149,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,6 +194,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in diff --git a/settings.gradle b/settings.gradle index 5ebcbb5..081de2b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,10 +1,13 @@ pluginManagement { repositories { gradlePluginPortal() - maven { url = 'https://maven.minecraftforge.net/' } + maven { + name = 'Official NeoForge Maven' + url = 'https://maven.neoforged.net/releases' + } } } plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0' + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' } \ No newline at end of file diff --git a/src/main/java/nl/requios/effortlessbuilding/AllGuiTextures.java b/src/main/java/nl/requios/effortlessbuilding/AllGuiTextures.java index 2134d4d..62240df 100644 --- a/src/main/java/nl/requios/effortlessbuilding/AllGuiTextures.java +++ b/src/main/java/nl/requios/effortlessbuilding/AllGuiTextures.java @@ -3,8 +3,8 @@ package nl.requios.effortlessbuilding; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper; import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement; import nl.requios.effortlessbuilding.create.foundation.utility.Color; diff --git a/src/main/java/nl/requios/effortlessbuilding/AllIcons.java b/src/main/java/nl/requios/effortlessbuilding/AllIcons.java index e6b6ac6..e5b9548 100644 --- a/src/main/java/nl/requios/effortlessbuilding/AllIcons.java +++ b/src/main/java/nl/requios/effortlessbuilding/AllIcons.java @@ -8,8 +8,8 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.create.Create; import nl.requios.effortlessbuilding.create.foundation.gui.element.DelegatedStencilElement; import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement; diff --git a/src/main/java/nl/requios/effortlessbuilding/ClientConfig.java b/src/main/java/nl/requios/effortlessbuilding/ClientConfig.java index ef0c8e4..a33efcc 100644 --- a/src/main/java/nl/requios/effortlessbuilding/ClientConfig.java +++ b/src/main/java/nl/requios/effortlessbuilding/ClientConfig.java @@ -1,14 +1,14 @@ package nl.requios.effortlessbuilding; -import net.minecraftforge.common.ForgeConfigSpec; +import net.neoforged.neoforge.common.ModConfigSpec; -import static net.minecraftforge.common.ForgeConfigSpec.*; +import static net.neoforged.neoforge.common.ModConfigSpec.*; public class ClientConfig { private static final Builder builder = new Builder(); public static final Visuals visuals = new Visuals(builder); - public static final ForgeConfigSpec spec = builder.build(); + public static final ModConfigSpec spec = builder.build(); public static class Visuals { public final BooleanValue showBlockPreviews; diff --git a/src/main/java/nl/requios/effortlessbuilding/ClientEvents.java b/src/main/java/nl/requios/effortlessbuilding/ClientEvents.java index 676e5c8..32121a0 100644 --- a/src/main/java/nl/requios/effortlessbuilding/ClientEvents.java +++ b/src/main/java/nl/requios/effortlessbuilding/ClientEvents.java @@ -6,18 +6,18 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.InputEvent; -import net.minecraftforge.client.event.RegisterKeyMappingsEvent; -import net.minecraftforge.client.event.ScreenEvent; -import net.minecraftforge.client.settings.KeyConflictContext; -import net.minecraftforge.client.settings.KeyModifier; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.neoforge.client.event.InputEvent; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; +import net.neoforged.neoforge.client.event.ScreenEvent; +import net.neoforged.neoforge.client.settings.KeyConflictContext; +import net.neoforged.neoforge.client.settings.KeyModifier; +import net.neoforged.neoforge.event.TickEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod.EventBusSubscriber; import nl.requios.effortlessbuilding.buildmode.BuildModeEnum; import nl.requios.effortlessbuilding.buildmode.ModeOptions; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.gui.buildmode.PlayerSettingsGui; import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu; import nl.requios.effortlessbuilding.gui.buildmodifier.ModifiersScreen; @@ -134,7 +134,7 @@ public class ClientEvents { //Radial menu if (keyBindings[0].isDown()) { - if (!CapabilityHandler.isDisabled(player)) { + if (!AttachmentHandler.isDisabled(player)) { if (!RadialMenu.instance.isVisible()) { Minecraft.getInstance().setScreen(RadialMenu.instance); } @@ -175,7 +175,7 @@ public class ClientEvents { if (player == null) return; //Disabled if max reach is 0, might be set in the config that way. - if (CapabilityHandler.isDisabled(player)) { + if (AttachmentHandler.isDisabled(player)) { EffortlessBuilding.log(player, "Build modifiers are disabled until your power level has increased. Increase your power level by consuming certain items."); } else { mc.setScreen(new ModifiersScreen()); @@ -188,7 +188,7 @@ public class ClientEvents { } @SubscribeEvent - public static void onGuiOpen(ScreenEvent event) { + public static void onGuiOpen(ScreenEvent.Opening event) { Player player = Minecraft.getInstance().player; if (player != null) { EffortlessBuildingClient.BUILDER_CHAIN.cancel(); diff --git a/src/main/java/nl/requios/effortlessbuilding/CommonConfig.java b/src/main/java/nl/requios/effortlessbuilding/CommonConfig.java index e3509a5..9bdef2f 100644 --- a/src/main/java/nl/requios/effortlessbuilding/CommonConfig.java +++ b/src/main/java/nl/requios/effortlessbuilding/CommonConfig.java @@ -1,8 +1,8 @@ package nl.requios.effortlessbuilding; -import net.minecraftforge.common.ForgeConfigSpec; +import net.neoforged.neoforge.common.ModConfigSpec; -import static net.minecraftforge.common.ForgeConfigSpec.*; +import static net.neoforged.neoforge.common.ModConfigSpec.*; public class CommonConfig { @@ -11,7 +11,7 @@ public class CommonConfig { public static final MaxBlocksPlacedAtOnce maxBlocksPlacedAtOnce = new MaxBlocksPlacedAtOnce(builder); public static final MaxBlocksPerAxis maxBlocksPerAxis = new MaxBlocksPerAxis(builder); public static final MaxMirrorRadius maxMirrorRadius = new MaxMirrorRadius(builder); - public static final ForgeConfigSpec spec = builder.build(); + public static final ModConfigSpec spec = builder.build(); public static class Reach { public final IntValue creative; diff --git a/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java b/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java index e88a5c8..dc590f4 100644 --- a/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java +++ b/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java @@ -2,27 +2,22 @@ package nl.requios.effortlessbuilding; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; -import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.event.AttachCapabilitiesEvent; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.event.level.BlockEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraftforge.network.PacketDistributor; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.capability.IPowerLevel; -import nl.requios.effortlessbuilding.capability.PowerLevelCapability; +import net.minecraft.world.level.Level; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.LogicalSide; +import net.neoforged.fml.common.Mod.EventBusSubscriber; +import net.neoforged.neoforge.common.util.FakePlayer; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.neoforged.neoforge.event.TickEvent; +import net.neoforged.neoforge.event.entity.player.PlayerEvent; +import net.neoforged.neoforge.event.level.BlockEvent; +import nl.requios.effortlessbuilding.attachment.PowerLevel; import nl.requios.effortlessbuilding.compatibility.CompatHelper; -import nl.requios.effortlessbuilding.network.ModifierSettingsPacket; -import nl.requios.effortlessbuilding.network.PacketHandler; -import nl.requios.effortlessbuilding.network.PowerLevelPacket; +import nl.requios.effortlessbuilding.network.message.ModifierSettingsPacket; +import nl.requios.effortlessbuilding.network.message.PowerLevelPacket; import nl.requios.effortlessbuilding.systems.ServerBuildState; import nl.requios.effortlessbuilding.utilities.PowerLevelCommand; @@ -30,7 +25,7 @@ import nl.requios.effortlessbuilding.utilities.PowerLevelCommand; public class CommonEvents { //Mod Bus Events - @EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD) +// @EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD) public static class ModBusEvents { @@ -45,6 +40,7 @@ public class CommonEvents { public static void onTick(TickEvent.LevelTickEvent event) { if (event.phase != TickEvent.Phase.START) return; if (event.side == LogicalSide.CLIENT) return; + if (event.level.dimension() != Level.OVERWORLD) return; EffortlessBuilding.SERVER_BLOCK_PLACER.tick(); } @@ -80,9 +76,7 @@ public class CommonEvents { //Don't cancel event if our custom logic is breaking blocks if (EffortlessBuilding.SERVER_BLOCK_PLACER.isPlacingOrBreakingBlocks()) return; - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); - if (powerLevel == null) return; //Should never be null but just to be sure - + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (!ServerBuildState.isLikeVanilla(player) && powerLevel.canBreakFar(player)) { event.setCanceled(true); } @@ -102,19 +96,10 @@ public class CommonEvents { ServerBuildState.handleNewPlayer(player); - PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new ModifierSettingsPacket(player)); + ((ServerPlayer)player).connection.send(new ModifierSettingsPacket(player)); - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); - if (powerLevel == null) return; //Should never be null but just to be sure - - PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new PowerLevelPacket(powerLevel.getPowerLevel())); - } - - @SubscribeEvent - public static void registerCaps(AttachCapabilitiesEvent event) { - if (event.getObject() instanceof Player) { - event.addCapability(CapabilityHandler.POWER_LEVEL_CAP, new PowerLevelCapability()); - } + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); + ((ServerPlayer)player).connection.send(new PowerLevelPacket(powerLevel.getPowerLevel())); } @SubscribeEvent @@ -126,11 +111,9 @@ public class CommonEvents { Player clone = event.getEntity(); // Copy the power level from the original player to the clone - original.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).ifPresent(dataOriginal -> - clone.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).ifPresent(dataClone -> { - dataClone.setPowerLevel(dataOriginal.getPowerLevel()); - }) - ); + if (event.isWasDeath() && event.getOriginal().hasData(EffortlessBuilding.POWER_LEVEL)) { + event.getEntity().setData(EffortlessBuilding.POWER_LEVEL, event.getOriginal().getData(EffortlessBuilding.POWER_LEVEL)); + } } @SubscribeEvent diff --git a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java index d44fe30..9febc22 100644 --- a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java +++ b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java @@ -1,34 +1,42 @@ package nl.requios.effortlessbuilding; import com.mojang.serialization.Codec; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.CreativeModeTabs; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.loot.IGlobalLootModifier; -import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.network.IContainerFactory; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.DistExecutor; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.neoforge.attachment.AttachmentType; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.common.loot.IGlobalLootModifier; +import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; +import net.neoforged.neoforge.network.IContainerFactory; +import net.neoforged.neoforge.registries.DeferredItem; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.neoforged.neoforge.registries.NeoForgeRegistries; +import nl.requios.effortlessbuilding.attachment.PowerLevel; import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.gui.DiamondRandomizerBagContainer; import nl.requios.effortlessbuilding.gui.GoldenRandomizerBagContainer; import nl.requios.effortlessbuilding.gui.RandomizerBagContainer; -import nl.requios.effortlessbuilding.item.*; +import nl.requios.effortlessbuilding.item.DiamondRandomizerBagItem; +import nl.requios.effortlessbuilding.item.GoldenRandomizerBagItem; +import nl.requios.effortlessbuilding.item.PowerLevelItem; +import nl.requios.effortlessbuilding.item.RandomizerBagItem; +import nl.requios.effortlessbuilding.item.ReachUpgrade1Item; +import nl.requios.effortlessbuilding.item.ReachUpgrade2Item; +import nl.requios.effortlessbuilding.item.ReachUpgrade3Item; +import nl.requios.effortlessbuilding.item.SingleItemLootModifier; import nl.requios.effortlessbuilding.network.PacketHandler; import nl.requios.effortlessbuilding.proxy.ClientProxy; import nl.requios.effortlessbuilding.proxy.IProxy; @@ -40,6 +48,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.List; +import java.util.function.Supplier; @Mod(EffortlessBuilding.MODID) public class EffortlessBuilding { @@ -55,42 +64,48 @@ public class EffortlessBuilding { public static final ItemUsageTracker ITEM_USAGE_TRACKER = new ItemUsageTracker(); //Registration - private static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); - private static final DeferredRegister> CONTAINERS = DeferredRegister.create(ForgeRegistries.MENU_TYPES, EffortlessBuilding.MODID); - public static final DeferredRegister> LOOT_MODIFIERS = DeferredRegister.create(ForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, EffortlessBuilding.MODID); + private static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(MODID); + private static final DeferredRegister> CONTAINERS = DeferredRegister.create(BuiltInRegistries.MENU, EffortlessBuilding.MODID); + private static final DeferredRegister> LOOT_MODIFIERS = DeferredRegister.create(NeoForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, EffortlessBuilding.MODID); + private static final DeferredRegister> ATTACHMENT_TYPES = DeferredRegister.create(NeoForgeRegistries.Keys.ATTACHMENT_TYPES, EffortlessBuilding.MODID); - public static final RegistryObject RANDOMIZER_BAG_ITEM = ITEMS.register("randomizer_bag", RandomizerBagItem::new); - public static final RegistryObject GOLDEN_RANDOMIZER_BAG_ITEM = ITEMS.register("golden_randomizer_bag", GoldenRandomizerBagItem::new); - public static final RegistryObject DIAMOND_RANDOMIZER_BAG_ITEM = ITEMS.register("diamond_randomizer_bag", DiamondRandomizerBagItem::new); - public static final RegistryObject REACH_UPGRADE_1_ITEM = ITEMS.register("reach_upgrade1", ReachUpgrade1Item::new); - public static final RegistryObject REACH_UPGRADE_2_ITEM = ITEMS.register("reach_upgrade2", ReachUpgrade2Item::new); - public static final RegistryObject REACH_UPGRADE_3_ITEM = ITEMS.register("reach_upgrade3", ReachUpgrade3Item::new); - public static final RegistryObject MUSCLES_ITEM = ITEMS.register("muscles", PowerLevelItem::new); - public static final RegistryObject ELASTIC_HAND_ITEM = ITEMS.register("elastic_hand", PowerLevelItem::new); - public static final RegistryObject BUILDING_TECHNIQUES_BOOK_ITEM = ITEMS.register("building_techniques_book", PowerLevelItem::new); + public static final DeferredItem RANDOMIZER_BAG_ITEM = ITEMS.register("randomizer_bag", RandomizerBagItem::new); + public static final DeferredItem GOLDEN_RANDOMIZER_BAG_ITEM = ITEMS.register("golden_randomizer_bag", GoldenRandomizerBagItem::new); + public static final DeferredItem DIAMOND_RANDOMIZER_BAG_ITEM = ITEMS.register("diamond_randomizer_bag", DiamondRandomizerBagItem::new); + public static final DeferredItem REACH_UPGRADE_1_ITEM = ITEMS.register("reach_upgrade1", ReachUpgrade1Item::new); + public static final DeferredItem REACH_UPGRADE_2_ITEM = ITEMS.register("reach_upgrade2", ReachUpgrade2Item::new); + public static final DeferredItem REACH_UPGRADE_3_ITEM = ITEMS.register("reach_upgrade3", ReachUpgrade3Item::new); + public static final DeferredItem MUSCLES_ITEM = ITEMS.register("muscles", PowerLevelItem::new); + public static final DeferredItem ELASTIC_HAND_ITEM = ITEMS.register("elastic_hand", PowerLevelItem::new); + public static final DeferredItem BUILDING_TECHNIQUES_BOOK_ITEM = ITEMS.register("building_techniques_book", PowerLevelItem::new); - public static final RegistryObject> RANDOMIZER_BAG_CONTAINER = CONTAINERS.register("randomizer_bag", () -> registerContainer(RandomizerBagContainer::new)); - public static final RegistryObject> GOLDEN_RANDOMIZER_BAG_CONTAINER = CONTAINERS.register("golden_randomizer_bag", () -> registerContainer(GoldenRandomizerBagContainer::new)); - public static final RegistryObject> DIAMOND_RANDOMIZER_BAG_CONTAINER = CONTAINERS.register("diamond_randomizer_bag", () -> registerContainer(DiamondRandomizerBagContainer::new)); + public static final Supplier> RANDOMIZER_BAG_CONTAINER = CONTAINERS.register("randomizer_bag", () -> registerContainer(RandomizerBagContainer::new)); + public static final Supplier> GOLDEN_RANDOMIZER_BAG_CONTAINER = CONTAINERS.register("golden_randomizer_bag", () -> registerContainer(GoldenRandomizerBagContainer::new)); + public static final Supplier> DIAMOND_RANDOMIZER_BAG_CONTAINER = CONTAINERS.register("diamond_randomizer_bag", () -> registerContainer(DiamondRandomizerBagContainer::new)); + public static final Supplier> SINGLE_ITEM_LOOT_MODIFIER = EffortlessBuilding.LOOT_MODIFIERS.register("single_item_loot_modifier", SingleItemLootModifier.CODEC); - public EffortlessBuilding() { + public static final Supplier> POWER_LEVEL = ATTACHMENT_TYPES.register("power_level", () -> AttachmentType.serializable(PowerLevel::new).build()); + + public EffortlessBuilding(IEventBus modEventBus) { instance = this; ModLoadingContext modLoadingContext = ModLoadingContext.get(); - IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); - IEventBus forgeEventBus = MinecraftForge.EVENT_BUS; + IEventBus forgeEventBus = NeoForge.EVENT_BUS; modEventBus.addListener(EffortlessBuilding::setup); modEventBus.addListener(EffortlessBuilding::addTabContents); + modEventBus.addListener(PacketHandler::setupPackets); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> EffortlessBuildingClient.onConstructorClient(modEventBus, forgeEventBus)); + if (FMLEnvironment.dist.isClient()) { + EffortlessBuildingClient.onConstructorClient(modEventBus, forgeEventBus); + } - ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus()); - CONTAINERS.register(FMLJavaModLoadingContext.get().getModEventBus()); + ITEMS.register(modEventBus); + CONTAINERS.register(modEventBus); - var singleItemLootModifier = SingleItemLootModifier.CODEC; //load this class to register the loot modifier - LOOT_MODIFIERS.register(FMLJavaModLoadingContext.get().getModEventBus()); + LOOT_MODIFIERS.register(modEventBus); + ATTACHMENT_TYPES.register(modEventBus); //Register config modLoadingContext.registerConfig(ModConfig.Type.COMMON, CommonConfig.spec); @@ -99,8 +114,6 @@ public class EffortlessBuilding { } public static void setup(final FMLCommonSetupEvent event) { - PacketHandler.register(); - CompatHelper.setup(); } @@ -111,7 +124,7 @@ public class EffortlessBuilding { } } - public static MenuType registerContainer(IContainerFactory fact){ + public static MenuType registerContainer(IContainerFactory fact) { MenuType type = new MenuType(fact, FeatureFlags.REGISTRY.allFlags()); return type; } diff --git a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuildingClient.java b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuildingClient.java index 22e72fb..4c96f6b 100644 --- a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuildingClient.java +++ b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuildingClient.java @@ -1,8 +1,8 @@ package nl.requios.effortlessbuilding; import net.minecraft.client.gui.screens.MenuScreens; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers; import nl.requios.effortlessbuilding.gui.DiamondRandomizerBagScreen; diff --git a/src/main/java/nl/requios/effortlessbuilding/ServerConfig.java b/src/main/java/nl/requios/effortlessbuilding/ServerConfig.java index fb71917..60e2f5b 100644 --- a/src/main/java/nl/requios/effortlessbuilding/ServerConfig.java +++ b/src/main/java/nl/requios/effortlessbuilding/ServerConfig.java @@ -1,17 +1,17 @@ package nl.requios.effortlessbuilding; -import net.minecraftforge.common.ForgeConfigSpec; +import net.neoforged.neoforge.common.ModConfigSpec; import java.util.Arrays; import java.util.List; -import static net.minecraftforge.common.ForgeConfigSpec.*; +import static net.neoforged.neoforge.common.ModConfigSpec.*; public class ServerConfig { private static final Builder builder = new Builder(); public static final ServerConfig.Validation validation = new ServerConfig.Validation(builder); public static final ServerConfig.Memory memory = new ServerConfig.Memory(builder); - public static final ForgeConfigSpec spec = builder.build(); + public static final ModConfigSpec spec = builder.build(); public static class Validation { public final BooleanValue allowInSurvival; diff --git a/src/main/java/nl/requios/effortlessbuilding/capability/CapabilityHandler.java b/src/main/java/nl/requios/effortlessbuilding/attachment/AttachmentHandler.java similarity index 62% rename from src/main/java/nl/requios/effortlessbuilding/capability/CapabilityHandler.java rename to src/main/java/nl/requios/effortlessbuilding/attachment/AttachmentHandler.java index f7452a7..0149db5 100644 --- a/src/main/java/nl/requios/effortlessbuilding/capability/CapabilityHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/attachment/AttachmentHandler.java @@ -1,33 +1,26 @@ -package nl.requios.effortlessbuilding.capability; +package nl.requios.effortlessbuilding.attachment; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.CapabilityManager; -import net.minecraftforge.common.capabilities.CapabilityToken; -import net.minecraftforge.network.PacketDistributor; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.network.PacketHandler; -import nl.requios.effortlessbuilding.network.PowerLevelPacket; +import nl.requios.effortlessbuilding.network.message.PowerLevelPacket; -public class CapabilityHandler { +public class AttachmentHandler { public static final ResourceLocation POWER_LEVEL_CAP = new ResourceLocation(EffortlessBuilding.MODID, "power_level"); - public static final Capability POWER_LEVEL_CAPABILITY = CapabilityManager.get(new CapabilityToken<>() { - }); public static void syncToClient(Player player) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel == null) return; //Should never be null but just to be sure - PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new PowerLevelPacket(powerLevel.getPowerLevel())); + ((ServerPlayer)player).connection.send(new PowerLevelPacket(powerLevel.getPowerLevel())); } //Helper methods to reduce boilerplate code public static boolean canReplaceBlocks(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.canReplaceBlocks(player); } @@ -37,7 +30,7 @@ public class CapabilityHandler { public static int getMaxBlocksPerAxis(Player player, boolean nextPowerLevel) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getMaxBlocksPerAxis(player, nextPowerLevel); } @@ -47,7 +40,7 @@ public class CapabilityHandler { public static int getMaxBlocksPlacedAtOnce(Player player, boolean nextPowerLevel) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getMaxBlocksPlacedAtOnce(player, nextPowerLevel); } @@ -57,7 +50,7 @@ public class CapabilityHandler { public static int getMaxMirrorRadius(Player player, boolean nextPowerLevel) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getMaxMirrorRadius(player, nextPowerLevel); } @@ -67,7 +60,7 @@ public class CapabilityHandler { public static int getBuildModeReach(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getBuildModeReach(player); } @@ -77,7 +70,7 @@ public class CapabilityHandler { public static int getPlacementReach(Player player, boolean nextPowerLevel) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getPlacementReach(player, nextPowerLevel); } @@ -87,7 +80,7 @@ public class CapabilityHandler { public static int getPowerLevel(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getPowerLevel(); } @@ -97,7 +90,7 @@ public class CapabilityHandler { public static int getNextPowerLevel(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.getNextPowerLevel(); } @@ -107,7 +100,7 @@ public class CapabilityHandler { public static boolean canIncreasePowerLevel(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.canIncreasePowerLevel(); } @@ -117,7 +110,7 @@ public class CapabilityHandler { public static boolean isDisabled(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.isDisabled(player); } @@ -127,7 +120,7 @@ public class CapabilityHandler { public static boolean canBreakFar(Player player) { if (player != null) { - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { return powerLevel.canBreakFar(player); } diff --git a/src/main/java/nl/requios/effortlessbuilding/attachment/PowerLevel.java b/src/main/java/nl/requios/effortlessbuilding/attachment/PowerLevel.java new file mode 100644 index 0000000..43ce881 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/attachment/PowerLevel.java @@ -0,0 +1,105 @@ +package nl.requios.effortlessbuilding.attachment; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.common.util.INBTSerializable; +import nl.requios.effortlessbuilding.CommonConfig; + +public class PowerLevel implements INBTSerializable { + public static final int MAX_POWER_LEVEL = 3; //Common access + + public PowerLevel() { + } + + private int powerLevel = 0; + + public int getPowerLevel() { + return this.powerLevel; + } + + public int getNextPowerLevel() { + return Math.min(getPowerLevel() + 1, MAX_POWER_LEVEL); + } + + public void setPowerLevel(int powerLevel) { + this.powerLevel = powerLevel; + } + + public boolean canIncreasePowerLevel() { + return getPowerLevel() < MAX_POWER_LEVEL; + } + + public void increasePowerLevel() { + if (canIncreasePowerLevel()) { + setPowerLevel(getPowerLevel() + 1); + } + } + + public int getPlacementReach(Player player, boolean nextPowerLevel) { + if (player.isCreative()) return CommonConfig.reach.creative.get(); + return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) { + case 1 -> CommonConfig.reach.level1.get(); + case 2 -> CommonConfig.reach.level2.get(); + case 3 -> CommonConfig.reach.level3.get(); + default -> CommonConfig.reach.level0.get(); + }; + } + + //How far away we can detect the second and third click of build modes (distance to player) + public int getBuildModeReach(Player player) { + //A bit further than placement reach, so you can build lines when looking to the side without having to move. + return getPlacementReach(player, false) + 6; + } + + public int getMaxBlocksPlacedAtOnce(Player player, boolean nextPowerLevel) { + if (player.isCreative()) return CommonConfig.maxBlocksPlacedAtOnce.creative.get(); + return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) { + case 1 -> CommonConfig.maxBlocksPlacedAtOnce.level1.get(); + case 2 -> CommonConfig.maxBlocksPlacedAtOnce.level2.get(); + case 3 -> CommonConfig.maxBlocksPlacedAtOnce.level3.get(); + default -> CommonConfig.maxBlocksPlacedAtOnce.level0.get(); + }; + } + + public int getMaxBlocksPerAxis(Player player, boolean nextPowerLevel) { + if (player.isCreative()) return CommonConfig.maxBlocksPerAxis.creative.get(); + return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) { + case 1 -> CommonConfig.maxBlocksPerAxis.level1.get(); + case 2 -> CommonConfig.maxBlocksPerAxis.level2.get(); + case 3 -> CommonConfig.maxBlocksPerAxis.level3.get(); + default -> CommonConfig.maxBlocksPerAxis.level0.get(); + }; + } + + public int getMaxMirrorRadius(Player player, boolean nextPowerLevel) { + if (player.isCreative()) return CommonConfig.maxMirrorRadius.creative.get(); + return switch (getPowerLevel() + (nextPowerLevel ? 1 : 0)) { + case 1 -> CommonConfig.maxMirrorRadius.level1.get(); + case 2 -> CommonConfig.maxMirrorRadius.level2.get(); + case 3 -> CommonConfig.maxMirrorRadius.level3.get(); + default -> CommonConfig.maxMirrorRadius.level0.get(); + }; + } + + public boolean isDisabled(Player player) { + return getMaxBlocksPlacedAtOnce(player, false) <= 0 || getMaxBlocksPerAxis(player, false) <= 0; + } + + public boolean canBreakFar(Player player) { + return player.getAbilities().instabuild; + } + + public boolean canReplaceBlocks(Player player) { + return player.getAbilities().instabuild; + } + + public CompoundTag serializeNBT() { + CompoundTag tag = new CompoundTag(); + tag.putInt("powerLevel", getPowerLevel()); + return tag; + } + + public void deserializeNBT(CompoundTag nbt) { + setPowerLevel(nbt.getInt("powerLevel")); + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java index e232392..b729302 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java @@ -6,11 +6,11 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.ClipContext; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.network.PacketDistributor; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.network.IsUsingBuildModePacket; -import nl.requios.effortlessbuilding.network.PacketHandler; +import nl.requios.effortlessbuilding.network.message.IsUsingBuildModePacket; import nl.requios.effortlessbuilding.utilities.BlockSet; @OnlyIn(Dist.CLIENT) @@ -30,7 +30,7 @@ public class BuildModes { public void setBuildMode(BuildModeEnum buildMode) { this.buildMode = buildMode; - PacketHandler.INSTANCE.sendToServer(new IsUsingBuildModePacket(this.buildMode != BuildModeEnum.DISABLED)); + PacketDistributor.SERVER.noArg().send(new IsUsingBuildModePacket(this.buildMode != BuildModeEnum.DISABLED)); EffortlessBuilding.log(Minecraft.getInstance().player, I18n.get(buildMode.getNameKey()), true); } diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeOptions.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeOptions.java index c322bd5..6461c59 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeOptions.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeOptions.java @@ -1,15 +1,15 @@ package nl.requios.effortlessbuilding.buildmode; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.network.PacketDistributor; import nl.requios.effortlessbuilding.AllIcons; import nl.requios.effortlessbuilding.ClientEvents; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.EffortlessBuildingClient; -import nl.requios.effortlessbuilding.network.PacketHandler; -import nl.requios.effortlessbuilding.network.PerformRedoPacket; -import nl.requios.effortlessbuilding.network.PerformUndoPacket; +import nl.requios.effortlessbuilding.network.message.PerformRedoPacket; +import nl.requios.effortlessbuilding.network.message.PerformUndoPacket; import nl.requios.effortlessbuilding.systems.BuildSettings; @OnlyIn(Dist.CLIENT) @@ -69,8 +69,8 @@ public class ModeOptions { if (action == null) return; switch (action) { - case UNDO -> PacketHandler.INSTANCE.sendToServer(new PerformUndoPacket()); - case REDO -> PacketHandler.INSTANCE.sendToServer(new PerformRedoPacket()); + case UNDO -> PacketDistributor.SERVER.noArg().send(new PerformUndoPacket()); + case REDO -> PacketDistributor.SERVER.noArg().send(new PerformRedoPacket()); case OPEN_MODIFIER_SETTINGS -> ClientEvents.openModifierSettings(); case OPEN_PLAYER_SETTINGS -> ClientEvents.openPlayerSettings(); case PREVIOUS_BUILD_MODE -> EffortlessBuildingClient.BUILD_MODES.activatePreviousBuildMode(); diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java index 71e3d9f..d097a30 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java @@ -5,7 +5,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; import nl.requios.effortlessbuilding.EffortlessBuildingClient; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.utilities.BlockEntry; import nl.requios.effortlessbuilding.utilities.BlockSet; @@ -65,7 +65,7 @@ public abstract class ThreeClicksBuildMode extends BaseBuildMode { if (secondPos == null) return; //Limit amount of blocks we can place per row - int axisLimit = CapabilityHandler.getMaxBlocksPerAxis(player, false); + int axisLimit = AttachmentHandler.getMaxBlocksPerAxis(player, false); int x1 = firstPos.getX(), x2 = secondPos.getX(); int y1 = firstPos.getY(), y2 = secondPos.getY(); @@ -94,7 +94,7 @@ public abstract class ThreeClicksBuildMode extends BaseBuildMode { if (thirdPos == null) return; //Limit amount of blocks you can place per row - int axisLimit = CapabilityHandler.getMaxBlocksPerAxis(player, false); + int axisLimit = AttachmentHandler.getMaxBlocksPerAxis(player, false); int x1 = firstPos.getX(), x2 = secondPos.getX(), x3 = thirdPos.getX(); int y1 = firstPos.getY(), y2 = secondPos.getY(), y3 = thirdPos.getY(); @@ -140,7 +140,7 @@ public abstract class ThreeClicksBuildMode extends BaseBuildMode { criteriaList.add(new HeightCriteria(zBound, secondPos, start)); //Remove invalid criteria - int reach = CapabilityHandler.getBuildModeReach(player); + int reach = AttachmentHandler.getBuildModeReach(player); criteriaList.removeIf(criteria -> !criteria.isValid(start, look, reach, player, skipRaytrace)); //If none are valid, return empty list of blocks diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/TwoClicksBuildMode.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/TwoClicksBuildMode.java index ad05b71..82647cd 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/TwoClicksBuildMode.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/TwoClicksBuildMode.java @@ -4,7 +4,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; import nl.requios.effortlessbuilding.EffortlessBuildingClient; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.utilities.BlockEntry; import nl.requios.effortlessbuilding.utilities.BlockSet; @@ -49,7 +49,7 @@ public abstract class TwoClicksBuildMode extends BaseBuildMode { if (secondPos == null) return; //Limit amount of blocks we can place per row - int axisLimit = CapabilityHandler.getMaxBlocksPerAxis(player, false); + int axisLimit = AttachmentHandler.getMaxBlocksPerAxis(player, false); int x1 = firstPos.getX(), x2 = secondPos.getX(); int y1 = firstPos.getY(), y2 = secondPos.getY(); diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Floor.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Floor.java index c06c649..4bac2b9 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Floor.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Floor.java @@ -6,7 +6,7 @@ import net.minecraft.world.phys.Vec3; import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import java.util.ArrayList; import java.util.List; @@ -24,7 +24,7 @@ public class Floor extends TwoClicksBuildMode { criteriaList.add(new Criteria(yBound, start)); //Remove invalid criteria - int reach = CapabilityHandler.getBuildModeReach(player); + int reach = AttachmentHandler.getBuildModeReach(player); criteriaList.removeIf(criteria -> !criteria.isValid(start, look, reach, player, skipRaytrace)); //If none are valid, return empty list of blocks diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Line.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Line.java index 9817d09..0dd4772 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Line.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Line.java @@ -5,7 +5,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import java.util.ArrayList; import java.util.List; @@ -31,7 +31,7 @@ public class Line extends TwoClicksBuildMode { criteriaList.add(new Criteria(zBound, firstPos, start)); //Remove invalid criteria - int reach = CapabilityHandler.getBuildModeReach(player); + int reach = AttachmentHandler.getBuildModeReach(player); criteriaList.removeIf(criteria -> !criteria.isValid(start, look, reach, player, skipRaytrace)); //If none are valid, return empty list of blocks diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/SlopeFloor.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/SlopeFloor.java index 5b24032..867fbde 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/SlopeFloor.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/SlopeFloor.java @@ -4,7 +4,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.core.BlockPos; import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.ThreeClicksBuildMode; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import java.util.ArrayList; import java.util.List; @@ -15,7 +15,7 @@ public class SlopeFloor extends ThreeClicksBuildMode { public static List getSlopeFloorBlocks(Player player, int x1, int y1, int z1, int x2, int y2, int z2, int x3, int y3, int z3) { List list = new ArrayList<>(); - int axisLimit = CapabilityHandler.getMaxBlocksPerAxis(player, false); + int axisLimit = AttachmentHandler.getMaxBlocksPerAxis(player, false); //Determine whether to use x or z axis to slope up boolean onXAxis = true; diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Wall.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Wall.java index 076f5d0..f41c2a4 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Wall.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Wall.java @@ -6,7 +6,7 @@ import net.minecraft.world.phys.Vec3; import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import java.util.ArrayList; import java.util.List; @@ -28,7 +28,7 @@ public class Wall extends TwoClicksBuildMode { criteriaList.add(new Criteria(zBound, firstPos, start, look)); //Remove invalid criteria - int reach = CapabilityHandler.getBuildModeReach(player); + int reach = AttachmentHandler.getBuildModeReach(player); criteriaList.removeIf(criteria -> !criteria.isValid(start, look, reach, player, skipRaytrace)); //If none are valid, return empty list of blocks diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java index 6b4bb34..2119be2 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java @@ -3,11 +3,11 @@ package nl.requios.effortlessbuilding.buildmodifier; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.network.PacketDistributor; import nl.requios.effortlessbuilding.create.foundation.utility.NBTHelper; -import nl.requios.effortlessbuilding.network.ModifierSettingsPacket; -import nl.requios.effortlessbuilding.network.PacketHandler; +import nl.requios.effortlessbuilding.network.message.ModifierSettingsPacket; import nl.requios.effortlessbuilding.utilities.BlockSet; import java.util.ArrayList; @@ -96,7 +96,7 @@ public class BuildModifiers { } public void save() { - PacketHandler.INSTANCE.sendToServer(new ModifierSettingsPacket(serializeNBT())); + PacketDistributor.SERVER.noArg().send(new ModifierSettingsPacket(serializeNBT())); //Save locally as well? // var listTag = NBTHelper.writeCompoundList(modifierSettingsList, BaseModifier::serializeNBT); diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/Mirror.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/Mirror.java index b19c7b0..64f92bf 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/Mirror.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/Mirror.java @@ -6,7 +6,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.core.BlockPos; import net.minecraft.world.phys.Vec3; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.utilities.BlockEntry; import nl.requios.effortlessbuilding.utilities.BlockSet; @@ -42,7 +42,7 @@ public class Mirror extends BaseModifier { @Override public void onPowerLevelChanged(int powerLevel) { - radius = CapabilityHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false); + radius = AttachmentHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false); } private void performMirrorX(BlockSet blocks, BlockEntry blockEntry) { diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/RadialMirror.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/RadialMirror.java index 3c6a144..48eff2c 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/RadialMirror.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/RadialMirror.java @@ -9,7 +9,7 @@ import net.minecraft.world.level.block.Rotation; import net.minecraft.core.BlockPos; import net.minecraft.util.Mth; import net.minecraft.world.phys.Vec3; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.utilities.BlockEntry; import nl.requios.effortlessbuilding.utilities.BlockSet; @@ -43,7 +43,7 @@ public class RadialMirror extends BaseModifier { @Override public void onPowerLevelChanged(int powerLevel) { - radius = CapabilityHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false); + radius = AttachmentHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false); } public void performRadialMirror(BlockSet blocks, BlockEntry blockEntry) { diff --git a/src/main/java/nl/requios/effortlessbuilding/capability/IPowerLevel.java b/src/main/java/nl/requios/effortlessbuilding/capability/IPowerLevel.java deleted file mode 100644 index 721379c..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/capability/IPowerLevel.java +++ /dev/null @@ -1,38 +0,0 @@ -package nl.requios.effortlessbuilding.capability; - -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.common.capabilities.AutoRegisterCapability; - -@AutoRegisterCapability -public interface IPowerLevel { - - int getPowerLevel(); - - int getNextPowerLevel(); - - void setPowerLevel(int powerLevel); - - boolean canIncreasePowerLevel(); - - void increasePowerLevel(); - - - int getPlacementReach(Player player, boolean nextPowerLevel); - - int getBuildModeReach(Player player); - - - int getMaxBlocksPlacedAtOnce(Player player, boolean nextPowerLevel); - - - int getMaxBlocksPerAxis(Player player, boolean nextPowerLevel); - - - int getMaxMirrorRadius(Player player, boolean nextPowerLevel); - - boolean isDisabled(Player player); - - boolean canBreakFar(Player player); - - boolean canReplaceBlocks(Player player); -} diff --git a/src/main/java/nl/requios/effortlessbuilding/capability/PowerLevelCapability.java b/src/main/java/nl/requios/effortlessbuilding/capability/PowerLevelCapability.java deleted file mode 100644 index e472e46..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/capability/PowerLevelCapability.java +++ /dev/null @@ -1,127 +0,0 @@ -package nl.requios.effortlessbuilding.capability; - -import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ICapabilitySerializable; -import net.minecraftforge.common.util.LazyOptional; -import nl.requios.effortlessbuilding.CommonConfig; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class PowerLevelCapability implements IPowerLevel, ICapabilitySerializable { - public static final int MAX_POWER_LEVEL = 3; //Common access - - private int powerLevel = 0; - - @Override - public int getPowerLevel() { - return this.powerLevel; - } - - @Override - public int getNextPowerLevel() { - return Math.min(getPowerLevel() + 1, MAX_POWER_LEVEL); - } - - @Override - public void setPowerLevel(int powerLevel) { - this.powerLevel = powerLevel; - } - - @Override - public boolean canIncreasePowerLevel() { - return getPowerLevel() < MAX_POWER_LEVEL; - } - - @Override - public void increasePowerLevel() { - if (canIncreasePowerLevel()) { - setPowerLevel(getPowerLevel() + 1); - } - } - - @Override - public int getPlacementReach(Player player, boolean nextPowerLevel) { - if (player.isCreative()) return CommonConfig.reach.creative.get(); - return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) { - case 1 -> CommonConfig.reach.level1.get(); - case 2 -> CommonConfig.reach.level2.get(); - case 3 -> CommonConfig.reach.level3.get(); - default -> CommonConfig.reach.level0.get(); - }; - } - - //How far away we can detect the second and third click of build modes (distance to player) - @Override - public int getBuildModeReach(Player player) { - //A bit further than placement reach, so you can build lines when looking to the side without having to move. - return getPlacementReach(player, false) + 6; - } - - @Override - public int getMaxBlocksPlacedAtOnce(Player player, boolean nextPowerLevel) { - if (player.isCreative()) return CommonConfig.maxBlocksPlacedAtOnce.creative.get(); - return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) { - case 1 -> CommonConfig.maxBlocksPlacedAtOnce.level1.get(); - case 2 -> CommonConfig.maxBlocksPlacedAtOnce.level2.get(); - case 3 -> CommonConfig.maxBlocksPlacedAtOnce.level3.get(); - default -> CommonConfig.maxBlocksPlacedAtOnce.level0.get(); - }; - } - - @Override - public int getMaxBlocksPerAxis(Player player, boolean nextPowerLevel) { - if (player.isCreative()) return CommonConfig.maxBlocksPerAxis.creative.get(); - return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) { - case 1 -> CommonConfig.maxBlocksPerAxis.level1.get(); - case 2 -> CommonConfig.maxBlocksPerAxis.level2.get(); - case 3 -> CommonConfig.maxBlocksPerAxis.level3.get(); - default -> CommonConfig.maxBlocksPerAxis.level0.get(); - }; - } - - @Override - public int getMaxMirrorRadius(Player player, boolean nextPowerLevel) { - if (player.isCreative()) return CommonConfig.maxMirrorRadius.creative.get(); - return switch (getPowerLevel() + (nextPowerLevel ? 1 : 0)) { - case 1 -> CommonConfig.maxMirrorRadius.level1.get(); - case 2 -> CommonConfig.maxMirrorRadius.level2.get(); - case 3 -> CommonConfig.maxMirrorRadius.level3.get(); - default -> CommonConfig.maxMirrorRadius.level0.get(); - }; - } - - @Override - public boolean isDisabled(Player player) { - return getMaxBlocksPlacedAtOnce(player, false) <= 0 || getMaxBlocksPerAxis(player, false) <= 0; - } - - @Override - public boolean canBreakFar(Player player) { - return player.getAbilities().instabuild; - } - - @Override - public boolean canReplaceBlocks(Player player) { - return player.getAbilities().instabuild; - } - - @Override - public @NotNull LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { - return CapabilityHandler.POWER_LEVEL_CAPABILITY.orEmpty(cap, LazyOptional.of(() -> this)); - } - - @Override - public CompoundTag serializeNBT() { - CompoundTag tag = new CompoundTag(); - tag.putInt("powerLevel", getPowerLevel()); - return tag; - } - - @Override - public void deserializeNBT(CompoundTag nbt) { - setPowerLevel(nbt.getInt("powerLevel")); - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/compatibility/CompatHelper.java b/src/main/java/nl/requios/effortlessbuilding/compatibility/CompatHelper.java index fc7c5af..52ea80f 100644 --- a/src/main/java/nl/requios/effortlessbuilding/compatibility/CompatHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/compatibility/CompatHelper.java @@ -6,7 +6,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.IItemHandler; +import net.neoforged.neoforge.items.IItemHandler; import nl.requios.effortlessbuilding.create.foundation.item.ItemHelper; import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/CreateClientTest.java b/src/main/java/nl/requios/effortlessbuilding/create/CreateClientTest.java index aa1d47b..7ed4b71 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/CreateClientTest.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/CreateClientTest.java @@ -1,9 +1,6 @@ package nl.requios.effortlessbuilding.create; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(Dist.CLIENT) +//@Mod.EventBusSubscriber(Dist.CLIENT) public class CreateClientTest { // @SubscribeEvent diff --git a/src/main/java/nl/requios/effortlessbuilding/create/events/ClientEvents.java b/src/main/java/nl/requios/effortlessbuilding/create/events/ClientEvents.java index 5ccc8bf..d39b8a3 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/events/ClientEvents.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/events/ClientEvents.java @@ -6,14 +6,14 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RenderLevelStageEvent; -import net.minecraftforge.client.event.ViewportEvent; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.TickEvent.ClientTickEvent; -import net.minecraftforge.event.level.LevelEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.neoforge.client.event.RenderLevelStageEvent; +import net.neoforged.neoforge.client.event.ViewportEvent; +import net.neoforged.neoforge.event.TickEvent; +import net.neoforged.neoforge.event.TickEvent.ClientTickEvent; +import net.neoforged.neoforge.event.level.LevelEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; import nl.requios.effortlessbuilding.create.Create; import nl.requios.effortlessbuilding.create.CreateClient; import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer; @@ -21,7 +21,7 @@ import nl.requios.effortlessbuilding.create.foundation.utility.AnimationTickHold import nl.requios.effortlessbuilding.create.foundation.utility.CameraAngleAnimationService; import nl.requios.effortlessbuilding.create.foundation.utility.worldWrappers.WrappedClientWorld; -@EventBusSubscriber(Dist.CLIENT) +@Mod.EventBusSubscriber(Dist.CLIENT) public class ClientEvents { private static final String ITEM_PREFIX = "item." + Create.ID; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/events/CommonEvents.java b/src/main/java/nl/requios/effortlessbuilding/create/events/CommonEvents.java index 5e83123..92a4b5c 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/events/CommonEvents.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/events/CommonEvents.java @@ -1,12 +1,12 @@ package nl.requios.effortlessbuilding.create.events; import net.minecraft.world.level.LevelAccessor; -import net.minecraftforge.event.level.LevelEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.neoforged.neoforge.event.level.LevelEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; import nl.requios.effortlessbuilding.create.foundation.utility.WorldAttached; -@EventBusSubscriber +@Mod.EventBusSubscriber public class CommonEvents { @SubscribeEvent @@ -16,7 +16,7 @@ public class CommonEvents { } - @EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD) +// @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public static class ModBusEvents { // @SubscribeEvent diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/ModFilePackResources.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/ModFilePackResources.java index 4f0aa47..30dc183 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/ModFilePackResources.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/ModFilePackResources.java @@ -1,25 +1,25 @@ -package nl.requios.effortlessbuilding.create.foundation; - -import net.minecraftforge.forgespi.locating.IModFile; -import net.minecraftforge.resource.PathPackResources; - -import java.nio.file.Path; - -public class ModFilePackResources extends PathPackResources { - protected final IModFile modFile; - protected final String sourcePath; - - public ModFilePackResources(String name, IModFile modFile, String sourcePath) { - super(name, true, modFile.findResource(sourcePath)); - this.modFile = modFile; - this.sourcePath = sourcePath; - } - - @Override - protected Path resolve(String... paths) { - String[] allPaths = new String[paths.length + 1]; - allPaths[0] = sourcePath; - System.arraycopy(paths, 0, allPaths, 1, paths.length); - return modFile.findResource(allPaths); - } -} +//package nl.requios.effortlessbuilding.create.foundation; +// +//import net.neoforged.neoforgespi.locating.IModFile; +//import net.neoforged.neoforge.resource.PathPackResources; +// +//import java.nio.file.Path; +// +//public class ModFilePackResources extends PathPackResources { +// protected final IModFile modFile; +// protected final String sourcePath; +// +// public ModFilePackResources(String name, IModFile modFile, String sourcePath) { +// super(name, true, modFile.findResource(sourcePath)); +// this.modFile = modFile; +// this.sourcePath = sourcePath; +// } +// +// @Override +// protected Path resolve(String... paths) { +// String[] allPaths = new String[paths.length + 1]; +// allPaths[0] = sourcePath; +// System.arraycopy(paths, 0, allPaths, 1, paths.length); +// return modFile.findResource(allPaths); +// } +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AbstractSimiScreen.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AbstractSimiScreen.java index 62d3df6..aba40fa 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AbstractSimiScreen.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AbstractSimiScreen.java @@ -10,8 +10,8 @@ import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.narration.NarratableEntry; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.create.foundation.gui.widget.AbstractSimiWidget; import nl.requios.effortlessbuilding.create.foundation.utility.Components; import nl.requios.effortlessbuilding.gui.buildmodifier.ModifiersScreenList; @@ -114,8 +114,8 @@ public abstract class AbstractSimiScreen extends Screen { prepareFrame(); renderWindowBackground(graphics, mouseX, mouseY, partialTicks); - renderWindow(graphics, mouseX, mouseY, partialTicks); super.render(graphics, mouseX, mouseY, partialTicks); + renderWindow(graphics, mouseX, mouseY, partialTicks); renderWindowForeground(graphics, mouseX, mouseY, partialTicks); endFrame(); @@ -123,6 +123,11 @@ public abstract class AbstractSimiScreen extends Screen { ms.popPose(); } + @Override + public void renderBackground(GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) { +// super.renderBackground(pGuiGraphics, pMouseX, pMouseY, pPartialTick); + } + @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { boolean keyPressed = super.keyPressed(keyCode, scanCode, modifiers); @@ -141,7 +146,7 @@ public abstract class AbstractSimiScreen extends Screen { protected void prepareFrame() {} protected void renderWindowBackground(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - renderBackground(graphics); + this.renderTransparentBackground(graphics); //Manually draw background } protected abstract void renderWindow(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks); diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllGuiTextures.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllGuiTextures.java index 4fb5be8..76b7180 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllGuiTextures.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllGuiTextures.java @@ -3,8 +3,8 @@ package nl.requios.effortlessbuilding.create.foundation.gui; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.create.Create; import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement; import nl.requios.effortlessbuilding.create.foundation.utility.Color; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllIcons.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllIcons.java index 23d80ac..7977644 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllIcons.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/AllIcons.java @@ -9,8 +9,8 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.create.Create; import nl.requios.effortlessbuilding.create.foundation.gui.element.DelegatedStencilElement; import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/RemovedGuiUtils.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/RemovedGuiUtils.java index deba030..ab268f8 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/RemovedGuiUtils.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/RemovedGuiUtils.java @@ -5,6 +5,8 @@ import java.util.List; import javax.annotation.Nonnull; +import net.neoforged.neoforge.client.event.RenderTooltipEvent; +import net.neoforged.neoforge.common.NeoForge; import org.joml.Matrix4f; import com.mojang.blaze3d.systems.RenderSystem; @@ -18,10 +20,8 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.Style; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.ForgeHooksClient; -import net.minecraftforge.client.event.RenderTooltipEvent; -import net.minecraftforge.client.extensions.IForgeGuiGraphics; -import net.minecraftforge.common.MinecraftForge; +import net.neoforged.neoforge.client.ClientHooks; +import net.neoforged.neoforge.client.extensions.IGuiGraphicsExtension; public class RemovedGuiUtils { @Nonnull @@ -38,7 +38,7 @@ public class RemovedGuiUtils { public static void drawHoveringText(GuiGraphics graphics, List textLines, int mouseX, int mouseY, int screenWidth, int screenHeight, int maxTextWidth, Font font) { drawHoveringText(graphics, textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth, - IForgeGuiGraphics.DEFAULT_BACKGROUND_COLOR, IForgeGuiGraphics.DEFAULT_BORDER_COLOR_START, IForgeGuiGraphics.DEFAULT_BORDER_COLOR_END, + IGuiGraphicsExtension.DEFAULT_BACKGROUND_COLOR, IGuiGraphicsExtension.DEFAULT_BORDER_COLOR_START, IGuiGraphicsExtension.DEFAULT_BORDER_COLOR_END, font); } @@ -53,7 +53,7 @@ public class RemovedGuiUtils { List textLines, int mouseX, int mouseY, int screenWidth, int screenHeight, int maxTextWidth, Font font) { drawHoveringText(stack, graphics, textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth, - IForgeGuiGraphics.DEFAULT_BACKGROUND_COLOR, IForgeGuiGraphics.DEFAULT_BORDER_COLOR_START, IForgeGuiGraphics.DEFAULT_BORDER_COLOR_END, + IGuiGraphicsExtension.DEFAULT_BACKGROUND_COLOR, IGuiGraphicsExtension.DEFAULT_BORDER_COLOR_START, IGuiGraphicsExtension.DEFAULT_BORDER_COLOR_END, font); } @@ -63,11 +63,11 @@ public class RemovedGuiUtils { if (textLines.isEmpty()) return; - List list = ForgeHooksClient.gatherTooltipComponents(stack, textLines, + List list = ClientHooks.gatherTooltipComponents(stack, textLines, stack.getTooltipImage(), mouseX, screenWidth, screenHeight, font); RenderTooltipEvent.Pre event = new RenderTooltipEvent.Pre(stack, graphics, mouseX, mouseY, screenWidth, screenHeight, font, list, null); - if (MinecraftForge.EVENT_BUS.post(event)) + if (NeoForge.EVENT_BUS.post(event).isCanceled()) return; PoseStack pStack = graphics.pose(); @@ -152,7 +152,7 @@ public class RemovedGuiUtils { final int zLevel = 400; RenderTooltipEvent.Color colorEvent = new RenderTooltipEvent.Color(stack, graphics, tooltipX, tooltipY, font, backgroundColor, borderColorStart, borderColorEnd, list); - MinecraftForge.EVENT_BUS.post(colorEvent); + NeoForge.EVENT_BUS.post(colorEvent); backgroundColor = colorEvent.getBackgroundStart(); borderColorStart = colorEvent.getBorderStart(); borderColorEnd = colorEvent.getBorderEnd(); diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/AbstractSimiContainerScreen.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/AbstractSimiContainerScreen.java index 220392a..166679e 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/AbstractSimiContainerScreen.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/AbstractSimiContainerScreen.java @@ -13,8 +13,8 @@ import net.minecraft.client.renderer.Rect2i; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.create.foundation.gui.TickableGuiEventListener; import nl.requios.effortlessbuilding.create.foundation.gui.widget.AbstractSimiWidget; @@ -94,8 +94,6 @@ public abstract class AbstractSimiContainerScreen { - ServerPlayer player = context.getSender(); - if (player == null) - return; - if (!(player.containerMenu instanceof IClearableMenu)) - return; - ((IClearableMenu) player.containerMenu).clearContents(); - }); - return true; - } - -} +//package nl.requios.effortlessbuilding.create.foundation.gui.container; +// +//import net.minecraft.network.FriendlyByteBuf; +//import net.minecraft.server.level.ServerPlayer; +//import net.neoforged.neoforge.network.NetworkEvent.Context; +//import nl.requios.effortlessbuilding.create.foundation.networking.SimplePacketBase; +// +//public class ClearMenuPacket extends SimplePacketBase { +// +// public ClearMenuPacket() {} +// +// public ClearMenuPacket(FriendlyByteBuf buffer) {} +// +// @Override +// public void write(FriendlyByteBuf buffer) {} +// +// @Override +// public boolean handle(Context context) { +// context.enqueueWork(() -> { +// ServerPlayer player = context.getSender(); +// if (player == null) +// return; +// if (!(player.containerMenu instanceof IClearableMenu)) +// return; +// ((IClearableMenu) player.containerMenu).clearContents(); +// }); +// return true; +// } +// +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemMenu.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemMenu.java index b2a06b8..03c3063 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemMenu.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemMenu.java @@ -7,8 +7,8 @@ import net.minecraft.world.inventory.ClickType; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.ItemHandlerHelper; -import net.minecraftforge.items.ItemStackHandler; +import net.neoforged.neoforge.items.ItemHandlerHelper; +import net.neoforged.neoforge.items.ItemStackHandler; public abstract class GhostItemMenu extends MenuBase implements IClearableMenu { diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemSubmitPacket.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemSubmitPacket.java index b212f55..bde9ee2 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemSubmitPacket.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/GhostItemSubmitPacket.java @@ -1,45 +1,45 @@ -package nl.requios.effortlessbuilding.create.foundation.gui.container; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.network.NetworkEvent.Context; -import nl.requios.effortlessbuilding.create.foundation.networking.SimplePacketBase; - -public class GhostItemSubmitPacket extends SimplePacketBase { - - private final ItemStack item; - private final int slot; - - public GhostItemSubmitPacket(ItemStack item, int slot) { - this.item = item; - this.slot = slot; - } - - public GhostItemSubmitPacket(FriendlyByteBuf buffer) { - item = buffer.readItem(); - slot = buffer.readInt(); - } - - @Override - public void write(FriendlyByteBuf buffer) { - buffer.writeItem(item); - buffer.writeInt(slot); - } - - @Override - public boolean handle(Context context) { - context.enqueueWork(() -> { - ServerPlayer player = context.getSender(); - if (player == null) - return; - - if (player.containerMenu instanceof GhostItemMenu menu) { - menu.ghostInventory.setStackInSlot(slot, item); - menu.getSlot(36 + slot).setChanged(); - } - }); - return true; - } - -} +//package nl.requios.effortlessbuilding.create.foundation.gui.container; +// +//import net.minecraft.network.FriendlyByteBuf; +//import net.minecraft.server.level.ServerPlayer; +//import net.minecraft.world.item.ItemStack; +//import net.neoforged.neoforge.network.NetworkEvent.Context; +//import nl.requios.effortlessbuilding.create.foundation.networking.SimplePacketBase; +// +//public class GhostItemSubmitPacket extends SimplePacketBase { +// +// private final ItemStack item; +// private final int slot; +// +// public GhostItemSubmitPacket(ItemStack item, int slot) { +// this.item = item; +// this.slot = slot; +// } +// +// public GhostItemSubmitPacket(FriendlyByteBuf buffer) { +// item = buffer.readItem(); +// slot = buffer.readInt(); +// } +// +// @Override +// public void write(FriendlyByteBuf buffer) { +// buffer.writeItem(item); +// buffer.writeInt(slot); +// } +// +// @Override +// public boolean handle(Context context) { +// context.enqueueWork(() -> { +// ServerPlayer player = context.getSender(); +// if (player == null) +// return; +// +// if (player.containerMenu instanceof GhostItemMenu menu) { +// menu.ghostInventory.setStackInSlot(slot, item); +// menu.getSlot(36 + slot).setChanged(); +// } +// }); +// return true; +// } +// +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/IClearableMenu.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/IClearableMenu.java index 7ac69bc..08073a7 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/IClearableMenu.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/IClearableMenu.java @@ -3,7 +3,7 @@ package nl.requios.effortlessbuilding.create.foundation.gui.container; public interface IClearableMenu { default void sendClearPacket() { -// PacketHandler.INSTANCE.sendToServer(new ClearMenuPacket()); +// PacketDistributor.SERVER.noArg().send(new ClearMenuPacket()); } public void clearContents(); diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/MenuBase.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/MenuBase.java index ef91980..b20bc8c 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/MenuBase.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/container/MenuBase.java @@ -6,8 +6,8 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.Slot; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.create.foundation.utility.IInteractionChecker; public abstract class MenuBase extends AbstractContainerMenu { diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/GuiGameElement.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/GuiGameElement.java index 60aa3c3..75f48af 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/GuiGameElement.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/GuiGameElement.java @@ -30,7 +30,7 @@ import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.client.RenderTypeHelper; +import net.neoforged.neoforge.client.RenderTypeHelper; import nl.requios.effortlessbuilding.create.foundation.gui.ILightingSettings; import nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper; import nl.requios.effortlessbuilding.create.foundation.utility.Color; @@ -268,7 +268,7 @@ public class GuiGameElement { ItemRenderer renderer = Minecraft.getInstance().getItemRenderer(); BakedModel bakedModel = renderer.getModel(stack, null, null, 0); - renderer.textureManager.getTexture(InventoryMenu.BLOCK_ATLAS).setFilter(false, false); + Minecraft.getInstance().textureManager.getTexture(InventoryMenu.BLOCK_ATLAS).setFilter(false, false); RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS); RenderSystem.enableBlend(); RenderSystem.enableCull(); diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/ScreenElement.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/ScreenElement.java index 86c2700..6a6f9ba 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/ScreenElement.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/element/ScreenElement.java @@ -1,8 +1,8 @@ package nl.requios.effortlessbuilding.create.foundation.gui.element; import net.minecraft.client.gui.GuiGraphics; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; public interface ScreenElement { diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/AbstractSimiWidget.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/AbstractSimiWidget.java index 2851206..3c4cab6 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/AbstractSimiWidget.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/AbstractSimiWidget.java @@ -3,8 +3,6 @@ package nl.requios.effortlessbuilding.create.foundation.gui.widget; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.narration.NarrationElementOutput; -import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipPositioner; -import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner; import net.minecraft.network.chat.Component; import nl.requios.effortlessbuilding.create.foundation.gui.TickableGuiEventListener; import nl.requios.effortlessbuilding.create.foundation.utility.Components; @@ -39,10 +37,10 @@ public abstract class AbstractSimiWidget extends AbstractWidget implements Ticka super(x, y, width, height, message); } - @Override - protected ClientTooltipPositioner createTooltipPositioner() { - return DefaultTooltipPositioner.INSTANCE; - } +// @Override +// protected ClientTooltipPositioner createTooltipPositioner() { +// return DefaultTooltipPositioner.INSTANCE; +// } public T withCallback(BiConsumer cb) { this.onClick = cb; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/Indicator.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/Indicator.java index 314457b..3151cb2 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/Indicator.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/Indicator.java @@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableList; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import nl.requios.effortlessbuilding.create.foundation.gui.AllGuiTextures; +import org.jetbrains.annotations.NotNull; public class Indicator extends AbstractSimiWidget { @@ -16,7 +17,7 @@ public class Indicator extends AbstractSimiWidget { } @Override - public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks ) { + public void renderWidget(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { if (!visible) return; AllGuiTextures toDraw; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/ScrollInput.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/ScrollInput.java index 3944e90..6dce241 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/ScrollInput.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/gui/widget/ScrollInput.java @@ -117,21 +117,21 @@ public class ScrollInput extends AbstractSimiWidget { } @Override - public boolean mouseScrolled(double mouseX, double mouseY, double delta) { + public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, double scrollY) { if (!this.visible || !this.isHovered) return false; //Added if (inverted) - delta *= -1; + scrollX *= -1; StepContext context = new StepContext(); context.control = AllKeys.ctrlDown(); context.shift = AllKeys.shiftDown(); context.currentValue = state; - context.forward = delta > 0; + context.forward = scrollX > 0; int priorState = state; boolean shifted = AllKeys.shiftDown(); - int step = (int) Math.signum(delta) * this.step.apply(context); + int step = (int) Math.signum(scrollX) * this.step.apply(context); state += step; if (shifted) diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHandlerWrapper.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHandlerWrapper.java index cdbc5f0..77e8b5d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHandlerWrapper.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHandlerWrapper.java @@ -1,7 +1,7 @@ package nl.requios.effortlessbuilding.create.foundation.item; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.IItemHandlerModifiable; +import net.neoforged.neoforge.items.IItemHandlerModifiable; public class ItemHandlerWrapper implements IItemHandlerModifiable { diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHelper.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHelper.java index 4153a84..2dd46b2 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/ItemHelper.java @@ -1,5 +1,6 @@ package nl.requios.effortlessbuilding.create.foundation.item; +import net.neoforged.neoforge.items.ItemHandlerHelper; import nl.requios.effortlessbuilding.create.foundation.utility.Pair; import net.minecraft.core.BlockPos; import net.minecraft.core.NonNullList; @@ -8,8 +9,7 @@ import net.minecraft.world.Containers; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.Level; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemHandlerHelper; +import net.neoforged.neoforge.items.IItemHandler; import org.apache.commons.lang3.mutable.MutableInt; import javax.annotation.Nullable; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/TagDependentIngredientItem.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/TagDependentIngredientItem.java index c6e7327..8eb54df 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/TagDependentIngredientItem.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/TagDependentIngredientItem.java @@ -1,9 +1,8 @@ package nl.requios.effortlessbuilding.create.foundation.item; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.tags.ITagManager; public class TagDependentIngredientItem extends Item { @@ -15,8 +14,7 @@ public class TagDependentIngredientItem extends Item { } public boolean shouldHide() { - ITagManager tagManager = ForgeRegistries.ITEMS.tags(); - return !tagManager.isKnownTagName(tag) || tagManager.getTag(tag).isEmpty(); + return BuiltInRegistries.ITEM.getTag(tag).isEmpty() || BuiltInRegistries.ITEM.getTag(tag).get().size() == 0; } } diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/CustomRenderedItemModel.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/CustomRenderedItemModel.java index 207a5d8..202e971 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/CustomRenderedItemModel.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/CustomRenderedItemModel.java @@ -3,7 +3,7 @@ package nl.requios.effortlessbuilding.create.foundation.item.render; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.world.item.ItemDisplayContext; -import net.minecraftforge.client.model.BakedModelWrapper; +import net.neoforged.neoforge.client.model.BakedModelWrapper; public class CustomRenderedItemModel extends BakedModelWrapper { diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/PartialItemModelRenderer.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/PartialItemModelRenderer.java index 88b9b51..dd90019 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/PartialItemModelRenderer.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/item/render/PartialItemModelRenderer.java @@ -11,8 +11,8 @@ import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.extensions.common.IClientItemExtensions; -import net.minecraftforge.client.model.data.ModelData; +import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; +import net.neoforged.neoforge.client.model.data.ModelData; import nl.requios.effortlessbuilding.create.foundation.render.RenderTypes; import nl.requios.effortlessbuilding.create.foundation.utility.Iterate; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/ISyncPersistentData.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/ISyncPersistentData.java index b35bd98..e311e1a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/ISyncPersistentData.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/ISyncPersistentData.java @@ -1,53 +1,53 @@ -package nl.requios.effortlessbuilding.create.foundation.networking; - -import net.minecraft.client.Minecraft; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.Entity; -import net.minecraftforge.network.NetworkEvent.Context; - -import java.util.HashSet; - -public interface ISyncPersistentData { - - void onPersistentDataUpdated(); - - public static class PersistentDataPacket extends SimplePacketBase { - - private int entityId; - private Entity entity; - private CompoundTag readData; - - public PersistentDataPacket(Entity entity) { - this.entity = entity; - this.entityId = entity.getId(); - } - - public PersistentDataPacket(FriendlyByteBuf buffer) { - entityId = buffer.readInt(); - readData = buffer.readNbt(); - } - - @Override - public void write(FriendlyByteBuf buffer) { - buffer.writeInt(entityId); - buffer.writeNbt(entity.getPersistentData()); - } - - @Override - public boolean handle(Context context) { - context.enqueueWork(() -> { - Entity entityByID = Minecraft.getInstance().level.getEntity(entityId); - CompoundTag data = entityByID.getPersistentData(); - new HashSet<>(data.getAllKeys()).forEach(data::remove); - data.merge(readData); - if (!(entityByID instanceof ISyncPersistentData)) - return; - ((ISyncPersistentData) entityByID).onPersistentDataUpdated(); - }); - return true; - } - - } - -} +//package nl.requios.effortlessbuilding.create.foundation.networking; +// +//import net.minecraft.client.Minecraft; +//import net.minecraft.nbt.CompoundTag; +//import net.minecraft.network.FriendlyByteBuf; +//import net.minecraft.world.entity.Entity; +//import net.neoforged.neoforge.network.NetworkEvent.Context; +// +//import java.util.HashSet; +// +//public interface ISyncPersistentData { +// +// void onPersistentDataUpdated(); +// +// public static class PersistentDataPacket extends SimplePacketBase { +// +// private int entityId; +// private Entity entity; +// private CompoundTag readData; +// +// public PersistentDataPacket(Entity entity) { +// this.entity = entity; +// this.entityId = entity.getId(); +// } +// +// public PersistentDataPacket(FriendlyByteBuf buffer) { +// entityId = buffer.readInt(); +// readData = buffer.readNbt(); +// } +// +// @Override +// public void write(FriendlyByteBuf buffer) { +// buffer.writeInt(entityId); +// buffer.writeNbt(entity.getPersistentData()); +// } +// +// @Override +// public boolean handle(Context context) { +// context.enqueueWork(() -> { +// Entity entityByID = Minecraft.getInstance().level.getEntity(entityId); +// CompoundTag data = entityByID.getPersistentData(); +// new HashSet<>(data.getAllKeys()).forEach(data::remove); +// data.merge(readData); +// if (!(entityByID instanceof ISyncPersistentData)) +// return; +// ((ISyncPersistentData) entityByID).onPersistentDataUpdated(); +// }); +// return true; +// } +// +// } +// +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/SimplePacketBase.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/SimplePacketBase.java index 4adb134..641fb9e 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/SimplePacketBase.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/networking/SimplePacketBase.java @@ -1,12 +1,12 @@ -package nl.requios.effortlessbuilding.create.foundation.networking; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent.Context; - -public abstract class SimplePacketBase { - - public abstract void write(FriendlyByteBuf buffer); - - public abstract boolean handle(Context context); - -} +//package nl.requios.effortlessbuilding.create.foundation.networking; +// +//import net.minecraft.network.FriendlyByteBuf; +//import net.neoforged.neoforge.network.NetworkEvent.Context; +// +//public abstract class SimplePacketBase { +// +// public abstract void write(FriendlyByteBuf buffer); +// +// public abstract boolean handle(Context context); +// +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/render/SuperRenderTypeBuffer.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/render/SuperRenderTypeBuffer.java index 008ad8d..13c8f2b 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/render/SuperRenderTypeBuffer.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/render/SuperRenderTypeBuffer.java @@ -7,7 +7,7 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; import net.minecraft.Util; -import net.minecraft.client.renderer.ChunkBufferBuilderPack; +import net.minecraft.client.renderer.SectionBufferBuilderPack; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.Sheets; @@ -59,31 +59,28 @@ public class SuperRenderTypeBuffer implements MultiBufferSource { private static class SuperRenderTypeBufferPhase { // Visible clones from RenderBuffers - private final ChunkBufferBuilderPack fixedBufferPack = new ChunkBufferBuilderPack(); + private final SectionBufferBuilderPack fixedBufferPack = new SectionBufferBuilderPack(); private final SortedMap fixedBuffers = Util.make(new Object2ObjectLinkedOpenHashMap<>(), map -> { - map.put(Sheets.solidBlockSheet(), fixedBufferPack.builder(RenderType.solid())); - map.put(Sheets.cutoutBlockSheet(), fixedBufferPack.builder(RenderType.cutout())); - map.put(Sheets.bannerSheet(), fixedBufferPack.builder(RenderType.cutoutMipped())); - map.put(Sheets.translucentCullBlockSheet(), fixedBufferPack.builder(RenderType.translucent())); - put(map, Sheets.shieldSheet()); - put(map, Sheets.bedSheet()); - put(map, Sheets.shulkerBoxSheet()); - put(map, Sheets.signSheet()); - put(map, Sheets.chestSheet()); - put(map, RenderType.translucentNoCrumbling()); - put(map, RenderType.armorGlint()); - put(map, RenderType.armorEntityGlint()); - put(map, RenderType.glint()); - put(map, RenderType.glintDirect()); - put(map, RenderType.glintTranslucent()); - put(map, RenderType.entityGlint()); - put(map, RenderType.entityGlintDirect()); - put(map, RenderType.waterMask()); - put(map, RenderTypes.getOutlineSolid()); - ModelBakery.DESTROY_TYPES.forEach((p_173062_) -> { - put(map, p_173062_); - }); - }); + map.put(Sheets.solidBlockSheet(), this.fixedBufferPack.builder(RenderType.solid())); + map.put(Sheets.cutoutBlockSheet(), this.fixedBufferPack.builder(RenderType.cutout())); + map.put(Sheets.bannerSheet(), this.fixedBufferPack.builder(RenderType.cutoutMipped())); + map.put(Sheets.translucentCullBlockSheet(), this.fixedBufferPack.builder(RenderType.translucent())); + put(map, Sheets.shieldSheet()); + put(map, Sheets.bedSheet()); + put(map, Sheets.shulkerBoxSheet()); + put(map, Sheets.signSheet()); + put(map, Sheets.hangingSignSheet()); + map.put(Sheets.chestSheet(), new BufferBuilder(786432)); + put(map, RenderType.armorGlint()); + put(map, RenderType.armorEntityGlint()); + put(map, RenderType.glint()); + put(map, RenderType.glintDirect()); + put(map, RenderType.glintTranslucent()); + put(map, RenderType.entityGlint()); + put(map, RenderType.entityGlintDirect()); + put(map, RenderType.waterMask()); + ModelBakery.DESTROY_TYPES.forEach(p_173062_ -> put(map, p_173062_)); + }); private final BufferSource bufferSource = MultiBufferSource.immediateWithBuffers(fixedBuffers, new BufferBuilder(256)); private static void put(Object2ObjectLinkedOpenHashMap map, RenderType type) { diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/AbstractBlockBreakQueue.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/AbstractBlockBreakQueue.java index 5408b96..c5f0ef9 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/AbstractBlockBreakQueue.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/AbstractBlockBreakQueue.java @@ -6,7 +6,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import net.minecraftforge.event.ForgeEventFactory; +import net.neoforged.neoforge.event.EventHooks; import javax.annotation.Nullable; import java.util.function.BiConsumer; @@ -20,7 +20,7 @@ public abstract class AbstractBlockBreakQueue { BlockHelper.destroyBlockAs(world, pos, playerEntity, toDamage, effectChance, stack -> drop.accept(pos, stack)); if (toDamage.isEmpty() && !usedTool.isEmpty()) - ForgeEventFactory.onPlayerDestroyItem(playerEntity, usedTool, InteractionHand.MAIN_HAND); + EventHooks.onPlayerDestroyItem(playerEntity, usedTool, InteractionHand.MAIN_HAND); }; } diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/BlockHelper.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/BlockHelper.java index 6a37500..9e6a3ab 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/BlockHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/BlockHelper.java @@ -34,9 +34,9 @@ import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.material.FluidState; -import net.minecraftforge.common.IPlantable; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.level.BlockEvent; +import net.neoforged.neoforge.common.IPlantable; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.level.BlockEvent; import javax.annotation.Nullable; import java.util.function.Consumer; @@ -159,7 +159,7 @@ public class BlockHelper { if (player != null) { BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(world, pos, state, player); - MinecraftForge.EVENT_BUS.post(event); + NeoForge.EVENT_BUS.post(event); if (event.isCanceled()) return false; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/CreateRegistry.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/CreateRegistry.java index 28646cb..8b5aefc 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/CreateRegistry.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/CreateRegistry.java @@ -1,101 +1,101 @@ -package nl.requios.effortlessbuilding.create.foundation.utility; - -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.registries.IForgeRegistry; -import nl.requios.effortlessbuilding.create.Create; -import org.jetbrains.annotations.Nullable; - -import java.util.*; - -public class CreateRegistry { - private static final List> ALL = new ArrayList<>(); - - protected final IForgeRegistry objectRegistry; - protected final Map locationMap = new HashMap<>(); - protected final Map objectMap = new IdentityHashMap<>(); - protected boolean unwrapped = false; - - public CreateRegistry(IForgeRegistry objectRegistry) { - this.objectRegistry = objectRegistry; - ALL.add(this); - } - - public void register(ResourceLocation location, V value) { - if (!unwrapped) { - locationMap.put(location, value); - } else { - K object = objectRegistry.getValue(location); - if (object != null) { - objectMap.put(object, value); - } else { - Create.LOGGER.warn("Could not get object for location '" + location + "' in CreateRegistry after unwrapping!"); - } - } - } - - public void register(K object, V value) { - if (unwrapped) { - objectMap.put(object, value); - } else { - ResourceLocation location = objectRegistry.getKey(object); - if (location != null) { - locationMap.put(location, value); - } else { - Create.LOGGER.warn("Could not get location of object '" + object + "' in CreateRegistry before unwrapping!"); - } - } - } - - @Nullable - public V get(ResourceLocation location) { - if (!unwrapped) { - return locationMap.get(location); - } else { - K object = objectRegistry.getValue(location); - if (object != null) { - return objectMap.get(object); - } else { - Create.LOGGER.warn("Could not get object for location '" + location + "' in CreateRegistry after unwrapping!"); - return null; - } - } - } - - @Nullable - public V get(K object) { - if (unwrapped) { - return objectMap.get(object); - } else { - ResourceLocation location = objectRegistry.getKey(object); - if (location != null) { - return locationMap.get(location); - } else { - Create.LOGGER.warn("Could not get location of object '" + object + "' in CreateRegistry before unwrapping!"); - return null; - } - } - } - - public boolean isUnwrapped() { - return unwrapped; - } - - protected void unwrap() { - for (Map.Entry entry : locationMap.entrySet()) { - ResourceLocation location = entry.getKey(); - K object = objectRegistry.getValue(location); - if (object != null) { - objectMap.put(object, entry.getValue()); - } else { - Create.LOGGER.warn("Could not get object for location '" + location + "' in CreateRegistry during unwrapping!"); - } - } - unwrapped = true; - } - - public static void unwrapAll() { - for (CreateRegistry registry : ALL) { - registry.unwrap(); - } - } -} +//package nl.requios.effortlessbuilding.create.foundation.utility; +// +//import net.minecraft.resources.ResourceLocation; +//import net.neoforged.neoforge.registries.IForgeRegistry; +//import nl.requios.effortlessbuilding.create.Create; +//import org.jetbrains.annotations.Nullable; +// +//import java.util.*; +// +//public class CreateRegistry { +// private static final List> ALL = new ArrayList<>(); +// +// protected final IForgeRegistry objectRegistry; +// protected final Map locationMap = new HashMap<>(); +// protected final Map objectMap = new IdentityHashMap<>(); +// protected boolean unwrapped = false; +// +// public CreateRegistry(IForgeRegistry objectRegistry) { +// this.objectRegistry = objectRegistry; +// ALL.add(this); +// } +// +// public void register(ResourceLocation location, V value) { +// if (!unwrapped) { +// locationMap.put(location, value); +// } else { +// K object = objectRegistry.getValue(location); +// if (object != null) { +// objectMap.put(object, value); +// } else { +// Create.LOGGER.warn("Could not get object for location '" + location + "' in CreateRegistry after unwrapping!"); +// } +// } +// } +// +// public void register(K object, V value) { +// if (unwrapped) { +// objectMap.put(object, value); +// } else { +// ResourceLocation location = objectRegistry.getKey(object); +// if (location != null) { +// locationMap.put(location, value); +// } else { +// Create.LOGGER.warn("Could not get location of object '" + object + "' in CreateRegistry before unwrapping!"); +// } +// } +// } +// +// @Nullable +// public V get(ResourceLocation location) { +// if (!unwrapped) { +// return locationMap.get(location); +// } else { +// K object = objectRegistry.getValue(location); +// if (object != null) { +// return objectMap.get(object); +// } else { +// Create.LOGGER.warn("Could not get object for location '" + location + "' in CreateRegistry after unwrapping!"); +// return null; +// } +// } +// } +// +// @Nullable +// public V get(K object) { +// if (unwrapped) { +// return objectMap.get(object); +// } else { +// ResourceLocation location = objectRegistry.getKey(object); +// if (location != null) { +// return locationMap.get(location); +// } else { +// Create.LOGGER.warn("Could not get location of object '" + object + "' in CreateRegistry before unwrapping!"); +// return null; +// } +// } +// } +// +// public boolean isUnwrapped() { +// return unwrapped; +// } +// +// protected void unwrap() { +// for (Map.Entry entry : locationMap.entrySet()) { +// ResourceLocation location = entry.getKey(); +// K object = objectRegistry.getValue(location); +// if (object != null) { +// objectMap.put(object, entry.getValue()); +// } else { +// Create.LOGGER.warn("Could not get object for location '" + location + "' in CreateRegistry during unwrapping!"); +// } +// } +// unwrapped = true; +// } +// +// public static void unwrapAll() { +// for (CreateRegistry registry : ALL) { +// registry.unwrap(); +// } +// } +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Debug.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Debug.java index ba00b87..49a1a33 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Debug.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Debug.java @@ -1,13 +1,13 @@ package nl.requios.effortlessbuilding.create.foundation.utility; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.fml.util.thread.EffectiveSide; import nl.requios.effortlessbuilding.create.Create; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.util.thread.EffectiveSide; +import net.neoforged.api.distmarker.OnlyIn; /** Deprecated so simi doensn't forget to remove debug calls **/ @OnlyIn(value = Dist.CLIENT) diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Lang.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Lang.java index e14385c..1d4aef6 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Lang.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/Lang.java @@ -5,7 +5,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.fluids.FluidStack; +import net.neoforged.neoforge.fluids.FluidStack; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/NBTHelper.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/NBTHelper.java index d409073..bff79f7 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/NBTHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/NBTHelper.java @@ -57,9 +57,9 @@ public class NBTHelper { listNBT.forEach(inbt -> consumer.accept((CompoundTag) inbt)); } - public static ListTag writeItemList(Iterable stacks) { - return writeCompoundList(stacks, ItemStack::serializeNBT); - } +// public static ListTag writeItemList(Iterable stacks) { +// return writeCompoundList(stacks, ItemStack::serializeNBT); +// } public static List readItemList(ListTag stacks) { return readCompoundList(stacks, ItemStack::of); diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/RegisteredObjects.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/RegisteredObjects.java index 68e3108..9e31149 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/RegisteredObjects.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/RegisteredObjects.java @@ -1,6 +1,8 @@ package nl.requios.effortlessbuilding.create.foundation.utility; +import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.Item; @@ -9,14 +11,12 @@ import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.material.Fluid; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.IForgeRegistry; import org.jetbrains.annotations.NotNull; public final class RegisteredObjects { // registry argument for easier porting to 1.19 @NotNull - public static ResourceLocation getKeyOrThrow(IForgeRegistry registry, V value) { + public static ResourceLocation getKeyOrThrow(Registry registry, V value) { ResourceLocation key = registry.getKey(value); if (key == null) { throw new IllegalArgumentException("Could not get key for value " + value + "!"); @@ -26,41 +26,41 @@ public final class RegisteredObjects { @NotNull public static ResourceLocation getKeyOrThrow(Block value) { - return getKeyOrThrow(ForgeRegistries.BLOCKS, value); + return getKeyOrThrow(BuiltInRegistries.BLOCK, value); } @NotNull public static ResourceLocation getKeyOrThrow(Item value) { - return getKeyOrThrow(ForgeRegistries.ITEMS, value); + return getKeyOrThrow(BuiltInRegistries.ITEM, value); } @NotNull public static ResourceLocation getKeyOrThrow(Fluid value) { - return getKeyOrThrow(ForgeRegistries.FLUIDS, value); + return getKeyOrThrow(BuiltInRegistries.FLUID, value); } @NotNull public static ResourceLocation getKeyOrThrow(EntityType value) { - return getKeyOrThrow(ForgeRegistries.ENTITY_TYPES, value); + return getKeyOrThrow(BuiltInRegistries.ENTITY_TYPE, value); } @NotNull public static ResourceLocation getKeyOrThrow(BlockEntityType value) { - return getKeyOrThrow(ForgeRegistries.BLOCK_ENTITY_TYPES, value); + return getKeyOrThrow(BuiltInRegistries.BLOCK_ENTITY_TYPE, value); } @NotNull public static ResourceLocation getKeyOrThrow(Potion value) { - return getKeyOrThrow(ForgeRegistries.POTIONS, value); + return getKeyOrThrow(BuiltInRegistries.POTION, value); } @NotNull public static ResourceLocation getKeyOrThrow(ParticleType value) { - return getKeyOrThrow(ForgeRegistries.PARTICLE_TYPES, value); + return getKeyOrThrow(BuiltInRegistries.PARTICLE_TYPE, value); } @NotNull public static ResourceLocation getKeyOrThrow(RecipeSerializer value) { - return getKeyOrThrow(ForgeRegistries.RECIPE_SERIALIZERS, value); + return getKeyOrThrow(BuiltInRegistries.RECIPE_SERIALIZER, value); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ResetableLazy.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ResetableLazy.java index b18f34f..a344a32 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ResetableLazy.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ResetableLazy.java @@ -1,6 +1,6 @@ package nl.requios.effortlessbuilding.create.foundation.utility; -import net.minecraftforge.common.util.NonNullSupplier; +import net.neoforged.neoforge.common.util.NonNullSupplier; import java.util.function.Supplier; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ghost/GhostBlockRenderer.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ghost/GhostBlockRenderer.java index fb29bc1..6a80740 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ghost/GhostBlockRenderer.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/ghost/GhostBlockRenderer.java @@ -18,7 +18,7 @@ import net.minecraft.core.Direction; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.client.model.data.ModelData; +import net.neoforged.neoforge.client.model.data.ModelData; import nl.requios.effortlessbuilding.create.foundation.utility.Color; import javax.annotation.Nullable; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedClientWorld.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedClientWorld.java index 31ed743..0f65faa 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedClientWorld.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedClientWorld.java @@ -15,8 +15,8 @@ import net.minecraft.world.level.LightLayer; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedWorld.java b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedWorld.java index ae8e400..18a1840 100644 --- a/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedWorld.java +++ b/src/main/java/nl/requios/effortlessbuilding/create/foundation/utility/worldWrappers/WrappedWorld.java @@ -3,6 +3,7 @@ package nl.requios.effortlessbuilding.create.foundation.utility.worldWrappers; import net.minecraft.core.*; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; +import net.minecraft.world.TickRateManager; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.flag.FeatureFlagSet; @@ -134,6 +135,11 @@ public class WrappedWorld extends Level { return null; } + @Override + public TickRateManager tickRateManager() { + return null; + } + @Override public MapItemSavedData getMapData(String mapName) { return null; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagContainer.java b/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagContainer.java index 709d60b..e4513bf 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagContainer.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagContainer.java @@ -9,9 +9,9 @@ import net.minecraft.world.inventory.ClickType; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemStackHandler; -import net.minecraftforge.items.SlotItemHandler; +import net.neoforged.neoforge.items.IItemHandler; +import net.neoforged.neoforge.items.ItemStackHandler; +import net.neoforged.neoforge.items.SlotItemHandler; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.item.DiamondRandomizerBagItem; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagScreen.java b/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagScreen.java index ba3b9c2..d253544 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagScreen.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/DiamondRandomizerBagScreen.java @@ -5,8 +5,8 @@ import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.EffortlessBuilding; import javax.annotation.ParametersAreNonnullByDefault; @@ -26,7 +26,6 @@ public class DiamondRandomizerBagScreen extends AbstractContainerScreen this.minecraft.player.closeContainer()); @@ -68,7 +63,7 @@ public class PlayerSettingsGui extends Screen { @Override public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(guiGraphics); + super.render(guiGraphics, mouseX, mouseY, partialTicks); int yy = top; guiGraphics.drawString(font, "Shader type", left, yy + 5, 0xFFFFFF, false); @@ -76,8 +71,6 @@ public class PlayerSettingsGui extends Screen { yy += 50; guiGraphics.drawString(font, "Shader speed", left, yy + 5, 0xFFFFFF, false); - super.render(guiGraphics, mouseX, mouseY, partialTicks); - if (showShaderList) this.shaderTypeList.render(guiGraphics, mouseX, mouseY, partialTicks); } @@ -118,8 +111,8 @@ public class PlayerSettingsGui extends Screen { class ShaderTypeList extends ObjectSelectionList { public ShaderTypeList(Minecraft mcIn) { - super(mcIn, 180, 140, top + 20, top + 100, 18); - this.setLeftPos(right - width); + super(mcIn, 180, 140, top + 20, /*top + 100,*/ 18); + this.setX(right - width); for (int i = 0; i < 40; i++) { @@ -151,33 +144,33 @@ public class PlayerSettingsGui extends Screen { } @Override - public boolean mouseClicked(double p_mouseClicked_1_, double p_mouseClicked_3_, int p_mouseClicked_5_) { + public boolean mouseClicked(double mouseX, double mouseY, int pButton) { if (!showShaderList) return false; - return super.mouseClicked(p_mouseClicked_1_, p_mouseClicked_3_, p_mouseClicked_5_); + return super.mouseClicked(mouseX, mouseY, pButton); } @Override - public boolean mouseReleased(double p_mouseReleased_1_, double p_mouseReleased_3_, int p_mouseReleased_5_) { + public boolean mouseReleased(double mouseX, double mouseY, int button) { if (!showShaderList) return false; - return super.mouseReleased(p_mouseReleased_1_, p_mouseReleased_3_, p_mouseReleased_5_); + return super.mouseReleased(mouseX, mouseY, button); } @Override - public boolean mouseDragged(double p_mouseDragged_1_, double p_mouseDragged_3_, int p_mouseDragged_5_, double p_mouseDragged_6_, double p_mouseDragged_8_) { + public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) { if (!showShaderList) return false; - return super.mouseDragged(p_mouseDragged_1_, p_mouseDragged_3_, p_mouseDragged_5_, p_mouseDragged_6_, p_mouseDragged_8_); + return super.mouseDragged(mouseX, mouseY, button, dragX, dragY); } @Override - public boolean mouseScrolled(double p_mouseScrolled_1_, double p_mouseScrolled_3_, double p_mouseScrolled_5_) { + public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, double scrollY) { if (!showShaderList) return false; - return super.mouseScrolled(p_mouseScrolled_1_, p_mouseScrolled_3_, p_mouseScrolled_5_); + return super.mouseScrolled(mouseX, mouseY, scrollX, scrollY); } @Override - public boolean isMouseOver(double p_isMouseOver_1_, double p_isMouseOver_3_) { + public boolean isMouseOver(double mouseX, double mouseY) { if (!showShaderList) return false; - return super.isMouseOver(p_isMouseOver_1_, p_isMouseOver_3_); + return super.isMouseOver(mouseX, mouseY); } public boolean isFocused() { @@ -190,90 +183,90 @@ public class PlayerSettingsGui extends Screen { } //From AbstractSelectionList, disabled parts - @Override - public void render(GuiGraphics guiGraphics, int p_render_1_, int p_render_2_, float p_render_3_) { - this.renderBackground(guiGraphics); - int i = this.getScrollbarPosition(); - int j = i + 6; - Tesselator tessellator = Tesselator.getInstance(); - BufferBuilder bufferbuilder = tessellator.getBuilder(); -// this.minecraft.getTextureManager().bindTexture(AbstractGui.BACKGROUND_LOCATION); - RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - float f = 32.0F; - bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); - bufferbuilder.vertex(this.x0, this.y1, 0.0D).color(20, 20, 20, 180).endVertex(); - bufferbuilder.vertex(this.x1, this.y1, 0.0D).color(20, 20, 20, 180).endVertex(); - bufferbuilder.vertex(this.x1, this.y0, 0.0D).color(20, 20, 20, 180).endVertex(); - bufferbuilder.vertex(this.x0, this.y0, 0.0D).color(20, 20, 20, 180).endVertex(); - tessellator.end(); - int k = this.getRowLeft(); - int l = this.y0 + 4 - (int) this.getScrollAmount(); - if (this.renderHeader) { - this.renderHeader(guiGraphics, k, l); - } +// @Override //TODO: Check if this is still needed! +// public void render(GuiGraphics guiGraphics, int p_render_1_, int p_render_2_, float p_render_3_) { +// this.renderBackground(guiGraphics); +// int i = this.getScrollbarPosition(); +// int j = i + 6; +// Tesselator tessellator = Tesselator.getInstance(); +// BufferBuilder bufferbuilder = tessellator.getBuilder(); +//// this.minecraft.getTextureManager().bindTexture(AbstractGui.BACKGROUND_LOCATION); +// RenderSystem.enableBlend(); +// RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); +// RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); +// float f = 32.0F; +// bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); +// bufferbuilder.vertex(this.x0, this.y1, 0.0D).color(20, 20, 20, 180).endVertex(); +// bufferbuilder.vertex(this.x1, this.y1, 0.0D).color(20, 20, 20, 180).endVertex(); +// bufferbuilder.vertex(this.x1, this.y0, 0.0D).color(20, 20, 20, 180).endVertex(); +// bufferbuilder.vertex(this.x0, this.y0, 0.0D).color(20, 20, 20, 180).endVertex(); +// tessellator.end(); +// int k = this.getRowLeft(); +// int l = this.y0 + 4 - (int) this.getScrollAmount(); +// if (this.renderHeader) { +// this.renderHeader(guiGraphics, k, l); +// } +// +// this.renderList(guiGraphics, p_render_1_, p_render_2_, p_render_3_); +// RenderSystem.disableDepthTest(); +//// this.renderHoleBackground(0, this.y0, 255, 255); +//// this.renderHoleBackground(this.y1, this.height, 255, 255); +// RenderSystem.enableBlend(); +// RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); +//// RenderSystem.disableTexture(); +// RenderSystem.setShader(GameRenderer::getPositionColorShader); +//// int i1 = 4; +//// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); +//// bufferbuilder.pos((double)this.x0, (double)(this.y0 + 4), 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 0).endVertex(); +//// bufferbuilder.pos((double)this.x1, (double)(this.y0 + 4), 0.0D).tex(1.0F, 1.0F).color(0, 0, 0, 0).endVertex(); +//// bufferbuilder.pos((double)this.x1, (double)this.y0, 0.0D).tex(1.0F, 0.0F).color(0, 0, 0, 255).endVertex(); +//// bufferbuilder.pos((double)this.x0, (double)this.y0, 0.0D).tex(0.0F, 0.0F).color(0, 0, 0, 255).endVertex(); +//// tessellator.draw(); +//// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); +//// bufferbuilder.pos((double)this.x0, (double)this.y1, 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 255).endVertex(); +//// bufferbuilder.pos((double)this.x1, (double)this.y1, 0.0D).tex(1.0F, 1.0F).color(0, 0, 0, 255).endVertex(); +//// bufferbuilder.pos((double)this.x1, (double)(this.y1 - 4), 0.0D).tex(1.0F, 0.0F).color(0, 0, 0, 0).endVertex(); +//// bufferbuilder.pos((double)this.x0, (double)(this.y1 - 4), 0.0D).tex(0.0F, 0.0F).color(0, 0, 0, 0).endVertex(); +//// tessellator.draw(); +// +// //SCROLLBAR +// int j1 = this.getMaxScroll(); +// if (j1 > 0) { +// int k1 = (int) ((float) ((this.y1 - this.y0) * (this.y1 - this.y0)) / (float) this.getMaxPosition()); +// k1 = Mth.clamp(k1, 32, this.y1 - this.y0 - 8); +// int l1 = (int) this.getScrollAmount() * (this.y1 - this.y0 - k1) / j1 + this.y0; +// if (l1 < this.y0) { +// l1 = this.y0; +// } +// +// bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); +// bufferbuilder.vertex(i, this.y1, 0.0D).uv(0.0F, 1.0F).color(0, 0, 0, 255).endVertex(); +// bufferbuilder.vertex(j, this.y1, 0.0D).uv(1.0F, 1.0F).color(0, 0, 0, 255).endVertex(); +// bufferbuilder.vertex(j, this.y0, 0.0D).uv(1.0F, 0.0F).color(0, 0, 0, 255).endVertex(); +// bufferbuilder.vertex(i, this.y0, 0.0D).uv(0.0F, 0.0F).color(0, 0, 0, 255).endVertex(); +// tessellator.end(); +// bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); +// bufferbuilder.vertex(i, l1 + k1, 0.0D).uv(0.0F, 1.0F).color(128, 128, 128, 255).endVertex(); +// bufferbuilder.vertex(j, l1 + k1, 0.0D).uv(1.0F, 1.0F).color(128, 128, 128, 255).endVertex(); +// bufferbuilder.vertex(j, l1, 0.0D).uv(1.0F, 0.0F).color(128, 128, 128, 255).endVertex(); +// bufferbuilder.vertex(i, l1, 0.0D).uv(0.0F, 0.0F).color(128, 128, 128, 255).endVertex(); +// tessellator.end(); +// bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); +// bufferbuilder.vertex(i, l1 + k1 - 1, 0.0D).uv(0.0F, 1.0F).color(192, 192, 192, 255).endVertex(); +// bufferbuilder.vertex(j - 1, l1 + k1 - 1, 0.0D).uv(1.0F, 1.0F).color(192, 192, 192, 255).endVertex(); +// bufferbuilder.vertex(j - 1, l1, 0.0D).uv(1.0F, 0.0F).color(192, 192, 192, 255).endVertex(); +// bufferbuilder.vertex(i, l1, 0.0D).uv(0.0F, 0.0F).color(192, 192, 192, 255).endVertex(); +// tessellator.end(); +// } +// +//// this.renderDecorations(p_render_1_, p_render_2_); +//// RenderSystem.enableTexture(); +// RenderSystem.disableBlend(); +// } - this.renderList(guiGraphics, p_render_1_, p_render_2_, p_render_3_); - RenderSystem.disableDepthTest(); -// this.renderHoleBackground(0, this.y0, 255, 255); -// this.renderHoleBackground(this.y1, this.height, 255, 255); - RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); -// RenderSystem.disableTexture(); - RenderSystem.setShader(GameRenderer::getPositionColorShader); -// int i1 = 4; -// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); -// bufferbuilder.pos((double)this.x0, (double)(this.y0 + 4), 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 0).endVertex(); -// bufferbuilder.pos((double)this.x1, (double)(this.y0 + 4), 0.0D).tex(1.0F, 1.0F).color(0, 0, 0, 0).endVertex(); -// bufferbuilder.pos((double)this.x1, (double)this.y0, 0.0D).tex(1.0F, 0.0F).color(0, 0, 0, 255).endVertex(); -// bufferbuilder.pos((double)this.x0, (double)this.y0, 0.0D).tex(0.0F, 0.0F).color(0, 0, 0, 255).endVertex(); -// tessellator.draw(); -// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); -// bufferbuilder.pos((double)this.x0, (double)this.y1, 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 255).endVertex(); -// bufferbuilder.pos((double)this.x1, (double)this.y1, 0.0D).tex(1.0F, 1.0F).color(0, 0, 0, 255).endVertex(); -// bufferbuilder.pos((double)this.x1, (double)(this.y1 - 4), 0.0D).tex(1.0F, 0.0F).color(0, 0, 0, 0).endVertex(); -// bufferbuilder.pos((double)this.x0, (double)(this.y1 - 4), 0.0D).tex(0.0F, 0.0F).color(0, 0, 0, 0).endVertex(); -// tessellator.draw(); - - //SCROLLBAR - int j1 = this.getMaxScroll(); - if (j1 > 0) { - int k1 = (int) ((float) ((this.y1 - this.y0) * (this.y1 - this.y0)) / (float) this.getMaxPosition()); - k1 = Mth.clamp(k1, 32, this.y1 - this.y0 - 8); - int l1 = (int) this.getScrollAmount() * (this.y1 - this.y0 - k1) / j1 + this.y0; - if (l1 < this.y0) { - l1 = this.y0; - } - - bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); - bufferbuilder.vertex(i, this.y1, 0.0D).uv(0.0F, 1.0F).color(0, 0, 0, 255).endVertex(); - bufferbuilder.vertex(j, this.y1, 0.0D).uv(1.0F, 1.0F).color(0, 0, 0, 255).endVertex(); - bufferbuilder.vertex(j, this.y0, 0.0D).uv(1.0F, 0.0F).color(0, 0, 0, 255).endVertex(); - bufferbuilder.vertex(i, this.y0, 0.0D).uv(0.0F, 0.0F).color(0, 0, 0, 255).endVertex(); - tessellator.end(); - bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); - bufferbuilder.vertex(i, l1 + k1, 0.0D).uv(0.0F, 1.0F).color(128, 128, 128, 255).endVertex(); - bufferbuilder.vertex(j, l1 + k1, 0.0D).uv(1.0F, 1.0F).color(128, 128, 128, 255).endVertex(); - bufferbuilder.vertex(j, l1, 0.0D).uv(1.0F, 0.0F).color(128, 128, 128, 255).endVertex(); - bufferbuilder.vertex(i, l1, 0.0D).uv(0.0F, 0.0F).color(128, 128, 128, 255).endVertex(); - tessellator.end(); - bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); - bufferbuilder.vertex(i, l1 + k1 - 1, 0.0D).uv(0.0F, 1.0F).color(192, 192, 192, 255).endVertex(); - bufferbuilder.vertex(j - 1, l1 + k1 - 1, 0.0D).uv(1.0F, 1.0F).color(192, 192, 192, 255).endVertex(); - bufferbuilder.vertex(j - 1, l1, 0.0D).uv(1.0F, 0.0F).color(192, 192, 192, 255).endVertex(); - bufferbuilder.vertex(i, l1, 0.0D).uv(0.0F, 0.0F).color(192, 192, 192, 255).endVertex(); - tessellator.end(); - } - -// this.renderDecorations(p_render_1_, p_render_2_); -// RenderSystem.enableTexture(); - RenderSystem.disableBlend(); - } - - public int getMaxScroll() { - return Math.max(0, this.getMaxPosition() - (this.y1 - this.y0 - 4)); - } +// public int getMaxScroll() { +// return Math.max(0, this.getMaxPosition() - (this.y1 - this.y0 - 4)); +// } @OnlyIn(Dist.CLIENT) public class ShaderTypeEntry extends ObjectSelectionList.Entry { @@ -285,8 +278,8 @@ public class PlayerSettingsGui extends Screen { @Override public void render(GuiGraphics guiGraphics, int itemIndex, int rowTop, int rowLeft, int rowWidth, int rowHeight, int mouseX, int mouseY, boolean hovered, float partialTicks) { - if (rowTop + 10 > ShaderTypeList.this.y0 && rowTop + rowHeight - 5 < ShaderTypeList.this.y1) - guiGraphics.drawString(font, shaderType.name, ShaderTypeList.this.x0 + 8, rowTop + 4, 0xFFFFFF, false); + if (rowTop + 10 > ShaderTypeList.this.getY() && rowTop + rowHeight - 5 < (ShaderTypeList.this.getY() + ShaderTypeList.this.getHeight())) + guiGraphics.drawString(font, shaderType.name, ShaderTypeList.this.getX() + 8, rowTop + 4, 0xFFFFFF, false); } @Override diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java index 3a69190..3050038 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java @@ -26,7 +26,7 @@ import nl.requios.effortlessbuilding.buildmode.BuildModeEnum; import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.ModeOptions.ActionEnum; import nl.requios.effortlessbuilding.buildmode.ModeOptions.OptionEnum; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.create.foundation.item.ItemDescription; import nl.requios.effortlessbuilding.create.foundation.item.TooltipHelper; import nl.requios.effortlessbuilding.create.foundation.utility.Color; @@ -155,7 +155,7 @@ public class RadialMenu extends Screen { //Add actions - boolean canReplace = CapabilityHandler.canReplaceBlocks(minecraft.player); + boolean canReplace = AttachmentHandler.canReplaceBlocks(minecraft.player); // buttons.add(new MenuButton(ActionEnum.OPEN_PLAYER_SETTINGS, -buttonDistance - 65, -13, Direction.UP)); if (canReplace) { @@ -337,7 +337,7 @@ public class RadialMenu extends Screen { guiGraphics.drawString(font, credits, width - font.width(credits) - 4, height - 10, watermarkTextColor); //Draw power level info - String powerLevelValue = minecraft.player.isCreative() ? "Creative" : String.valueOf(CapabilityHandler.getPowerLevel(minecraft.player)); + String powerLevelValue = minecraft.player.isCreative() ? "Creative" : String.valueOf(AttachmentHandler.getPowerLevel(minecraft.player)); String powerLevelText = I18n.get("key.effortlessbuilding.power_level") + ": " + powerLevelValue; guiGraphics.drawString(font, powerLevelText, width - font.width(powerLevelText) - 4, height - 22, minecraft.player.isCreative() ? watermarkTextColor : ChatFormatting.DARK_PURPLE.getColor()); @@ -345,19 +345,19 @@ public class RadialMenu extends Screen { if (mouseX >= width - font.width(powerLevelText) - 14 && mouseX <= width && mouseY >= height - 24 && mouseY <= height) { var tooltip = new ArrayList(); tooltip.add(Components.literal(powerLevelText).withStyle(ChatFormatting.DARK_PURPLE)); - int placementReach = CapabilityHandler.getPlacementReach(minecraft.player, false); + int placementReach = AttachmentHandler.getPlacementReach(minecraft.player, false); tooltip.add(Components.translatable("key.effortlessbuilding.placement_reach").withStyle(ChatFormatting.GRAY).append(": " + (placementReach == 0 ? "vanilla" : placementReach + " blocks"))); - tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_per_axis").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getMaxBlocksPerAxis(minecraft.player, false))); - tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_placed_at_once").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getMaxBlocksPlacedAtOnce(minecraft.player, false))); - tooltip.add(Components.translatable("key.effortlessbuilding.max_mirror_radius").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getMaxMirrorRadius(minecraft.player, false) + " blocks")); + tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_per_axis").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getMaxBlocksPerAxis(minecraft.player, false))); + tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_placed_at_once").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getMaxBlocksPlacedAtOnce(minecraft.player, false))); + tooltip.add(Components.translatable("key.effortlessbuilding.max_mirror_radius").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getMaxMirrorRadius(minecraft.player, false) + " blocks")); - if (CapabilityHandler.canIncreasePowerLevel(minecraft.player) && !minecraft.player.isCreative()) { + if (AttachmentHandler.canIncreasePowerLevel(minecraft.player) && !minecraft.player.isCreative()) { tooltip.add(Components.literal("")); - tooltip.add(Components.translatable("key.effortlessbuilding.next_power_level").withStyle(ChatFormatting.DARK_AQUA).append(": " + CapabilityHandler.getNextPowerLevel(minecraft.player))); - tooltip.add(Components.translatable("key.effortlessbuilding.placement_reach").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getPlacementReach(minecraft.player, true) + " blocks")); - tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_per_axis").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getMaxBlocksPerAxis(minecraft.player, true))); - tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_placed_at_once").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getMaxBlocksPlacedAtOnce(minecraft.player, true))); - tooltip.add(Components.translatable("key.effortlessbuilding.max_mirror_radius").withStyle(ChatFormatting.GRAY).append(": " + CapabilityHandler.getMaxMirrorRadius(minecraft.player, true) + " blocks")); + tooltip.add(Components.translatable("key.effortlessbuilding.next_power_level").withStyle(ChatFormatting.DARK_AQUA).append(": " + AttachmentHandler.getNextPowerLevel(minecraft.player))); + tooltip.add(Components.translatable("key.effortlessbuilding.placement_reach").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getPlacementReach(minecraft.player, true) + " blocks")); + tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_per_axis").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getMaxBlocksPerAxis(minecraft.player, true))); + tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_placed_at_once").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getMaxBlocksPlacedAtOnce(minecraft.player, true))); + tooltip.add(Components.translatable("key.effortlessbuilding.max_mirror_radius").withStyle(ChatFormatting.GRAY).append(": " + AttachmentHandler.getMaxMirrorRadius(minecraft.player, true) + " blocks")); tooltip.add(Components.literal("")); tooltip.addAll(TooltipHelper.cutTextComponent(Components.translatable("key.effortlessbuilding.next_power_level_how"), ChatFormatting.GRAY, ChatFormatting.WHITE)); } @@ -485,7 +485,7 @@ public class RadialMenu extends Screen { public static void playRadialMenuSound() { final float volume = 0.1f; if (volume >= 0.0001f) { - SimpleSoundInstance sound = new SimpleSoundInstance(SoundEvents.UI_BUTTON_CLICK.get(), SoundSource.MASTER, volume, + SimpleSoundInstance sound = new SimpleSoundInstance(SoundEvents.UI_BUTTON_CLICK.value(), SoundSource.MASTER, volume, 1.0f, RandomSource.create(), Minecraft.getInstance().player.blockPosition()); Minecraft.getInstance().getSoundManager().play(sound); } diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArrayEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArrayEntry.java index 8261aec..484e3b3 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArrayEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArrayEntry.java @@ -4,12 +4,12 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.AllGuiTextures; import nl.requios.effortlessbuilding.buildmodifier.Array; import nl.requios.effortlessbuilding.buildmodifier.BaseModifier; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.create.foundation.gui.widget.ScrollInput; import nl.requios.effortlessbuilding.gui.elements.LabeledScrollInput; import nl.requios.effortlessbuilding.utilities.MathHelper; @@ -59,8 +59,8 @@ public class ArrayEntry extends BaseModifierEntry { } @Override - public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { - super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, p_230432_9_, partialTicks); + public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTicks) { + super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, hovering, partialTicks); //draw offset inputs for (int i = 0; i < 3; i++) { @@ -85,7 +85,7 @@ public class ArrayEntry extends BaseModifierEntry { super.onValueChanged(); int currentReach = Math.max(-1, getArrayReach()); - int maxReach = CapabilityHandler.getMaxBlocksPerAxis(Minecraft.getInstance().player, false); + int maxReach = AttachmentHandler.getMaxBlocksPerAxis(Minecraft.getInstance().player, false); ChatFormatting reachColor = isCurrentReachValid(currentReach, maxReach) ? ChatFormatting.GRAY : ChatFormatting.RED; var reachText = "" + reachColor + currentReach + ChatFormatting.GRAY + "/" + ChatFormatting.GRAY + maxReach; reachLabel.text = Component.literal(reachText); diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/BaseModifierEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/BaseModifierEntry.java index 1adce87..dcd94b5 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/BaseModifierEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/BaseModifierEntry.java @@ -80,7 +80,7 @@ public abstract class BaseModifierEntry extends Modifier } @Override - public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { + public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTicks) { left = x + width / 2 - BACKGROUND_WIDTH / 2; right = x + width / 2 + BACKGROUND_WIDTH / 2; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorEntry.java index 12fe5cb..b7dd1a8 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorEntry.java @@ -4,13 +4,13 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.AllGuiTextures; import nl.requios.effortlessbuilding.AllIcons; import nl.requios.effortlessbuilding.buildmodifier.BaseModifier; import nl.requios.effortlessbuilding.buildmodifier.Mirror; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.create.foundation.gui.widget.IconButton; import nl.requios.effortlessbuilding.create.foundation.gui.widget.ScrollInput; import nl.requios.effortlessbuilding.create.foundation.utility.Components; @@ -101,7 +101,7 @@ public class MirrorEntry extends BaseModifierEntry { //Radius radiusInput = new LabeledScrollInput(0, 0, 27, 18) - .withRange(0, CapabilityHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false)) + .withRange(0, AttachmentHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false)) .titled(Minecraft.getInstance().player.isCreative() ? Component.literal("Radius") : Component.literal("Radius. Use Reach Upgrade items to increase maximum.")) @@ -135,8 +135,8 @@ public class MirrorEntry extends BaseModifierEntry { } @Override - public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { - super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, p_230432_9_, partialTicks); + public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTicks) { + super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, hovering, partialTicks); //draw position inputs for (int i = 0; i < 3; i++) { diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreen.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreen.java index 4c7dc20..1d9e3cd 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreen.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreen.java @@ -3,8 +3,8 @@ package nl.requios.effortlessbuilding.gui.buildmodifier; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.ClientEvents; import nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.buildmodifier.Array; @@ -41,8 +41,8 @@ public class ModifiersScreen extends AbstractSimiScreen { int listL = this.width / 2 - listWidth / 2; int listR = this.width / 2 + listWidth / 2; - list = new ModifiersScreenList(minecraft, listWidth, height - 80, 45, height - 45, 68); - list.setLeftPos(this.width / 2 - list.getWidth() / 2); + list = new ModifiersScreenList(minecraft, listWidth, height - 80, 45, 68); + list.setX(this.width / 2 - list.getWidth() / 2); addRenderableWidget(list); diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreenList.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreenList.java index e91efae..daebae0 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreenList.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifiersScreenList.java @@ -21,32 +21,26 @@ import java.util.Objects; //Based on Create's ConfigScreenList public class ModifiersScreenList extends ObjectSelectionList implements TickableGuiEventListener { - public ModifiersScreenList(Minecraft mc, int width, int height, int y0, int y1, int itemHeight) { - super(mc, width, height, y0, y1, itemHeight); + public ModifiersScreenList(Minecraft mc, int width, int height, int y1, int itemHeight) { + super(mc, width, height, y1, itemHeight); setRenderBackground(false); - setRenderTopAndBottom(false); - setRenderSelection(false); headerHeight = 3; } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { Color c = new Color(0x60_000000); - UIRenderHelper.angledGradient(guiGraphics, 90, x0 + width / 2, y0, width, 5, c, Color.TRANSPARENT_BLACK); - UIRenderHelper.angledGradient(guiGraphics, -90, x0 + width / 2, y1, width, 5, c, Color.TRANSPARENT_BLACK); - UIRenderHelper.angledGradient(guiGraphics, 0, x0, y0 + height / 2, height, 5, c, Color.TRANSPARENT_BLACK); - UIRenderHelper.angledGradient(guiGraphics, 180, x1, y0 + height / 2, height, 5, c, Color.TRANSPARENT_BLACK); + UIRenderHelper.angledGradient(guiGraphics, 90, getX() + width / 2, getY(), width, 5, c, Color.TRANSPARENT_BLACK); + UIRenderHelper.angledGradient(guiGraphics, -90, getX() + width / 2, getY() + getHeight(), width, 5, c, Color.TRANSPARENT_BLACK); + UIRenderHelper.angledGradient(guiGraphics, 0, getX(), getY() + height / 2, height, 5, c, Color.TRANSPARENT_BLACK); + UIRenderHelper.angledGradient(guiGraphics, 180, getX() + getWidth(), getY() + height / 2, height, 5, c, Color.TRANSPARENT_BLACK); - super.render(guiGraphics, mouseX, mouseY, partialTicks); + super.renderWidget(guiGraphics, mouseX, mouseY, partialTicks); } @Override - protected void renderList(GuiGraphics guiGraphics, int p_239229_, int p_239230_, float p_239231_) { - Window window = minecraft.getWindow(); - double d0 = window.getGuiScale(); - RenderSystem.enableScissor((int) (this.x0 * d0), (int) (window.getHeight() - (this.y1 * d0)), (int) (this.width * d0), (int) (this.height * d0)); - super.renderList(guiGraphics, p_239229_, p_239230_, p_239231_); - RenderSystem.disableScissor(); + protected void renderList(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + super.renderList(guiGraphics, mouseX, mouseY, partialTick); } public void renderWindowForeground(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { @@ -62,7 +56,7 @@ public class ModifiersScreenList extends ObjectSelectionList= this.y0 && j1 <= this.y1) { + if (k1 >= this.getY() && j1 <= (this.getY() + this.getHeight())) { renderItemForeground(guiGraphics, pMouseX, pMouseY, pPartialTick, i1, i, j1, j, k); } } @@ -86,7 +80,7 @@ public class ModifiersScreenList extends ObjectSelectionList e.charTyped(pCodePoint, pModifiers))) @@ -95,10 +89,10 @@ public class ModifiersScreenList extends ObjectSelectionList e.mouseScrolled(pMouseX, pMouseY, pDelta))) + public boolean mouseScrolled(double pMouseX, double pMouseY, double scrollX, double scrollY) { + if (children().stream().anyMatch(e -> e.mouseScrolled(pMouseX, pMouseY, scrollX, scrollY))) return true; - return super.mouseScrolled(pMouseX, pMouseY, pDelta); + return super.mouseScrolled(pMouseX, pMouseY, scrollX, scrollY); } @Override @@ -108,7 +102,7 @@ public class ModifiersScreenList extends ObjectSelectionList l.mouseScrolled(x, y, delta)); + public boolean mouseScrolled(double x, double y, double scrollX, double scrollY) { + return getGuiListeners().stream().anyMatch(l -> l.mouseScrolled(x, y, scrollX, scrollY)); } @Override - public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { + public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTicks) { // UIRenderHelper.streak(guiGraphics, 0, x - 10, y + height / 2, height - 6, width, 0xdd_000000); // UIRenderHelper.streak(guiGraphics, 180, x + (int) (width * 1.35f) + 10, y + height / 2, height - 6, width / 8 * 7, 0xdd_000000); } - + public void renderForeground(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { - for (var listener : listeners) { if (listener instanceof AbstractSimiWidget simiWidget && simiWidget.isHoveredOrFocused() && simiWidget.visible) { diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorEntry.java index 2e37b32..a7b22d8 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorEntry.java @@ -4,13 +4,13 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.AllGuiTextures; import nl.requios.effortlessbuilding.AllIcons; import nl.requios.effortlessbuilding.buildmodifier.BaseModifier; import nl.requios.effortlessbuilding.buildmodifier.RadialMirror; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.create.foundation.gui.widget.IconButton; import nl.requios.effortlessbuilding.create.foundation.gui.widget.ScrollInput; import nl.requios.effortlessbuilding.create.foundation.utility.Components; @@ -107,7 +107,7 @@ public class RadialMirrorEntry extends BaseModifierEntry { //Radius radiusInput = new LabeledScrollInput(0, 0, 27, 18) - .withRange(0, CapabilityHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false)) + .withRange(0, AttachmentHandler.getMaxMirrorRadius(Minecraft.getInstance().player, false)) .titled(Minecraft.getInstance().player.isCreative() ? Component.literal("Radius") : Component.literal("Radius. Use Reach Upgrade items to increase maximum.")) @@ -141,8 +141,8 @@ public class RadialMirrorEntry extends BaseModifierEntry { } @Override - public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { - super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, p_230432_9_, partialTicks); + public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTicks) { + super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, hovering, partialTicks); //draw position inputs for (int i = 0; i < 3; i++) { diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCheckBoxFixed.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCheckBoxFixed.java index 3ed6b88..fb003a8 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCheckBoxFixed.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCheckBoxFixed.java @@ -1,13 +1,11 @@ package nl.requios.effortlessbuilding.gui.elements; -import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; -import net.minecraftforge.client.gui.ScreenUtils; +import net.minecraft.resources.ResourceLocation; import javax.annotation.ParametersAreNonnullByDefault; @@ -16,6 +14,7 @@ import javax.annotation.ParametersAreNonnullByDefault; */ @ParametersAreNonnullByDefault public class GuiCheckBoxFixed extends Button { + private final ResourceLocation DISABLED_BUTTON = new ResourceLocation("textures/gui/sprites/widget/button_disabled"); private final int boxWidth; private boolean isChecked; @@ -30,10 +29,8 @@ public class GuiCheckBoxFixed extends Button { @Override public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partial) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, WIDGETS_LOCATION); //Is deprecated but still works - ScreenUtils.blitWithBorder(guiGraphics, this.getX(), this.getY(), 0, 46, this.boxWidth, this.height, 200, 20, 2, 3, 2, 2, 0); + guiGraphics.blitWithBorder(DISABLED_BUTTON, this.getX(), this.getY(), 0, 0, this.boxWidth, this.height, 200, 20, 2, 3, 2, 2); int color = 14737632; if (packedFGColor != 0) { diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCollapsibleScrollEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCollapsibleScrollEntry.java index 7a63add..287015a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCollapsibleScrollEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCollapsibleScrollEntry.java @@ -5,8 +5,8 @@ import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.screens.Screen; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import java.util.List; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiIconButton.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiIconButton.java index 9cf44ed..ecfb927 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiIconButton.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiIconButton.java @@ -5,8 +5,8 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.components.Button; import net.minecraft.resources.ResourceLocation; import net.minecraft.network.chat.Component; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import javax.annotation.ParametersAreNonnullByDefault; import java.util.ArrayList; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiNumberField.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiNumberField.java index 986d2a6..f0d71f5 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiNumberField.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiNumberField.java @@ -9,8 +9,8 @@ import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import javax.annotation.ParametersAreNonnullByDefault; import java.text.DecimalFormat; @@ -138,7 +138,7 @@ public class GuiNumberField { } public void update() { - textField.tick(); +// textField.tick(); } public boolean charTyped(char typedChar, int keyCode) { diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiScrollPane.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiScrollPane.java index 30e5921..c9bf16b 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiScrollPane.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiScrollPane.java @@ -11,9 +11,9 @@ import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; import net.minecraft.util.Mth; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.common.MinecraftForge; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.common.NeoForge; import javax.annotation.ParametersAreNonnullByDefault; import java.util.ArrayList; @@ -38,7 +38,7 @@ public class GuiScrollPane extends SlotGui { this.font = font; this.renderSelection = false; listEntries = new ArrayList<>(); - MinecraftForge.EVENT_BUS.register(this); + NeoForge.EVENT_BUS.register(this); } public IScrollEntry getListEntry(int index) { @@ -239,11 +239,11 @@ public class GuiScrollPane extends SlotGui { } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(double mouseX, double mouseY, int pButton) { for (int i = 0; i < this.getItemCount(); ++i) { double relativeX = getRelativeMouseX(mouseX); double relativeY = getRelativeMouseY(mouseY, i); - this.getListEntry(i).mouseReleased(i, (int) mouseX, (int) mouseY, button, (int) relativeX, (int) relativeY); + this.getListEntry(i).mouseReleased(i, (int) mouseX, (int) mouseY, pButton, (int) relativeX, (int) relativeY); } this.visible = true; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/SlotGui.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/SlotGui.java index ec7b0f2..704a29d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/elements/SlotGui.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/SlotGui.java @@ -13,8 +13,8 @@ import net.minecraft.client.gui.components.events.AbstractContainerEventHandler; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.util.Mth; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import javax.annotation.ParametersAreNonnullByDefault; import java.util.Collections; @@ -114,6 +114,7 @@ public abstract class SlotGui extends AbstractContainerEventHandler implements R this.scrolling = p_updateScrollingState_5_ == 0 && p_updateScrollingState_1_ >= (double) this.getScrollbarPosition() && p_updateScrollingState_1_ < (double) (this.getScrollbarPosition() + 6); } + @Override public boolean mouseClicked(double p_mouseClicked_1_, double p_mouseClicked_3_, int p_mouseClicked_5_) { this.updateScrollingState(p_mouseClicked_1_, p_mouseClicked_3_, p_mouseClicked_5_); if (this.isVisible() && this.isMouseInList(p_mouseClicked_1_, p_mouseClicked_3_)) { @@ -136,21 +137,23 @@ public abstract class SlotGui extends AbstractContainerEventHandler implements R } } - public boolean mouseReleased(double p_mouseReleased_1_, double p_mouseReleased_3_, int p_mouseReleased_5_) { + @Override + public boolean mouseReleased(double mouseX, double mouseY, int pButton) { if (this.getFocused() != null) { - this.getFocused().mouseReleased(p_mouseReleased_1_, p_mouseReleased_3_, p_mouseReleased_5_); + this.getFocused().mouseReleased(mouseX, mouseY, pButton); } return false; } - public boolean mouseDragged(double p_mouseDragged_1_, double p_mouseDragged_3_, int p_mouseDragged_5_, double p_mouseDragged_6_, double p_mouseDragged_8_) { - if (super.mouseDragged(p_mouseDragged_1_, p_mouseDragged_3_, p_mouseDragged_5_, p_mouseDragged_6_, p_mouseDragged_8_)) { + @Override + public boolean mouseDragged(double mouseX, double pMouseY, int button, double dragX, double dragY) { + if (super.mouseDragged(mouseX, pMouseY, button, dragX, dragY)) { return true; - } else if (this.isVisible() && p_mouseDragged_5_ == 0 && this.scrolling) { - if (p_mouseDragged_3_ < (double) this.y0) { + } else if (this.isVisible() && button == 0 && this.scrolling) { + if (pMouseY < (double) this.y0) { this.yo = 0.0D; - } else if (p_mouseDragged_3_ > (double) this.y1) { + } else if (pMouseY > (double) this.y1) { this.yo = this.getMaxScroll(); } else { double d0 = this.getMaxScroll(); @@ -165,7 +168,7 @@ public abstract class SlotGui extends AbstractContainerEventHandler implements R d1 = 1.0D; } - this.yo += p_mouseDragged_8_ * d1; + this.yo += dragY * d1; this.capYPosition(); } @@ -175,15 +178,17 @@ public abstract class SlotGui extends AbstractContainerEventHandler implements R } } - public boolean mouseScrolled(double p_mouseScrolled_1_, double p_mouseScrolled_3_, double p_mouseScrolled_5_) { + @Override + public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, double scrollY) { if (!this.isVisible()) { return false; } else { - this.yo -= p_mouseScrolled_5_ * (double) this.itemHeight / 2.0D; + this.yo -= scrollX * (double) this.itemHeight / 2.0D; return true; } } + @Override public boolean keyPressed(int p_keyPressed_1_, int p_keyPressed_2_, int p_keyPressed_3_) { if (!this.isVisible()) { return false; diff --git a/src/main/java/nl/requios/effortlessbuilding/item/AbstractRandomizerBagItem.java b/src/main/java/nl/requios/effortlessbuilding/item/AbstractRandomizerBagItem.java index 59937de..f2cd884 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/AbstractRandomizerBagItem.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/AbstractRandomizerBagItem.java @@ -4,9 +4,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; @@ -23,10 +21,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.network.NetworkHooks; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.items.IItemHandler; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.systems.ServerBuildState; import nl.requios.effortlessbuilding.utilities.BlockEntry; @@ -43,160 +39,161 @@ import java.util.Random; @ParametersAreNonnullByDefault public abstract class AbstractRandomizerBagItem extends Item { - private static long currentSeed = 1337; - private static final Random rand = new Random(currentSeed); + private static long currentSeed = 1337; + private static final Random rand = new Random(currentSeed); - public AbstractRandomizerBagItem() { - super(new Item.Properties().stacksTo(1)); - } + public AbstractRandomizerBagItem() { + super(new Item.Properties().stacksTo(1)); + } - public abstract int getInventorySize(); + public abstract int getInventorySize(); - public abstract MenuProvider getContainerProvider(ItemStack item); + public abstract MenuProvider getContainerProvider(ItemStack item); - /** - * Get the inventory of a randomizer bag by checking the capability. - */ - public IItemHandler getBagInventory(ItemStack bag) { - return bag.getCapability(ForgeCapabilities.ITEM_HANDLER, null).orElse(null); - } + /** + * Get the inventory of a randomizer bag by checking the capability. + */ + @Nullable + public IItemHandler getBagInventory(ItemStack bag) { + return bag.getCapability(Capabilities.ItemHandler.ITEM, null); + } - /** - * Pick a random slot from the bag. Empty slots will never get chosen. - */ - public ItemStack pickRandomStack(IItemHandler bagInventory) { - //Find how many stacks are non-empty, and save them in a list - int nonempty = 0; - List nonEmptyStacks = new ArrayList<>(); - List originalSlots = new ArrayList<>(getInventorySize()); - for (int i = 0; i < bagInventory.getSlots(); i++) { - ItemStack stack = bagInventory.getStackInSlot(i); - if (!stack.isEmpty()) { - nonempty++; - nonEmptyStacks.add(stack); - originalSlots.add(i); - } - } + /** + * Pick a random slot from the bag. Empty slots will never get chosen. + */ + public ItemStack pickRandomStack(IItemHandler bagInventory) { + //Find how many stacks are non-empty, and save them in a list + int nonempty = 0; + List nonEmptyStacks = new ArrayList<>(); + List originalSlots = new ArrayList<>(getInventorySize()); + for (int i = 0; i < bagInventory.getSlots(); i++) { + ItemStack stack = bagInventory.getStackInSlot(i); + if (!stack.isEmpty()) { + nonempty++; + nonEmptyStacks.add(stack); + originalSlots.add(i); + } + } - if (nonEmptyStacks.size() != originalSlots.size()) - throw new Error("NonEmptyStacks and OriginalSlots not same size"); + if (nonEmptyStacks.size() != originalSlots.size()) + throw new Error("NonEmptyStacks and OriginalSlots not same size"); - if (nonempty == 0) return ItemStack.EMPTY; + if (nonempty == 0) return ItemStack.EMPTY; - //Pick random slot - int randomSlot = rand.nextInt(nonempty); - if (randomSlot < 0 || randomSlot > bagInventory.getSlots()) return ItemStack.EMPTY; + //Pick random slot + int randomSlot = rand.nextInt(nonempty); + if (randomSlot < 0 || randomSlot > bagInventory.getSlots()) return ItemStack.EMPTY; - int originalSlot = originalSlots.get(randomSlot); - if (originalSlot < 0 || originalSlot > bagInventory.getSlots()) return ItemStack.EMPTY; + int originalSlot = originalSlots.get(randomSlot); + if (originalSlot < 0 || originalSlot > bagInventory.getSlots()) return ItemStack.EMPTY; - return bagInventory.getStackInSlot(originalSlot); - } + return bagInventory.getStackInSlot(originalSlot); + } - public ItemStack findStack(IItemHandler bagInventory, Item item) { - for (int i = 0; i < bagInventory.getSlots(); i++) { - ItemStack stack = bagInventory.getStackInSlot(i); - if (!stack.isEmpty() && stack.getItem() == item) { - return stack; - } - } - return ItemStack.EMPTY; - } + public ItemStack findStack(IItemHandler bagInventory, Item item) { + for (int i = 0; i < bagInventory.getSlots(); i++) { + ItemStack stack = bagInventory.getStackInSlot(i); + if (!stack.isEmpty() && stack.getItem() == item) { + return stack; + } + } + return ItemStack.EMPTY; + } - public static void resetRandomness() { - rand.setSeed(currentSeed); - } + public static void resetRandomness() { + rand.setSeed(currentSeed); + } - public static void renewRandomness() { - currentSeed = Calendar.getInstance().getTimeInMillis(); - rand.setSeed(currentSeed); - } + public static void renewRandomness() { + currentSeed = Calendar.getInstance().getTimeInMillis(); + rand.setSeed(currentSeed); + } - @Override - public InteractionResult useOn(UseOnContext ctx) { - Player player = ctx.getPlayer(); - Level world = ctx.getLevel(); - BlockPos pos = ctx.getClickedPos(); - Direction facing = ctx.getClickedFace(); - ItemStack item = ctx.getItemInHand(); - Vec3 hitVec = ctx.getClickLocation(); + @Override + public InteractionResult useOn(UseOnContext ctx) { + Player player = ctx.getPlayer(); + Level world = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); + Direction facing = ctx.getClickedFace(); + ItemStack item = ctx.getItemInHand(); + Vec3 hitVec = ctx.getClickLocation(); - if (player == null) return InteractionResult.FAIL; + if (player == null) return InteractionResult.FAIL; - if (ctx.getPlayer() != null && ctx.getPlayer().isShiftKeyDown()) { //ctx.isPlacerSneaking() - if (world.isClientSide) return InteractionResult.SUCCESS; - //Open inventory - NetworkHooks.openScreen((ServerPlayer) player, getContainerProvider(item)); - } else { - if (world.isClientSide) return InteractionResult.SUCCESS; + if (ctx.getPlayer() != null && ctx.getPlayer().isShiftKeyDown()) { //ctx.isPlacerSneaking() + if (world.isClientSide) return InteractionResult.SUCCESS; + //Open inventory + player.openMenu(getContainerProvider(item)); + } else { + if (world.isClientSide) return InteractionResult.SUCCESS; - //---Only place manually if in normal vanilla mode--- - if (!ServerBuildState.isLikeVanilla(player)) { - return InteractionResult.FAIL; - } + //---Only place manually if in normal vanilla mode--- + if (!ServerBuildState.isLikeVanilla(player)) { + return InteractionResult.FAIL; + } - //Use item - //Get bag inventory - ItemStack bag = ctx.getItemInHand(); - IItemHandler bagInventory = getBagInventory(bag); - if (bagInventory == null) - return InteractionResult.FAIL; + //Use item + //Get bag inventory + ItemStack bag = ctx.getItemInHand(); + IItemHandler bagInventory = getBagInventory(bag); + if (bagInventory == null) + return InteractionResult.FAIL; - ItemStack toPlace = pickRandomStack(bagInventory); - if (toPlace.isEmpty()) return InteractionResult.FAIL; + ItemStack toPlace = pickRandomStack(bagInventory); + if (toPlace.isEmpty()) return InteractionResult.FAIL; - if (!world.getBlockState(pos).getBlock().canBeReplaced(world.getBlockState(pos), Fluids.EMPTY)) { - pos = pos.relative(facing); - } + if (!world.getBlockState(pos).getBlock().canBeReplaced(world.getBlockState(pos), Fluids.EMPTY)) { + pos = pos.relative(facing); + } - BlockPlaceContext blockItemUseContext = new BlockPlaceContext(new UseOnContext(player, ctx.getHand(), new BlockHitResult(hitVec, facing, pos, false))); - BlockState blockState = Block.byItem(toPlace.getItem()).getStateForPlacement(blockItemUseContext); + BlockPlaceContext blockItemUseContext = new BlockPlaceContext(new UseOnContext(player, ctx.getHand(), new BlockHitResult(hitVec, facing, pos, false))); + BlockState blockState = Block.byItem(toPlace.getItem()).getStateForPlacement(blockItemUseContext); - var blockEntry = new BlockEntry(pos, blockState, toPlace.getItem()); - var blockSet = new BlockSet(List.of(blockEntry), pos, pos, false); - EffortlessBuilding.SERVER_BLOCK_PLACER.applyBlockSet(player, blockSet); - } - return InteractionResult.SUCCESS; - } + var blockEntry = new BlockEntry(pos, blockState, toPlace.getItem()); + var blockSet = new BlockSet(List.of(blockEntry), pos, pos, false); + EffortlessBuilding.SERVER_BLOCK_PLACER.applyBlockSet(player, blockSet); + } + return InteractionResult.SUCCESS; + } - @Override - public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { - ItemStack bag = player.getItemInHand(hand); + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + ItemStack bag = player.getItemInHand(hand); - if (player.isShiftKeyDown()) { - if (world.isClientSide) return new InteractionResultHolder<>(InteractionResult.SUCCESS, bag); - //Open inventory - NetworkHooks.openScreen((ServerPlayer) player, getContainerProvider(bag)); - } else { - //Use item - //Get bag inventory - IItemHandler bagInventory = getBagInventory(bag); - if (bagInventory == null) - return new InteractionResultHolder<>(InteractionResult.FAIL, bag); + if (player.isShiftKeyDown()) { + if (world.isClientSide) return new InteractionResultHolder<>(InteractionResult.SUCCESS, bag); + //Open inventory + player.openMenu(getContainerProvider(bag)); + } else { + //Use item + //Get bag inventory + IItemHandler bagInventory = getBagInventory(bag); + if (bagInventory == null) + return new InteractionResultHolder<>(InteractionResult.FAIL, bag); - ItemStack toUse = pickRandomStack(bagInventory); - if (toUse.isEmpty()) return new InteractionResultHolder<>(InteractionResult.FAIL, bag); + ItemStack toUse = pickRandomStack(bagInventory); + if (toUse.isEmpty()) return new InteractionResultHolder<>(InteractionResult.FAIL, bag); - return toUse.use(world, player, hand); - } - return new InteractionResultHolder<>(InteractionResult.PASS, bag); - } + return toUse.use(world, player, hand); + } + return new InteractionResultHolder<>(InteractionResult.PASS, bag); + } - @Override - public int getUseDuration(ItemStack p_77626_1_) { - return 1; - } + @Override + public int getUseDuration(ItemStack p_77626_1_) { + return 1; + } - @Nullable - @Override - public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundTag nbt) { - return new ItemHandlerCapabilityProvider(getInventorySize()); - } +// @Nullable +// @Override +// public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundTag nbt) { +// return new ItemHandlerCapabilityProvider(getInventorySize()); TODO: Re-enable itemhandler cap on randomizer bag item! +// } - @Override - public void appendHoverText(ItemStack stack, @Nullable Level world, List tooltip, TooltipFlag flag) { - tooltip.add(Component.literal(ChatFormatting.YELLOW + "*Experimental* Only works in singleplayer")); - tooltip.add(Component.literal(ChatFormatting.BLUE + "Rightclick" + ChatFormatting.GRAY + " to place a random block")); - tooltip.add(Component.literal(ChatFormatting.BLUE + "Sneak + rightclick" + ChatFormatting.GRAY + " to open inventory")); - } + @Override + public void appendHoverText(ItemStack stack, @Nullable Level world, List tooltip, TooltipFlag flag) { + tooltip.add(Component.literal(ChatFormatting.YELLOW + "*Experimental* Only works in singleplayer")); + tooltip.add(Component.literal(ChatFormatting.BLUE + "Rightclick" + ChatFormatting.GRAY + " to place a random block")); + tooltip.add(Component.literal(ChatFormatting.BLUE + "Sneak + rightclick" + ChatFormatting.GRAY + " to open inventory")); + } } diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ItemHandlerCapabilityProvider.java b/src/main/java/nl/requios/effortlessbuilding/item/ItemHandlerCapabilityProvider.java index c967780..675aca1 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ItemHandlerCapabilityProvider.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ItemHandlerCapabilityProvider.java @@ -1,37 +1,37 @@ -package nl.requios.effortlessbuilding.item; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.core.Direction; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.capabilities.ICapabilitySerializable; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemStackHandler; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public class ItemHandlerCapabilityProvider implements ICapabilitySerializable { - IItemHandler itemHandler; - - public ItemHandlerCapabilityProvider(int size) { - itemHandler = new ItemStackHandler(size); - } - - @Nonnull - @Override - public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { - return ForgeCapabilities.ITEM_HANDLER.orEmpty(cap, LazyOptional.of(() -> itemHandler)); - } - - @Override - public CompoundTag serializeNBT() { - return ((ItemStackHandler) itemHandler).serializeNBT(); - } - - @Override - public void deserializeNBT(CompoundTag nbt) { - ((ItemStackHandler) itemHandler).deserializeNBT(nbt); - } -} +//package nl.requios.effortlessbuilding.item; +// +//import net.minecraft.nbt.CompoundTag; +//import net.minecraft.core.Direction; +//import net.neoforged.neoforge.common.capabilities.Capability; +//import net.neoforged.neoforge.common.capabilities.Capabilities; +//import net.neoforged.neoforge.common.util.LazyOptional; +//import net.neoforged.neoforge.items.IItemHandler; +//import net.neoforged.neoforge.items.ItemStackHandler; +//import net.neoforged.neoforge.common.capabilities.ICapabilitySerializable; +// +//import javax.annotation.Nonnull; +//import javax.annotation.Nullable; +// +//public class ItemHandlerCapabilityProvider implements ICapabilitySerializable { TODO: Reimplement the ItemHandler stuff +// IItemHandler itemHandler; +// +// public ItemHandlerCapabilityProvider(int size) { +// itemHandler = new ItemStackHandler(size); +// } +// +// @Nonnull +// @Override +// public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { +// return Capabilities.ITEM_HANDLER.orEmpty(cap, LazyOptional.of(() -> itemHandler)); +// } +// +// @Override +// public CompoundTag serializeNBT() { +// return ((ItemStackHandler) itemHandler).serializeNBT(); +// } +// +// @Override +// public void deserializeNBT(CompoundTag nbt) { +// ((ItemStackHandler) itemHandler).deserializeNBT(nbt); +// } +//} diff --git a/src/main/java/nl/requios/effortlessbuilding/item/PowerLevelItem.java b/src/main/java/nl/requios/effortlessbuilding/item/PowerLevelItem.java index adc6023..1f984ac 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/PowerLevelItem.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/PowerLevelItem.java @@ -13,8 +13,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.capability.IPowerLevel; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; +import nl.requios.effortlessbuilding.attachment.PowerLevel; import nl.requios.effortlessbuilding.create.foundation.item.TooltipHelper; import javax.annotation.Nullable; @@ -31,18 +31,19 @@ public class PowerLevelItem extends Item { @Override public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { if (powerLevel.canIncreasePowerLevel()) { if (!world.isClientSide) { powerLevel.increasePowerLevel(); + player.setData(EffortlessBuilding.POWER_LEVEL, powerLevel); EffortlessBuilding.log(player, "Upgraded power level to " + powerLevel.getPowerLevel()); stack.shrink(1); world.playSound((Player) null, player.blockPosition(), SoundEvents.PLAYER_LEVELUP, SoundSource.PLAYERS, 1f, 1f); - CapabilityHandler.syncToClient(player); + AttachmentHandler.syncToClient(player); } return InteractionResultHolder.sidedSuccess(stack, world.isClientSide()); diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade1Item.java b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade1Item.java index 10a7ad5..e8afcca 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade1Item.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade1Item.java @@ -14,8 +14,8 @@ import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.capability.IPowerLevel; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; +import nl.requios.effortlessbuilding.attachment.PowerLevel; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -32,19 +32,20 @@ public class ReachUpgrade1Item extends Item { @Override public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { int currentLevel = powerLevel.getPowerLevel(); if (currentLevel == 0) { if (!world.isClientSide) { powerLevel.increasePowerLevel(); + player.setData(EffortlessBuilding.POWER_LEVEL, powerLevel); EffortlessBuilding.log(player, "Upgraded power level to " + powerLevel.getPowerLevel()); stack.shrink(1); world.playSound((Player) null, player.blockPosition(), SoundEvents.PLAYER_LEVELUP, SoundSource.PLAYERS, 1f, 1f); - CapabilityHandler.syncToClient(player); + AttachmentHandler.syncToClient(player); } return InteractionResultHolder.sidedSuccess(stack, world.isClientSide()); } else if (currentLevel > 0) { diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade2Item.java b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade2Item.java index 98dc3d8..219852a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade2Item.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade2Item.java @@ -14,8 +14,8 @@ import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.capability.IPowerLevel; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; +import nl.requios.effortlessbuilding.attachment.PowerLevel; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -33,7 +33,7 @@ public class ReachUpgrade2Item extends Item { @Override public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { int currentLevel = powerLevel.getPowerLevel(); if (currentLevel == 1) { @@ -45,7 +45,7 @@ public class ReachUpgrade2Item extends Item { world.playSound((Player) null, player.blockPosition(), SoundEvents.PLAYER_LEVELUP, SoundSource.PLAYERS, 1f, 1f); - CapabilityHandler.syncToClient(player); + AttachmentHandler.syncToClient(player); } return InteractionResultHolder.sidedSuccess(stack, world.isClientSide()); } else if (currentLevel < 1) { diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade3Item.java b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade3Item.java index 6bdee0c..f43a076 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade3Item.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade3Item.java @@ -14,8 +14,8 @@ import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.capability.IPowerLevel; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; +import nl.requios.effortlessbuilding.attachment.PowerLevel; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -32,19 +32,20 @@ public class ReachUpgrade3Item extends Item { @Override public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - IPowerLevel powerLevel = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); + PowerLevel powerLevel = player.getData(EffortlessBuilding.POWER_LEVEL); if (powerLevel != null) { int currentLevel = powerLevel.getPowerLevel(); if (currentLevel == 2) { if (!world.isClientSide) { powerLevel.increasePowerLevel(); + player.setData(EffortlessBuilding.POWER_LEVEL, powerLevel); EffortlessBuilding.log(player, "Upgraded power level to " + powerLevel.getPowerLevel()); stack.shrink(1); world.playSound((Player) null, player.blockPosition(), SoundEvents.PLAYER_LEVELUP, SoundSource.PLAYERS, 1f, 1f); - CapabilityHandler.syncToClient(player); + AttachmentHandler.syncToClient(player); } return InteractionResultHolder.sidedSuccess(stack, world.isClientSide()); } else if (currentLevel < 2) { diff --git a/src/main/java/nl/requios/effortlessbuilding/item/SingleItemLootModifier.java b/src/main/java/nl/requios/effortlessbuilding/item/SingleItemLootModifier.java index 684998d..ee20b6d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/SingleItemLootModifier.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/SingleItemLootModifier.java @@ -1,19 +1,18 @@ package nl.requios.effortlessbuilding.item; +import com.google.common.base.Suppliers; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; -import net.minecraftforge.common.loot.IGlobalLootModifier; -import net.minecraftforge.common.loot.LootModifier; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; -import nl.requios.effortlessbuilding.EffortlessBuilding; +import net.neoforged.neoforge.common.loot.IGlobalLootModifier; +import net.neoforged.neoforge.common.loot.LootModifier; import org.jetbrains.annotations.NotNull; +import java.util.function.Supplier; + //Adds a single item with a chance to any loot tables. Specify loot tables in the JSON file. //Add JSON files to resources/data/effortlessbuilding/loot_modifiers, and list them in resources/data/forge/loot_modifiers/global_loot_modifiers.json //https://forge.gemwire.uk/wiki/Dynamic_Loot_Modification @@ -21,21 +20,21 @@ import org.jetbrains.annotations.NotNull; //https://mcreator.net/wiki/minecraft-vanilla-loot-tables-list#toc-index-1 public class SingleItemLootModifier extends LootModifier { - public static final RegistryObject> CODEC = EffortlessBuilding.LOOT_MODIFIERS.register("single_item_loot_modifier", () -> - RecordCodecBuilder.create(inst -> codecStart(inst).and( - inst.group( + public static final Supplier> CODEC = Suppliers.memoize(() -> + RecordCodecBuilder.create(instance -> codecStart(instance).and( + instance.group( Codec.FLOAT.fieldOf("chance").forGetter(m -> m.chance), - ForgeRegistries.ITEMS.getCodec().fieldOf("item").forGetter(m -> m.item) - )).apply(inst, SingleItemLootModifier::new) + ItemStack.SINGLE_ITEM_CODEC.fieldOf("item").forGetter(m -> m.stack) + )).apply(instance, SingleItemLootModifier::new) )); private final float chance; - private final Item item; + private final ItemStack stack; - public SingleItemLootModifier(LootItemCondition[] conditionsIn, float chance, Item item) { + public SingleItemLootModifier(LootItemCondition[] conditionsIn, float chance, ItemStack stack) { super(conditionsIn); this.chance = chance; - this.item = item; + this.stack = stack; } @NotNull @@ -47,7 +46,7 @@ public class SingleItemLootModifier extends LootModifier { // //with chance, add an item if (context.getRandom().nextFloat() < chance) { - generatedLoot.add(new ItemStack(item, 1)); + generatedLoot.add(stack.copy()); } return generatedLoot; } diff --git a/src/main/java/nl/requios/effortlessbuilding/network/IsQuickReplacingPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/IsQuickReplacingPacket.java deleted file mode 100644 index fcd65f1..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/IsQuickReplacingPacket.java +++ /dev/null @@ -1,35 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.systems.ServerBuildState; - -import java.util.function.Supplier; - -public class IsQuickReplacingPacket { - private boolean isQuickReplacing; - - public IsQuickReplacingPacket() { - } - - public IsQuickReplacingPacket(boolean isQuickReplacing) { - this.isQuickReplacing = isQuickReplacing; - } - - public static void encode(IsQuickReplacingPacket message, FriendlyByteBuf buf) { - buf.writeBoolean(message.isQuickReplacing); - } - - public static IsQuickReplacingPacket decode(FriendlyByteBuf buf) { - return new IsQuickReplacingPacket(buf.readBoolean()); - } - - public static class Handler { - public static void handle(IsQuickReplacingPacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerBuildState.setIsQuickReplacing(ctx.get().getSender(), message.isQuickReplacing); - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/IsUsingBuildModePacket.java b/src/main/java/nl/requios/effortlessbuilding/network/IsUsingBuildModePacket.java deleted file mode 100644 index 8ff30aa..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/IsUsingBuildModePacket.java +++ /dev/null @@ -1,36 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -import nl.requios.effortlessbuilding.systems.ServerBuildState; - -public class IsUsingBuildModePacket { - private boolean isUsingBuildMode; - - public IsUsingBuildModePacket() { - } - - public IsUsingBuildModePacket(boolean isUsingBuildMode) { - this.isUsingBuildMode = isUsingBuildMode; - } - - public static void encode(IsUsingBuildModePacket message, FriendlyByteBuf buf) { - buf.writeBoolean(message.isUsingBuildMode); - } - - public static IsUsingBuildModePacket decode(FriendlyByteBuf buf) { - return new IsUsingBuildModePacket(buf.readBoolean()); - } - - public static class Handler { - public static void handle(IsUsingBuildModePacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - ServerBuildState.setIsUsingBuildMode(ctx.get().getSender(), message.isUsingBuildMode); - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/ModifierSettingsPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/ModifierSettingsPacket.java deleted file mode 100644 index 4548ca7..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/ModifierSettingsPacket.java +++ /dev/null @@ -1,57 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.EffortlessBuildingClient; - -import java.util.function.Supplier; - -/** - * Sync build modifiers between server and client, for saving and loading. - */ -public class ModifierSettingsPacket { - - private static final String DATA_KEY = EffortlessBuilding.MODID + ":buildModifiers"; - private CompoundTag modifiersTag; - - public ModifierSettingsPacket() { - } - - public ModifierSettingsPacket(CompoundTag modifiersTag) { - this.modifiersTag = modifiersTag; - } - - //Only on server - public ModifierSettingsPacket(Player player) { - this.modifiersTag = player.getPersistentData().getCompound(DATA_KEY); - } - - public static void encode(ModifierSettingsPacket message, FriendlyByteBuf buf) { - buf.writeNbt(message.modifiersTag); - } - - public static ModifierSettingsPacket decode(FriendlyByteBuf buf) { - return new ModifierSettingsPacket(buf.readNbt()); - } - - public static class Handler { - public static void handle(ModifierSettingsPacket message, Supplier ctx) { - if (ctx.get().getDirection().getReceptionSide().isServer()) { - ctx.get().enqueueWork(() -> { - var player = ctx.get().getSender(); - //To server, save to persistent player data - player.getPersistentData().put(DATA_KEY, message.modifiersTag); - }); - } else { - ctx.get().enqueueWork(() -> { - //To client, load into system - EffortlessBuildingClient.BUILD_MODIFIERS.deserializeNBT(message.modifiersTag); - }); - } - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/PacketHandler.java b/src/main/java/nl/requios/effortlessbuilding/network/PacketHandler.java index 691efc1..389dc61 100644 --- a/src/main/java/nl/requios/effortlessbuilding/network/PacketHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/network/PacketHandler.java @@ -1,41 +1,43 @@ package nl.requios.effortlessbuilding.network; -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.network.NetworkDirection; -import net.minecraftforge.network.NetworkRegistry; -import net.minecraftforge.network.simple.SimpleChannel; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent; +import net.neoforged.neoforge.network.registration.IPayloadRegistrar; import nl.requios.effortlessbuilding.EffortlessBuilding; - -import java.util.Optional; +import nl.requios.effortlessbuilding.network.message.IsQuickReplacingPacket; +import nl.requios.effortlessbuilding.network.message.IsUsingBuildModePacket; +import nl.requios.effortlessbuilding.network.message.ModifierSettingsPacket; +import nl.requios.effortlessbuilding.network.message.PerformRedoPacket; +import nl.requios.effortlessbuilding.network.message.PerformUndoPacket; +import nl.requios.effortlessbuilding.network.message.PowerLevelPacket; +import nl.requios.effortlessbuilding.network.message.ServerBreakBlocksPacket; +import nl.requios.effortlessbuilding.network.message.ServerPlaceBlocksPacket; +import nl.requios.effortlessbuilding.network.message.TranslatedLogPacket; public class PacketHandler { - private static final String PROTOCOL_VERSION = "1"; - public static final SimpleChannel INSTANCE = NetworkRegistry.newSimpleChannel( - new ResourceLocation(EffortlessBuilding.MODID, "main"), - () -> PROTOCOL_VERSION, - PROTOCOL_VERSION::equals, - PROTOCOL_VERSION::equals - ); - private static int id = 0; + public static void setupPackets(final RegisterPayloadHandlerEvent event) { + final IPayloadRegistrar registrar = event.registrar(EffortlessBuilding.MODID); - public static void register() { - INSTANCE.registerMessage(id++, IsUsingBuildModePacket.class, IsUsingBuildModePacket::encode, IsUsingBuildModePacket::decode, - IsUsingBuildModePacket.Handler::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - INSTANCE.registerMessage(id++, IsQuickReplacingPacket.class, IsQuickReplacingPacket::encode, IsQuickReplacingPacket::decode, - IsQuickReplacingPacket.Handler::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - INSTANCE.registerMessage(id++, ServerPlaceBlocksPacket.class, ServerPlaceBlocksPacket::encode, ServerPlaceBlocksPacket::decode, - ServerPlaceBlocksPacket.Handler::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - INSTANCE.registerMessage(id++, ServerBreakBlocksPacket.class, ServerBreakBlocksPacket::encode, ServerBreakBlocksPacket::decode, - ServerBreakBlocksPacket.Handler::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - INSTANCE.registerMessage(id++, PerformUndoPacket.class, PerformUndoPacket::encode, PerformUndoPacket::decode, - PerformUndoPacket.Handler::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - INSTANCE.registerMessage(id++, PerformRedoPacket.class, PerformRedoPacket::encode, PerformRedoPacket::decode, - PerformRedoPacket.Handler::handle, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - INSTANCE.registerMessage(id++, ModifierSettingsPacket.class, ModifierSettingsPacket::encode, ModifierSettingsPacket::decode, - ModifierSettingsPacket.Handler::handle); - INSTANCE.registerMessage(id++, PowerLevelPacket.class, PowerLevelPacket::encode, PowerLevelPacket::decode, - PowerLevelPacket.Handler::handle); + registrar.play(IsUsingBuildModePacket.ID, IsUsingBuildModePacket::new, handler -> handler + .server(IsUsingBuildModePacket.Handler::handle)); + registrar.play(IsQuickReplacingPacket.ID, IsQuickReplacingPacket::new, handler -> handler + .server(IsQuickReplacingPacket.Handler::handle)); + registrar.play(ServerPlaceBlocksPacket.ID, ServerPlaceBlocksPacket::new, handler -> handler + .server(ServerPlaceBlocksPacket.Handler::handle)); + registrar.play(ServerBreakBlocksPacket.ID, ServerBreakBlocksPacket::new, handler -> handler + .server(ServerBreakBlocksPacket.Handler::handle)); + registrar.play(PerformUndoPacket.ID, PerformUndoPacket::new, handler -> handler + .server(PerformUndoPacket.Handler::handle)); + registrar.play(PerformRedoPacket.ID, PerformRedoPacket::new, handler -> handler + .server(PerformRedoPacket.Handler::handle)); + + registrar.play(ModifierSettingsPacket.ID, ModifierSettingsPacket::new, handler -> handler + .server(ModifierSettingsPacket.ServerHandler::handleServer) + .server(ModifierSettingsPacket.ClientHandler::handleClient)); + + registrar.play(PowerLevelPacket.ID, PowerLevelPacket::new, handler -> handler + .client(PowerLevelPacket.Handler::handle)); + registrar.play(TranslatedLogPacket.ID, TranslatedLogPacket::new, handler -> handler + .client(TranslatedLogPacket.Handler::handle)); } - } diff --git a/src/main/java/nl/requios/effortlessbuilding/network/PerformRedoPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/PerformRedoPacket.java deleted file mode 100644 index f7f64bb..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/PerformRedoPacket.java +++ /dev/null @@ -1,27 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.EffortlessBuilding; - -import java.util.function.Supplier; - -public class PerformRedoPacket { - - public PerformRedoPacket() {} - - public static void encode(PerformRedoPacket message, FriendlyByteBuf buf) {} - - public static PerformRedoPacket decode(FriendlyByteBuf buf) { - return new PerformRedoPacket(); - } - - public static class Handler { - public static void handle(PerformRedoPacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - EffortlessBuilding.UNDO_REDO.redo(ctx.get().getSender()); - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/PerformUndoPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/PerformUndoPacket.java deleted file mode 100644 index cec6892..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/PerformUndoPacket.java +++ /dev/null @@ -1,27 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.EffortlessBuilding; - -import java.util.function.Supplier; - -public class PerformUndoPacket { - - public PerformUndoPacket() {} - - public static void encode(PerformUndoPacket message, FriendlyByteBuf buf) {} - - public static PerformUndoPacket decode(FriendlyByteBuf buf) { - return new PerformUndoPacket(); - } - - public static class Handler { - public static void handle(PerformUndoPacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - EffortlessBuilding.UNDO_REDO.undo(ctx.get().getSender()); - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/PowerLevelPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/PowerLevelPacket.java deleted file mode 100644 index e737c83..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/PowerLevelPacket.java +++ /dev/null @@ -1,50 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.client.Minecraft; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; - -import java.util.function.Supplier; - -/** - * Sync power level from server to client - */ -public class PowerLevelPacket { - - private int powerLevel; - - public PowerLevelPacket() { - } - - public PowerLevelPacket(int powerLevel) { - this.powerLevel = powerLevel; - } - - public static void encode(PowerLevelPacket message, FriendlyByteBuf buf) { - buf.writeInt(message.powerLevel); - } - - public static PowerLevelPacket decode(FriendlyByteBuf buf) { - return new PowerLevelPacket(buf.readInt()); - } - - public static class Handler { - public static void handle(PowerLevelPacket message, Supplier ctx) { - NetworkEvent.Context context = ctx.get(); - context.enqueueWork(() -> { - if (context.getDirection().getReceptionSide().isClient()) { - Player player = Minecraft.getInstance().player; - if (player != null) { - player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY, null) - .ifPresent(levelCap -> { - levelCap.setPowerLevel(message.powerLevel); - }); - } - } - }); - context.setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/ServerBreakBlocksPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/ServerBreakBlocksPacket.java deleted file mode 100644 index 148d86b..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/ServerBreakBlocksPacket.java +++ /dev/null @@ -1,44 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.utilities.BlockSet; - -import java.util.function.Supplier; - -/** - * Sends a message to the server to break multiple blocks - */ -public class ServerBreakBlocksPacket { - - private BlockSet blocks; - - public ServerBreakBlocksPacket() {} - - public ServerBreakBlocksPacket(BlockSet blocks) { - this.blocks = blocks; - } - - public static void encode(ServerBreakBlocksPacket message, FriendlyByteBuf buf) { - BlockSet.encode(buf, message.blocks); - } - - public static ServerBreakBlocksPacket decode(FriendlyByteBuf buf) { - ServerBreakBlocksPacket message = new ServerBreakBlocksPacket(); - message.blocks = BlockSet.decode(buf); - return message; - } - - public static class Handler { - public static void handle(ServerBreakBlocksPacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - Player player = EffortlessBuilding.proxy.getPlayerEntityFromContext(ctx); - - EffortlessBuilding.SERVER_BLOCK_PLACER.breakBlocks(player, message.blocks); - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/ServerPlaceBlocksPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/ServerPlaceBlocksPacket.java deleted file mode 100644 index 8b15afd..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/ServerPlaceBlocksPacket.java +++ /dev/null @@ -1,48 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.utilities.BlockSet; - -import java.util.function.Supplier; - -/** - * Sends a message to the server to place multiple blocks - */ -public class ServerPlaceBlocksPacket { - - private BlockSet blocks; - private long placeTime; - - public ServerPlaceBlocksPacket() {} - - public ServerPlaceBlocksPacket(BlockSet blocks, long placeTime) { - this.blocks = blocks; - this.placeTime = placeTime; - } - - public static void encode(ServerPlaceBlocksPacket message, FriendlyByteBuf buf) { - BlockSet.encode(buf, message.blocks); - buf.writeLong(message.placeTime); - } - - public static ServerPlaceBlocksPacket decode(FriendlyByteBuf buf) { - ServerPlaceBlocksPacket message = new ServerPlaceBlocksPacket(); - message.blocks = BlockSet.decode(buf); - message.placeTime = buf.readLong(); - return message; - } - - public static class Handler { - public static void handle(ServerPlaceBlocksPacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - Player player = EffortlessBuilding.proxy.getPlayerEntityFromContext(ctx); - - EffortlessBuilding.SERVER_BLOCK_PLACER.placeBlocksDelayed(player, message.blocks, message.placeTime); - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/TranslatedLogPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/TranslatedLogPacket.java deleted file mode 100644 index e22dcc5..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/network/TranslatedLogPacket.java +++ /dev/null @@ -1,74 +0,0 @@ -package nl.requios.effortlessbuilding.network; - -import net.minecraft.world.entity.player.Player; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.network.NetworkEvent; -import nl.requios.effortlessbuilding.EffortlessBuilding; - -import java.util.function.Supplier; - -/** - * Send packet to client to translate and log the containing message - */ -public class TranslatedLogPacket { - private final String prefix; - private final String translationKey; - private final String suffix; - private final boolean actionBar; - - public TranslatedLogPacket() { - prefix = ""; - translationKey = ""; - suffix = ""; - actionBar = false; - } - - public TranslatedLogPacket(String prefix, String translationKey, String suffix, boolean actionBar) { - this.prefix = prefix; - this.translationKey = translationKey; - this.suffix = suffix; - this.actionBar = actionBar; - } - - public static void encode(TranslatedLogPacket message, FriendlyByteBuf buf) { - buf.writeUtf(message.prefix); - buf.writeUtf(message.translationKey); - buf.writeUtf(message.suffix); - buf.writeBoolean(message.actionBar); - } - - public static TranslatedLogPacket decode(FriendlyByteBuf buf) { - return new TranslatedLogPacket(buf.readUtf(), buf.readUtf(), buf.readUtf(), buf.readBoolean()); - } - - public String getPrefix() { - return prefix; - } - - public String getTranslationKey() { - return translationKey; - } - - public String getSuffix() { - return suffix; - } - - public boolean isActionBar() { - return actionBar; - } - - public static class Handler { - public static void handle(TranslatedLogPacket message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - if (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT) { - //Received clientside - - Player player = EffortlessBuilding.proxy.getPlayerEntityFromContext(ctx); - EffortlessBuilding.logTranslate(player, message.prefix, message.translationKey, message.suffix, message.actionBar); - } - }); - ctx.get().setPacketHandled(true); - } - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/IsQuickReplacingPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/IsQuickReplacingPacket.java new file mode 100644 index 0000000..9d10324 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/IsQuickReplacingPacket.java @@ -0,0 +1,42 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.systems.ServerBuildState; + +public record IsQuickReplacingPacket(boolean isQuickReplacing) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "is_quick_replacing"); + + public IsQuickReplacingPacket(FriendlyByteBuf buf) { + this(buf.readBoolean()); + } + + public void write(FriendlyByteBuf buf) { + buf.writeBoolean(isQuickReplacing); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final IsQuickReplacingPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + ServerBuildState.setIsQuickReplacing(player, packet.isQuickReplacing()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.is_quick_replacing.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/IsUsingBuildModePacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/IsUsingBuildModePacket.java new file mode 100644 index 0000000..21602e3 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/IsUsingBuildModePacket.java @@ -0,0 +1,42 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.systems.ServerBuildState; + +public record IsUsingBuildModePacket(boolean isUsingBuildMode) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "is_using_build_mode"); + + public IsUsingBuildModePacket(FriendlyByteBuf buf) { + this(buf.readBoolean()); + } + + public void write(FriendlyByteBuf buf) { + buf.writeBoolean(isUsingBuildMode); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final IsUsingBuildModePacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + ServerBuildState.setIsUsingBuildMode(player, packet.isUsingBuildMode()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.is_using_build_mode.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/ModifierSettingsPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/ModifierSettingsPacket.java new file mode 100644 index 0000000..7e68cc8 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/ModifierSettingsPacket.java @@ -0,0 +1,69 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.EffortlessBuildingClient; + +/** + * Sync build modifiers between server and client, for saving and loading. + */ +public record ModifierSettingsPacket(CompoundTag modifiersTag) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "modifier_settings"); + + private static final String DATA_KEY = EffortlessBuilding.MODID + ":buildModifiers"; + + public ModifierSettingsPacket(FriendlyByteBuf buf) { + this(buf.readNbt()); + } + + public ModifierSettingsPacket(Player player) { + this(player.getPersistentData().getCompound(DATA_KEY)); + } + + public void write(FriendlyByteBuf buf) { + buf.writeNbt(modifiersTag); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class ServerHandler { + public static void handleServer(final ModifierSettingsPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + //To server, save to persistent player data + player.getPersistentData().put(DATA_KEY, packet.modifiersTag()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.modifier_settings.failed", e.getMessage())); + return null; + }); + } + } + + public static class ClientHandler { + public static void handleClient(final ModifierSettingsPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + //To client, load into system + EffortlessBuildingClient.BUILD_MODIFIERS.deserializeNBT(packet.modifiersTag()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.modifier_settings.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/PerformRedoPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/PerformRedoPacket.java new file mode 100644 index 0000000..730fd0a --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/PerformRedoPacket.java @@ -0,0 +1,40 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; + +public record PerformRedoPacket() implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "perform_redo"); + + public PerformRedoPacket(FriendlyByteBuf buf) { + this(); + } + + public void write(FriendlyByteBuf buf) { + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final PerformRedoPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + EffortlessBuilding.UNDO_REDO.redo(player); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.perform_undo.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/PerformUndoPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/PerformUndoPacket.java new file mode 100644 index 0000000..ab5d0f1 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/PerformUndoPacket.java @@ -0,0 +1,39 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; + +public record PerformUndoPacket() implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "perform_undo"); + + public PerformUndoPacket(FriendlyByteBuf buf) { + this(); + } + + public void write(FriendlyByteBuf buf) {} + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final PerformUndoPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + EffortlessBuilding.UNDO_REDO.undo(player); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.perform_undo.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/PowerLevelPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/PowerLevelPacket.java new file mode 100644 index 0000000..efe51e1 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/PowerLevelPacket.java @@ -0,0 +1,47 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.attachment.PowerLevel; + +/** + * Sync power level from server to client + */ +public record PowerLevelPacket(int powerLevel) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "power_level"); + + public PowerLevelPacket(FriendlyByteBuf buf) { + this(buf.readInt()); + } + + public void write(FriendlyByteBuf buf) { + buf.writeInt(powerLevel); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final PowerLevelPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + PowerLevel currentLevel = player.getData(EffortlessBuilding.POWER_LEVEL.get()); + currentLevel.setPowerLevel(packet.powerLevel); + player.setData(EffortlessBuilding.POWER_LEVEL.get(), currentLevel); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.power_level.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/ServerBreakBlocksPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/ServerBreakBlocksPacket.java new file mode 100644 index 0000000..23a03ce --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/ServerBreakBlocksPacket.java @@ -0,0 +1,45 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.utilities.BlockSet; + +/** + * Sends a message to the server to break multiple blocks + */ +public record ServerBreakBlocksPacket(BlockSet blocks) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "server_break_blocks"); + + public ServerBreakBlocksPacket(FriendlyByteBuf buf) { + this(BlockSet.decode(buf)); + } + + public void write(FriendlyByteBuf buf) { + BlockSet.encode(buf, blocks); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final ServerBreakBlocksPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + EffortlessBuilding.SERVER_BLOCK_PLACER.breakBlocks(player, packet.blocks()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.server_break_blocks.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/ServerPlaceBlocksPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/ServerPlaceBlocksPacket.java new file mode 100644 index 0000000..63c01bb --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/ServerPlaceBlocksPacket.java @@ -0,0 +1,47 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.utilities.BlockSet; + +/** + * Sends a message to the server to place multiple blocks + */ +public record ServerPlaceBlocksPacket(BlockSet blocks, long placeTime) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "server_place_blocks"); + + public ServerPlaceBlocksPacket(FriendlyByteBuf buf) { + this(BlockSet.decode(buf), buf.readLong()); + } + + public void write(FriendlyByteBuf buf) { + BlockSet.encode(buf, blocks); + buf.writeLong(placeTime); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public static class Handler { + public static void handle(final ServerPlaceBlocksPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + EffortlessBuilding.logger.info("Place block packet received from client. Placing blocks..."); + EffortlessBuilding.SERVER_BLOCK_PLACER.placeBlocksDelayed(player, packet.blocks(), packet.placeTime()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.server_place_blocks.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/network/message/TranslatedLogPacket.java b/src/main/java/nl/requios/effortlessbuilding/network/message/TranslatedLogPacket.java new file mode 100644 index 0000000..fee5e0e --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/network/message/TranslatedLogPacket.java @@ -0,0 +1,70 @@ +package nl.requios.effortlessbuilding.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; +import nl.requios.effortlessbuilding.EffortlessBuilding; + +/** + * Send packet to client to translate and log the containing message + */ +public record TranslatedLogPacket(String prefix, String translationKey, String suffix, boolean actionBar) implements CustomPacketPayload { + public static final ResourceLocation ID = new ResourceLocation(EffortlessBuilding.MODID, "translated_log"); + + public TranslatedLogPacket(FriendlyByteBuf buf) { + this(buf.readUtf(), buf.readUtf(), buf.readUtf(), buf.readBoolean()); + } + + public TranslatedLogPacket(String prefix, String translationKey, String suffix, boolean actionBar) { + this.prefix = prefix; + this.translationKey = translationKey; + this.suffix = suffix; + this.actionBar = actionBar; + } + + public void write(FriendlyByteBuf buf) { + buf.writeUtf(prefix); + buf.writeUtf(translationKey); + buf.writeUtf(suffix); + buf.writeBoolean(actionBar); + } + + @Override + public ResourceLocation id() { + return ID; + } + + public String getPrefix() { + return prefix; + } + + public String getTranslationKey() { + return translationKey; + } + + public String getSuffix() { + return suffix; + } + + public boolean isActionBar() { + return actionBar; + } + + public static class Handler { + public static void handle(final TranslatedLogPacket packet, final PlayPayloadContext context) { + context.workHandler().submitAsync(() -> { + if (context.player().isPresent()) { + Player player = context.player().get(); + EffortlessBuilding.logTranslate(player, packet.prefix(), packet.translationKey(), packet.suffix(), packet.actionBar()); + } + }).exceptionally(e -> { + // Handle exception + context.packetHandler().disconnect(Component.translatable("effortlessbuilding.networking.translated_log.failed", e.getMessage())); + return null; + }); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java index 4047301..c1c3a06 100644 --- a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java +++ b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java @@ -3,21 +3,13 @@ package nl.requios.effortlessbuilding.proxy; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.language.I18n; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.network.NetworkEvent; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.EffortlessBuilding; -import java.util.function.Supplier; - @OnlyIn(Dist.CLIENT) public class ClientProxy implements IProxy { - public Player getPlayerEntityFromContext(Supplier ctx) { - return (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT ? Minecraft.getInstance().player : ctx.get().getSender()); - } - public void logTranslate(Player player, String prefix, String translationKey, String suffix, boolean actionBar) { EffortlessBuilding.log(Minecraft.getInstance().player, prefix + I18n.get(translationKey) + suffix, actionBar); } diff --git a/src/main/java/nl/requios/effortlessbuilding/proxy/IProxy.java b/src/main/java/nl/requios/effortlessbuilding/proxy/IProxy.java index 189e1ff..a2e8650 100644 --- a/src/main/java/nl/requios/effortlessbuilding/proxy/IProxy.java +++ b/src/main/java/nl/requios/effortlessbuilding/proxy/IProxy.java @@ -1,12 +1,7 @@ package nl.requios.effortlessbuilding.proxy; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; public interface IProxy { - Player getPlayerEntityFromContext(Supplier ctx); - void logTranslate(Player player, String prefix, String translationKey, String suffix, boolean actionBar); } diff --git a/src/main/java/nl/requios/effortlessbuilding/proxy/ServerProxy.java b/src/main/java/nl/requios/effortlessbuilding/proxy/ServerProxy.java index be21683..6948c41 100644 --- a/src/main/java/nl/requios/effortlessbuilding/proxy/ServerProxy.java +++ b/src/main/java/nl/requios/effortlessbuilding/proxy/ServerProxy.java @@ -2,21 +2,12 @@ package nl.requios.effortlessbuilding.proxy; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; -import net.minecraftforge.network.PacketDistributor; -import nl.requios.effortlessbuilding.network.PacketHandler; -import nl.requios.effortlessbuilding.network.TranslatedLogPacket; - -import java.util.function.Supplier; +import nl.requios.effortlessbuilding.network.message.TranslatedLogPacket; public class ServerProxy implements IProxy { //Only physical server! Singleplayer server is seen as clientproxy - public Player getPlayerEntityFromContext(Supplier ctx) { - return ctx.get().getSender(); - } - public void logTranslate(Player player, String prefix, String translationKey, String suffix, boolean actionBar) { - PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new TranslatedLogPacket(prefix, translationKey, suffix, actionBar)); + ((ServerPlayer)player).connection.send(new TranslatedLogPacket(prefix, translationKey, suffix, actionBar)); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviews.java b/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviews.java index d285500..b094649 100644 --- a/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviews.java +++ b/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviews.java @@ -6,8 +6,8 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.Mth; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.*; import nl.requios.effortlessbuilding.buildmode.BuildModeEnum; import nl.requios.effortlessbuilding.create.AllSpecialTextures; diff --git a/src/main/java/nl/requios/effortlessbuilding/render/ModifierRenderer.java b/src/main/java/nl/requios/effortlessbuilding/render/ModifierRenderer.java index aba1a09..7a7f9e2 100644 --- a/src/main/java/nl/requios/effortlessbuilding/render/ModifierRenderer.java +++ b/src/main/java/nl/requios/effortlessbuilding/render/ModifierRenderer.java @@ -4,8 +4,8 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.renderer.MultiBufferSource.BufferSource; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.buildmodifier.BaseModifier; import nl.requios.effortlessbuilding.buildmodifier.Mirror; diff --git a/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java b/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java index f9944b1..36ddd6a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java @@ -13,18 +13,18 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RenderGuiEvent; -import net.minecraftforge.client.event.RenderLevelStageEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.neoforge.client.event.RenderGuiEvent; +import net.neoforged.neoforge.client.event.RenderLevelStageEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.Mod; import nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.systems.BuilderChain; /*** * Main render class for Effortless Building */ -@EventBusSubscriber(Dist.CLIENT) +@Mod.EventBusSubscriber(Dist.CLIENT) public class RenderHandler { @SubscribeEvent @@ -48,7 +48,7 @@ public class RenderHandler { } @SubscribeEvent - public static void onRenderGuiEvent(RenderGuiEvent event) { + public static void onRenderGuiEvent(RenderGuiEvent.Post event) { renderSubText(event.getGuiGraphics()); drawStacks(event.getGuiGraphics()); diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/BuildSettings.java b/src/main/java/nl/requios/effortlessbuilding/systems/BuildSettings.java index f6bec8f..ebbb462 100644 --- a/src/main/java/nl/requios/effortlessbuilding/systems/BuildSettings.java +++ b/src/main/java/nl/requios/effortlessbuilding/systems/BuildSettings.java @@ -1,12 +1,12 @@ package nl.requios.effortlessbuilding.systems; import net.minecraft.client.Minecraft; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.network.PacketDistributor; import nl.requios.effortlessbuilding.buildmode.ModeOptions; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.network.IsQuickReplacingPacket; -import nl.requios.effortlessbuilding.network.PacketHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; +import nl.requios.effortlessbuilding.network.message.IsQuickReplacingPacket; @OnlyIn(Dist.CLIENT) public class BuildSettings { @@ -26,7 +26,7 @@ public class BuildSettings { public void setReplaceMode(ReplaceMode replaceMode) { this.replaceMode = replaceMode; - PacketHandler.INSTANCE.sendToServer(new IsQuickReplacingPacket(isQuickReplacing())); + PacketDistributor.SERVER.noArg().send(new IsQuickReplacingPacket(isQuickReplacing())); } public ReplaceMode getReplaceMode() { @@ -68,6 +68,6 @@ public class BuildSettings { } private boolean canReplaceBlocks(){ - return Minecraft.getInstance().player != null && CapabilityHandler.canReplaceBlocks(Minecraft.getInstance().player); + return Minecraft.getInstance().player != null && AttachmentHandler.canReplaceBlocks(Minecraft.getInstance().player); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/BuilderChain.java b/src/main/java/nl/requios/effortlessbuilding/systems/BuilderChain.java index ed253ee..7fef9ba 100644 --- a/src/main/java/nl/requios/effortlessbuilding/systems/BuilderChain.java +++ b/src/main/java/nl/requios/effortlessbuilding/systems/BuilderChain.java @@ -15,19 +15,22 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.network.PacketDistributor; import nl.requios.effortlessbuilding.ClientConfig; import nl.requios.effortlessbuilding.ClientEvents; import nl.requios.effortlessbuilding.EffortlessBuildingClient; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import nl.requios.effortlessbuilding.buildmode.BuildModeEnum; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem; -import nl.requios.effortlessbuilding.network.PacketHandler; -import nl.requios.effortlessbuilding.network.ServerBreakBlocksPacket; -import nl.requios.effortlessbuilding.network.ServerPlaceBlocksPacket; -import nl.requios.effortlessbuilding.utilities.*; +import nl.requios.effortlessbuilding.network.message.ServerBreakBlocksPacket; +import nl.requios.effortlessbuilding.network.message.ServerPlaceBlocksPacket; +import nl.requios.effortlessbuilding.utilities.BlockEntry; +import nl.requios.effortlessbuilding.utilities.BlockSet; +import nl.requios.effortlessbuilding.utilities.ClientBlockUtilities; +import nl.requios.effortlessbuilding.utilities.SurvivalHelper; import java.util.HashSet; @@ -91,7 +94,7 @@ public class BuilderChain { blocks.skipFirst = buildMode == BuildModeEnum.DISABLED; long placeTime = player.level().getGameTime(); if (blocks.size() > 1) placeTime += ClientConfig.visuals.appearAnimationLength.get(); - PacketHandler.INSTANCE.sendToServer(new ServerPlaceBlocksPacket(blocks, placeTime)); + PacketDistributor.SERVER.noArg().send(new ServerPlaceBlocksPacket(blocks, placeTime)); } } } @@ -105,7 +108,7 @@ public class BuilderChain { var player = Minecraft.getInstance().player; if (player == null) return; - if (!CapabilityHandler.canBreakFar(player)) return; + if (!AttachmentHandler.canBreakFar(player)) return; if (buildingState == BuildingState.IDLE){ buildingState = BuildingState.BREAKING; @@ -129,7 +132,7 @@ public class BuilderChain { ClientBlockUtilities.playSoundIfFurtherThanNormal(player, blocks.getLastBlockEntry(), true); player.swing(InteractionHand.MAIN_HAND); blocks.skipFirst = buildMode == BuildModeEnum.DISABLED; - PacketHandler.INSTANCE.sendToServer(new ServerBreakBlocksPacket(blocks)); + PacketDistributor.SERVER.noArg().send(new ServerBreakBlocksPacket(blocks)); } } } @@ -210,7 +213,7 @@ public class BuilderChain { private BlockEntry findStartPosition(Player player, BuildModeEnum buildMode) { - int maxReach = CapabilityHandler.getPlacementReach(player, false); + int maxReach = AttachmentHandler.getPlacementReach(player, false); //Determine if we should look far or nearby boolean shouldLookAtNear = buildMode == BuildModeEnum.DISABLED || maxReach < 3; @@ -243,7 +246,7 @@ public class BuilderChain { //We can only break //Do not break far if we are not allowed to - if (!shouldLookAtNear && !CapabilityHandler.canBreakFar(player)) return null; + if (!shouldLookAtNear && !AttachmentHandler.canBreakFar(player)) return null; } var blockEntry = new BlockEntry(startPos); diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/BuilderFilter.java b/src/main/java/nl/requios/effortlessbuilding/systems/BuilderFilter.java index 3fa06d5..a7a7321 100644 --- a/src/main/java/nl/requios/effortlessbuilding/systems/BuilderFilter.java +++ b/src/main/java/nl/requios/effortlessbuilding/systems/BuilderFilter.java @@ -1,8 +1,8 @@ package nl.requios.effortlessbuilding.systems; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.utilities.BlockEntry; diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/ServerBuildState.java b/src/main/java/nl/requios/effortlessbuilding/systems/ServerBuildState.java index 8d44dab..8b21be6 100644 --- a/src/main/java/nl/requios/effortlessbuilding/systems/ServerBuildState.java +++ b/src/main/java/nl/requios/effortlessbuilding/systems/ServerBuildState.java @@ -2,7 +2,7 @@ package nl.requios.effortlessbuilding.systems; import net.minecraft.world.entity.player.Player; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; public class ServerBuildState { private static final String IS_USING_BUILD_MODE_KEY = EffortlessBuilding.MODID + ":isUsingBuildMode"; @@ -26,7 +26,7 @@ public class ServerBuildState { } public static boolean isQuickReplacing(Player player) { - if (!CapabilityHandler.canReplaceBlocks(player)) return false; + if (!AttachmentHandler.canReplaceBlocks(player)) return false; return player.getPersistentData().contains(IS_QUICK_REPLACING_KEY); } diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/UndoRedo.java b/src/main/java/nl/requios/effortlessbuilding/systems/UndoRedo.java index 24eac41..db1f71a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/systems/UndoRedo.java +++ b/src/main/java/nl/requios/effortlessbuilding/systems/UndoRedo.java @@ -8,7 +8,7 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; -import net.minecraftforge.common.util.BlockSnapshot; +import net.neoforged.neoforge.common.util.BlockSnapshot; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.ServerConfig; import nl.requios.effortlessbuilding.utilities.*; diff --git a/src/main/java/nl/requios/effortlessbuilding/utilities/BlockPlacerHelper.java b/src/main/java/nl/requios/effortlessbuilding/utilities/BlockPlacerHelper.java index 8b108b8..4ee18dd 100644 --- a/src/main/java/nl/requios/effortlessbuilding/utilities/BlockPlacerHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/BlockPlacerHelper.java @@ -7,9 +7,9 @@ import net.minecraft.world.item.DiggerItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.common.util.BlockSnapshot; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.items.ItemHandlerHelper; +import net.neoforged.neoforge.common.util.BlockSnapshot; +import net.neoforged.neoforge.event.EventHooks; +import net.neoforged.neoforge.items.ItemHandlerHelper; import nl.requios.effortlessbuilding.create.foundation.utility.BlockHelper; import java.util.List; @@ -54,11 +54,11 @@ public class BlockPlacerHelper { boolean eventResult = false; if (blockSnapshots.size() > 1) { - eventResult = ForgeEventFactory.onMultiBlockPlace(player, blockSnapshots, side); + eventResult = EventHooks.onMultiBlockPlace(player, blockSnapshots, side); } else if (blockSnapshots.size() == 1) { - eventResult = ForgeEventFactory.onBlockPlace(player, blockSnapshots.get(0), side); + eventResult = EventHooks.onBlockPlace(player, blockSnapshots.get(0), side); } if (eventResult) diff --git a/src/main/java/nl/requios/effortlessbuilding/utilities/BlockSet.java b/src/main/java/nl/requios/effortlessbuilding/utilities/BlockSet.java index 4f7a560..aff3fd1 100644 --- a/src/main/java/nl/requios/effortlessbuilding/utilities/BlockSet.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/BlockSet.java @@ -2,11 +2,11 @@ package nl.requios.effortlessbuilding.utilities; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.DistExecutor; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.fml.loading.FMLEnvironment; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; import org.jetbrains.annotations.NotNull; import java.util.HashMap; @@ -53,13 +53,17 @@ public class BlockSet extends HashMap implements Iterable< public void add(BlockEntry blockEntry) { if (!containsKey(blockEntry.blockPos)) { //check if we are clientside - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { + if(FMLEnvironment.dist.isClient()) { if (!ClientSide.isFull(this)) put(blockEntry.blockPos, blockEntry); - }); - DistExecutor.unsafeRunWhenOn(Dist.DEDICATED_SERVER, () -> () -> { + } else { put(blockEntry.blockPos, blockEntry); - }); + } +// DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { +// +// }); +// DistExecutor.unsafeRunWhenOn(Dist.DEDICATED_SERVER, () -> () -> { +// }); } else { if (logging) EffortlessBuilding.log("BlockSet already contains block at " + blockEntry.blockPos); } @@ -102,7 +106,7 @@ public class BlockSet extends HashMap implements Iterable< public static class ClientSide { public static boolean isFull(BlockSet blockSet) { //Limit number of blocks you can place - int limit = CapabilityHandler.getMaxBlocksPlacedAtOnce(net.minecraft.client.Minecraft.getInstance().player, false); + int limit = AttachmentHandler.getMaxBlocksPlacedAtOnce(net.minecraft.client.Minecraft.getInstance().player, false); if (blockSet.size() >= limit) { if (logging) EffortlessBuilding.log("BlockSet limit reached, not adding block."); return true; diff --git a/src/main/java/nl/requios/effortlessbuilding/utilities/ClientBlockUtilities.java b/src/main/java/nl/requios/effortlessbuilding/utilities/ClientBlockUtilities.java index b5d0bf7..f4d32a4 100644 --- a/src/main/java/nl/requios/effortlessbuilding/utilities/ClientBlockUtilities.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/ClientBlockUtilities.java @@ -10,9 +10,9 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; @OnlyIn(Dist.CLIENT) public class ClientBlockUtilities { @@ -52,7 +52,7 @@ public class ClientBlockUtilities { Level world = player.level(); //base distance off of player ability (config) - float raytraceRange = CapabilityHandler.getPlacementReach(player, false); + float raytraceRange = AttachmentHandler.getPlacementReach(player, false); Vec3 look = player.getLookAngle(); Vec3 start = new Vec3(player.getX(), player.getY() + player.getEyeHeight(), player.getZ()); diff --git a/src/main/java/nl/requios/effortlessbuilding/utilities/PlaceChecker.java b/src/main/java/nl/requios/effortlessbuilding/utilities/PlaceChecker.java index 2e9dfc9..00cbe5e 100644 --- a/src/main/java/nl/requios/effortlessbuilding/utilities/PlaceChecker.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/PlaceChecker.java @@ -9,8 +9,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BedPart; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import nl.requios.effortlessbuilding.EffortlessBuildingClient; @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/nl/requios/effortlessbuilding/utilities/PowerLevelCommand.java b/src/main/java/nl/requios/effortlessbuilding/utilities/PowerLevelCommand.java index ffe07d8..9e298a5 100644 --- a/src/main/java/nl/requios/effortlessbuilding/utilities/PowerLevelCommand.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/PowerLevelCommand.java @@ -9,12 +9,10 @@ import net.minecraft.commands.arguments.EntityArgument; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.PacketDistributor; -import nl.requios.effortlessbuilding.capability.CapabilityHandler; -import nl.requios.effortlessbuilding.capability.IPowerLevel; -import nl.requios.effortlessbuilding.capability.PowerLevelCapability; -import nl.requios.effortlessbuilding.network.PacketHandler; -import nl.requios.effortlessbuilding.network.PowerLevelPacket; +import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.attachment.AttachmentHandler; +import nl.requios.effortlessbuilding.attachment.PowerLevel; +import nl.requios.effortlessbuilding.network.message.PowerLevelPacket; public class PowerLevelCommand { @@ -37,7 +35,7 @@ public class PowerLevelCommand { }))) .then(Commands.literal("set") .then(Commands.argument("target", EntityArgument.player()) - .then(Commands.argument("value", IntegerArgumentType.integer(0, PowerLevelCapability.MAX_POWER_LEVEL)).executes(ctx -> { + .then(Commands.argument("value", IntegerArgumentType.integer(0, PowerLevel.MAX_POWER_LEVEL)).executes(ctx -> { //Set power level setPowerLevel(ctx.getSource(), EntityArgument.getPlayer(ctx, "target"), ctx.getArgument("value", Integer.class)); @@ -47,15 +45,14 @@ public class PowerLevelCommand { } private static void logPowerLevel(CommandSourceStack source, Player player) { - int powerLevel = CapabilityHandler.getPowerLevel(player); + int powerLevel = AttachmentHandler.getPowerLevel(player); source.sendSuccess(() -> Component.translatable("effortlessbuilding.commands.powerlevel", player.getDisplayName(), powerLevel), false); } private static void setPowerLevel(CommandSourceStack source, Player player, int powerLevel) throws CommandSyntaxException { - IPowerLevel powerCap = player.getCapability(CapabilityHandler.POWER_LEVEL_CAPABILITY).orElse(null); - if (powerCap == null) return; //Should never be null but just to be sure + PowerLevel powerCap = player.getData(EffortlessBuilding.POWER_LEVEL); powerCap.setPowerLevel(powerLevel); - PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new PowerLevelPacket(powerLevel)); + ((ServerPlayer)player).connection.send(new PowerLevelPacket(powerLevel)); source.sendSuccess(() -> Component.translatable("effortlessbuilding.commands.powerlevel.success", player.getDisplayName(), powerLevel), true); } diff --git a/src/main/java/nl/requios/effortlessbuilding/utilities/SurvivalHelper.java b/src/main/java/nl/requios/effortlessbuilding/utilities/SurvivalHelper.java index 6bfb9bc..172d47d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/utilities/SurvivalHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/SurvivalHelper.java @@ -8,7 +8,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.SlabBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.event.ForgeEventFactory; +import net.neoforged.neoforge.event.EventHooks; import nl.requios.effortlessbuilding.compatibility.CompatHelper; public class SurvivalHelper { @@ -21,7 +21,7 @@ public class SurvivalHelper { if (player.isCreative()) return true; - return ForgeEventFactory.doPlayerHarvestCheck(player, blockState, true); + return EventHooks.doPlayerHarvestCheck(player, blockState, true); } public static boolean doesBecomeDoubleSlab(Player player, BlockPos pos) { diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 3b3cd51..04b0964 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,49 +1,49 @@ -public net.minecraft.client.gui.components.AbstractSelectionList f_93398_ # renderHeader -public net.minecraft.client.gui.Font m_92803_(Ljava/lang/String;FFILcom/mojang/math/Matrix4f;ZZ)I # renderString -public net.minecraft.world.inventory.MenuType m_39988_(Ljava/lang/String;Lnet/minecraft/world/inventory/MenuType$MenuSupplier;)Lnet/minecraft/world/inventory/MenuType; # register +public net.minecraft.client.gui.components.AbstractSelectionList renderHeader # renderHeader +public net.minecraft.client.gui.Font renderString(Ljava/lang/String;FFILcom/mojang/math/Matrix4f;ZZ)I # renderString +public net.minecraft.world.inventory.MenuType register(Ljava/lang/String;Lnet/minecraft/world/inventory/MenuType$MenuSupplier;)Lnet/minecraft/world/inventory/MenuType; # register #create -public net.minecraft.client.Minecraft f_91013_ # pausePartialTick -public net.minecraft.client.gui.Font m_92863_(Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/gui/font/FontSet; # getFontSet -public net.minecraft.client.gui.screens.TitleScreen f_96729_ # panorama -public net.minecraft.client.multiplayer.ClientPacketListener f_104897_ # serverChunkRadius -protected net.minecraft.client.particle.Particle f_107205_ # stoppedByCollision -public net.minecraft.client.renderer.ItemInHandRenderer f_109300_ # mainHandItem -public net.minecraft.client.renderer.ItemInHandRenderer f_109301_ # offHandItem -public net.minecraft.client.renderer.entity.ItemRenderer f_115096_ # textureManager -public net.minecraft.world.entity.Entity f_19853_ # level -public-f net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket f_132663_ # flyingSpeed +public net.minecraft.client.Minecraft pausePartialTick # pausePartialTick +public net.minecraft.client.gui.Font getFontSet(Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/gui/font/FontSet; # getFontSet +public net.minecraft.client.gui.screens.TitleScreen panorama # panorama +public net.minecraft.client.multiplayer.ClientPacketListener serverChunkRadius # serverChunkRadius +protected net.minecraft.client.particle.Particle stoppedByCollision # stoppedByCollision +public net.minecraft.client.renderer.ItemInHandRenderer mainHandItem # mainHandItem +public net.minecraft.client.renderer.ItemInHandRenderer offHandItem # offHandItem +public net.minecraft.client.renderer.entity.ItemRenderer textureManager # textureManager +public net.minecraft.world.entity.Entity level # level +public-f net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket flyingSpeed # flyingSpeed -public net.minecraft.server.MinecraftServer f_129744_ # storageSource -public net.minecraft.server.network.ServerGamePacketListenerImpl f_9737_ # aboveGroundTickCount -public net.minecraft.server.network.ServerGamePacketListenerImpl f_9739_ # aboveGroundVehicleTickCount +public net.minecraft.server.MinecraftServer storageSource # storageSource +public net.minecraft.server.network.ServerGamePacketListenerImpl aboveGroundTickCount # aboveGroundTickCount +public net.minecraft.server.network.ServerGamePacketListenerImpl aboveGroundVehicleTickCount # aboveGroundVehicleTickCount -public net.minecraft.world.entity.Entity f_146795_ # removalReason -protected net.minecraft.world.entity.Entity m_19956_(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity$MoveFunction;)V # positionRider -public net.minecraft.world.entity.LivingEntity f_20899_ # jumping +public net.minecraft.world.entity.Entity removalReason # removalReason +protected net.minecraft.world.entity.Entity positionRider(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity$MoveFunction;)V # positionRider +public net.minecraft.world.entity.LivingEntity jumping # jumping -public-f net.minecraft.world.item.HoneycombItem f_150863_ # WAXABLES -public net.minecraft.world.item.alchemy.PotionBrewing f_43494_ # POTION_MIXES -public net.minecraft.world.item.alchemy.PotionBrewing f_43495_ # CONTAINER_MIXES -public net.minecraft.world.item.alchemy.PotionBrewing f_43497_ # ALLOWED_CONTAINER -public net.minecraft.world.item.crafting.Ingredient f_43902_ # values -public net.minecraft.world.item.crafting.RecipeManager f_44007_ # recipes +public-f net.minecraft.world.item.HoneycombItem WAXABLES # WAXABLES +public net.minecraft.world.item.alchemy.PotionBrewing POTION_MIXES # POTION_MIXES +public net.minecraft.world.item.alchemy.PotionBrewing CONTAINER_MIXES # CONTAINER_MIXES +public net.minecraft.world.item.alchemy.PotionBrewing ALLOWED_CONTAINER # ALLOWED_CONTAINER +public net.minecraft.world.item.crafting.Ingredient values # values +public net.minecraft.world.item.crafting.RecipeManager recipes # recipes -public net.minecraft.world.level.BaseSpawner f_45443_ # spawnPotentials -public net.minecraft.world.level.BaseSpawner f_45444_ # nextSpawnData -public net.minecraft.world.level.biome.BiomeManager f_47863_ # biomeZoomSeed -public net.minecraft.world.level.block.entity.BeaconBlockEntity f_58648_ # beamSections -public net.minecraft.world.level.chunk.HashMapPalette f_62658_ # values +public net.minecraft.world.level.BaseSpawner spawnPotentials # spawnPotentials +public net.minecraft.world.level.BaseSpawner nextSpawnData # nextSpawnData +public net.minecraft.world.level.biome.BiomeManager biomeZoomSeed # biomeZoomSeed +public net.minecraft.world.level.block.entity.BeaconBlockEntity beamSections # beamSections +public net.minecraft.world.level.chunk.HashMapPalette values # values public net.minecraft.world.level.chunk.PaletteResize -public net.minecraft.client.model.geom.ModelPart f_104212_ # cubes -public net.minecraft.client.model.geom.ModelPart f_104213_ # children -public net.minecraft.client.model.AgeableListModel f_102007_ # scaleHead -public net.minecraft.client.model.AgeableListModel f_170338_ # babyYHeadOffset -public net.minecraft.client.model.AgeableListModel f_170339_ # babyZHeadOffset -public net.minecraft.client.model.AgeableListModel f_102010_ # babyHeadScale -public net.minecraft.client.model.AgeableListModel f_102011_ # babyBodyScale -public net.minecraft.client.model.AgeableListModel f_102012_ # bodyYOffset +public net.minecraft.client.model.geom.ModelPart cubes # cubes +public net.minecraft.client.model.geom.ModelPart children # children +public net.minecraft.client.model.AgeableListModel scaleHead # scaleHead +public net.minecraft.client.model.AgeableListModel babyYHeadOffset # babyYHeadOffset +public net.minecraft.client.model.AgeableListModel babyZHeadOffset # babyZHeadOffset +public net.minecraft.client.model.AgeableListModel babyHeadScale # babyHeadScale +public net.minecraft.client.model.AgeableListModel babyBodyScale # babyBodyScale +public net.minecraft.client.model.AgeableListModel bodyYOffset # bodyYOffset -public net.minecraft.client.gui.components.CommandSuggestions f_93866_ # suggestions +public net.minecraft.client.gui.components.CommandSuggestions suggestions # suggestions public net.minecraft.client.gui.components.CommandSuggestions$SuggestionsList (Lnet/minecraft/client/gui/components/CommandSuggestions;IIILjava/util/List;Z)V # \ No newline at end of file diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 4afac51..9cd6234 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader="javafml" -loaderVersion="[47,)" +loaderVersion="[2,)" license="GNU LESSER GENERAL PUBLIC LICENSE" issueTrackerURL="https://bitbucket.org/Requios/effortless-building/issues?status=new&status=open&status=submitted&is_spam=%21spam" showAsResourcePack=false @@ -17,22 +17,25 @@ Makes building easier by providing tools like mirrors, arrays, build modes and a ''' [[dependencies.effortlessbuilding]] - modId="forge" - mandatory=true - versionRange="[47.1.3,)" + modId="neoforge" + type="required" + versionRange="[20.4.167,)" ordering="NONE" side="BOTH" [[dependencies.effortlessbuilding]] modId="minecraft" - mandatory=true - versionRange="[1.20,1.21)" + type="required" + versionRange="[1.20.4,1.21)" ordering="NONE" side="BOTH" [[dependencies.effortlessbuilding]] modId="flywheel" - mandatory=true + type="required" versionRange="[0.6.10,0.7)" ordering="AFTER" - side="CLIENT" \ No newline at end of file + side="CLIENT" + +#[[accessTransformers]] +# file="META-INF/accesstransformer.cfg" \ No newline at end of file diff --git a/src/main/resources/assets/effortlessbuilding/lang/en_us.json b/src/main/resources/assets/effortlessbuilding/lang/en_us.json index 94ddf2b..8d6640d 100644 --- a/src/main/resources/assets/effortlessbuilding/lang/en_us.json +++ b/src/main/resources/assets/effortlessbuilding/lang/en_us.json @@ -117,5 +117,15 @@ "effortlessbuilding.tooltip.keybind": "[%1$s]", "effortlessbuilding.commands.powerlevel": "[Effortless Building] %s's Building Power Level is: %s", - "effortlessbuilding.commands.powerlevel.success": "[Effortless Building] Set %s's Building Power Level to: %s" + "effortlessbuilding.commands.powerlevel.success": "[Effortless Building] Set %s's Building Power Level to: %s", + + "effortlessbuilding.networking.is_using_build_mode.failed": "Failed to set player build mode: %s", + "effortlessbuilding.networking.is_quick_replacing.failed": "Failed to set player quick replacing: %s", + "effortlessbuilding.networking.server_place_blocks.failed": "Failed to place blocks on the server: %s", + "effortlessbuilding.networking.server_break_blocks.failed": "Failed to break blocks on the server: %s", + "effortlessbuilding.networking.perform_undo.failed": "Failed to perform undo on the server: %s", + "effortlessbuilding.networking.perform_redo.failed": "Failed to perform redo on the server: %s", + "effortlessbuilding.networking.modifier_settings.failed": "Failed to set modifier settings: %s", + "effortlessbuilding.networking.power_level.failed": "Failed to set player power level: %s", + "effortlessbuilding.networking.translated_log.failed": "Failed to log a translated message: %s" } diff --git a/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_library_loot_modifier.json b/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_library_loot_modifier.json index 692cadc..fea4634 100644 --- a/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_library_loot_modifier.json +++ b/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_library_loot_modifier.json @@ -2,7 +2,7 @@ "type": "effortlessbuilding:single_item_loot_modifier", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_library" } ], diff --git a/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_loot_modifier.json b/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_loot_modifier.json index af02842..069c792 100644 --- a/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_loot_modifier.json +++ b/src/main/resources/data/effortlessbuilding/loot_modifiers/building_techniques_book_loot_modifier.json @@ -5,83 +5,83 @@ "condition": "minecraft:any_of", "terms": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/abandoned_mineshaft" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ancient_city" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_bridge" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_other" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/buried_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/desert_pyramid" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/end_city_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/igloo_chest" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/jungle_temple" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/nether_bridge" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/pillager_outpost" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ruined_portal" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_supply" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/simple_dungeon" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_corridor" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_crossing" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_library" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/woodland_mansion" } ] diff --git a/src/main/resources/data/effortlessbuilding/loot_modifiers/elastic_hand_loot_modifier.json b/src/main/resources/data/effortlessbuilding/loot_modifiers/elastic_hand_loot_modifier.json index 3c750db..bd04684 100644 --- a/src/main/resources/data/effortlessbuilding/loot_modifiers/elastic_hand_loot_modifier.json +++ b/src/main/resources/data/effortlessbuilding/loot_modifiers/elastic_hand_loot_modifier.json @@ -5,83 +5,83 @@ "condition": "minecraft:any_of", "terms": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/abandoned_mineshaft" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ancient_city" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_bridge" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_other" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/buried_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/desert_pyramid" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/end_city_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/igloo_chest" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/jungle_temple" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/nether_bridge" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/pillager_outpost" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ruined_portal" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_supply" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/simple_dungeon" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_corridor" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_crossing" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_library" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/woodland_mansion" } ] diff --git a/src/main/resources/data/effortlessbuilding/loot_modifiers/muscles_loot_modifier.json b/src/main/resources/data/effortlessbuilding/loot_modifiers/muscles_loot_modifier.json index 0d95130..b5256ee 100644 --- a/src/main/resources/data/effortlessbuilding/loot_modifiers/muscles_loot_modifier.json +++ b/src/main/resources/data/effortlessbuilding/loot_modifiers/muscles_loot_modifier.json @@ -5,83 +5,83 @@ "condition": "minecraft:any_of", "terms": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/abandoned_mineshaft" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ancient_city" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_bridge" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_other" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/buried_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/desert_pyramid" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/end_city_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/igloo_chest" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/jungle_temple" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/nether_bridge" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/pillager_outpost" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ruined_portal" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_supply" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_treasure" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/simple_dungeon" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_corridor" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_crossing" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_library" }, { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/woodland_mansion" } ] diff --git a/src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json b/src/main/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json similarity index 100% rename from src/main/resources/data/forge/loot_modifiers/global_loot_modifiers.json rename to src/main/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json