diff --git a/.gitignore b/.gitignore index aefc7eb..42052ef 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,8 @@ dependency-reduced-pom.xml #IntelliJ .idea + +#Gradle +.gradle +classes +build \ No newline at end of file diff --git a/adapter/paper1_20_4/build.gradle.kts b/adapter/paper1_20_4/build.gradle.kts new file mode 100644 index 0000000..1304d92 --- /dev/null +++ b/adapter/paper1_20_4/build.gradle.kts @@ -0,0 +1,65 @@ +plugins { + `maven-publish` + `java-library` + id("io.papermc.paperweight.userdev") version "1.5.13" +} + +group = "de.cubeside.nmsutils" +version = "0.0.1-SNAPSHOT" +description = "nms adapter" + +repositories { + mavenLocal() +} + +java { + // Configure the java toolchain. This allows gradle to auto-provision JDK 17 on systems that only have JDK 8 installed for example. + toolchain.languageVersion = JavaLanguageVersion.of(17) +} + +dependencies { + implementation(project(":core")) + // implementation("de.cubeside.nmsutils:nmsutils-core:0.0.1-SNAPSHOT") + paperweight.paperDevBundle("1.20.4-R0.1-SNAPSHOT") + // paperweight.foliaDevBundle("1.20.4-R0.1-SNAPSHOT") + // paperweight.devBundle("com.example.paperfork", "1.20.4-R0.1-SNAPSHOT") +} + +tasks { + // Configure reobfJar to run when invoking the build task + assemble { + dependsOn(reobfJar) + } + + compileJava { + options.encoding = Charsets.UTF_8.name() // We want UTF-8 for everything + + // Set the release flag. This configures what version bytecode the compiler will emit, as well as what JDK APIs are usable. + // See https://openjdk.java.net/jeps/247 for more information. + options.release = 17 + } + javadoc { + options.encoding = Charsets.UTF_8.name() // We want UTF-8 for everything + } + + /* + reobfJar. { + // This is an example of how you might change the output location for reobfJar. It's recommended not to do this + // for a variety of reasons, however it's asked frequently enough that an example of how to do it is included here. + outputJar = layout.buildDirectory.file("libs/PaperweightTestPlugin-${project.version}.jar") + } + */ +} + +publishing { + publications { + create("maven") { + artifact(tasks.reobfJar) + groupId = "de.cubeside.nmsutils" + artifactId = "nmsutils-paper1_20_4" + version = "0.0.1-SNAPSHOT" + + from(components["java"]) + } + } +} diff --git a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/BiomeUtilsImpl.java b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/BiomeUtilsImpl.java similarity index 98% rename from nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/BiomeUtilsImpl.java rename to adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/BiomeUtilsImpl.java index f050419..eb6c0cd 100644 --- a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/BiomeUtilsImpl.java +++ b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/BiomeUtilsImpl.java @@ -1,4 +1,4 @@ -package de.cubeside.nmsutils.v1_19_R3; +package de.cubeside.nmsutils.paper1_20_4; import com.mojang.serialization.Lifecycle; import de.cubeside.nmsutils.BiomeUtils; @@ -31,8 +31,8 @@ import org.bukkit.Location; import org.bukkit.NamespacedKey; import org.bukkit.Server; -import org.bukkit.craftbukkit.v1_19_R3.CraftServer; -import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_20_R3.CraftServer; +import org.bukkit.craftbukkit.v1_20_R3.CraftWorld; public class BiomeUtilsImpl implements BiomeUtils { private final NMSUtilsImpl nmsUtils; @@ -100,13 +100,13 @@ public CustomBiome registerCustomBiome(NamespacedKey id, float downfall, float t if (grassColor != null) { effects.grassColorOverride(grassColor); } + effects.ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS); net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier nativeGrassColorModifier = switch (grassColorModifier) { case DARK_FOREST -> net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier.DARK_FOREST; case SWAMP -> net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier.SWAMP; default -> net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier.NONE; }; effects.grassColorModifier(nativeGrassColorModifier); - effects.ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS); builder.specialEffects(effects.build()); Biome newbiome = builder.build(); diff --git a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/CompoundTagImpl.java b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/CompoundTagImpl.java similarity index 99% rename from nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/CompoundTagImpl.java rename to adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/CompoundTagImpl.java index 7cdcb8f..de5fe2e 100644 --- a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/CompoundTagImpl.java +++ b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/CompoundTagImpl.java @@ -1,4 +1,4 @@ -package de.cubeside.nmsutils.v1_20_R1; +package de.cubeside.nmsutils.paper1_20_4; import com.google.common.base.Preconditions; import de.cubeside.nmsutils.nbt.TagType; diff --git a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/CustomBiomeImpl.java b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/CustomBiomeImpl.java similarity index 94% rename from nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/CustomBiomeImpl.java rename to adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/CustomBiomeImpl.java index 397abba..1d811f1 100644 --- a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/CustomBiomeImpl.java +++ b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/CustomBiomeImpl.java @@ -1,4 +1,4 @@ -package de.cubeside.nmsutils.v1_19_R3; +package de.cubeside.nmsutils.paper1_20_4; import de.cubeside.nmsutils.biome.CustomBiome; import net.minecraft.core.BlockPos.MutableBlockPos; @@ -9,7 +9,7 @@ import net.minecraft.world.level.chunk.LevelChunk; import org.bukkit.Location; import org.bukkit.NamespacedKey; -import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_20_R3.CraftWorld; public class CustomBiomeImpl implements CustomBiome { private NamespacedKey bukkitKey; diff --git a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/EntityUtilsImpl.java b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/EntityUtilsImpl.java similarity index 95% rename from nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/EntityUtilsImpl.java rename to adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/EntityUtilsImpl.java index 398fb67..5fb3e29 100644 --- a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/EntityUtilsImpl.java +++ b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/EntityUtilsImpl.java @@ -1,4 +1,4 @@ -package de.cubeside.nmsutils.v1_20_R2; +package de.cubeside.nmsutils.paper1_20_4; import com.destroystokyo.paper.entity.ai.VanillaGoal; import de.cubeside.nmsutils.EntityUtils; @@ -24,17 +24,17 @@ import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftBat; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftCamel; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftMob; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPiglin; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftRaider; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftShulker; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftVex; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftWolf; +import org.bukkit.craftbukkit.v1_20_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_20_R3.entity.CraftBat; +import org.bukkit.craftbukkit.v1_20_R3.entity.CraftCamel; +import org.bukkit.craftbukkit.v1_20_R3.entity.CraftCreature; +import org.bukkit.craftbukkit.v1_20_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_20_R3.entity.CraftMob; +import org.bukkit.craftbukkit.v1_20_R3.entity.CraftPiglin; +import org.bukkit.craftbukkit.v1_20_R3.entity.CraftRaider; +import org.bukkit.craftbukkit.v1_20_R3.entity.CraftShulker; +import org.bukkit.craftbukkit.v1_20_R3.entity.CraftVex; +import org.bukkit.craftbukkit.v1_20_R3.entity.CraftWolf; import org.bukkit.entity.Bat; import org.bukkit.entity.Creature; import org.bukkit.entity.EntityType; diff --git a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/ListTagImpl.java b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/ListTagImpl.java similarity index 99% rename from nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/ListTagImpl.java rename to adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/ListTagImpl.java index 7613b10..7959fee 100644 --- a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/ListTagImpl.java +++ b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/ListTagImpl.java @@ -1,4 +1,4 @@ -package de.cubeside.nmsutils.v1_20_R2; +package de.cubeside.nmsutils.paper1_20_4; import de.cubeside.nmsutils.nbt.TagType; import java.util.UUID; diff --git a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/MiscUtilsImpl.java b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/MiscUtilsImpl.java similarity index 91% rename from nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/MiscUtilsImpl.java rename to adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/MiscUtilsImpl.java index 1eda701..0763f4d 100644 --- a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/MiscUtilsImpl.java +++ b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/MiscUtilsImpl.java @@ -1,4 +1,4 @@ -package de.cubeside.nmsutils.v1_20_R2; +package de.cubeside.nmsutils.paper1_20_4; import de.cubeside.nmsutils.MiscUtils; import de.cubeside.nmsutils.NMSUtils; @@ -8,6 +8,8 @@ import net.md_5.bungee.api.chat.BaseComponent; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.numbers.BlankFormat; +import net.minecraft.network.chat.numbers.NumberFormat; import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockBehaviour; @@ -19,8 +21,8 @@ import net.minecraft.world.scores.Scoreboard; import net.minecraft.world.scores.Team.Visibility; import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_20_R2.util.CraftChatMessage; -import org.bukkit.craftbukkit.v1_20_R2.util.CraftMagicNumbers; +import org.bukkit.craftbukkit.v1_20_R3.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_20_R3.util.CraftMagicNumbers; import org.bukkit.scoreboard.Team.OptionStatus; public class MiscUtilsImpl implements MiscUtils { @@ -112,4 +114,14 @@ private static Component baseComponentToComponent(BaseComponent c) { String json = net.md_5.bungee.chat.ComponentSerializer.toString(c); return PaperAdventure.asVanilla(net.kyori.adventure.text.serializer.gson.GsonComponentSerializer.gson().deserialize(json)); } + + @Override + public Class getNumberFormatClass() { + return NumberFormat.class; + } + + @Override + public Object getBlankNumberFormatInstance() { + return BlankFormat.INSTANCE; + } } diff --git a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/NMSUtilsImpl.java b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/NMSUtilsImpl.java similarity index 97% rename from nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/NMSUtilsImpl.java rename to adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/NMSUtilsImpl.java index 4ab2033..671132b 100644 --- a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/NMSUtilsImpl.java +++ b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/NMSUtilsImpl.java @@ -1,4 +1,4 @@ -package de.cubeside.nmsutils.v1_19_R3; +package de.cubeside.nmsutils.paper1_20_4; import de.cubeside.nmsutils.BiomeUtils; import de.cubeside.nmsutils.EntityUtils; diff --git a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/NbtUtilsImpl.java b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/NbtUtilsImpl.java similarity index 97% rename from nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/NbtUtilsImpl.java rename to adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/NbtUtilsImpl.java index 641dfa6..bcae5ba 100644 --- a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/NbtUtilsImpl.java +++ b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/NbtUtilsImpl.java @@ -1,4 +1,4 @@ -package de.cubeside.nmsutils.v1_19_R3; +package de.cubeside.nmsutils.paper1_20_4; import de.cubeside.nmsutils.NbtUtils; import de.cubeside.nmsutils.nbt.CompoundTag; diff --git a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/PathfinderGoalLimitedRandomStrollLand.java b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/PathfinderGoalLimitedRandomStrollLand.java similarity index 90% rename from nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/PathfinderGoalLimitedRandomStrollLand.java rename to adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/PathfinderGoalLimitedRandomStrollLand.java index cb8b47c..0d53f22 100644 --- a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/PathfinderGoalLimitedRandomStrollLand.java +++ b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/PathfinderGoalLimitedRandomStrollLand.java @@ -1,10 +1,10 @@ -package de.cubeside.nmsutils.v1_20_R2; +package de.cubeside.nmsutils.paper1_20_4; import java.util.function.Function; import net.minecraft.world.entity.PathfinderMob; import net.minecraft.world.entity.ai.goal.RandomStrollGoal; import net.minecraft.world.phys.Vec3; -import org.bukkit.craftbukkit.v1_20_R2.util.CraftVector; +import org.bukkit.craftbukkit.v1_20_R3.util.CraftVector; import org.bukkit.util.Vector; public class PathfinderGoalLimitedRandomStrollLand extends RandomStrollGoal { diff --git a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/WorldUtilsImpl.java b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/WorldUtilsImpl.java similarity index 95% rename from nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/WorldUtilsImpl.java rename to adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/WorldUtilsImpl.java index a3d2583..df8cabf 100644 --- a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/WorldUtilsImpl.java +++ b/adapter/paper1_20_4/src/main/java/de/cubeside/nmsutils/paper1_20_4/WorldUtilsImpl.java @@ -1,4 +1,4 @@ -package de.cubeside.nmsutils.v1_19_R3; +package de.cubeside.nmsutils.paper1_20_4; import de.cubeside.nmsutils.WorldUtils; import io.papermc.paper.chunk.system.io.RegionFileIOThread; @@ -13,8 +13,8 @@ import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R3.CraftChunk; -import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_20_R3.CraftChunk; +import org.bukkit.craftbukkit.v1_20_R3.CraftWorld; import org.bukkit.entity.Player; public class WorldUtilsImpl implements WorldUtils { diff --git a/adapter/v1_20_R3/build.gradle.kts b/adapter/v1_20_R3/build.gradle.kts new file mode 100644 index 0000000..8412c22 --- /dev/null +++ b/adapter/v1_20_R3/build.gradle.kts @@ -0,0 +1,64 @@ +plugins { + `maven-publish` + `java-library` + id("io.papermc.paperweight.userdev") version "1.5.13" +} + +group = "de.cubeside.nmsutils" +version = "0.0.1-SNAPSHOT" +description = "nms adapter" + +repositories { + mavenLocal() +} + +java { + // Configure the java toolchain. This allows gradle to auto-provision JDK 17 on systems that only have JDK 8 installed for example. + toolchain.languageVersion = JavaLanguageVersion.of(17) +} + +dependencies { + implementation(project(":core")) + // implementation("de.cubeside.nmsutils:nmsutils-core:0.0.1-SNAPSHOT") + paperweight.paperDevBundle("1.20.4-R0.1-SNAPSHOT") + // paperweight.foliaDevBundle("1.20.4-R0.1-SNAPSHOT") + // paperweight.devBundle("com.example.paperfork", "1.20.4-R0.1-SNAPSHOT") +} + +tasks { + // Configure reobfJar to run when invoking the build task + assemble { + dependsOn(reobfJar) + } + + compileJava { + options.encoding = Charsets.UTF_8.name() // We want UTF-8 for everything + + // Set the release flag. This configures what version bytecode the compiler will emit, as well as what JDK APIs are usable. + // See https://openjdk.java.net/jeps/247 for more information. + options.release = 17 + } + javadoc { + options.encoding = Charsets.UTF_8.name() // We want UTF-8 for everything + } + + /* + reobfJar. { + // This is an example of how you might change the output location for reobfJar. It's recommended not to do this + // for a variety of reasons, however it's asked frequently enough that an example of how to do it is included here. + outputJar = layout.buildDirectory.file("libs/PaperweightTestPlugin-${project.version}.jar") + } + */ +} +publishing { + publications { + create("maven") { + artifact(tasks.reobfJar) + groupId = "de.cubeside.nmsutils" + artifactId = "nmsutils-" + project.name + version = "0.0.1-SNAPSHOT" + + from(components["java"]) + } + } +} diff --git a/nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/BiomeUtilsImpl.java b/adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/BiomeUtilsImpl.java similarity index 100% rename from nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/BiomeUtilsImpl.java rename to adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/BiomeUtilsImpl.java diff --git a/nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/CompoundTagImpl.java b/adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/CompoundTagImpl.java similarity index 100% rename from nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/CompoundTagImpl.java rename to adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/CompoundTagImpl.java diff --git a/nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/CustomBiomeImpl.java b/adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/CustomBiomeImpl.java similarity index 100% rename from nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/CustomBiomeImpl.java rename to adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/CustomBiomeImpl.java diff --git a/nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/EntityUtilsImpl.java b/adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/EntityUtilsImpl.java similarity index 100% rename from nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/EntityUtilsImpl.java rename to adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/EntityUtilsImpl.java diff --git a/nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/ListTagImpl.java b/adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/ListTagImpl.java similarity index 100% rename from nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/ListTagImpl.java rename to adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/ListTagImpl.java diff --git a/nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/MiscUtilsImpl.java b/adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/MiscUtilsImpl.java similarity index 100% rename from nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/MiscUtilsImpl.java rename to adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/MiscUtilsImpl.java diff --git a/nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/NMSUtilsImpl.java b/adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/NMSUtilsImpl.java similarity index 100% rename from nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/NMSUtilsImpl.java rename to adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/NMSUtilsImpl.java diff --git a/nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/NbtUtilsImpl.java b/adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/NbtUtilsImpl.java similarity index 100% rename from nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/NbtUtilsImpl.java rename to adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/NbtUtilsImpl.java diff --git a/nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/PathfinderGoalLimitedRandomStrollLand.java b/adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/PathfinderGoalLimitedRandomStrollLand.java similarity index 100% rename from nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/PathfinderGoalLimitedRandomStrollLand.java rename to adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/PathfinderGoalLimitedRandomStrollLand.java diff --git a/nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/WorldUtilsImpl.java b/adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/WorldUtilsImpl.java similarity index 100% rename from nmsutils-v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/WorldUtilsImpl.java rename to adapter/v1_20_R3/src/main/java/de/cubeside/nmsutils/v1_20_R3/WorldUtilsImpl.java diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..57ec3f6 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,22 @@ +plugins { + `maven-publish` + `java-library` + id("io.papermc.paperweight.userdev") version "1.5.13" apply false +} + +group = "de.cubeside.nmsutils" +version = "0.0.1-SNAPSHOT" +description = "nms adapter" + +repositories { + mavenCentral() + mavenLocal() +} + +java { + toolchain.languageVersion = JavaLanguageVersion.of(17) +} + +dependencies { + +} \ No newline at end of file diff --git a/core/build.gradle.kts b/core/build.gradle.kts new file mode 100644 index 0000000..54aaddd --- /dev/null +++ b/core/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + `java-library` +} + +repositories { + mavenCentral() + maven("https://repo.papermc.io/repository/maven-public/") + maven("https://maven.fabricmc.net/") +} + +dependencies { + compileOnly("io.papermc.paper:paper-api:1.20.4-R0.1-SNAPSHOT") + implementation("net.fabricmc:mapping-io:0.3.0") +} + +java { + toolchain.languageVersion.set(JavaLanguageVersion.of(17)) +} \ No newline at end of file diff --git a/nmsutils-core/src/main/java/de/cubeside/nmsutils/BiomeUtils.java b/core/src/main/java/de/cubeside/nmsutils/BiomeUtils.java similarity index 100% rename from nmsutils-core/src/main/java/de/cubeside/nmsutils/BiomeUtils.java rename to core/src/main/java/de/cubeside/nmsutils/BiomeUtils.java diff --git a/nmsutils-core/src/main/java/de/cubeside/nmsutils/EntityUtils.java b/core/src/main/java/de/cubeside/nmsutils/EntityUtils.java similarity index 100% rename from nmsutils-core/src/main/java/de/cubeside/nmsutils/EntityUtils.java rename to core/src/main/java/de/cubeside/nmsutils/EntityUtils.java diff --git a/nmsutils-core/src/main/java/de/cubeside/nmsutils/MiscUtils.java b/core/src/main/java/de/cubeside/nmsutils/MiscUtils.java similarity index 100% rename from nmsutils-core/src/main/java/de/cubeside/nmsutils/MiscUtils.java rename to core/src/main/java/de/cubeside/nmsutils/MiscUtils.java diff --git a/nmsutils-core/src/main/java/de/cubeside/nmsutils/NMSUtils.java b/core/src/main/java/de/cubeside/nmsutils/NMSUtils.java similarity index 92% rename from nmsutils-core/src/main/java/de/cubeside/nmsutils/NMSUtils.java rename to core/src/main/java/de/cubeside/nmsutils/NMSUtils.java index d21155c..d06d759 100644 --- a/nmsutils-core/src/main/java/de/cubeside/nmsutils/NMSUtils.java +++ b/core/src/main/java/de/cubeside/nmsutils/NMSUtils.java @@ -100,7 +100,12 @@ private static String getNmsVersion(Plugin plugin) { if (i == -1) { throwUnsupportedVersion(plugin); } - return packageName.substring(i + 1); + String packageLastPart = packageName.substring(i + 1); + if (packageLastPart.startsWith("v1_")) { + return packageLastPart; + } + String minecraftVersion = Bukkit.getServer().getMinecraftVersion(); + return "paper" + minecraftVersion.replace('.', '_'); } private static void throwUnsupportedVersion(Plugin plugin) { @@ -108,7 +113,7 @@ private static void throwUnsupportedVersion(Plugin plugin) { } private static void throwUnsupportedVersion(Plugin plugin, Exception ex) { - String msg = "Unsupported CraftBukkit version: " + plugin.getServer().getBukkitVersion(); + String msg = "Unsupported CraftBukkit version: " + plugin.getServer().getBukkitVersion() + " (" + getNmsVersion(plugin) + ")"; plugin.getLogger().severe(msg); throw new UnsupportedOperationException(msg, ex); } diff --git a/nmsutils-core/src/main/java/de/cubeside/nmsutils/NbtUtils.java b/core/src/main/java/de/cubeside/nmsutils/NbtUtils.java similarity index 100% rename from nmsutils-core/src/main/java/de/cubeside/nmsutils/NbtUtils.java rename to core/src/main/java/de/cubeside/nmsutils/NbtUtils.java diff --git a/nmsutils-core/src/main/java/de/cubeside/nmsutils/WorldUtils.java b/core/src/main/java/de/cubeside/nmsutils/WorldUtils.java similarity index 100% rename from nmsutils-core/src/main/java/de/cubeside/nmsutils/WorldUtils.java rename to core/src/main/java/de/cubeside/nmsutils/WorldUtils.java diff --git a/nmsutils-core/src/main/java/de/cubeside/nmsutils/biome/CustomBiome.java b/core/src/main/java/de/cubeside/nmsutils/biome/CustomBiome.java similarity index 100% rename from nmsutils-core/src/main/java/de/cubeside/nmsutils/biome/CustomBiome.java rename to core/src/main/java/de/cubeside/nmsutils/biome/CustomBiome.java diff --git a/nmsutils-core/src/main/java/de/cubeside/nmsutils/biome/Precipitation.java b/core/src/main/java/de/cubeside/nmsutils/biome/Precipitation.java similarity index 100% rename from nmsutils-core/src/main/java/de/cubeside/nmsutils/biome/Precipitation.java rename to core/src/main/java/de/cubeside/nmsutils/biome/Precipitation.java diff --git a/nmsutils-core/src/main/java/de/cubeside/nmsutils/nbt/CompoundTag.java b/core/src/main/java/de/cubeside/nmsutils/nbt/CompoundTag.java similarity index 100% rename from nmsutils-core/src/main/java/de/cubeside/nmsutils/nbt/CompoundTag.java rename to core/src/main/java/de/cubeside/nmsutils/nbt/CompoundTag.java diff --git a/nmsutils-core/src/main/java/de/cubeside/nmsutils/nbt/ListTag.java b/core/src/main/java/de/cubeside/nmsutils/nbt/ListTag.java similarity index 100% rename from nmsutils-core/src/main/java/de/cubeside/nmsutils/nbt/ListTag.java rename to core/src/main/java/de/cubeside/nmsutils/nbt/ListTag.java diff --git a/nmsutils-core/src/main/java/de/cubeside/nmsutils/nbt/TagType.java b/core/src/main/java/de/cubeside/nmsutils/nbt/TagType.java similarity index 100% rename from nmsutils-core/src/main/java/de/cubeside/nmsutils/nbt/TagType.java rename to core/src/main/java/de/cubeside/nmsutils/nbt/TagType.java diff --git a/nmsutils-core/src/main/java/de/cubeside/nmsutils/util/ReobfHelper.java b/core/src/main/java/de/cubeside/nmsutils/util/ReobfHelper.java similarity index 100% rename from nmsutils-core/src/main/java/de/cubeside/nmsutils/util/ReobfHelper.java rename to core/src/main/java/de/cubeside/nmsutils/util/ReobfHelper.java diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..d64cd49 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..1af9e09 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..1aa94a4 --- /dev/null +++ b/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$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=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +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, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..93e3f59 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/nmsutils-core/pom.xml b/nmsutils-core/pom.xml deleted file mode 100644 index 0f41571..0000000 --- a/nmsutils-core/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - 4.0.0 - nmsutils-core - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - org.spigotmc - spigot-api - 1.19.3-R0.1-SNAPSHOT - provided - - - net.fabricmc - mapping-io - 0.3.0 - provided - - - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - fabric-repo - https://maven.fabricmc.net/ - - - - - - maven-compiler-plugin - 3.8.1 - - 17 - - - - - diff --git a/nmsutils-plugin/pom.xml b/nmsutils-plugin/pom.xml deleted file mode 100644 index 2266cab..0000000 --- a/nmsutils-plugin/pom.xml +++ /dev/null @@ -1,70 +0,0 @@ - - 4.0.0 - nmsutils-plugin - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper-api - 1.17.1-R0.1-SNAPSHOT - provided - - - de.cubeside.nmsutils - nmsutils - 0.0.1-SNAPSHOT - - - - CubesideNMSUtils - - - maven-compiler-plugin - 3.8.1 - - 11 - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.3 - - - package - - shade - - - - - de.cubeside.nmsutils:nmsutils-core - de.cubeside.nmsutils:nmsutils-v1_16_R2 - de.cubeside.nmsutils:nmsutils-v1_16_R3 - de.cubeside.nmsutils:nmsutils-v1_17_R1 - de.cubeside.nmsutils:nmsutils-v1_17_R1_0 - de.cubeside.nmsutils:nmsutils-v1_17_R1_1 - de.cubeside.nmsutils:nmsutils-v1_18_R1 - de.cubeside.nmsutils:nmsutils-v1_18_R2 - de.cubeside.nmsutils:nmsutils-v1_19_R1 - de.cubeside.nmsutils:nmsutils-v1_19_R1_0 - de.cubeside.nmsutils:nmsutils-v1_19_R1_1 - de.cubeside.nmsutils:nmsutils-v1_19_R2 - de.cubeside.nmsutils:nmsutils-v1_19_R3 - de.cubeside.nmsutils:nmsutils-v1_20_R1 - de.cubeside.nmsutils:nmsutils-v1_20_R2 - de.cubeside.nmsutils:nmsutils-v1_20_R3 - - - - - - - - - diff --git a/nmsutils-v1_16_R2/pom.xml b/nmsutils-v1_16_R2/pom.xml deleted file mode 100644 index 641e0e5..0000000 --- a/nmsutils-v1_16_R2/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - 4.0.0 - nmsutils-v1_16_R2 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - com.destroystokyo.paper - paper - 1.16.3-R0.1-SNAPSHOT - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - - - - maven-compiler-plugin - 3.8.1 - - 11 - - - - - diff --git a/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/EntityUtilsImpl.java b/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/EntityUtilsImpl.java deleted file mode 100644 index 34c8113..0000000 --- a/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/EntityUtilsImpl.java +++ /dev/null @@ -1,330 +0,0 @@ -package de.cubeside.nmsutils.v1_16_R2; - -import com.destroystokyo.paper.entity.ai.VanillaGoal; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Field; -import java.util.function.Function; -import java.util.logging.Level; -import net.minecraft.server.v1_16_R2.BlockPosition; -import net.minecraft.server.v1_16_R2.Entity; -import net.minecraft.server.v1_16_R2.EntityBat; -import net.minecraft.server.v1_16_R2.EntityCreature; -import net.minecraft.server.v1_16_R2.EntityInsentient; -import net.minecraft.server.v1_16_R2.EntityPose; -import net.minecraft.server.v1_16_R2.EntityVex; -import net.minecraft.server.v1_16_R2.EntityWolf; -import net.minecraft.server.v1_16_R2.EnumMoveType; -import net.minecraft.server.v1_16_R2.PacketPlayOutEntityTeleport; -import net.minecraft.server.v1_16_R2.PathfinderGoalFloat; -import net.minecraft.server.v1_16_R2.PathfinderGoalWrapped; -import net.minecraft.server.v1_16_R2.PlayerChunkMap; -import net.minecraft.server.v1_16_R2.Vec3D; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_16_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftBat; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftMob; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPiglin; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftRaider; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftShulker; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftVex; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftWolf; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Creature; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Mob; -import org.bukkit.entity.Pose; -import org.bukkit.entity.Vex; -import org.bukkit.util.Vector; - -public class EntityUtilsImpl implements EntityUtils { - private static final String FIELD_BAT_TARGET_NAME = "d"; - - private final NMSUtilsImpl nmsUtils; - - private Field fieldEntityTracker; - private Field fieldBatTarget; - - public EntityUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void clearAI(org.bukkit.entity.Entity entity) { - if (entity instanceof Mob) { - nmsUtils.getPlugin().getServer().getMobGoals().removeAllGoals((Mob) entity); - } - } - - @Override - public void addGoalFloat(Mob mob) { - if (!Bukkit.getMobGoals().hasGoal(mob, VanillaGoal.FLOAT)) { - EntityInsentient h = ((CraftMob) mob).getHandle(); - h.goalSelector.addGoal(1, new PathfinderGoalFloat(h)); - } - } - - @Override - public void addGoalLimitedStrollLand(Creature mob, double velocity, Function checkTargetFunction) { - EntityCreature h = ((CraftCreature) mob).getHandle(); - h.goalSelector.addGoal(7, new PathfinderGoalLimitedRandomStrollLand(h, velocity, checkTargetFunction)); - } - - @Override - public void removeGoalLimitedStrollLand(Creature mob) { - EntityCreature h = ((CraftCreature) mob).getHandle(); - for (PathfinderGoalWrapped wrappedGoal : h.goalSelector.getTasks()) { - if (wrappedGoal.getGoal() instanceof PathfinderGoalLimitedRandomStrollLand) { - wrappedGoal.d(); - h.goalSelector.removeGoal(wrappedGoal.getGoal()); - break; - } - } - } - - @Override - public int getShulkerOpenState(org.bukkit.entity.Entity shulker) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return 0; - } - CraftShulker cs = (CraftShulker) shulker; - return cs.getHandle().eN(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get shulker open state", e); - } - return 0; - } - - @Override - public void setShulkerOpenState(org.bukkit.entity.Entity shulker, int state) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return; - } - state = Math.max(0, Math.min(Byte.MAX_VALUE, state)); - CraftShulker cs = (CraftShulker) shulker; - cs.getHandle().a(state); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set shulker open state", e); - } - } - - @Override - public boolean isPiglinDancing(org.bukkit.entity.Entity piglin) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return false; - } - CraftPiglin cs = (CraftPiglin) piglin; - return cs.getHandle().eU(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get piglin dancing state", e); - } - return false; - } - - @Override - public void setPiglinDancing(org.bukkit.entity.Entity piglin, boolean dancing) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return; - } - CraftPiglin cs = (CraftPiglin) piglin; - cs.getHandle().u(dancing); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set piglin dancing state", e); - } - } - - @Override - public void sendEntityPositionUpdate(org.bukkit.entity.Entity entity) { - Entity handle = ((CraftEntity) entity).getHandle(); - if (fieldEntityTracker == null) { - try { - fieldEntityTracker = Entity.class.getDeclaredField("tracker"); - fieldEntityTracker.setAccessible(true); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get tracker field", e); - } - } - try { - PlayerChunkMap.EntityTracker ete = (PlayerChunkMap.EntityTracker) fieldEntityTracker.get(handle); - if (ete != null) { - PacketPlayOutEntityTeleport positionPacket = new PacketPlayOutEntityTeleport(handle); - ete.trackedPlayers.stream().forEach(viewer -> { - viewer.playerConnection.sendPacket(positionPacket); - }); - } - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not send teleport packet", e); - } - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, double x, double y, double z) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.move(EnumMoveType.SELF, new Vec3D(x, y, z)); - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, Vector v) { - moveEntity(e, v.getX(), v.getY(), v.getZ()); - } - - @Override - public void setEntityHeadRotation(org.bukkit.entity.Entity e, float headRotation) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setHeadRotation(headRotation); - } - - @Override - public float getEntityHeadRotation(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getHeadRotation(); - } - - @Override - public void setEntityYaw(org.bukkit.entity.Entity e, float yaw) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.yaw = yaw; - } - - @Override - public float getEntityYaw(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.yaw; - } - - @Override - public void setEntityPitch(org.bukkit.entity.Entity e, float pitch) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.pitch = pitch; - } - - @Override - public float getEntityPitch(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.pitch; - } - - @Override - public void setEntityNavigationTarget(org.bukkit.entity.Entity entity, Location target, double speed) { - if (entity instanceof Bat) { - try { - if (fieldBatTarget == null) { - fieldBatTarget = EntityBat.class.getDeclaredField(FIELD_BAT_TARGET_NAME); - fieldBatTarget.setAccessible(true); - } - fieldBatTarget.set(((CraftBat) entity).getHandle(), new BlockPosition(target.getX(), target.getY(), target.getZ())); - } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "could not set field", e); - } - } else if (entity instanceof Vex) { - EntityVex entityVex = ((CraftVex) entity).getHandle(); - entityVex.getControllerMove().a(target.getX(), target.getY(), target.getZ(), speed); - if (entityVex.getGoalTarget() == null) { - entityVex.getControllerLook().a(target.getX(), target.getY(), target.getZ(), 180, 20); - } - } else { - ((CraftCreature) entity).getHandle().getNavigation().a(target.getX(), target.getY(), target.getZ(), speed); - } - } - - @Override - public void setEntityLeftHanded(org.bukkit.entity.Entity ent, boolean left) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof EntityInsentient) { - ((EntityInsentient) nmsEntity).setLeftHanded(left); - } - } - - @Override - public boolean isEntityLeftHanded(org.bukkit.entity.Entity ent) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof EntityInsentient) { - return ((EntityInsentient) nmsEntity).isLeftHanded(); - } - return false; - } - - @Override - public boolean isEntityInvisible(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isInvisible(); - } - - @Override - public void setEntityInvisible(org.bukkit.entity.Entity entity, boolean invisible) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setInvisible(invisible); - } - - @Override - public boolean hasEntityNoClip(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noclip; - } - - @Override - public void setEntityNoClip(org.bukkit.entity.Entity entity, boolean noClip) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noclip = noClip; - } - - @Override - public void setOnGround(org.bukkit.entity.Entity entity, boolean onGround) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setOnGround(onGround); - } - - @Override - public org.bukkit.entity.Entity getEntityById(World world, int id) { - Entity entity = ((CraftWorld) world).getHandle().getEntity(id); - return entity == null ? null : entity.getBukkitEntity(); - } - - @Override - public void setPose(org.bukkit.entity.Entity entity, Pose pose) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setPose(EntityPose.values()[pose.ordinal()]); - } - - @Override - public void setWolfAngerTime(org.bukkit.entity.Wolf entity, int timeInTicks) { - EntityWolf nmsEntity = ((CraftWolf) entity).getHandle(); - nmsEntity.setAnger(timeInTicks); - } - - @Override - public void setAggressive(org.bukkit.entity.Mob entity, boolean aggressive) { - net.minecraft.server.v1_16_R2.EntityInsentient nmsEntity = ((CraftMob) entity).getHandle(); - nmsEntity.setAggressive(aggressive); - } - - @Override - public boolean isAggressive(org.bukkit.entity.Mob entity) { - net.minecraft.server.v1_16_R2.EntityInsentient nmsEntity = ((CraftMob) entity).getHandle(); - return nmsEntity.isAggressive(); - } - - @Override - public boolean isCelebrating(org.bukkit.entity.Raider entity) { - throw new UnsupportedOperationException("This feature is not available in this version"); - } - - @Override - public void setCelebrating(org.bukkit.entity.Raider entity, boolean celebrating) { - net.minecraft.server.v1_16_R2.EntityRaider nmsEntity = ((CraftRaider) entity).getHandle(); - nmsEntity.x(celebrating); - } -} diff --git a/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/MiscUtilsImpl.java b/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/MiscUtilsImpl.java deleted file mode 100644 index e4d9b2c..0000000 --- a/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/MiscUtilsImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.cubeside.nmsutils.v1_16_R2; - -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import org.bukkit.Material; - -public class MiscUtilsImpl implements MiscUtils { - private final NMSUtilsImpl nmsUtils; - - public MiscUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void setBlockMapColorTransparent(Material m) { - throw new IllegalStateException("Not available in this version!"); - } -} diff --git a/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/NMSUtilsImpl.java b/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/NMSUtilsImpl.java deleted file mode 100644 index 37425cb..0000000 --- a/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/NMSUtilsImpl.java +++ /dev/null @@ -1,41 +0,0 @@ -package de.cubeside.nmsutils.v1_16_R2; - -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.WorldUtils; -import org.bukkit.plugin.Plugin; - -public class NMSUtilsImpl implements NMSUtils { - private final Plugin plugin; - private EntityUtils entityUtilsImpl; - private WorldUtils worldUtilsImpl; - private MiscUtils miscUtilsImpl; - - public NMSUtilsImpl(Plugin plugin) { - this.plugin = plugin; - this.entityUtilsImpl = new EntityUtilsImpl(this); - this.worldUtilsImpl = new WorldUtilsImpl(this); - this.miscUtilsImpl = new MiscUtilsImpl(this); - } - - @Override - public Plugin getPlugin() { - return plugin; - } - - @Override - public EntityUtils getEntityUtils() { - return entityUtilsImpl; - } - - @Override - public WorldUtils getWorldUtils() { - return worldUtilsImpl; - } - - @Override - public MiscUtils getMiscUtils() { - return miscUtilsImpl; - } -} diff --git a/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/PathfinderGoalLimitedRandomStrollLand.java b/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/PathfinderGoalLimitedRandomStrollLand.java deleted file mode 100644 index 2f14694..0000000 --- a/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/PathfinderGoalLimitedRandomStrollLand.java +++ /dev/null @@ -1,29 +0,0 @@ -package de.cubeside.nmsutils.v1_16_R2; - -import java.util.function.Function; -import net.minecraft.server.v1_16_R2.EntityCreature; -import net.minecraft.server.v1_16_R2.PathfinderGoalRandomStrollLand; -import net.minecraft.server.v1_16_R2.Vec3D; -import org.bukkit.craftbukkit.v1_16_R2.util.CraftVector; -import org.bukkit.util.Vector; - -public class PathfinderGoalLimitedRandomStrollLand extends PathfinderGoalRandomStrollLand { - - private Function checkVectorFunction; - // private EntityCreature entity; - - public PathfinderGoalLimitedRandomStrollLand(EntityCreature entity, double velocity, Function checkVectorFunction) { - super(entity, velocity); - // this.entity = entity; - this.checkVectorFunction = checkVectorFunction; - } - - @Override - protected Vec3D g() { - Vec3D base = super.g(); - if (base == null || checkVectorFunction.apply(CraftVector.toBukkit(base)) != Boolean.TRUE) { - base = null; - } - return base; - } -} diff --git a/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/WorldUtilsImpl.java b/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/WorldUtilsImpl.java deleted file mode 100644 index 20599cd..0000000 --- a/nmsutils-v1_16_R2/src/main/java/de/cubeside/nmsutils/v1_16_R2/WorldUtilsImpl.java +++ /dev/null @@ -1,76 +0,0 @@ -package de.cubeside.nmsutils.v1_16_R2; - -import de.cubeside.nmsutils.WorldUtils; -import java.util.ArrayList; -import java.util.logging.Level; -import net.minecraft.server.v1_16_R2.EntityHuman; -import net.minecraft.server.v1_16_R2.WorldServer; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_16_R2.CraftWorld; -import org.bukkit.entity.Player; - -public class WorldUtilsImpl implements WorldUtils { - private final NMSUtilsImpl nmsUtils; - - public WorldUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public void saveWorldNow(World world) { - world.save(); - - CraftWorld craftWorld = (CraftWorld) world; - WorldServer handle = craftWorld.getHandle(); - try { - handle.save(null, true, false); - } catch (Exception e) { - Bukkit.getLogger().log(Level.SEVERE, "Exception while saving world", e); - } - } - - @Override - public void forceUnloadWorldWithoutSaving(World world, Location playerTarget) { - // final long t0 = System.currentTimeMillis(); - // String worldName = world.getName(); - - if (playerTarget.getWorld() == null || playerTarget.getWorld() == world) { - throw new IllegalArgumentException("Valid target world required"); - } - // move players out of this world - try { - for (Player p : world.getPlayers()) { - if (p.isDead()) { - p.spigot().respawn(); - } - if (p.getWorld() == world) { - p.teleport(playerTarget); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - // remove broken players - CraftWorld craftWorld = (CraftWorld) world; - WorldServer handle = craftWorld.getHandle(); - if (!handle.players.isEmpty()) { - for (EntityHuman human : new ArrayList<>(handle.players)) { - if (human.getBukkitEntity() instanceof Player) { - ((Player) human.getBukkitEntity()).kickPlayer("Connection lost"); - } - } - handle.players.clear(); - } - - // unload the now empty world from the server - if (!nmsUtils.getPlugin().getServer().unloadWorld(world, false)) { - throw new IllegalStateException("Could not unload world"); - } - - // long t = System.currentTimeMillis(); - // nmsUtils.getPlugin().getLogger().info("Unloading world " + worldName + " completed in " + (t - t0) + "ms."); - } - -} diff --git a/nmsutils-v1_16_R3/pom.xml b/nmsutils-v1_16_R3/pom.xml deleted file mode 100644 index ad8d73b..0000000 --- a/nmsutils-v1_16_R3/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - 4.0.0 - nmsutils-v1_16_R3 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - com.destroystokyo.paper - paper - 1.16.5-R0.1-SNAPSHOT - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - - - - maven-compiler-plugin - 3.8.1 - - 11 - - - - - diff --git a/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/EntityUtilsImpl.java b/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/EntityUtilsImpl.java deleted file mode 100644 index 1c655c3..0000000 --- a/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/EntityUtilsImpl.java +++ /dev/null @@ -1,330 +0,0 @@ -package de.cubeside.nmsutils.v1_16_R3; - -import com.destroystokyo.paper.entity.ai.VanillaGoal; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Field; -import java.util.function.Function; -import java.util.logging.Level; -import net.minecraft.server.v1_16_R3.BlockPosition; -import net.minecraft.server.v1_16_R3.Entity; -import net.minecraft.server.v1_16_R3.EntityBat; -import net.minecraft.server.v1_16_R3.EntityCreature; -import net.minecraft.server.v1_16_R3.EntityInsentient; -import net.minecraft.server.v1_16_R3.EntityPose; -import net.minecraft.server.v1_16_R3.EntityVex; -import net.minecraft.server.v1_16_R3.EntityWolf; -import net.minecraft.server.v1_16_R3.EnumMoveType; -import net.minecraft.server.v1_16_R3.PacketPlayOutEntityTeleport; -import net.minecraft.server.v1_16_R3.PathfinderGoalFloat; -import net.minecraft.server.v1_16_R3.PathfinderGoalWrapped; -import net.minecraft.server.v1_16_R3.PlayerChunkMap; -import net.minecraft.server.v1_16_R3.Vec3D; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_16_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftBat; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftMob; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPiglin; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftRaider; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftShulker; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftVex; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftWolf; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Creature; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Mob; -import org.bukkit.entity.Pose; -import org.bukkit.entity.Vex; -import org.bukkit.util.Vector; - -public class EntityUtilsImpl implements EntityUtils { - private static final String FIELD_BAT_TARGET_NAME = "d"; - - private final NMSUtilsImpl nmsUtils; - - private Field fieldEntityTracker; - private Field fieldBatTarget; - - public EntityUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void clearAI(org.bukkit.entity.Entity entity) { - if (entity instanceof Mob) { - nmsUtils.getPlugin().getServer().getMobGoals().removeAllGoals((Mob) entity); - } - } - - @Override - public void addGoalFloat(Mob mob) { - if (!Bukkit.getMobGoals().hasGoal(mob, VanillaGoal.FLOAT)) { - EntityInsentient h = ((CraftMob) mob).getHandle(); - h.goalSelector.addGoal(1, new PathfinderGoalFloat(h)); - } - } - - @Override - public void addGoalLimitedStrollLand(Creature mob, double velocity, Function checkTargetFunction) { - EntityCreature h = ((CraftCreature) mob).getHandle(); - h.goalSelector.addGoal(7, new PathfinderGoalLimitedRandomStrollLand(h, velocity, checkTargetFunction)); - } - - @Override - public void removeGoalLimitedStrollLand(Creature mob) { - EntityCreature h = ((CraftCreature) mob).getHandle(); - for (PathfinderGoalWrapped wrappedGoal : h.goalSelector.getTasks()) { - if (wrappedGoal.getGoal() instanceof PathfinderGoalLimitedRandomStrollLand) { - wrappedGoal.d(); - h.goalSelector.removeGoal(wrappedGoal.getGoal()); - break; - } - } - } - - @Override - public int getShulkerOpenState(org.bukkit.entity.Entity shulker) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return 0; - } - CraftShulker cs = (CraftShulker) shulker; - return cs.getHandle().eN(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get shulker open state", e); - } - return 0; - } - - @Override - public void setShulkerOpenState(org.bukkit.entity.Entity shulker, int state) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return; - } - state = Math.max(0, Math.min(Byte.MAX_VALUE, state)); - CraftShulker cs = (CraftShulker) shulker; - cs.getHandle().a(state); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set shulker open state", e); - } - } - - @Override - public boolean isPiglinDancing(org.bukkit.entity.Entity piglin) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return false; - } - CraftPiglin cs = (CraftPiglin) piglin; - return cs.getHandle().eU(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get piglin dancing state", e); - } - return false; - } - - @Override - public void setPiglinDancing(org.bukkit.entity.Entity piglin, boolean dancing) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return; - } - CraftPiglin cs = (CraftPiglin) piglin; - cs.getHandle().u(dancing); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set piglin dancing state", e); - } - } - - @Override - public void sendEntityPositionUpdate(org.bukkit.entity.Entity entity) { - Entity handle = ((CraftEntity) entity).getHandle(); - if (fieldEntityTracker == null) { - try { - fieldEntityTracker = Entity.class.getDeclaredField("tracker"); - fieldEntityTracker.setAccessible(true); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get tracker field", e); - } - } - try { - PlayerChunkMap.EntityTracker ete = (PlayerChunkMap.EntityTracker) fieldEntityTracker.get(handle); - if (ete != null) { - PacketPlayOutEntityTeleport positionPacket = new PacketPlayOutEntityTeleport(handle); - ete.trackedPlayers.stream().forEach(viewer -> { - viewer.playerConnection.sendPacket(positionPacket); - }); - } - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not send teleport packet", e); - } - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, double x, double y, double z) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.move(EnumMoveType.SELF, new Vec3D(x, y, z)); - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, Vector v) { - moveEntity(e, v.getX(), v.getY(), v.getZ()); - } - - @Override - public void setEntityHeadRotation(org.bukkit.entity.Entity e, float headRotation) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setHeadRotation(headRotation); - } - - @Override - public float getEntityHeadRotation(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getHeadRotation(); - } - - @Override - public void setEntityYaw(org.bukkit.entity.Entity e, float yaw) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.yaw = yaw; - } - - @Override - public float getEntityYaw(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.yaw; - } - - @Override - public void setEntityPitch(org.bukkit.entity.Entity e, float pitch) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.pitch = pitch; - } - - @Override - public float getEntityPitch(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.yaw; - } - - @Override - public void setEntityNavigationTarget(org.bukkit.entity.Entity entity, Location target, double speed) { - if (entity instanceof Bat) { - try { - if (fieldBatTarget == null) { - fieldBatTarget = EntityBat.class.getDeclaredField(FIELD_BAT_TARGET_NAME); - fieldBatTarget.setAccessible(true); - } - fieldBatTarget.set(((CraftBat) entity).getHandle(), new BlockPosition(target.getX(), target.getY(), target.getZ())); - } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "could not set field", e); - } - } else if (entity instanceof Vex) { - EntityVex entityVex = ((CraftVex) entity).getHandle(); - entityVex.getControllerMove().a(target.getX(), target.getY(), target.getZ(), speed); - if (entityVex.getGoalTarget() == null) { - entityVex.getControllerLook().a(target.getX(), target.getY(), target.getZ(), 180, 20); - } - } else { - ((CraftCreature) entity).getHandle().getNavigation().a(target.getX(), target.getY(), target.getZ(), speed); - } - } - - @Override - public void setEntityLeftHanded(org.bukkit.entity.Entity ent, boolean left) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof EntityInsentient) { - ((EntityInsentient) nmsEntity).setLeftHanded(left); - } - } - - @Override - public boolean isEntityLeftHanded(org.bukkit.entity.Entity ent) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof EntityInsentient) { - return ((EntityInsentient) nmsEntity).isLeftHanded(); - } - return false; - } - - @Override - public boolean isEntityInvisible(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isInvisible(); - } - - @Override - public void setEntityInvisible(org.bukkit.entity.Entity entity, boolean invisible) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setInvisible(invisible); - } - - @Override - public boolean hasEntityNoClip(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noclip; - } - - @Override - public void setEntityNoClip(org.bukkit.entity.Entity entity, boolean noClip) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noclip = noClip; - } - - @Override - public void setOnGround(org.bukkit.entity.Entity entity, boolean onGround) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setOnGround(onGround); - } - - @Override - public org.bukkit.entity.Entity getEntityById(World world, int id) { - Entity entity = ((CraftWorld) world).getHandle().getEntity(id); - return entity == null ? null : entity.getBukkitEntity(); - } - - @Override - public void setPose(org.bukkit.entity.Entity entity, Pose pose) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setPose(EntityPose.values()[pose.ordinal()]); - } - - @Override - public void setWolfAngerTime(org.bukkit.entity.Wolf entity, int timeInTicks) { - EntityWolf nmsEntity = ((CraftWolf) entity).getHandle(); - nmsEntity.setAnger(timeInTicks); - } - - @Override - public void setAggressive(org.bukkit.entity.Mob entity, boolean aggressive) { - net.minecraft.server.v1_16_R3.EntityInsentient nmsEntity = ((CraftMob) entity).getHandle(); - nmsEntity.setAggressive(aggressive); - } - - @Override - public boolean isAggressive(org.bukkit.entity.Mob entity) { - net.minecraft.server.v1_16_R3.EntityInsentient nmsEntity = ((CraftMob) entity).getHandle(); - return nmsEntity.isAggressive(); - } - - @Override - public boolean isCelebrating(org.bukkit.entity.Raider entity) { - throw new UnsupportedOperationException("This feature is not available in this version"); - } - - @Override - public void setCelebrating(org.bukkit.entity.Raider entity, boolean celebrating) { - net.minecraft.server.v1_16_R3.EntityRaider nmsEntity = ((CraftRaider) entity).getHandle(); - nmsEntity.x(celebrating); - } -} diff --git a/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/MiscUtilsImpl.java b/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/MiscUtilsImpl.java deleted file mode 100644 index 4c28d3f..0000000 --- a/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/MiscUtilsImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.cubeside.nmsutils.v1_16_R3; - -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import org.bukkit.Material; - -public class MiscUtilsImpl implements MiscUtils { - private final NMSUtilsImpl nmsUtils; - - public MiscUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void setBlockMapColorTransparent(Material m) { - throw new IllegalStateException("Not available in this version!"); - } -} diff --git a/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/NMSUtilsImpl.java b/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/NMSUtilsImpl.java deleted file mode 100644 index 86d0055..0000000 --- a/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/NMSUtilsImpl.java +++ /dev/null @@ -1,41 +0,0 @@ -package de.cubeside.nmsutils.v1_16_R3; - -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.WorldUtils; -import org.bukkit.plugin.Plugin; - -public class NMSUtilsImpl implements NMSUtils { - private final Plugin plugin; - private EntityUtils entityUtilsImpl; - private WorldUtilsImpl worldUtilsImpl; - private MiscUtilsImpl miscUtilsImpl; - - public NMSUtilsImpl(Plugin plugin) { - this.plugin = plugin; - this.entityUtilsImpl = new EntityUtilsImpl(this); - this.worldUtilsImpl = new WorldUtilsImpl(this); - this.miscUtilsImpl = new MiscUtilsImpl(this); - } - - @Override - public Plugin getPlugin() { - return plugin; - } - - @Override - public EntityUtils getEntityUtils() { - return entityUtilsImpl; - } - - @Override - public WorldUtils getWorldUtils() { - return worldUtilsImpl; - } - - @Override - public MiscUtils getMiscUtils() { - return miscUtilsImpl; - } -} diff --git a/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/PathfinderGoalLimitedRandomStrollLand.java b/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/PathfinderGoalLimitedRandomStrollLand.java deleted file mode 100644 index 4dd696c..0000000 --- a/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/PathfinderGoalLimitedRandomStrollLand.java +++ /dev/null @@ -1,29 +0,0 @@ -package de.cubeside.nmsutils.v1_16_R3; - -import java.util.function.Function; -import net.minecraft.server.v1_16_R3.EntityCreature; -import net.minecraft.server.v1_16_R3.PathfinderGoalRandomStrollLand; -import net.minecraft.server.v1_16_R3.Vec3D; -import org.bukkit.craftbukkit.v1_16_R3.util.CraftVector; -import org.bukkit.util.Vector; - -public class PathfinderGoalLimitedRandomStrollLand extends PathfinderGoalRandomStrollLand { - - private Function checkVectorFunction; - // private EntityCreature entity; - - public PathfinderGoalLimitedRandomStrollLand(EntityCreature entity, double velocity, Function checkVectorFunction) { - super(entity, velocity); - // this.entity = entity; - this.checkVectorFunction = checkVectorFunction; - } - - @Override - protected Vec3D g() { - Vec3D base = super.g(); - if (base == null || checkVectorFunction.apply(CraftVector.toBukkit(base)) != Boolean.TRUE) { - base = null; - } - return base; - } -} diff --git a/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/WorldUtilsImpl.java b/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/WorldUtilsImpl.java deleted file mode 100644 index 3af0ef1..0000000 --- a/nmsutils-v1_16_R3/src/main/java/de/cubeside/nmsutils/v1_16_R3/WorldUtilsImpl.java +++ /dev/null @@ -1,80 +0,0 @@ -package de.cubeside.nmsutils.v1_16_R3; - -import de.cubeside.nmsutils.WorldUtils; -import java.util.ArrayList; -import java.util.logging.Level; -import net.minecraft.server.v1_16_R3.EntityHuman; -import net.minecraft.server.v1_16_R3.WorldServer; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_16_R3.CraftWorld; -import org.bukkit.entity.Player; - -public class WorldUtilsImpl implements WorldUtils { - private final NMSUtilsImpl nmsUtils; - - public WorldUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public void saveWorldNow(World world) { - world.save(); - - CraftWorld craftWorld = (CraftWorld) world; - WorldServer handle = craftWorld.getHandle(); - try { - handle.save(null, true, false); - } catch (Exception e) { - Bukkit.getLogger().log(Level.SEVERE, "Exception while saving world", e); - } - } - - @Override - public void forceUnloadWorldWithoutSaving(World world, Location playerTarget) { - // final long t0 = System.currentTimeMillis(); - // String worldName = world.getName(); - - if (playerTarget.getWorld() == null || playerTarget.getWorld() == world) { - throw new IllegalArgumentException("Valid target world required"); - } - // move players out of this world - try { - for (Player p : world.getPlayers()) { - if (p.isDead()) { - p.spigot().respawn(); - } - if (p.getWorld() == world) { - p.teleport(playerTarget); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - // remove broken players - CraftWorld craftWorld = (CraftWorld) world; - WorldServer handle = craftWorld.getHandle(); - if (!handle.getPlayers().isEmpty()) { - for (EntityHuman human : new ArrayList<>(handle.getPlayers())) { - if (human.getBukkitEntity() instanceof Player) { - kickPlayer(((Player) human.getBukkitEntity()), "Connection lost"); - } - } - handle.getPlayers().clear(); - } - - // unload the now empty world from the server - if (!nmsUtils.getPlugin().getServer().unloadWorld(world, false)) { - throw new IllegalStateException("Could not unload world"); - } - - // long t = System.currentTimeMillis(); - // nmsUtils.getPlugin().getLogger().info("Unloading world " + worldName + " completed in " + (t - t0) + "ms."); - } - - @SuppressWarnings("deprecation") - private void kickPlayer(Player player, String message) { - player.kickPlayer(message); - } -} diff --git a/nmsutils-v1_17_R1/pom.xml b/nmsutils-v1_17_R1/pom.xml deleted file mode 100644 index 7028855..0000000 --- a/nmsutils-v1_17_R1/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - 4.0.0 - nmsutils-v1_17_R1 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper-api - 1.17.1-R0.1-SNAPSHOT - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - - - - maven-compiler-plugin - 3.8.1 - - 16 - - - - - diff --git a/nmsutils-v1_17_R1/src/main/java/de/cubeside/nmsutils/v1_17_R1/VersionedNMS.java b/nmsutils-v1_17_R1/src/main/java/de/cubeside/nmsutils/v1_17_R1/VersionedNMS.java deleted file mode 100644 index d719db1..0000000 --- a/nmsutils-v1_17_R1/src/main/java/de/cubeside/nmsutils/v1_17_R1/VersionedNMS.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.cubeside.nmsutils.v1_17_R1; - -import de.cubeside.nmsutils.NMSUtils; -import org.bukkit.plugin.Plugin; - -public class VersionedNMS implements de.cubeside.nmsutils.NMSUtils.VersionedNMS { - @Override - public NMSUtils createNMSUtils(Plugin plugin) throws ReflectiveOperationException { - String serverVersion = NMSUtils.getServerVersion(); - Class pluginClass = null; - if (serverVersion.equals("1.17")) { - pluginClass = Class.forName("de.cubeside.nmsutils.v1_17_R1_0.NMSUtilsImpl"); - } else if (serverVersion.equals("1.17.1")) { - pluginClass = Class.forName("de.cubeside.nmsutils.v1_17_R1_1.NMSUtilsImpl"); - } - if (pluginClass != null) { - return (NMSUtils) pluginClass.getConstructor(Plugin.class).newInstance(plugin); - } - return null; - } -} diff --git a/nmsutils-v1_17_R1_0/pom.xml b/nmsutils-v1_17_R1_0/pom.xml deleted file mode 100644 index f12016c..0000000 --- a/nmsutils-v1_17_R1_0/pom.xml +++ /dev/null @@ -1,79 +0,0 @@ - - 4.0.0 - nmsutils-v1_17_R1_0 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper - 1.17-R0.1-SNAPSHOT - mojang-mapped - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - - - - maven-compiler-plugin - 3.8.1 - - 16 - - - - net.md-5 - specialsource-maven-plugin - 1.2.2 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:1.17-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.17-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.17-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.17-R0.1-SNAPSHOT:jar:remapped-obf - - - - - - - diff --git a/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/EntityUtilsImpl.java b/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/EntityUtilsImpl.java deleted file mode 100644 index 23409f3..0000000 --- a/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/EntityUtilsImpl.java +++ /dev/null @@ -1,369 +0,0 @@ -package de.cubeside.nmsutils.v1_17_R1_0; - -import com.destroystokyo.paper.entity.ai.VanillaGoal; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Field; -import java.util.function.Function; -import java.util.logging.Level; -import net.minecraft.core.BlockPos; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.server.level.ChunkMap; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.WrappedGoal; -import net.minecraft.world.entity.animal.Wolf; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.entity.Visibility; -import net.minecraft.world.phys.Vec3; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_17_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftBat; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftMob; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPiglin; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftRaider; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftShulker; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftVex; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftWolf; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Creature; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Mob; -import org.bukkit.entity.Pose; -import org.bukkit.entity.Vex; -import org.bukkit.util.Vector; - -public class EntityUtilsImpl implements EntityUtils { - private static final String FIELD_BAT_TARGET_NAME = "targetPosition"; - - private final NMSUtilsImpl nmsUtils; - - private Field fieldEntityTracker; - private Field fieldBatTarget; - - public EntityUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void clearAI(org.bukkit.entity.Entity entity) { - if (entity instanceof Mob) { - nmsUtils.getPlugin().getServer().getMobGoals().removeAllGoals((Mob) entity); - } - } - - @Override - public void addGoalFloat(Mob mob) { - if (!Bukkit.getMobGoals().hasGoal(mob, VanillaGoal.FLOAT)) { - net.minecraft.world.entity.Mob h = ((CraftMob) mob).getHandle(); - h.goalSelector.addGoal(1, new FloatGoal(h)); - } - } - - @Override - public void addGoalLimitedStrollLand(Creature mob, double velocity, Function checkTargetFunction) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - h.goalSelector.addGoal(7, new PathfinderGoalLimitedRandomStrollLand(h, velocity, checkTargetFunction)); - } - - @Override - public void removeGoalLimitedStrollLand(Creature mob) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - for (WrappedGoal wrappedGoal : h.goalSelector.getAvailableGoals()) { - if (wrappedGoal.getGoal() instanceof PathfinderGoalLimitedRandomStrollLand goal) { - wrappedGoal.stop(); - h.goalSelector.removeGoal(goal); - break; - } - } - } - - @Override - public int getShulkerOpenState(org.bukkit.entity.Entity shulker) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return 0; - } - CraftShulker cs = (CraftShulker) shulker; - return cs.getHandle().getRawPeekAmount(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get shulker open state", e); - } - return 0; - } - - @Override - public void setShulkerOpenState(org.bukkit.entity.Entity shulker, int state) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return; - } - state = Math.max(0, Math.min(Byte.MAX_VALUE, state)); - CraftShulker cs = (CraftShulker) shulker; - cs.getHandle().setRawPeekAmount(state); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set shulker open state", e); - } - } - - @Override - public boolean isPiglinDancing(org.bukkit.entity.Entity piglin) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return false; - } - CraftPiglin cs = (CraftPiglin) piglin; - return cs.getHandle().isDancing(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get piglin dancing state", e); - } - return false; - } - - @Override - public void setPiglinDancing(org.bukkit.entity.Entity piglin, boolean dancing) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return; - } - CraftPiglin cs = (CraftPiglin) piglin; - cs.getHandle().setDancing(dancing); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set piglin dancing state", e); - } - } - - @Override - public void sendEntityPositionUpdate(org.bukkit.entity.Entity entity) { - Entity handle = ((CraftEntity) entity).getHandle(); - if (fieldEntityTracker == null) { - try { - fieldEntityTracker = Entity.class.getDeclaredField("tracker"); - fieldEntityTracker.setAccessible(true); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get tracker field", e); - } - } - try { - ChunkMap.TrackedEntity ete = (ChunkMap.TrackedEntity) fieldEntityTracker.get(handle); - if (ete != null) { - ClientboundTeleportEntityPacket positionPacket = new ClientboundTeleportEntityPacket(handle); - ete.seenBy.stream().forEach(viewer -> { - viewer.send(positionPacket); - }); - } - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not send teleport packet", e); - } - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, double x, double y, double z) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.move(MoverType.SELF, new Vec3(x, y, z)); - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, Vector v) { - moveEntity(e, v.getX(), v.getY(), v.getZ()); - } - - @Override - public void setEntityHeadRotation(org.bukkit.entity.Entity e, float headRotation) { - Entity handle = ((CraftEntity) e).getHandle(); - if (handle instanceof LivingEntity) { - // required for goats - ((LivingEntity) handle).yHeadRot = headRotation; - } else { - handle.setYHeadRot(headRotation); - } - } - - @Override - public float getEntityHeadRotation(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYHeadRot(); - } - - @Override - public void setEntityYaw(org.bukkit.entity.Entity e, float yaw) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setYRot(yaw); - } - - @Override - public float getEntityYaw(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYRot(); - } - - @Override - public void setEntityPitch(org.bukkit.entity.Entity e, float pitch) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setXRot(pitch); - } - - @Override - public float getEntityPitch(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getXRot(); - } - - @Override - public void setEntityNavigationTarget(org.bukkit.entity.Entity entity, Location target, double speed) { - if (entity instanceof Bat) { - try { - if (fieldBatTarget == null) { - fieldBatTarget = net.minecraft.world.entity.ambient.Bat.class.getDeclaredField(FIELD_BAT_TARGET_NAME); - fieldBatTarget.setAccessible(true); - } - fieldBatTarget.set(((CraftBat) entity).getHandle(), new BlockPos(target.getX(), target.getY(), target.getZ())); - } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "could not set field", e); - } - } else if (entity instanceof Vex) { - net.minecraft.world.entity.monster.Vex entityVex = ((CraftVex) entity).getHandle(); - entityVex.getMoveControl().setWantedPosition(target.getX(), target.getY(), target.getZ(), speed); - if (entityVex.getTarget() == null) { - entityVex.getLookControl().setLookAt(target.getX(), target.getY(), target.getZ(), 180, 20); - } - } else { - ((CraftCreature) entity).getHandle().getNavigation().moveTo(target.getX(), target.getY(), target.getZ(), speed); - } - } - - @Override - public void setEntityLeftHanded(org.bukkit.entity.Entity ent, boolean left) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob) { - ((net.minecraft.world.entity.Mob) nmsEntity).setLeftHanded(left); - } - } - - @Override - public boolean isEntityLeftHanded(org.bukkit.entity.Entity ent) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob) { - return ((net.minecraft.world.entity.Mob) nmsEntity).isLeftHanded(); - } - return false; - } - - @Override - public boolean isEntityInvisible(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isInvisible(); - } - - @Override - public void setEntityInvisible(org.bukkit.entity.Entity entity, boolean invisible) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setInvisible(invisible); - } - - @Override - public boolean hasEntityNoClip(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noPhysics; - } - - @Override - public void setEntityNoClip(org.bukkit.entity.Entity entity, boolean noClip) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noPhysics = noClip; - } - - @Override - public boolean areChunkEntitiesLoaded(Chunk c) { - return ((CraftWorld) c.getWorld()).getHandle().areEntitiesLoaded(ChunkPos.asLong(c.getX(), c.getZ())); - } - - @Override - public void loadChunkEntities(Chunk c) { - int x = c.getX(); - int z = c.getZ(); - World world = c.getWorld(); - if (!world.isChunkLoaded(x, z)) { - world.getChunkAt(x, z); - } - - if (areChunkEntitiesLoaded(c)) { - return; - } - ServerLevel serverLevel = ((CraftWorld) world).getHandle(); - serverLevel.entityManager.updateChunkStatus(new ChunkPos(x, z), Visibility.TRACKED); - // now wait until entities are loaded - if (!areChunkEntitiesLoaded(c)) { - serverLevel.getServer().managedBlock(() -> { - if (areChunkEntitiesLoaded(c)) { - return true; - } - // process chunk inbox - serverLevel.entityManager.tick(); - return areChunkEntitiesLoaded(c); - }); - } - } - - @Override - public void setOnGround(org.bukkit.entity.Entity entity, boolean onGround) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setOnGround(onGround); - } - - @Override - public org.bukkit.entity.Entity getEntityById(World world, int id) { - Entity entity = ((CraftWorld) world).getHandle().getEntity(id); - return entity == null ? null : entity.getBukkitEntity(); - } - - @Override - public void setPose(org.bukkit.entity.Entity entity, Pose pose) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); - } - - @Override - public void setWolfAngerTime(org.bukkit.entity.Wolf entity, int timeInTicks) { - Wolf nmsEntity = ((CraftWolf) entity).getHandle(); - nmsEntity.setRemainingPersistentAngerTime(timeInTicks); - } - - @Override - public void setAggressive(org.bukkit.entity.Mob entity, boolean aggressive) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - nmsEntity.setAggressive(aggressive); - } - - @Override - public boolean isAggressive(org.bukkit.entity.Mob entity) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - return nmsEntity.isAggressive(); - } - - @Override - public boolean isCelebrating(org.bukkit.entity.Raider entity) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - return nmsEntity.isCelebrating(); - } - - @Override - public void setCelebrating(org.bukkit.entity.Raider entity, boolean celebrating) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - nmsEntity.setCelebrating(celebrating); - } -} diff --git a/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/MiscUtilsImpl.java b/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/MiscUtilsImpl.java deleted file mode 100644 index c42467e..0000000 --- a/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/MiscUtilsImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package de.cubeside.nmsutils.v1_17_R1_0; - -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockBehaviour.BlockStateBase; -import net.minecraft.world.level.block.state.BlockBehaviour.Properties; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.MaterialColor; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_17_R1.util.CraftMagicNumbers; - -public class MiscUtilsImpl implements MiscUtils { - private final NMSUtilsImpl nmsUtils; - - private Field fieldBlockBehaviour_properties; - private MaterialColor transparentColor; - private Field fieldBlockStateBase_materialColor; - - public MiscUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void setBlockMapColorTransparent(Material m) { - if (fieldBlockBehaviour_properties == null) { - Class classBlockProperties = BlockBehaviour.Properties.class; - Class classBlockBehaviour = BlockBehaviour.class; - fieldBlockBehaviour_properties = null; - for (Field f : classBlockBehaviour.getDeclaredFields()) { - if (f.getType() == classBlockProperties) { - fieldBlockBehaviour_properties = f; - fieldBlockBehaviour_properties.setAccessible(true); - } - } - if (fieldBlockBehaviour_properties == null) { - throw new IllegalStateException("Could not find block properties field!"); - } - - Class classBlockStateBase = BlockBehaviour.BlockStateBase.class; - for (Field f : classBlockStateBase.getDeclaredFields()) { - if (f.getType() == MaterialColor.class) { - fieldBlockStateBase_materialColor = f; - fieldBlockStateBase_materialColor.setAccessible(true); - } - } - if (fieldBlockStateBase_materialColor == null) { - throw new IllegalStateException("Could not find BlockStateBase materialColor field!"); - } - - try { - Constructor constructorMaterialColor = MaterialColor.class.getDeclaredConstructor(int.class, int.class); - constructorMaterialColor.setAccessible(true); - transparentColor = constructorMaterialColor.newInstance(0, 0); - } catch (ReflectiveOperationException e) { - throw new IllegalStateException("Could not create custom transparent MaterialColor!"); - } - } - - if (!m.isBlock()) { - throw new IllegalArgumentException("Material must be a block"); - } - Block b = CraftMagicNumbers.getBlock(m); - try { - BlockBehaviour.Properties properties = (Properties) fieldBlockBehaviour_properties.get(b); - properties.color(transparentColor); - for (BlockState state : b.getStateDefinition().getPossibleStates()) { - fieldBlockStateBase_materialColor.set(state, transparentColor); - } - } catch (IllegalAccessException e) { - throw new IllegalStateException("Could not set the MaterialColor!"); - } - } -} diff --git a/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/NMSUtilsImpl.java b/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/NMSUtilsImpl.java deleted file mode 100644 index 05b6616..0000000 --- a/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/NMSUtilsImpl.java +++ /dev/null @@ -1,41 +0,0 @@ -package de.cubeside.nmsutils.v1_17_R1_0; - -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.WorldUtils; -import org.bukkit.plugin.Plugin; - -public class NMSUtilsImpl implements NMSUtils { - private final Plugin plugin; - private EntityUtils entityUtilsImpl; - private WorldUtilsImpl worldUtilsImpl; - private MiscUtilsImpl miscUtilsImpl; - - public NMSUtilsImpl(Plugin plugin) { - this.plugin = plugin; - this.entityUtilsImpl = new EntityUtilsImpl(this); - this.worldUtilsImpl = new WorldUtilsImpl(this); - this.miscUtilsImpl = new MiscUtilsImpl(this); - } - - @Override - public Plugin getPlugin() { - return plugin; - } - - @Override - public EntityUtils getEntityUtils() { - return entityUtilsImpl; - } - - @Override - public WorldUtils getWorldUtils() { - return worldUtilsImpl; - } - - @Override - public MiscUtils getMiscUtils() { - return miscUtilsImpl; - } -} diff --git a/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/PathfinderGoalLimitedRandomStrollLand.java b/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/PathfinderGoalLimitedRandomStrollLand.java deleted file mode 100644 index e06d5ed..0000000 --- a/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/PathfinderGoalLimitedRandomStrollLand.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.cubeside.nmsutils.v1_17_R1_0; - -import java.util.function.Function; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.RandomStrollGoal; -import net.minecraft.world.phys.Vec3; -import org.bukkit.util.Vector; - -public class PathfinderGoalLimitedRandomStrollLand extends RandomStrollGoal { - - private Function checkVectorFunction; - // private EntityCreature entity; - - public PathfinderGoalLimitedRandomStrollLand(PathfinderMob entity, double velocity, Function checkVectorFunction) { - super(entity, velocity); - // this.entity = entity; - this.checkVectorFunction = checkVectorFunction; - } - - @Override - protected Vec3 getPosition() { - Vec3 base = super.getPosition(); - if (base == null || checkVectorFunction.apply(org.bukkit.craftbukkit.v1_17_R1.util.CraftVector.toBukkit(base)) != Boolean.TRUE) { - base = null; - } - return base; - } -} diff --git a/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/WorldUtilsImpl.java b/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/WorldUtilsImpl.java deleted file mode 100644 index 8cd4c94..0000000 --- a/nmsutils-v1_17_R1_0/src/main/java/de/cubeside/nmsutils/v1_17_R1_0/WorldUtilsImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -package de.cubeside.nmsutils.v1_17_R1_0; - -import de.cubeside.nmsutils.WorldUtils; -import java.util.ArrayList; -import java.util.logging.Level; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_17_R1.CraftWorld; -import org.bukkit.entity.Player; - -public class WorldUtilsImpl implements WorldUtils { - private final NMSUtilsImpl nmsUtils; - - public WorldUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public void saveWorldNow(World world) { - world.save(); - - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - try { - handle.save(null, true, false); - } catch (Exception e) { - Bukkit.getLogger().log(Level.SEVERE, "Exception while saving world", e); - } - } - - @Override - public void forceUnloadWorldWithoutSaving(World world, Location playerTarget) { - // final long t0 = System.currentTimeMillis(); - // String worldName = world.getName(); - - if (playerTarget.getWorld() == null || playerTarget.getWorld() == world) { - throw new IllegalArgumentException("Valid target world required"); - } - // move players out of this world - try { - for (Player p : world.getPlayers()) { - if (p.isDead()) { - p.spigot().respawn(); - } - if (p.getWorld() == world) { - p.teleport(playerTarget); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - // remove broken players - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - if (!handle.players().isEmpty()) { - for (ServerPlayer human : new ArrayList<>(handle.players())) { - kickPlayer((human.getBukkitEntity()), "Connection lost"); - } - handle.players().clear(); - } - - // unload the now empty world from the server - if (!nmsUtils.getPlugin().getServer().unloadWorld(world, false)) { - throw new IllegalStateException("Could not unload world"); - } - - // long t = System.currentTimeMillis(); - // nmsUtils.getPlugin().getLogger().info("Unloading world " + worldName + " completed in " + (t - t0) + "ms."); - } - - @SuppressWarnings("deprecation") - private void kickPlayer(Player player, String message) { - player.kickPlayer(message); - } -} diff --git a/nmsutils-v1_17_R1_1/pom.xml b/nmsutils-v1_17_R1_1/pom.xml deleted file mode 100644 index c0abda1..0000000 --- a/nmsutils-v1_17_R1_1/pom.xml +++ /dev/null @@ -1,79 +0,0 @@ - - 4.0.0 - nmsutils-v1_17_R1_1 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper - 1.17.1-R0.1-SNAPSHOT - mojang-mapped - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - - - - maven-compiler-plugin - 3.8.1 - - 16 - - - - net.md-5 - specialsource-maven-plugin - 1.2.2 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:1.17.1-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.17.1-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT:jar:remapped-obf - - - - - - - diff --git a/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/EntityUtilsImpl.java b/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/EntityUtilsImpl.java deleted file mode 100644 index 4540917..0000000 --- a/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/EntityUtilsImpl.java +++ /dev/null @@ -1,369 +0,0 @@ -package de.cubeside.nmsutils.v1_17_R1_1; - -import com.destroystokyo.paper.entity.ai.VanillaGoal; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Field; -import java.util.function.Function; -import java.util.logging.Level; -import net.minecraft.core.BlockPos; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.server.level.ChunkMap; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.WrappedGoal; -import net.minecraft.world.entity.animal.Wolf; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.entity.Visibility; -import net.minecraft.world.phys.Vec3; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_17_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftBat; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftMob; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPiglin; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftRaider; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftShulker; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftVex; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftWolf; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Creature; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Mob; -import org.bukkit.entity.Pose; -import org.bukkit.entity.Vex; -import org.bukkit.util.Vector; - -public class EntityUtilsImpl implements EntityUtils { - private static final String FIELD_BAT_TARGET_NAME = "bU"; - - private final NMSUtilsImpl nmsUtils; - - private Field fieldEntityTracker; - private Field fieldBatTarget; - - public EntityUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void clearAI(org.bukkit.entity.Entity entity) { - if (entity instanceof Mob) { - nmsUtils.getPlugin().getServer().getMobGoals().removeAllGoals((Mob) entity); - } - } - - @Override - public void addGoalFloat(Mob mob) { - if (!Bukkit.getMobGoals().hasGoal(mob, VanillaGoal.FLOAT)) { - net.minecraft.world.entity.Mob h = ((CraftMob) mob).getHandle(); - h.goalSelector.addGoal(1, new FloatGoal(h)); - } - } - - @Override - public void addGoalLimitedStrollLand(Creature mob, double velocity, Function checkTargetFunction) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - h.goalSelector.addGoal(7, new PathfinderGoalLimitedRandomStrollLand(h, velocity, checkTargetFunction)); - } - - @Override - public void removeGoalLimitedStrollLand(Creature mob) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - for (WrappedGoal wrappedGoal : h.goalSelector.getAvailableGoals()) { - if (wrappedGoal.getGoal() instanceof PathfinderGoalLimitedRandomStrollLand goal) { - wrappedGoal.stop(); - h.goalSelector.removeGoal(goal); - break; - } - } - } - - @Override - public int getShulkerOpenState(org.bukkit.entity.Entity shulker) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return 0; - } - CraftShulker cs = (CraftShulker) shulker; - return cs.getHandle().getRawPeekAmount(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get shulker open state", e); - } - return 0; - } - - @Override - public void setShulkerOpenState(org.bukkit.entity.Entity shulker, int state) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return; - } - state = Math.max(0, Math.min(Byte.MAX_VALUE, state)); - CraftShulker cs = (CraftShulker) shulker; - cs.getHandle().setRawPeekAmount(state); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set shulker open state", e); - } - } - - @Override - public boolean isPiglinDancing(org.bukkit.entity.Entity piglin) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return false; - } - CraftPiglin cs = (CraftPiglin) piglin; - return cs.getHandle().isDancing(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get piglin dancing state", e); - } - return false; - } - - @Override - public void setPiglinDancing(org.bukkit.entity.Entity piglin, boolean dancing) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return; - } - CraftPiglin cs = (CraftPiglin) piglin; - cs.getHandle().setDancing(dancing); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set piglin dancing state", e); - } - } - - @Override - public void sendEntityPositionUpdate(org.bukkit.entity.Entity entity) { - Entity handle = ((CraftEntity) entity).getHandle(); - if (fieldEntityTracker == null) { - try { - fieldEntityTracker = Entity.class.getDeclaredField("tracker"); - fieldEntityTracker.setAccessible(true); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get tracker field", e); - } - } - try { - ChunkMap.TrackedEntity ete = (ChunkMap.TrackedEntity) fieldEntityTracker.get(handle); - if (ete != null) { - ClientboundTeleportEntityPacket positionPacket = new ClientboundTeleportEntityPacket(handle); - ete.seenBy.stream().forEach(viewer -> { - viewer.send(positionPacket); - }); - } - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not send teleport packet", e); - } - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, double x, double y, double z) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.move(MoverType.SELF, new Vec3(x, y, z)); - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, Vector v) { - moveEntity(e, v.getX(), v.getY(), v.getZ()); - } - - @Override - public void setEntityHeadRotation(org.bukkit.entity.Entity e, float headRotation) { - Entity handle = ((CraftEntity) e).getHandle(); - if (handle instanceof LivingEntity) { - // required for goats - ((LivingEntity) handle).yHeadRot = headRotation; - } else { - handle.setYHeadRot(headRotation); - } - } - - @Override - public float getEntityHeadRotation(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYHeadRot(); - } - - @Override - public void setEntityYaw(org.bukkit.entity.Entity e, float yaw) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setYRot(yaw); - } - - @Override - public float getEntityYaw(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYRot(); - } - - @Override - public void setEntityPitch(org.bukkit.entity.Entity e, float pitch) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setXRot(pitch); - } - - @Override - public float getEntityPitch(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getXRot(); - } - - @Override - public void setEntityNavigationTarget(org.bukkit.entity.Entity entity, Location target, double speed) { - if (entity instanceof Bat) { - try { - if (fieldBatTarget == null) { - fieldBatTarget = net.minecraft.world.entity.ambient.Bat.class.getDeclaredField(FIELD_BAT_TARGET_NAME); - fieldBatTarget.setAccessible(true); - } - fieldBatTarget.set(((CraftBat) entity).getHandle(), new BlockPos(target.getX(), target.getY(), target.getZ())); - } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "could not set field", e); - } - } else if (entity instanceof Vex) { - net.minecraft.world.entity.monster.Vex entityVex = ((CraftVex) entity).getHandle(); - entityVex.getMoveControl().setWantedPosition(target.getX(), target.getY(), target.getZ(), speed); - if (entityVex.getTarget() == null) { - entityVex.getLookControl().setLookAt(target.getX(), target.getY(), target.getZ(), 180, 20); - } - } else { - ((CraftCreature) entity).getHandle().getNavigation().moveTo(target.getX(), target.getY(), target.getZ(), speed); - } - } - - @Override - public void setEntityLeftHanded(org.bukkit.entity.Entity ent, boolean left) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob) { - ((net.minecraft.world.entity.Mob) nmsEntity).setLeftHanded(left); - } - } - - @Override - public boolean isEntityLeftHanded(org.bukkit.entity.Entity ent) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob) { - return ((net.minecraft.world.entity.Mob) nmsEntity).isLeftHanded(); - } - return false; - } - - @Override - public boolean isEntityInvisible(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isInvisible(); - } - - @Override - public void setEntityInvisible(org.bukkit.entity.Entity entity, boolean invisible) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setInvisible(invisible); - } - - @Override - public boolean hasEntityNoClip(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noPhysics; - } - - @Override - public void setEntityNoClip(org.bukkit.entity.Entity entity, boolean noClip) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noPhysics = noClip; - } - - @Override - public boolean areChunkEntitiesLoaded(Chunk c) { - return ((CraftWorld) c.getWorld()).getHandle().areEntitiesLoaded(ChunkPos.asLong(c.getX(), c.getZ())); - } - - @Override - public void loadChunkEntities(Chunk c) { - int x = c.getX(); - int z = c.getZ(); - World world = c.getWorld(); - if (!world.isChunkLoaded(x, z)) { - world.getChunkAt(x, z); - } - - if (areChunkEntitiesLoaded(c)) { - return; - } - ServerLevel serverLevel = ((CraftWorld) world).getHandle(); - serverLevel.entityManager.updateChunkStatus(new ChunkPos(x, z), Visibility.TRACKED); - // now wait until entities are loaded - if (!areChunkEntitiesLoaded(c)) { - serverLevel.getServer().managedBlock(() -> { - if (areChunkEntitiesLoaded(c)) { - return true; - } - // process chunk inbox - serverLevel.entityManager.tick(); - return areChunkEntitiesLoaded(c); - }); - } - } - - @Override - public void setOnGround(org.bukkit.entity.Entity entity, boolean onGround) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setOnGround(onGround); - } - - @Override - public org.bukkit.entity.Entity getEntityById(World world, int id) { - Entity entity = ((CraftWorld) world).getHandle().getEntity(id); - return entity == null ? null : entity.getBukkitEntity(); - } - - @Override - public void setPose(org.bukkit.entity.Entity entity, Pose pose) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); - } - - @Override - public void setWolfAngerTime(org.bukkit.entity.Wolf entity, int timeInTicks) { - Wolf nmsEntity = ((CraftWolf) entity).getHandle(); - nmsEntity.setRemainingPersistentAngerTime(timeInTicks); - } - - @Override - public void setAggressive(org.bukkit.entity.Mob entity, boolean aggressive) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - nmsEntity.setAggressive(aggressive); - } - - @Override - public boolean isAggressive(org.bukkit.entity.Mob entity) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - return nmsEntity.isAggressive(); - } - - @Override - public boolean isCelebrating(org.bukkit.entity.Raider entity) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - return nmsEntity.isCelebrating(); - } - - @Override - public void setCelebrating(org.bukkit.entity.Raider entity, boolean celebrating) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - nmsEntity.setCelebrating(celebrating); - } -} diff --git a/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/MiscUtilsImpl.java b/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/MiscUtilsImpl.java deleted file mode 100644 index 479d185..0000000 --- a/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/MiscUtilsImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package de.cubeside.nmsutils.v1_17_R1_1; - -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockBehaviour.BlockStateBase; -import net.minecraft.world.level.block.state.BlockBehaviour.Properties; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.MaterialColor; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_17_R1.util.CraftMagicNumbers; - -public class MiscUtilsImpl implements MiscUtils { - private final NMSUtilsImpl nmsUtils; - - private Field fieldBlockBehaviour_properties; - private MaterialColor transparentColor; - private Field fieldBlockStateBase_materialColor; - - public MiscUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void setBlockMapColorTransparent(Material m) { - if (fieldBlockBehaviour_properties == null) { - Class classBlockProperties = BlockBehaviour.Properties.class; - Class classBlockBehaviour = BlockBehaviour.class; - fieldBlockBehaviour_properties = null; - for (Field f : classBlockBehaviour.getDeclaredFields()) { - if (f.getType() == classBlockProperties) { - fieldBlockBehaviour_properties = f; - fieldBlockBehaviour_properties.setAccessible(true); - } - } - if (fieldBlockBehaviour_properties == null) { - throw new IllegalStateException("Could not find block properties field!"); - } - - Class classBlockStateBase = BlockBehaviour.BlockStateBase.class; - for (Field f : classBlockStateBase.getDeclaredFields()) { - if (f.getType() == MaterialColor.class) { - fieldBlockStateBase_materialColor = f; - fieldBlockStateBase_materialColor.setAccessible(true); - } - } - if (fieldBlockStateBase_materialColor == null) { - throw new IllegalStateException("Could not find BlockStateBase materialColor field!"); - } - - try { - Constructor constructorMaterialColor = MaterialColor.class.getDeclaredConstructor(int.class, int.class); - constructorMaterialColor.setAccessible(true); - transparentColor = constructorMaterialColor.newInstance(0, 0); - } catch (ReflectiveOperationException e) { - throw new IllegalStateException("Could not create custom transparent MaterialColor!"); - } - } - - if (!m.isBlock()) { - throw new IllegalArgumentException("Material must be a block"); - } - Block b = CraftMagicNumbers.getBlock(m); - try { - BlockBehaviour.Properties properties = (Properties) fieldBlockBehaviour_properties.get(b); - properties.color(transparentColor); - for (BlockState state : b.getStateDefinition().getPossibleStates()) { - fieldBlockStateBase_materialColor.set(state, transparentColor); - } - } catch (IllegalAccessException e) { - throw new IllegalStateException("Could not set the MaterialColor!"); - } - } -} diff --git a/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/NMSUtilsImpl.java b/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/NMSUtilsImpl.java deleted file mode 100644 index 49a6f87..0000000 --- a/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/NMSUtilsImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.cubeside.nmsutils.v1_17_R1_1; - -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.WorldUtils; -import org.bukkit.plugin.Plugin; - -public class NMSUtilsImpl implements NMSUtils { - private final Plugin plugin; - private EntityUtils entityUtilsImpl; - private WorldUtilsImpl worldUtilsImpl; - private MiscUtilsImpl miscUtilsImpl; - - public NMSUtilsImpl(Plugin plugin) { - this.plugin = plugin; - this.entityUtilsImpl = new EntityUtilsImpl(this); - this.worldUtilsImpl = new WorldUtilsImpl(this); - this.miscUtilsImpl = new MiscUtilsImpl(this); - } - - @Override - public Plugin getPlugin() { - return plugin; - } - - @Override - public EntityUtils getEntityUtils() { - return entityUtilsImpl; - } - - @Override - public WorldUtils getWorldUtils() { - return worldUtilsImpl; - } - - @Override - public MiscUtils getMiscUtils() { - return miscUtilsImpl; - } - -} diff --git a/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/PathfinderGoalLimitedRandomStrollLand.java b/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/PathfinderGoalLimitedRandomStrollLand.java deleted file mode 100644 index 1f397d1..0000000 --- a/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/PathfinderGoalLimitedRandomStrollLand.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.cubeside.nmsutils.v1_17_R1_1; - -import java.util.function.Function; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.RandomStrollGoal; -import net.minecraft.world.phys.Vec3; -import org.bukkit.util.Vector; - -public class PathfinderGoalLimitedRandomStrollLand extends RandomStrollGoal { - - private Function checkVectorFunction; - // private EntityCreature entity; - - public PathfinderGoalLimitedRandomStrollLand(PathfinderMob entity, double velocity, Function checkVectorFunction) { - super(entity, velocity, 1, false); - // this.entity = entity; - this.checkVectorFunction = checkVectorFunction; - } - - @Override - protected Vec3 getPosition() { - Vec3 base = super.getPosition(); - if (base == null || checkVectorFunction.apply(org.bukkit.craftbukkit.v1_17_R1.util.CraftVector.toBukkit(base)) != Boolean.TRUE) { - base = null; - } - return base; - } -} diff --git a/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/WorldUtilsImpl.java b/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/WorldUtilsImpl.java deleted file mode 100644 index 27b2b1c..0000000 --- a/nmsutils-v1_17_R1_1/src/main/java/de/cubeside/nmsutils/v1_17_R1_1/WorldUtilsImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -package de.cubeside.nmsutils.v1_17_R1_1; - -import de.cubeside.nmsutils.WorldUtils; -import java.util.ArrayList; -import java.util.logging.Level; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_17_R1.CraftWorld; -import org.bukkit.entity.Player; - -public class WorldUtilsImpl implements WorldUtils { - private final NMSUtilsImpl nmsUtils; - - public WorldUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public void saveWorldNow(World world) { - world.save(); - - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - try { - handle.save(null, true, false); - } catch (Exception e) { - Bukkit.getLogger().log(Level.SEVERE, "Exception while saving world", e); - } - } - - @Override - public void forceUnloadWorldWithoutSaving(World world, Location playerTarget) { - // final long t0 = System.currentTimeMillis(); - // String worldName = world.getName(); - - if (playerTarget.getWorld() == null || playerTarget.getWorld() == world) { - throw new IllegalArgumentException("Valid target world required"); - } - // move players out of this world - try { - for (Player p : world.getPlayers()) { - if (p.isDead()) { - p.spigot().respawn(); - } - if (p.getWorld() == world) { - p.teleport(playerTarget); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - // remove broken players - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - if (!handle.players().isEmpty()) { - for (ServerPlayer human : new ArrayList<>(handle.players())) { - kickPlayer((human.getBukkitEntity()), "Connection lost"); - } - handle.players().clear(); - } - - // unload the now empty world from the server - if (!nmsUtils.getPlugin().getServer().unloadWorld(world, false)) { - throw new IllegalStateException("Could not unload world"); - } - - // long t = System.currentTimeMillis(); - // nmsUtils.getPlugin().getLogger().info("Unloading world " + worldName + " completed in " + (t - t0) + "ms."); - } - - @SuppressWarnings("deprecation") - private void kickPlayer(Player player, String message) { - player.kickPlayer(message); - } -} diff --git a/nmsutils-v1_18_R1/pom.xml b/nmsutils-v1_18_R1/pom.xml deleted file mode 100644 index 9d58036..0000000 --- a/nmsutils-v1_18_R1/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - 4.0.0 - nmsutils-v1_18_R1 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper-api - 1.18.1-R0.1-SNAPSHOT - provided - - - io.papermc.paper - paper-server - 1.18-R0.1-SNAPSHOT - mojang-mapped - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - net.fabricmc - mapping-io - 0.3.0 - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - fabric-repo - https://maven.fabricmc.net/ - - - - - - maven-compiler-plugin - 3.8.1 - - 17 - - - - net.md-5 - specialsource-maven-plugin - 1.2.3 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:1.18.1-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.18.1-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.18.1-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.18.1-R0.1-SNAPSHOT:jar:remapped-obf - - - - - - - diff --git a/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/EntityUtilsImpl.java b/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/EntityUtilsImpl.java deleted file mode 100644 index 3de70d7..0000000 --- a/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/EntityUtilsImpl.java +++ /dev/null @@ -1,358 +0,0 @@ -package de.cubeside.nmsutils.v1_18_R1; - -import com.destroystokyo.paper.entity.ai.VanillaGoal; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.util.ReobfHelper; -import java.lang.reflect.Field; -import java.util.function.Function; -import java.util.logging.Level; -import net.minecraft.core.BlockPos; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.server.level.ChunkMap; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.WrappedGoal; -import net.minecraft.world.entity.animal.Wolf; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.entity.Visibility; -import net.minecraft.world.phys.Vec3; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_18_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftBat; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftMob; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPiglin; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftRaider; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftShulker; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftVex; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftWolf; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Creature; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Mob; -import org.bukkit.entity.Pose; -import org.bukkit.entity.Vex; -import org.bukkit.util.Vector; - -public class EntityUtilsImpl implements EntityUtils { - private static final Field FIELD_BAT_TARGET = ReobfHelper.getFieldByMojangName(net.minecraft.world.entity.ambient.Bat.class, "targetPosition"); // "bW"; - private static final Field FIELD_ENTITY_TRACKER = ReobfHelper.getFieldByMojangName(Entity.class, "tracker"); // "tracker"; - - private final NMSUtilsImpl nmsUtils; - - public EntityUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void clearAI(org.bukkit.entity.Entity entity) { - if (entity instanceof Mob) { - nmsUtils.getPlugin().getServer().getMobGoals().removeAllGoals((Mob) entity); - } - } - - @Override - public void addGoalFloat(Mob mob) { - if (!Bukkit.getMobGoals().hasGoal(mob, VanillaGoal.FLOAT)) { - net.minecraft.world.entity.Mob h = ((CraftMob) mob).getHandle(); - h.goalSelector.addGoal(1, new FloatGoal(h)); - } - } - - @Override - public void addGoalLimitedStrollLand(Creature mob, double velocity, Function checkTargetFunction) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - h.goalSelector.addGoal(7, new PathfinderGoalLimitedRandomStrollLand(h, velocity, checkTargetFunction)); - } - - @Override - public void removeGoalLimitedStrollLand(Creature mob) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - for (WrappedGoal wrappedGoal : h.goalSelector.getAvailableGoals()) { - if (wrappedGoal.getGoal() instanceof PathfinderGoalLimitedRandomStrollLand goal) { - wrappedGoal.stop(); - h.goalSelector.removeGoal(goal); - break; - } - } - } - - @Override - public int getShulkerOpenState(org.bukkit.entity.Entity shulker) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return 0; - } - CraftShulker cs = (CraftShulker) shulker; - return cs.getHandle().getRawPeekAmount(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get shulker open state", e); - } - return 0; - } - - @Override - public void setShulkerOpenState(org.bukkit.entity.Entity shulker, int state) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return; - } - state = Math.max(0, Math.min(Byte.MAX_VALUE, state)); - CraftShulker cs = (CraftShulker) shulker; - cs.getHandle().setRawPeekAmount(state); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set shulker open state", e); - } - } - - @Override - public boolean isPiglinDancing(org.bukkit.entity.Entity piglin) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return false; - } - CraftPiglin cs = (CraftPiglin) piglin; - return cs.getHandle().isDancing(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get piglin dancing state", e); - } - return false; - } - - @Override - public void setPiglinDancing(org.bukkit.entity.Entity piglin, boolean dancing) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return; - } - CraftPiglin cs = (CraftPiglin) piglin; - cs.getHandle().setDancing(dancing); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set piglin dancing state", e); - } - } - - @Override - public void sendEntityPositionUpdate(org.bukkit.entity.Entity entity) { - Entity handle = ((CraftEntity) entity).getHandle(); - try { - ChunkMap.TrackedEntity ete = (ChunkMap.TrackedEntity) FIELD_ENTITY_TRACKER.get(handle); - if (ete != null) { - ClientboundTeleportEntityPacket positionPacket = new ClientboundTeleportEntityPacket(handle); - ete.seenBy.stream().forEach(viewer -> { - viewer.send(positionPacket); - }); - } - } catch (ReflectiveOperationException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not send teleport packet", e); - } - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, double x, double y, double z) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.move(MoverType.SELF, new Vec3(x, y, z)); - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, Vector v) { - moveEntity(e, v.getX(), v.getY(), v.getZ()); - } - - @Override - public void setEntityHeadRotation(org.bukkit.entity.Entity e, float headRotation) { - Entity handle = ((CraftEntity) e).getHandle(); - if (handle instanceof LivingEntity) { - // required for goats - ((LivingEntity) handle).yHeadRot = headRotation; - } else { - handle.setYHeadRot(headRotation); - } - } - - @Override - public float getEntityHeadRotation(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYHeadRot(); - } - - @Override - public void setEntityYaw(org.bukkit.entity.Entity e, float yaw) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setYRot(yaw); - } - - @Override - public float getEntityYaw(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYRot(); - } - - @Override - public void setEntityPitch(org.bukkit.entity.Entity e, float pitch) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setXRot(pitch); - } - - @Override - public float getEntityPitch(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getXRot(); - } - - @Override - public void setEntityNavigationTarget(org.bukkit.entity.Entity entity, Location target, double speed) { - if (entity instanceof Bat) { - try { - FIELD_BAT_TARGET.set(((CraftBat) entity).getHandle(), new BlockPos(target.getX(), target.getY(), target.getZ())); - } catch (ReflectiveOperationException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "could not set field", e); - } - } else if (entity instanceof Vex) { - net.minecraft.world.entity.monster.Vex entityVex = ((CraftVex) entity).getHandle(); - entityVex.getMoveControl().setWantedPosition(target.getX(), target.getY(), target.getZ(), speed); - if (entityVex.getTarget() == null) { - entityVex.getLookControl().setLookAt(target.getX(), target.getY(), target.getZ(), 180, 20); - } - } else if (entity instanceof CraftMob) { - ((CraftMob) entity).getHandle().getNavigation().moveTo(target.getX(), target.getY(), target.getZ(), speed); - } else { - throw new IllegalArgumentException("Cannot set the navigation target for this mob"); - } - } - - @Override - public void setEntityLeftHanded(org.bukkit.entity.Entity ent, boolean left) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - mob.setLeftHanded(left); - } - } - - @Override - public boolean isEntityLeftHanded(org.bukkit.entity.Entity ent) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - return mob.isLeftHanded(); - } - return false; - } - - @Override - public boolean isEntityInvisible(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isInvisible(); - } - - @Override - public void setEntityInvisible(org.bukkit.entity.Entity entity, boolean invisible) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setInvisible(invisible); - } - - @Override - public boolean hasEntityNoClip(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noPhysics; - } - - @Override - public void setEntityNoClip(org.bukkit.entity.Entity entity, boolean noClip) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noPhysics = noClip; - } - - @Override - public boolean areChunkEntitiesLoaded(Chunk c) { - return ((CraftWorld) c.getWorld()).getHandle().areEntitiesLoaded(ChunkPos.asLong(c.getX(), c.getZ())); - } - - @Override - public void loadChunkEntities(Chunk c) { - int x = c.getX(); - int z = c.getZ(); - World world = c.getWorld(); - if (!world.isChunkLoaded(x, z)) { - world.getChunkAt(x, z); - } - - if (areChunkEntitiesLoaded(c)) { - return; - } - ServerLevel serverLevel = ((CraftWorld) world).getHandle(); - serverLevel.entityManager.updateChunkStatus(new ChunkPos(x, z), Visibility.TRACKED); - // now wait until entities are loaded - if (!areChunkEntitiesLoaded(c)) { - serverLevel.getServer().managedBlock(() -> { - if (areChunkEntitiesLoaded(c)) { - return true; - } - // process chunk inbox - serverLevel.entityManager.tick(); - return areChunkEntitiesLoaded(c); - }); - } - } - - @Override - public void setOnGround(org.bukkit.entity.Entity entity, boolean onGround) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setOnGround(onGround); - } - - @Override - public org.bukkit.entity.Entity getEntityById(World world, int id) { - Entity entity = ((CraftWorld) world).getHandle().getEntity(id); - return entity == null ? null : entity.getBukkitEntity(); - } - - @Override - public void setPose(org.bukkit.entity.Entity entity, Pose pose) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); - } - - @Override - public void setWolfAngerTime(org.bukkit.entity.Wolf entity, int timeInTicks) { - Wolf nmsEntity = ((CraftWolf) entity).getHandle(); - nmsEntity.setRemainingPersistentAngerTime(timeInTicks); - } - - @Override - public void setAggressive(org.bukkit.entity.Mob entity, boolean aggressive) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - nmsEntity.setAggressive(aggressive); - } - - @Override - public boolean isAggressive(org.bukkit.entity.Mob entity) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - return nmsEntity.isAggressive(); - } - - @Override - public boolean isCelebrating(org.bukkit.entity.Raider entity) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - return nmsEntity.isCelebrating(); - } - - @Override - public void setCelebrating(org.bukkit.entity.Raider entity, boolean celebrating) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - nmsEntity.setCelebrating(celebrating); - } -} diff --git a/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/MiscUtilsImpl.java b/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/MiscUtilsImpl.java deleted file mode 100644 index b811278..0000000 --- a/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/MiscUtilsImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package de.cubeside.nmsutils.v1_18_R1; - -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockBehaviour.BlockStateBase; -import net.minecraft.world.level.block.state.BlockBehaviour.Properties; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.MaterialColor; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_18_R1.util.CraftMagicNumbers; - -public class MiscUtilsImpl implements MiscUtils { - private final NMSUtilsImpl nmsUtils; - - private Field fieldBlockBehaviour_properties; - private MaterialColor transparentColor; - private Field fieldBlockStateBase_materialColor; - - public MiscUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void setBlockMapColorTransparent(Material m) { - if (fieldBlockBehaviour_properties == null) { - Class classBlockProperties = BlockBehaviour.Properties.class; - Class classBlockBehaviour = BlockBehaviour.class; - fieldBlockBehaviour_properties = null; - for (Field f : classBlockBehaviour.getDeclaredFields()) { - if (f.getType() == classBlockProperties) { - fieldBlockBehaviour_properties = f; - fieldBlockBehaviour_properties.setAccessible(true); - } - } - if (fieldBlockBehaviour_properties == null) { - throw new IllegalStateException("Could not find block properties field!"); - } - - Class classBlockStateBase = BlockBehaviour.BlockStateBase.class; - for (Field f : classBlockStateBase.getDeclaredFields()) { - if (f.getType() == MaterialColor.class) { - fieldBlockStateBase_materialColor = f; - fieldBlockStateBase_materialColor.setAccessible(true); - } - } - if (fieldBlockStateBase_materialColor == null) { - throw new IllegalStateException("Could not find BlockStateBase materialColor field!"); - } - - try { - Constructor constructorMaterialColor = MaterialColor.class.getDeclaredConstructor(int.class, int.class); - constructorMaterialColor.setAccessible(true); - transparentColor = constructorMaterialColor.newInstance(0, 0); - } catch (ReflectiveOperationException e) { - throw new IllegalStateException("Could not create custom transparent MaterialColor!"); - } - } - - if (!m.isBlock()) { - throw new IllegalArgumentException("Material must be a block"); - } - Block b = CraftMagicNumbers.getBlock(m); - try { - BlockBehaviour.Properties properties = (Properties) fieldBlockBehaviour_properties.get(b); - properties.color(transparentColor); - for (BlockState state : b.getStateDefinition().getPossibleStates()) { - fieldBlockStateBase_materialColor.set(state, transparentColor); - } - } catch (IllegalAccessException e) { - throw new IllegalStateException("Could not set the MaterialColor!"); - } - } -} diff --git a/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/NMSUtilsImpl.java b/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/NMSUtilsImpl.java deleted file mode 100644 index 7108cd2..0000000 --- a/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/NMSUtilsImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.cubeside.nmsutils.v1_18_R1; - -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.WorldUtils; -import org.bukkit.plugin.Plugin; - -public class NMSUtilsImpl implements NMSUtils { - private final Plugin plugin; - private EntityUtils entityUtilsImpl; - private WorldUtilsImpl worldUtilsImpl; - private MiscUtilsImpl miscUtilsImpl; - - public NMSUtilsImpl(Plugin plugin) { - this.plugin = plugin; - this.entityUtilsImpl = new EntityUtilsImpl(this); - this.worldUtilsImpl = new WorldUtilsImpl(this); - this.miscUtilsImpl = new MiscUtilsImpl(this); - // Remapper.foo(net.minecraft.world.entity.ambient.Bat.class); - } - - @Override - public Plugin getPlugin() { - return plugin; - } - - @Override - public EntityUtils getEntityUtils() { - return entityUtilsImpl; - } - - @Override - public WorldUtils getWorldUtils() { - return worldUtilsImpl; - } - - @Override - public MiscUtils getMiscUtils() { - return miscUtilsImpl; - } -} diff --git a/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/PathfinderGoalLimitedRandomStrollLand.java b/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/PathfinderGoalLimitedRandomStrollLand.java deleted file mode 100644 index 6e326cd..0000000 --- a/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/PathfinderGoalLimitedRandomStrollLand.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.cubeside.nmsutils.v1_18_R1; - -import java.util.function.Function; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.RandomStrollGoal; -import net.minecraft.world.phys.Vec3; -import org.bukkit.util.Vector; - -public class PathfinderGoalLimitedRandomStrollLand extends RandomStrollGoal { - - private Function checkVectorFunction; - // private EntityCreature entity; - - public PathfinderGoalLimitedRandomStrollLand(PathfinderMob entity, double velocity, Function checkVectorFunction) { - super(entity, velocity, 1, false); - // this.entity = entity; - this.checkVectorFunction = checkVectorFunction; - } - - @Override - protected Vec3 getPosition() { - Vec3 base = super.getPosition(); - if (base == null || checkVectorFunction.apply(org.bukkit.craftbukkit.v1_18_R1.util.CraftVector.toBukkit(base)) != Boolean.TRUE) { - base = null; - } - return base; - } -} diff --git a/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/WorldUtilsImpl.java b/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/WorldUtilsImpl.java deleted file mode 100644 index ced94d3..0000000 --- a/nmsutils-v1_18_R1/src/main/java/de/cubeside/nmsutils/v1_18_R1/WorldUtilsImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -package de.cubeside.nmsutils.v1_18_R1; - -import de.cubeside.nmsutils.WorldUtils; -import java.util.ArrayList; -import java.util.logging.Level; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_18_R1.CraftWorld; -import org.bukkit.entity.Player; - -public class WorldUtilsImpl implements WorldUtils { - private final NMSUtilsImpl nmsUtils; - - public WorldUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public void saveWorldNow(World world) { - world.save(); - - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - try { - handle.save(null, true, false); - } catch (Exception e) { - Bukkit.getLogger().log(Level.SEVERE, "Exception while saving world", e); - } - } - - @Override - public void forceUnloadWorldWithoutSaving(World world, Location playerTarget) { - // final long t0 = System.currentTimeMillis(); - // String worldName = world.getName(); - - if (playerTarget.getWorld() == null || playerTarget.getWorld() == world) { - throw new IllegalArgumentException("Valid target world required"); - } - // move players out of this world - try { - for (Player p : world.getPlayers()) { - if (p.isDead()) { - p.spigot().respawn(); - } - if (p.getWorld() == world) { - p.teleport(playerTarget); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - // remove broken players - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - if (!handle.players().isEmpty()) { - for (ServerPlayer human : new ArrayList<>(handle.players())) { - kickPlayer((human.getBukkitEntity()), "Connection lost"); - } - handle.players().clear(); - } - - // unload the now empty world from the server - if (!nmsUtils.getPlugin().getServer().unloadWorld(world, false)) { - throw new IllegalStateException("Could not unload world"); - } - - // long t = System.currentTimeMillis(); - // nmsUtils.getPlugin().getLogger().info("Unloading world " + worldName + " completed in " + (t - t0) + "ms."); - } - - @SuppressWarnings("deprecation") - private void kickPlayer(Player player, String message) { - player.kickPlayer(message); - } -} diff --git a/nmsutils-v1_18_R2/pom.xml b/nmsutils-v1_18_R2/pom.xml deleted file mode 100644 index 140e2d9..0000000 --- a/nmsutils-v1_18_R2/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - 4.0.0 - nmsutils-v1_18_R2 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper-api - 1.18.2-R0.1-SNAPSHOT - provided - - - io.papermc.paper - paper-server - 1.18.2-R0.1-SNAPSHOT - mojang-mapped - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - net.fabricmc - mapping-io - 0.3.0 - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - fabric-repo - https://maven.fabricmc.net/ - - - - - - maven-compiler-plugin - 3.8.1 - - 17 - - - - net.md-5 - specialsource-maven-plugin - 1.2.3 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:1.18.2-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.18.2-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.18.2-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.18.2-R0.1-SNAPSHOT:jar:remapped-obf - - - - - - - diff --git a/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/EntityUtilsImpl.java b/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/EntityUtilsImpl.java deleted file mode 100644 index fc4aa57..0000000 --- a/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/EntityUtilsImpl.java +++ /dev/null @@ -1,358 +0,0 @@ -package de.cubeside.nmsutils.v1_18_R2; - -import com.destroystokyo.paper.entity.ai.VanillaGoal; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.util.ReobfHelper; -import java.lang.reflect.Field; -import java.util.function.Function; -import java.util.logging.Level; -import net.minecraft.core.BlockPos; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.server.level.ChunkMap; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.WrappedGoal; -import net.minecraft.world.entity.animal.Wolf; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.entity.Visibility; -import net.minecraft.world.phys.Vec3; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftBat; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftMob; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPiglin; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftRaider; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftShulker; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftVex; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftWolf; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Creature; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Mob; -import org.bukkit.entity.Pose; -import org.bukkit.entity.Vex; -import org.bukkit.util.Vector; - -public class EntityUtilsImpl implements EntityUtils { - private static final Field FIELD_BAT_TARGET = ReobfHelper.getFieldByMojangName(net.minecraft.world.entity.ambient.Bat.class, "targetPosition"); // "bW"; - private static final Field FIELD_ENTITY_TRACKER = ReobfHelper.getFieldByMojangName(Entity.class, "tracker"); // "tracker"; - - private final NMSUtilsImpl nmsUtils; - - public EntityUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void clearAI(org.bukkit.entity.Entity entity) { - if (entity instanceof Mob) { - nmsUtils.getPlugin().getServer().getMobGoals().removeAllGoals((Mob) entity); - } - } - - @Override - public void addGoalFloat(Mob mob) { - if (!Bukkit.getMobGoals().hasGoal(mob, VanillaGoal.FLOAT)) { - net.minecraft.world.entity.Mob h = ((CraftMob) mob).getHandle(); - h.goalSelector.addGoal(1, new FloatGoal(h)); - } - } - - @Override - public void addGoalLimitedStrollLand(Creature mob, double velocity, Function checkTargetFunction) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - h.goalSelector.addGoal(7, new PathfinderGoalLimitedRandomStrollLand(h, velocity, checkTargetFunction)); - } - - @Override - public void removeGoalLimitedStrollLand(Creature mob) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - for (WrappedGoal wrappedGoal : h.goalSelector.getAvailableGoals()) { - if (wrappedGoal.getGoal() instanceof PathfinderGoalLimitedRandomStrollLand goal) { - wrappedGoal.stop(); - h.goalSelector.removeGoal(goal); - break; - } - } - } - - @Override - public int getShulkerOpenState(org.bukkit.entity.Entity shulker) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return 0; - } - CraftShulker cs = (CraftShulker) shulker; - return cs.getHandle().getRawPeekAmount(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get shulker open state", e); - } - return 0; - } - - @Override - public void setShulkerOpenState(org.bukkit.entity.Entity shulker, int state) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return; - } - state = Math.max(0, Math.min(Byte.MAX_VALUE, state)); - CraftShulker cs = (CraftShulker) shulker; - cs.getHandle().setRawPeekAmount(state); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set shulker open state", e); - } - } - - @Override - public boolean isPiglinDancing(org.bukkit.entity.Entity piglin) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return false; - } - CraftPiglin cs = (CraftPiglin) piglin; - return cs.getHandle().isDancing(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get piglin dancing state", e); - } - return false; - } - - @Override - public void setPiglinDancing(org.bukkit.entity.Entity piglin, boolean dancing) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return; - } - CraftPiglin cs = (CraftPiglin) piglin; - cs.getHandle().setDancing(dancing); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set piglin dancing state", e); - } - } - - @Override - public void sendEntityPositionUpdate(org.bukkit.entity.Entity entity) { - Entity handle = ((CraftEntity) entity).getHandle(); - try { - ChunkMap.TrackedEntity ete = (ChunkMap.TrackedEntity) FIELD_ENTITY_TRACKER.get(handle); - if (ete != null) { - ClientboundTeleportEntityPacket positionPacket = new ClientboundTeleportEntityPacket(handle); - ete.seenBy.stream().forEach(viewer -> { - viewer.send(positionPacket); - }); - } - } catch (ReflectiveOperationException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not send teleport packet", e); - } - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, double x, double y, double z) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.move(MoverType.SELF, new Vec3(x, y, z)); - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, Vector v) { - moveEntity(e, v.getX(), v.getY(), v.getZ()); - } - - @Override - public void setEntityHeadRotation(org.bukkit.entity.Entity e, float headRotation) { - Entity handle = ((CraftEntity) e).getHandle(); - if (handle instanceof LivingEntity) { - // required for goats - ((LivingEntity) handle).yHeadRot = headRotation; - } else { - handle.setYHeadRot(headRotation); - } - } - - @Override - public float getEntityHeadRotation(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYHeadRot(); - } - - @Override - public void setEntityYaw(org.bukkit.entity.Entity e, float yaw) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setYRot(yaw); - } - - @Override - public float getEntityYaw(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYRot(); - } - - @Override - public void setEntityPitch(org.bukkit.entity.Entity e, float pitch) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setXRot(pitch); - } - - @Override - public float getEntityPitch(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getXRot(); - } - - @Override - public void setEntityNavigationTarget(org.bukkit.entity.Entity entity, Location target, double speed) { - if (entity instanceof Bat) { - try { - FIELD_BAT_TARGET.set(((CraftBat) entity).getHandle(), new BlockPos(target.getX(), target.getY(), target.getZ())); - } catch (ReflectiveOperationException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "could not set field", e); - } - } else if (entity instanceof Vex) { - net.minecraft.world.entity.monster.Vex entityVex = ((CraftVex) entity).getHandle(); - entityVex.getMoveControl().setWantedPosition(target.getX(), target.getY(), target.getZ(), speed); - if (entityVex.getTarget() == null) { - entityVex.getLookControl().setLookAt(target.getX(), target.getY(), target.getZ(), 180, 20); - } - } else if (entity instanceof CraftMob) { - ((CraftMob) entity).getHandle().getNavigation().moveTo(target.getX(), target.getY(), target.getZ(), speed); - } else { - throw new IllegalArgumentException("Cannot set the navigation target for this mob"); - } - } - - @Override - public void setEntityLeftHanded(org.bukkit.entity.Entity ent, boolean left) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - mob.setLeftHanded(left); - } - } - - @Override - public boolean isEntityLeftHanded(org.bukkit.entity.Entity ent) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - return mob.isLeftHanded(); - } - return false; - } - - @Override - public boolean isEntityInvisible(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isInvisible(); - } - - @Override - public void setEntityInvisible(org.bukkit.entity.Entity entity, boolean invisible) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setInvisible(invisible); - } - - @Override - public boolean hasEntityNoClip(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noPhysics; - } - - @Override - public void setEntityNoClip(org.bukkit.entity.Entity entity, boolean noClip) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noPhysics = noClip; - } - - @Override - public boolean areChunkEntitiesLoaded(Chunk c) { - return ((CraftWorld) c.getWorld()).getHandle().areEntitiesLoaded(ChunkPos.asLong(c.getX(), c.getZ())); - } - - @Override - public void loadChunkEntities(Chunk c) { - int x = c.getX(); - int z = c.getZ(); - World world = c.getWorld(); - if (!world.isChunkLoaded(x, z)) { - world.getChunkAt(x, z); - } - - if (areChunkEntitiesLoaded(c)) { - return; - } - ServerLevel serverLevel = ((CraftWorld) world).getHandle(); - serverLevel.entityManager.updateChunkStatus(new ChunkPos(x, z), Visibility.TRACKED); - // now wait until entities are loaded - if (!areChunkEntitiesLoaded(c)) { - serverLevel.getServer().managedBlock(() -> { - if (areChunkEntitiesLoaded(c)) { - return true; - } - // process chunk inbox - serverLevel.entityManager.tick(); - return areChunkEntitiesLoaded(c); - }); - } - } - - @Override - public void setOnGround(org.bukkit.entity.Entity entity, boolean onGround) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setOnGround(onGround); - } - - @Override - public org.bukkit.entity.Entity getEntityById(World world, int id) { - Entity entity = ((CraftWorld) world).getHandle().getEntity(id); - return entity == null ? null : entity.getBukkitEntity(); - } - - @Override - public void setPose(org.bukkit.entity.Entity entity, Pose pose) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); - } - - @Override - public void setWolfAngerTime(org.bukkit.entity.Wolf entity, int timeInTicks) { - Wolf nmsEntity = ((CraftWolf) entity).getHandle(); - nmsEntity.setRemainingPersistentAngerTime(timeInTicks); - } - - @Override - public void setAggressive(org.bukkit.entity.Mob entity, boolean aggressive) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - nmsEntity.setAggressive(aggressive); - } - - @Override - public boolean isAggressive(org.bukkit.entity.Mob entity) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - return nmsEntity.isAggressive(); - } - - @Override - public boolean isCelebrating(org.bukkit.entity.Raider entity) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - return nmsEntity.isCelebrating(); - } - - @Override - public void setCelebrating(org.bukkit.entity.Raider entity, boolean celebrating) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - nmsEntity.setCelebrating(celebrating); - } -} diff --git a/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/MiscUtilsImpl.java b/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/MiscUtilsImpl.java deleted file mode 100644 index 50af3b2..0000000 --- a/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/MiscUtilsImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package de.cubeside.nmsutils.v1_18_R2; - -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockBehaviour.BlockStateBase; -import net.minecraft.world.level.block.state.BlockBehaviour.Properties; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.MaterialColor; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_18_R2.util.CraftMagicNumbers; - -public class MiscUtilsImpl implements MiscUtils { - private final NMSUtilsImpl nmsUtils; - - private Field fieldBlockBehaviour_properties; - private MaterialColor transparentColor; - private Field fieldBlockStateBase_materialColor; - - public MiscUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void setBlockMapColorTransparent(Material m) { - if (fieldBlockBehaviour_properties == null) { - Class classBlockProperties = BlockBehaviour.Properties.class; - Class classBlockBehaviour = BlockBehaviour.class; - fieldBlockBehaviour_properties = null; - for (Field f : classBlockBehaviour.getDeclaredFields()) { - if (f.getType() == classBlockProperties) { - fieldBlockBehaviour_properties = f; - fieldBlockBehaviour_properties.setAccessible(true); - } - } - if (fieldBlockBehaviour_properties == null) { - throw new IllegalStateException("Could not find block properties field!"); - } - - Class classBlockStateBase = BlockBehaviour.BlockStateBase.class; - for (Field f : classBlockStateBase.getDeclaredFields()) { - if (f.getType() == MaterialColor.class) { - fieldBlockStateBase_materialColor = f; - fieldBlockStateBase_materialColor.setAccessible(true); - } - } - if (fieldBlockStateBase_materialColor == null) { - throw new IllegalStateException("Could not find BlockStateBase materialColor field!"); - } - - try { - Constructor constructorMaterialColor = MaterialColor.class.getDeclaredConstructor(int.class, int.class); - constructorMaterialColor.setAccessible(true); - transparentColor = constructorMaterialColor.newInstance(0, 0); - } catch (ReflectiveOperationException e) { - throw new IllegalStateException("Could not create custom transparent MaterialColor!"); - } - } - - if (!m.isBlock()) { - throw new IllegalArgumentException("Material must be a block"); - } - Block b = CraftMagicNumbers.getBlock(m); - try { - BlockBehaviour.Properties properties = (Properties) fieldBlockBehaviour_properties.get(b); - properties.color(transparentColor); - for (BlockState state : b.getStateDefinition().getPossibleStates()) { - fieldBlockStateBase_materialColor.set(state, transparentColor); - } - } catch (IllegalAccessException e) { - throw new IllegalStateException("Could not set the MaterialColor!"); - } - } -} diff --git a/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/NMSUtilsImpl.java b/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/NMSUtilsImpl.java deleted file mode 100644 index f6dd2e0..0000000 --- a/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/NMSUtilsImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.cubeside.nmsutils.v1_18_R2; - -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.WorldUtils; -import org.bukkit.plugin.Plugin; - -public class NMSUtilsImpl implements NMSUtils { - private final Plugin plugin; - private EntityUtils entityUtilsImpl; - private WorldUtilsImpl worldUtilsImpl; - private MiscUtilsImpl miscUtilsImpl; - - public NMSUtilsImpl(Plugin plugin) { - this.plugin = plugin; - this.entityUtilsImpl = new EntityUtilsImpl(this); - this.worldUtilsImpl = new WorldUtilsImpl(this); - this.miscUtilsImpl = new MiscUtilsImpl(this); - // Remapper.foo(net.minecraft.world.entity.ambient.Bat.class); - } - - @Override - public Plugin getPlugin() { - return plugin; - } - - @Override - public EntityUtils getEntityUtils() { - return entityUtilsImpl; - } - - @Override - public WorldUtils getWorldUtils() { - return worldUtilsImpl; - } - - @Override - public MiscUtils getMiscUtils() { - return miscUtilsImpl; - } -} diff --git a/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/PathfinderGoalLimitedRandomStrollLand.java b/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/PathfinderGoalLimitedRandomStrollLand.java deleted file mode 100644 index 0980228..0000000 --- a/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/PathfinderGoalLimitedRandomStrollLand.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.cubeside.nmsutils.v1_18_R2; - -import java.util.function.Function; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.RandomStrollGoal; -import net.minecraft.world.phys.Vec3; -import org.bukkit.util.Vector; - -public class PathfinderGoalLimitedRandomStrollLand extends RandomStrollGoal { - - private Function checkVectorFunction; - // private EntityCreature entity; - - public PathfinderGoalLimitedRandomStrollLand(PathfinderMob entity, double velocity, Function checkVectorFunction) { - super(entity, velocity, 1, false); - // this.entity = entity; - this.checkVectorFunction = checkVectorFunction; - } - - @Override - protected Vec3 getPosition() { - Vec3 base = super.getPosition(); - if (base == null || checkVectorFunction.apply(org.bukkit.craftbukkit.v1_18_R2.util.CraftVector.toBukkit(base)) != Boolean.TRUE) { - base = null; - } - return base; - } -} diff --git a/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/WorldUtilsImpl.java b/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/WorldUtilsImpl.java deleted file mode 100644 index 4b570de..0000000 --- a/nmsutils-v1_18_R2/src/main/java/de/cubeside/nmsutils/v1_18_R2/WorldUtilsImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -package de.cubeside.nmsutils.v1_18_R2; - -import de.cubeside.nmsutils.WorldUtils; -import java.util.ArrayList; -import java.util.logging.Level; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; -import org.bukkit.entity.Player; - -public class WorldUtilsImpl implements WorldUtils { - private final NMSUtilsImpl nmsUtils; - - public WorldUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public void saveWorldNow(World world) { - world.save(); - - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - try { - handle.save(null, true, false); - } catch (Exception e) { - Bukkit.getLogger().log(Level.SEVERE, "Exception while saving world", e); - } - } - - @Override - public void forceUnloadWorldWithoutSaving(World world, Location playerTarget) { - // final long t0 = System.currentTimeMillis(); - // String worldName = world.getName(); - - if (playerTarget.getWorld() == null || playerTarget.getWorld() == world) { - throw new IllegalArgumentException("Valid target world required"); - } - // move players out of this world - try { - for (Player p : world.getPlayers()) { - if (p.isDead()) { - p.spigot().respawn(); - } - if (p.getWorld() == world) { - p.teleport(playerTarget); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - // remove broken players - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - if (!handle.players().isEmpty()) { - for (ServerPlayer human : new ArrayList<>(handle.players())) { - kickPlayer((human.getBukkitEntity()), "Connection lost"); - } - handle.players().clear(); - } - - // unload the now empty world from the server - if (!nmsUtils.getPlugin().getServer().unloadWorld(world, false)) { - throw new IllegalStateException("Could not unload world"); - } - - // long t = System.currentTimeMillis(); - // nmsUtils.getPlugin().getLogger().info("Unloading world " + worldName + " completed in " + (t - t0) + "ms."); - } - - @SuppressWarnings("deprecation") - private void kickPlayer(Player player, String message) { - player.kickPlayer(message); - } -} diff --git a/nmsutils-v1_19_R1/pom.xml b/nmsutils-v1_19_R1/pom.xml deleted file mode 100644 index 4156b8d..0000000 --- a/nmsutils-v1_19_R1/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - 4.0.0 - nmsutils-v1_19_R1 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper-api - 1.19.1-R0.1-SNAPSHOT - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - - - - maven-compiler-plugin - 3.8.1 - - 17 - - - - - diff --git a/nmsutils-v1_19_R1/src/main/java/de/cubeside/nmsutils/v1_19_R1/VersionedNMS.java b/nmsutils-v1_19_R1/src/main/java/de/cubeside/nmsutils/v1_19_R1/VersionedNMS.java deleted file mode 100644 index d6ae6aa..0000000 --- a/nmsutils-v1_19_R1/src/main/java/de/cubeside/nmsutils/v1_19_R1/VersionedNMS.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R1; - -import de.cubeside.nmsutils.NMSUtils; -import org.bukkit.plugin.Plugin; - -public class VersionedNMS implements de.cubeside.nmsutils.NMSUtils.VersionedNMS { - @Override - public NMSUtils createNMSUtils(Plugin plugin) throws ReflectiveOperationException { - String serverVersion = NMSUtils.getServerVersion(); - Class pluginClass = null; - if (serverVersion.equals("1.19")) { - pluginClass = Class.forName("de.cubeside.nmsutils.v1_19_R1_0.NMSUtilsImpl"); - } else if (serverVersion.equals("1.19.1") || serverVersion.equals("1.19.2")) { - pluginClass = Class.forName("de.cubeside.nmsutils.v1_19_R1_1.NMSUtilsImpl"); - } - if (pluginClass != null) { - return (NMSUtils) pluginClass.getConstructor(Plugin.class).newInstance(plugin); - } - return null; - } -} diff --git a/nmsutils-v1_19_R1_0/pom.xml b/nmsutils-v1_19_R1_0/pom.xml deleted file mode 100644 index 34dc07d..0000000 --- a/nmsutils-v1_19_R1_0/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - 4.0.0 - nmsutils-v1_19_R1_0 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper-api - 1.19-R0.1-SNAPSHOT - provided - - - io.papermc.paper - paper-server - 1.19-R0.1-SNAPSHOT - mojang-mapped - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - net.fabricmc - mapping-io - 0.3.0 - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - fabric-repo - https://maven.fabricmc.net/ - - - - - - maven-compiler-plugin - 3.8.1 - - 17 - - - - net.md-5 - specialsource-maven-plugin - 1.2.3 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:1.19-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.19-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.19-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.19-R0.1-SNAPSHOT:jar:remapped-obf - - - - - - - diff --git a/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/EntityUtilsImpl.java b/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/EntityUtilsImpl.java deleted file mode 100644 index cb3ac88..0000000 --- a/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/EntityUtilsImpl.java +++ /dev/null @@ -1,358 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R1_0; - -import com.destroystokyo.paper.entity.ai.VanillaGoal; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.util.ReobfHelper; -import java.lang.reflect.Field; -import java.util.function.Function; -import java.util.logging.Level; -import net.minecraft.core.BlockPos; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.server.level.ChunkMap; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.WrappedGoal; -import net.minecraft.world.entity.animal.Wolf; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.entity.Visibility; -import net.minecraft.world.phys.Vec3; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftBat; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftMob; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPiglin; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftRaider; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftShulker; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftVex; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftWolf; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Creature; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Mob; -import org.bukkit.entity.Pose; -import org.bukkit.entity.Vex; -import org.bukkit.util.Vector; - -public class EntityUtilsImpl implements EntityUtils { - private static final Field FIELD_BAT_TARGET = ReobfHelper.getFieldByMojangName(net.minecraft.world.entity.ambient.Bat.class, "targetPosition"); // "bW"; - private static final Field FIELD_ENTITY_TRACKER = ReobfHelper.getFieldByMojangName(Entity.class, "tracker"); // "tracker"; - - private final NMSUtilsImpl nmsUtils; - - public EntityUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void clearAI(org.bukkit.entity.Entity entity) { - if (entity instanceof Mob) { - nmsUtils.getPlugin().getServer().getMobGoals().removeAllGoals((Mob) entity); - } - } - - @Override - public void addGoalFloat(Mob mob) { - if (!Bukkit.getMobGoals().hasGoal(mob, VanillaGoal.FLOAT)) { - net.minecraft.world.entity.Mob h = ((CraftMob) mob).getHandle(); - h.goalSelector.addGoal(1, new FloatGoal(h)); - } - } - - @Override - public void addGoalLimitedStrollLand(Creature mob, double velocity, Function checkTargetFunction) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - h.goalSelector.addGoal(7, new PathfinderGoalLimitedRandomStrollLand(h, velocity, checkTargetFunction)); - } - - @Override - public void removeGoalLimitedStrollLand(Creature mob) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - for (WrappedGoal wrappedGoal : h.goalSelector.getAvailableGoals()) { - if (wrappedGoal.getGoal() instanceof PathfinderGoalLimitedRandomStrollLand goal) { - wrappedGoal.stop(); - h.goalSelector.removeGoal(goal); - break; - } - } - } - - @Override - public int getShulkerOpenState(org.bukkit.entity.Entity shulker) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return 0; - } - CraftShulker cs = (CraftShulker) shulker; - return cs.getHandle().getRawPeekAmount(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get shulker open state", e); - } - return 0; - } - - @Override - public void setShulkerOpenState(org.bukkit.entity.Entity shulker, int state) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return; - } - state = Math.max(0, Math.min(Byte.MAX_VALUE, state)); - CraftShulker cs = (CraftShulker) shulker; - cs.getHandle().setRawPeekAmount(state); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set shulker open state", e); - } - } - - @Override - public boolean isPiglinDancing(org.bukkit.entity.Entity piglin) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return false; - } - CraftPiglin cs = (CraftPiglin) piglin; - return cs.getHandle().isDancing(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get piglin dancing state", e); - } - return false; - } - - @Override - public void setPiglinDancing(org.bukkit.entity.Entity piglin, boolean dancing) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return; - } - CraftPiglin cs = (CraftPiglin) piglin; - cs.getHandle().setDancing(dancing); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set piglin dancing state", e); - } - } - - @Override - public void sendEntityPositionUpdate(org.bukkit.entity.Entity entity) { - Entity handle = ((CraftEntity) entity).getHandle(); - try { - ChunkMap.TrackedEntity ete = (ChunkMap.TrackedEntity) FIELD_ENTITY_TRACKER.get(handle); - if (ete != null) { - ClientboundTeleportEntityPacket positionPacket = new ClientboundTeleportEntityPacket(handle); - ete.seenBy.stream().forEach(viewer -> { - viewer.send(positionPacket); - }); - } - } catch (ReflectiveOperationException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not send teleport packet", e); - } - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, double x, double y, double z) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.move(MoverType.SELF, new Vec3(x, y, z)); - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, Vector v) { - moveEntity(e, v.getX(), v.getY(), v.getZ()); - } - - @Override - public void setEntityHeadRotation(org.bukkit.entity.Entity e, float headRotation) { - Entity handle = ((CraftEntity) e).getHandle(); - if (handle instanceof LivingEntity) { - // required for goats - ((LivingEntity) handle).yHeadRot = headRotation; - } else { - handle.setYHeadRot(headRotation); - } - } - - @Override - public float getEntityHeadRotation(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYHeadRot(); - } - - @Override - public void setEntityYaw(org.bukkit.entity.Entity e, float yaw) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setYRot(yaw); - } - - @Override - public float getEntityYaw(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYRot(); - } - - @Override - public void setEntityPitch(org.bukkit.entity.Entity e, float pitch) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setXRot(pitch); - } - - @Override - public float getEntityPitch(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getXRot(); - } - - @Override - public void setEntityNavigationTarget(org.bukkit.entity.Entity entity, Location target, double speed) { - if (entity instanceof Bat) { - try { - FIELD_BAT_TARGET.set(((CraftBat) entity).getHandle(), new BlockPos(target.getX(), target.getY(), target.getZ())); - } catch (ReflectiveOperationException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "could not set field", e); - } - } else if (entity instanceof Vex) { - net.minecraft.world.entity.monster.Vex entityVex = ((CraftVex) entity).getHandle(); - entityVex.getMoveControl().setWantedPosition(target.getX(), target.getY(), target.getZ(), speed); - if (entityVex.getTarget() == null) { - entityVex.getLookControl().setLookAt(target.getX(), target.getY(), target.getZ(), 180, 20); - } - } else if (entity instanceof CraftMob) { - ((CraftMob) entity).getHandle().getNavigation().moveTo(target.getX(), target.getY(), target.getZ(), speed); - } else { - throw new IllegalArgumentException("Cannot set the navigation target for this mob"); - } - } - - @Override - public void setEntityLeftHanded(org.bukkit.entity.Entity ent, boolean left) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - mob.setLeftHanded(left); - } - } - - @Override - public boolean isEntityLeftHanded(org.bukkit.entity.Entity ent) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - return mob.isLeftHanded(); - } - return false; - } - - @Override - public boolean isEntityInvisible(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isInvisible(); - } - - @Override - public void setEntityInvisible(org.bukkit.entity.Entity entity, boolean invisible) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setInvisible(invisible); - } - - @Override - public boolean hasEntityNoClip(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noPhysics; - } - - @Override - public void setEntityNoClip(org.bukkit.entity.Entity entity, boolean noClip) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noPhysics = noClip; - } - - @Override - public boolean areChunkEntitiesLoaded(Chunk c) { - return ((CraftWorld) c.getWorld()).getHandle().areEntitiesLoaded(ChunkPos.asLong(c.getX(), c.getZ())); - } - - @Override - public void loadChunkEntities(Chunk c) { - int x = c.getX(); - int z = c.getZ(); - World world = c.getWorld(); - if (!world.isChunkLoaded(x, z)) { - world.getChunkAt(x, z); - } - - if (areChunkEntitiesLoaded(c)) { - return; - } - ServerLevel serverLevel = ((CraftWorld) world).getHandle(); - serverLevel.entityManager.updateChunkStatus(new ChunkPos(x, z), Visibility.TRACKED); - // now wait until entities are loaded - if (!areChunkEntitiesLoaded(c)) { - serverLevel.getServer().managedBlock(() -> { - if (areChunkEntitiesLoaded(c)) { - return true; - } - // process chunk inbox - serverLevel.entityManager.tick(); - return areChunkEntitiesLoaded(c); - }); - } - } - - @Override - public void setOnGround(org.bukkit.entity.Entity entity, boolean onGround) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setOnGround(onGround); - } - - @Override - public org.bukkit.entity.Entity getEntityById(World world, int id) { - Entity entity = ((CraftWorld) world).getHandle().getEntity(id); - return entity == null ? null : entity.getBukkitEntity(); - } - - @Override - public void setPose(org.bukkit.entity.Entity entity, Pose pose) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); - } - - @Override - public void setWolfAngerTime(org.bukkit.entity.Wolf entity, int timeInTicks) { - Wolf nmsEntity = ((CraftWolf) entity).getHandle(); - nmsEntity.setRemainingPersistentAngerTime(timeInTicks); - } - - @Override - public void setAggressive(org.bukkit.entity.Mob entity, boolean aggressive) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - nmsEntity.setAggressive(aggressive); - } - - @Override - public boolean isAggressive(org.bukkit.entity.Mob entity) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - return nmsEntity.isAggressive(); - } - - @Override - public boolean isCelebrating(org.bukkit.entity.Raider entity) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - return nmsEntity.isCelebrating(); - } - - @Override - public void setCelebrating(org.bukkit.entity.Raider entity, boolean celebrating) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - nmsEntity.setCelebrating(celebrating); - } -} diff --git a/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/MiscUtilsImpl.java b/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/MiscUtilsImpl.java deleted file mode 100644 index d1f9f5a..0000000 --- a/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/MiscUtilsImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R1_0; - -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockBehaviour.BlockStateBase; -import net.minecraft.world.level.block.state.BlockBehaviour.Properties; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.MaterialColor; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_19_R1.util.CraftMagicNumbers; - -public class MiscUtilsImpl implements MiscUtils { - private final NMSUtilsImpl nmsUtils; - - private Field fieldBlockBehaviour_properties; - private MaterialColor transparentColor; - private Field fieldBlockStateBase_materialColor; - - public MiscUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void setBlockMapColorTransparent(Material m) { - if (fieldBlockBehaviour_properties == null) { - Class classBlockProperties = BlockBehaviour.Properties.class; - Class classBlockBehaviour = BlockBehaviour.class; - fieldBlockBehaviour_properties = null; - for (Field f : classBlockBehaviour.getDeclaredFields()) { - if (f.getType() == classBlockProperties) { - fieldBlockBehaviour_properties = f; - fieldBlockBehaviour_properties.setAccessible(true); - } - } - if (fieldBlockBehaviour_properties == null) { - throw new IllegalStateException("Could not find block properties field!"); - } - - Class classBlockStateBase = BlockBehaviour.BlockStateBase.class; - for (Field f : classBlockStateBase.getDeclaredFields()) { - if (f.getType() == MaterialColor.class) { - fieldBlockStateBase_materialColor = f; - fieldBlockStateBase_materialColor.setAccessible(true); - } - } - if (fieldBlockStateBase_materialColor == null) { - throw new IllegalStateException("Could not find BlockStateBase materialColor field!"); - } - - try { - Constructor constructorMaterialColor = MaterialColor.class.getDeclaredConstructor(int.class, int.class); - constructorMaterialColor.setAccessible(true); - transparentColor = constructorMaterialColor.newInstance(0, 0); - } catch (ReflectiveOperationException e) { - throw new IllegalStateException("Could not create custom transparent MaterialColor!"); - } - } - - if (!m.isBlock()) { - throw new IllegalArgumentException("Material must be a block"); - } - Block b = CraftMagicNumbers.getBlock(m); - try { - BlockBehaviour.Properties properties = (Properties) fieldBlockBehaviour_properties.get(b); - properties.color(transparentColor); - for (BlockState state : b.getStateDefinition().getPossibleStates()) { - fieldBlockStateBase_materialColor.set(state, transparentColor); - } - } catch (IllegalAccessException e) { - throw new IllegalStateException("Could not set the MaterialColor!"); - } - } -} diff --git a/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/NMSUtilsImpl.java b/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/NMSUtilsImpl.java deleted file mode 100644 index a09788c..0000000 --- a/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/NMSUtilsImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R1_0; - -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.WorldUtils; -import org.bukkit.plugin.Plugin; - -public class NMSUtilsImpl implements NMSUtils { - private final Plugin plugin; - private EntityUtils entityUtilsImpl; - private WorldUtilsImpl worldUtilsImpl; - private MiscUtilsImpl miscUtilsImpl; - - public NMSUtilsImpl(Plugin plugin) { - this.plugin = plugin; - this.entityUtilsImpl = new EntityUtilsImpl(this); - this.worldUtilsImpl = new WorldUtilsImpl(this); - this.miscUtilsImpl = new MiscUtilsImpl(this); - // Remapper.foo(net.minecraft.world.entity.ambient.Bat.class); - } - - @Override - public Plugin getPlugin() { - return plugin; - } - - @Override - public EntityUtils getEntityUtils() { - return entityUtilsImpl; - } - - @Override - public WorldUtils getWorldUtils() { - return worldUtilsImpl; - } - - @Override - public MiscUtils getMiscUtils() { - return miscUtilsImpl; - } -} diff --git a/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/PathfinderGoalLimitedRandomStrollLand.java b/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/PathfinderGoalLimitedRandomStrollLand.java deleted file mode 100644 index b5b02d8..0000000 --- a/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/PathfinderGoalLimitedRandomStrollLand.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R1_0; - -import java.util.function.Function; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.RandomStrollGoal; -import net.minecraft.world.phys.Vec3; -import org.bukkit.util.Vector; - -public class PathfinderGoalLimitedRandomStrollLand extends RandomStrollGoal { - - private Function checkVectorFunction; - // private EntityCreature entity; - - public PathfinderGoalLimitedRandomStrollLand(PathfinderMob entity, double velocity, Function checkVectorFunction) { - super(entity, velocity, 1, false); - // this.entity = entity; - this.checkVectorFunction = checkVectorFunction; - } - - @Override - protected Vec3 getPosition() { - Vec3 base = super.getPosition(); - if (base == null || checkVectorFunction.apply(org.bukkit.craftbukkit.v1_19_R1.util.CraftVector.toBukkit(base)) != Boolean.TRUE) { - base = null; - } - return base; - } -} diff --git a/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/WorldUtilsImpl.java b/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/WorldUtilsImpl.java deleted file mode 100644 index 9abb598..0000000 --- a/nmsutils-v1_19_R1_0/src/main/java/de/cubeside/nmsutils/v1_19_R1_0/WorldUtilsImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R1_0; - -import de.cubeside.nmsutils.WorldUtils; -import java.util.ArrayList; -import java.util.logging.Level; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; -import org.bukkit.entity.Player; - -public class WorldUtilsImpl implements WorldUtils { - private final NMSUtilsImpl nmsUtils; - - public WorldUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public void saveWorldNow(World world) { - world.save(); - - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - try { - handle.save(null, true, false); - } catch (Exception e) { - Bukkit.getLogger().log(Level.SEVERE, "Exception while saving world", e); - } - } - - @Override - public void forceUnloadWorldWithoutSaving(World world, Location playerTarget) { - // final long t0 = System.currentTimeMillis(); - // String worldName = world.getName(); - - if (playerTarget.getWorld() == null || playerTarget.getWorld() == world) { - throw new IllegalArgumentException("Valid target world required"); - } - // move players out of this world - try { - for (Player p : world.getPlayers()) { - if (p.isDead()) { - p.spigot().respawn(); - } - if (p.getWorld() == world) { - p.teleport(playerTarget); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - // remove broken players - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - if (!handle.players().isEmpty()) { - for (ServerPlayer human : new ArrayList<>(handle.players())) { - kickPlayer((human.getBukkitEntity()), "Connection lost"); - } - handle.players().clear(); - } - - // unload the now empty world from the server - if (!nmsUtils.getPlugin().getServer().unloadWorld(world, false)) { - throw new IllegalStateException("Could not unload world"); - } - - // long t = System.currentTimeMillis(); - // nmsUtils.getPlugin().getLogger().info("Unloading world " + worldName + " completed in " + (t - t0) + "ms."); - } - - @SuppressWarnings("deprecation") - private void kickPlayer(Player player, String message) { - player.kickPlayer(message); - } -} diff --git a/nmsutils-v1_19_R1_1/pom.xml b/nmsutils-v1_19_R1_1/pom.xml deleted file mode 100644 index d6d8c6e..0000000 --- a/nmsutils-v1_19_R1_1/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - 4.0.0 - nmsutils-v1_19_R1_1 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper-api - 1.19.1-R0.1-SNAPSHOT - provided - - - io.papermc.paper - paper-server - 1.19.1-R0.1-SNAPSHOT - mojang-mapped - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - net.fabricmc - mapping-io - 0.3.0 - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - fabric-repo - https://maven.fabricmc.net/ - - - - - - maven-compiler-plugin - 3.8.1 - - 17 - - - - net.md-5 - specialsource-maven-plugin - 1.2.3 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:1.19.1-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.19.1-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.19.1-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.19.1-R0.1-SNAPSHOT:jar:remapped-obf - - - - - - - diff --git a/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/EntityUtilsImpl.java b/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/EntityUtilsImpl.java deleted file mode 100644 index 82f66f7..0000000 --- a/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/EntityUtilsImpl.java +++ /dev/null @@ -1,358 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R1_1; - -import com.destroystokyo.paper.entity.ai.VanillaGoal; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.util.ReobfHelper; -import java.lang.reflect.Field; -import java.util.function.Function; -import java.util.logging.Level; -import net.minecraft.core.BlockPos; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.server.level.ChunkMap; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.WrappedGoal; -import net.minecraft.world.entity.animal.Wolf; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.entity.Visibility; -import net.minecraft.world.phys.Vec3; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftBat; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftMob; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPiglin; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftRaider; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftShulker; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftVex; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftWolf; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Creature; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Mob; -import org.bukkit.entity.Pose; -import org.bukkit.entity.Vex; -import org.bukkit.util.Vector; - -public class EntityUtilsImpl implements EntityUtils { - private static final Field FIELD_BAT_TARGET = ReobfHelper.getFieldByMojangName(net.minecraft.world.entity.ambient.Bat.class, "targetPosition"); // "bW"; - private static final Field FIELD_ENTITY_TRACKER = ReobfHelper.getFieldByMojangName(Entity.class, "tracker"); // "tracker"; - - private final NMSUtilsImpl nmsUtils; - - public EntityUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void clearAI(org.bukkit.entity.Entity entity) { - if (entity instanceof Mob) { - nmsUtils.getPlugin().getServer().getMobGoals().removeAllGoals((Mob) entity); - } - } - - @Override - public void addGoalFloat(Mob mob) { - if (!Bukkit.getMobGoals().hasGoal(mob, VanillaGoal.FLOAT)) { - net.minecraft.world.entity.Mob h = ((CraftMob) mob).getHandle(); - h.goalSelector.addGoal(1, new FloatGoal(h)); - } - } - - @Override - public void addGoalLimitedStrollLand(Creature mob, double velocity, Function checkTargetFunction) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - h.goalSelector.addGoal(7, new PathfinderGoalLimitedRandomStrollLand(h, velocity, checkTargetFunction)); - } - - @Override - public void removeGoalLimitedStrollLand(Creature mob) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - for (WrappedGoal wrappedGoal : h.goalSelector.getAvailableGoals()) { - if (wrappedGoal.getGoal() instanceof PathfinderGoalLimitedRandomStrollLand goal) { - wrappedGoal.stop(); - h.goalSelector.removeGoal(goal); - break; - } - } - } - - @Override - public int getShulkerOpenState(org.bukkit.entity.Entity shulker) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return 0; - } - CraftShulker cs = (CraftShulker) shulker; - return cs.getHandle().getRawPeekAmount(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get shulker open state", e); - } - return 0; - } - - @Override - public void setShulkerOpenState(org.bukkit.entity.Entity shulker, int state) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return; - } - state = Math.max(0, Math.min(Byte.MAX_VALUE, state)); - CraftShulker cs = (CraftShulker) shulker; - cs.getHandle().setRawPeekAmount(state); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set shulker open state", e); - } - } - - @Override - public boolean isPiglinDancing(org.bukkit.entity.Entity piglin) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return false; - } - CraftPiglin cs = (CraftPiglin) piglin; - return cs.getHandle().isDancing(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get piglin dancing state", e); - } - return false; - } - - @Override - public void setPiglinDancing(org.bukkit.entity.Entity piglin, boolean dancing) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return; - } - CraftPiglin cs = (CraftPiglin) piglin; - cs.getHandle().setDancing(dancing); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set piglin dancing state", e); - } - } - - @Override - public void sendEntityPositionUpdate(org.bukkit.entity.Entity entity) { - Entity handle = ((CraftEntity) entity).getHandle(); - try { - ChunkMap.TrackedEntity ete = (ChunkMap.TrackedEntity) FIELD_ENTITY_TRACKER.get(handle); - if (ete != null) { - ClientboundTeleportEntityPacket positionPacket = new ClientboundTeleportEntityPacket(handle); - ete.seenBy.stream().forEach(viewer -> { - viewer.send(positionPacket); - }); - } - } catch (ReflectiveOperationException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not send teleport packet", e); - } - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, double x, double y, double z) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.move(MoverType.SELF, new Vec3(x, y, z)); - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, Vector v) { - moveEntity(e, v.getX(), v.getY(), v.getZ()); - } - - @Override - public void setEntityHeadRotation(org.bukkit.entity.Entity e, float headRotation) { - Entity handle = ((CraftEntity) e).getHandle(); - if (handle instanceof LivingEntity) { - // required for goats - ((LivingEntity) handle).yHeadRot = headRotation; - } else { - handle.setYHeadRot(headRotation); - } - } - - @Override - public float getEntityHeadRotation(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYHeadRot(); - } - - @Override - public void setEntityYaw(org.bukkit.entity.Entity e, float yaw) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setYRot(yaw); - } - - @Override - public float getEntityYaw(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYRot(); - } - - @Override - public void setEntityPitch(org.bukkit.entity.Entity e, float pitch) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setXRot(pitch); - } - - @Override - public float getEntityPitch(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getXRot(); - } - - @Override - public void setEntityNavigationTarget(org.bukkit.entity.Entity entity, Location target, double speed) { - if (entity instanceof Bat) { - try { - FIELD_BAT_TARGET.set(((CraftBat) entity).getHandle(), new BlockPos(target.getX(), target.getY(), target.getZ())); - } catch (ReflectiveOperationException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "could not set field", e); - } - } else if (entity instanceof Vex) { - net.minecraft.world.entity.monster.Vex entityVex = ((CraftVex) entity).getHandle(); - entityVex.getMoveControl().setWantedPosition(target.getX(), target.getY(), target.getZ(), speed); - if (entityVex.getTarget() == null) { - entityVex.getLookControl().setLookAt(target.getX(), target.getY(), target.getZ(), 180, 20); - } - } else if (entity instanceof CraftMob) { - ((CraftMob) entity).getHandle().getNavigation().moveTo(target.getX(), target.getY(), target.getZ(), speed); - } else { - throw new IllegalArgumentException("Cannot set the navigation target for this mob: " + (entity == null ? "null" : entity.getType())); - } - } - - @Override - public void setEntityLeftHanded(org.bukkit.entity.Entity ent, boolean left) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - mob.setLeftHanded(left); - } - } - - @Override - public boolean isEntityLeftHanded(org.bukkit.entity.Entity ent) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - return mob.isLeftHanded(); - } - return false; - } - - @Override - public boolean isEntityInvisible(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isInvisible(); - } - - @Override - public void setEntityInvisible(org.bukkit.entity.Entity entity, boolean invisible) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setInvisible(invisible); - } - - @Override - public boolean hasEntityNoClip(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noPhysics; - } - - @Override - public void setEntityNoClip(org.bukkit.entity.Entity entity, boolean noClip) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noPhysics = noClip; - } - - @Override - public boolean areChunkEntitiesLoaded(Chunk c) { - return ((CraftWorld) c.getWorld()).getHandle().areEntitiesLoaded(ChunkPos.asLong(c.getX(), c.getZ())); - } - - @Override - public void loadChunkEntities(Chunk c) { - int x = c.getX(); - int z = c.getZ(); - World world = c.getWorld(); - if (!world.isChunkLoaded(x, z)) { - world.getChunkAt(x, z); - } - - if (areChunkEntitiesLoaded(c)) { - return; - } - ServerLevel serverLevel = ((CraftWorld) world).getHandle(); - serverLevel.entityManager.updateChunkStatus(new ChunkPos(x, z), Visibility.TRACKED); - // now wait until entities are loaded - if (!areChunkEntitiesLoaded(c)) { - serverLevel.getServer().managedBlock(() -> { - if (areChunkEntitiesLoaded(c)) { - return true; - } - // process chunk inbox - serverLevel.entityManager.tick(); - return areChunkEntitiesLoaded(c); - }); - } - } - - @Override - public void setOnGround(org.bukkit.entity.Entity entity, boolean onGround) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setOnGround(onGround); - } - - @Override - public org.bukkit.entity.Entity getEntityById(World world, int id) { - Entity entity = ((CraftWorld) world).getHandle().getEntity(id); - return entity == null ? null : entity.getBukkitEntity(); - } - - @Override - public void setPose(org.bukkit.entity.Entity entity, Pose pose) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); - } - - @Override - public void setWolfAngerTime(org.bukkit.entity.Wolf entity, int timeInTicks) { - Wolf nmsEntity = ((CraftWolf) entity).getHandle(); - nmsEntity.setRemainingPersistentAngerTime(timeInTicks); - } - - @Override - public void setAggressive(org.bukkit.entity.Mob entity, boolean aggressive) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - nmsEntity.setAggressive(aggressive); - } - - @Override - public boolean isAggressive(org.bukkit.entity.Mob entity) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - return nmsEntity.isAggressive(); - } - - @Override - public boolean isCelebrating(org.bukkit.entity.Raider entity) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - return nmsEntity.isCelebrating(); - } - - @Override - public void setCelebrating(org.bukkit.entity.Raider entity, boolean celebrating) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - nmsEntity.setCelebrating(celebrating); - } -} diff --git a/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/MiscUtilsImpl.java b/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/MiscUtilsImpl.java deleted file mode 100644 index 061431f..0000000 --- a/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/MiscUtilsImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R1_1; - -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockBehaviour.BlockStateBase; -import net.minecraft.world.level.block.state.BlockBehaviour.Properties; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.MaterialColor; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_19_R1.util.CraftMagicNumbers; - -public class MiscUtilsImpl implements MiscUtils { - private final NMSUtilsImpl nmsUtils; - - private Field fieldBlockBehaviour_properties; - private MaterialColor transparentColor; - private Field fieldBlockStateBase_materialColor; - - public MiscUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void setBlockMapColorTransparent(Material m) { - if (fieldBlockBehaviour_properties == null) { - Class classBlockProperties = BlockBehaviour.Properties.class; - Class classBlockBehaviour = BlockBehaviour.class; - fieldBlockBehaviour_properties = null; - for (Field f : classBlockBehaviour.getDeclaredFields()) { - if (f.getType() == classBlockProperties) { - fieldBlockBehaviour_properties = f; - fieldBlockBehaviour_properties.setAccessible(true); - } - } - if (fieldBlockBehaviour_properties == null) { - throw new IllegalStateException("Could not find block properties field!"); - } - - Class classBlockStateBase = BlockBehaviour.BlockStateBase.class; - for (Field f : classBlockStateBase.getDeclaredFields()) { - if (f.getType() == MaterialColor.class) { - fieldBlockStateBase_materialColor = f; - fieldBlockStateBase_materialColor.setAccessible(true); - } - } - if (fieldBlockStateBase_materialColor == null) { - throw new IllegalStateException("Could not find BlockStateBase materialColor field!"); - } - - try { - Constructor constructorMaterialColor = MaterialColor.class.getDeclaredConstructor(int.class, int.class); - constructorMaterialColor.setAccessible(true); - transparentColor = constructorMaterialColor.newInstance(0, 0); - } catch (ReflectiveOperationException e) { - throw new IllegalStateException("Could not create custom transparent MaterialColor!"); - } - } - - if (!m.isBlock()) { - throw new IllegalArgumentException("Material must be a block"); - } - Block b = CraftMagicNumbers.getBlock(m); - try { - BlockBehaviour.Properties properties = (Properties) fieldBlockBehaviour_properties.get(b); - properties.color(transparentColor); - for (BlockState state : b.getStateDefinition().getPossibleStates()) { - fieldBlockStateBase_materialColor.set(state, transparentColor); - } - } catch (IllegalAccessException e) { - throw new IllegalStateException("Could not set the MaterialColor!"); - } - } -} diff --git a/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/NMSUtilsImpl.java b/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/NMSUtilsImpl.java deleted file mode 100644 index 3cbd820..0000000 --- a/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/NMSUtilsImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R1_1; - -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.WorldUtils; -import org.bukkit.plugin.Plugin; - -public class NMSUtilsImpl implements NMSUtils { - private final Plugin plugin; - private EntityUtils entityUtilsImpl; - private WorldUtilsImpl worldUtilsImpl; - private MiscUtilsImpl miscUtilsImpl; - - public NMSUtilsImpl(Plugin plugin) { - this.plugin = plugin; - this.entityUtilsImpl = new EntityUtilsImpl(this); - this.worldUtilsImpl = new WorldUtilsImpl(this); - this.miscUtilsImpl = new MiscUtilsImpl(this); - // Remapper.foo(net.minecraft.world.entity.ambient.Bat.class); - } - - @Override - public Plugin getPlugin() { - return plugin; - } - - @Override - public EntityUtils getEntityUtils() { - return entityUtilsImpl; - } - - @Override - public WorldUtils getWorldUtils() { - return worldUtilsImpl; - } - - @Override - public MiscUtils getMiscUtils() { - return miscUtilsImpl; - } -} diff --git a/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/PathfinderGoalLimitedRandomStrollLand.java b/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/PathfinderGoalLimitedRandomStrollLand.java deleted file mode 100644 index a71421a..0000000 --- a/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/PathfinderGoalLimitedRandomStrollLand.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R1_1; - -import java.util.function.Function; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.RandomStrollGoal; -import net.minecraft.world.phys.Vec3; -import org.bukkit.util.Vector; - -public class PathfinderGoalLimitedRandomStrollLand extends RandomStrollGoal { - - private Function checkVectorFunction; - // private EntityCreature entity; - - public PathfinderGoalLimitedRandomStrollLand(PathfinderMob entity, double velocity, Function checkVectorFunction) { - super(entity, velocity, 1, false); - // this.entity = entity; - this.checkVectorFunction = checkVectorFunction; - } - - @Override - protected Vec3 getPosition() { - Vec3 base = super.getPosition(); - if (base == null || checkVectorFunction.apply(org.bukkit.craftbukkit.v1_19_R1.util.CraftVector.toBukkit(base)) != Boolean.TRUE) { - base = null; - } - return base; - } -} diff --git a/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/WorldUtilsImpl.java b/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/WorldUtilsImpl.java deleted file mode 100644 index 79543a3..0000000 --- a/nmsutils-v1_19_R1_1/src/main/java/de/cubeside/nmsutils/v1_19_R1_1/WorldUtilsImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R1_1; - -import de.cubeside.nmsutils.WorldUtils; -import java.util.ArrayList; -import java.util.logging.Level; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; -import org.bukkit.entity.Player; - -public class WorldUtilsImpl implements WorldUtils { - private final NMSUtilsImpl nmsUtils; - - public WorldUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public void saveWorldNow(World world) { - world.save(); - - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - try { - handle.save(null, true, false); - } catch (Exception e) { - Bukkit.getLogger().log(Level.SEVERE, "Exception while saving world", e); - } - } - - @Override - public void forceUnloadWorldWithoutSaving(World world, Location playerTarget) { - // final long t0 = System.currentTimeMillis(); - // String worldName = world.getName(); - - if (playerTarget.getWorld() == null || playerTarget.getWorld() == world) { - throw new IllegalArgumentException("Valid target world required"); - } - // move players out of this world - try { - for (Player p : world.getPlayers()) { - if (p.isDead()) { - p.spigot().respawn(); - } - if (p.getWorld() == world) { - p.teleport(playerTarget); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - // remove broken players - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - if (!handle.players().isEmpty()) { - for (ServerPlayer human : new ArrayList<>(handle.players())) { - kickPlayer((human.getBukkitEntity()), "Connection lost"); - } - handle.players().clear(); - } - - // unload the now empty world from the server - if (!nmsUtils.getPlugin().getServer().unloadWorld(world, false)) { - throw new IllegalStateException("Could not unload world"); - } - - // long t = System.currentTimeMillis(); - // nmsUtils.getPlugin().getLogger().info("Unloading world " + worldName + " completed in " + (t - t0) + "ms."); - } - - @SuppressWarnings("deprecation") - private void kickPlayer(Player player, String message) { - player.kickPlayer(message); - } -} diff --git a/nmsutils-v1_19_R2/pom.xml b/nmsutils-v1_19_R2/pom.xml deleted file mode 100644 index be0fdf1..0000000 --- a/nmsutils-v1_19_R2/pom.xml +++ /dev/null @@ -1,100 +0,0 @@ - - 4.0.0 - nmsutils-v1_19_R2 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper-api - 1.19.3-R0.1-SNAPSHOT - provided - - - io.papermc.paper - paper-server - 1.19.3-R0.1-SNAPSHOT - mojang-mapped - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - net.fabricmc - mapping-io - 0.3.0 - provided - - - com.mojang - datafixerupper - 5.0.28 - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - fabric-repo - https://maven.fabricmc.net/ - - - - - - maven-compiler-plugin - 3.8.1 - - 17 - - - - net.md-5 - specialsource-maven-plugin - 1.2.3 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:1.19.3-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.19.3-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.19.3-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.19.3-R0.1-SNAPSHOT:jar:remapped-obf - - - - - - - \ No newline at end of file diff --git a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/BiomeUtilsImpl.java b/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/BiomeUtilsImpl.java deleted file mode 100644 index 5a98987..0000000 --- a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/BiomeUtilsImpl.java +++ /dev/null @@ -1,161 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R2; - -import com.mojang.serialization.Lifecycle; -import de.cubeside.nmsutils.BiomeUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.biome.CustomBiome; -import de.cubeside.nmsutils.util.ReobfHelper; -import java.lang.reflect.Field; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.IdentityHashMap; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.core.Holder.Reference; -import net.minecraft.core.MappedRegistry; -import net.minecraft.core.WritableRegistry; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.dedicated.DedicatedServer; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.biome.AmbientMoodSettings; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.Biome.BiomeBuilder; -import net.minecraft.world.level.biome.Biome.Precipitation; -import net.minecraft.world.level.biome.Biome.TemperatureModifier; -import net.minecraft.world.level.biome.BiomeSpecialEffects; -import net.minecraft.world.level.biome.BiomeSpecialEffects.Builder; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.chunk.LevelChunk; -import org.bukkit.Location; -import org.bukkit.NamespacedKey; -import org.bukkit.Server; -import org.bukkit.craftbukkit.v1_19_R2.CraftServer; -import org.bukkit.craftbukkit.v1_19_R2.CraftWorld; - -public class BiomeUtilsImpl implements BiomeUtils { - private final NMSUtilsImpl nmsUtils; - - private HashMap customBiomes; - private HashMap customBiomesByBiome; - private Collection unmodifiableCustomBiomes; - - private static final Field FIELD_MAPPED_REGISTRY_FROZEN = ReobfHelper.getFieldByMojangName(MappedRegistry.class, "frozen"); - private static final Field FIELD_MAPPED_REGISTRY_UNREGISTERED_INTRUSIVE_HOLDERS = ReobfHelper.getFieldByMojangName(MappedRegistry.class, "unregisteredIntrusiveHolders"); - - public BiomeUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - this.customBiomes = new HashMap<>(); - this.customBiomesByBiome = new HashMap<>(); - this.unmodifiableCustomBiomes = Collections.unmodifiableCollection(customBiomes.values()); - } - - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public CustomBiome registerCustomBiome(NamespacedKey id, float downfall, float temperature, de.cubeside.nmsutils.biome.Precipitation precipitation, Integer fogColor, Integer waterColor, Integer waterFogColor, Integer skyColor, Integer foliageColor, Integer grassColor, - GrassColorModifier grassColorModifier) { - Server server = nmsUtils.getPlugin().getServer(); - CraftServer craftserver = (CraftServer) server; - DedicatedServer dedicatedserver = craftserver.getServer(); - ResourceKey newKey = ResourceKey.create(Registries.BIOME, new ResourceLocation(id.getNamespace(), id.getKey())); - - ResourceKey oldKey = Biomes.FOREST; - WritableRegistry registrywritable = (WritableRegistry) dedicatedserver.registryAccess().registryOrThrow(Registries.BIOME); - - try { - FIELD_MAPPED_REGISTRY_FROZEN.set(registrywritable, false); - FIELD_MAPPED_REGISTRY_UNREGISTERED_INTRUSIVE_HOLDERS.set(registrywritable, new IdentityHashMap<>()); - } catch (IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - - Biome forestbiome = registrywritable.get(oldKey); - - BiomeBuilder builder = new Biome.BiomeBuilder(); - builder.downfall(downfall); - builder.temperature(temperature); - Precipitation mojangPrecipitation = Precipitation.NONE; - if (precipitation == de.cubeside.nmsutils.biome.Precipitation.RAIN) { - mojangPrecipitation = Precipitation.RAIN; - } else if (precipitation == de.cubeside.nmsutils.biome.Precipitation.SNOW) { - mojangPrecipitation = Precipitation.SNOW; - } - builder.precipitation(mojangPrecipitation); - builder.mobSpawnSettings(forestbiome.getMobSettings()); - builder.generationSettings(forestbiome.getGenerationSettings()); - builder.temperatureAdjustment(TemperatureModifier.NONE); - Builder effects = new BiomeSpecialEffects.Builder(); - effects.waterColor(waterColor == null ? forestbiome.getWaterColor() : waterColor); - effects.waterFogColor(waterFogColor == null ? forestbiome.getWaterFogColor() : waterFogColor); - effects.fogColor(fogColor == null ? forestbiome.getFogColor() : fogColor); - effects.skyColor(skyColor == null ? forestbiome.getSkyColor() : skyColor); - if (foliageColor != null) { - effects.foliageColorOverride(foliageColor); - } - if (grassColor != null) { - effects.grassColorOverride(grassColor); - } - effects.ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS); - net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier nativeGrassColorModifier = switch (grassColorModifier) { - case DARK_FOREST -> net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier.DARK_FOREST; - case SWAMP -> net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier.SWAMP; - default -> net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier.NONE; - }; - effects.grassColorModifier(nativeGrassColorModifier); - builder.specialEffects(effects.build()); - - Biome newbiome = builder.build(); - - registrywritable.createIntrusiveHolder(newbiome); - Reference biomeHolder = registrywritable.register(newKey, newbiome, Lifecycle.stable()); - - try { - FIELD_MAPPED_REGISTRY_UNREGISTERED_INTRUSIVE_HOLDERS.set(registrywritable, null); - } catch (IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - CustomBiomeImpl impl = new CustomBiomeImpl(id, newKey, newbiome, biomeHolder); - customBiomes.put(id, impl); - customBiomesByBiome.put(newbiome, impl); - - return new CustomBiomeImpl(id, newKey, newbiome, biomeHolder); - } - - @Override - public Collection getAllCustomBiomes() { - return unmodifiableCustomBiomes; - } - - @Override - public CustomBiome getCustomBiome(NamespacedKey id) { - return customBiomes.get(id); - } - - @Override - public CustomBiome getCustomBiomeAt(Location location) { - location.getWorld().getChunkAt(location); - Level level = ((CraftWorld) location.getWorld()).getHandle(); - int x = location.getBlockX(); - int y = location.getBlockY(); - int z = location.getBlockZ(); - - BlockPos pos = new BlockPos(x, 0, z); - if (level.isLoaded(pos)) { - LevelChunk chunk = level.getChunkAt(pos); - if (chunk != null) { - - Holder biomeHolder = chunk.getNoiseBiome(x >> 2, y >> 2, z >> 2); - if (biomeHolder.isBound()) { - Biome biome = biomeHolder.value(); - return customBiomesByBiome.get(biome); - } - } - } - return null; - } -} diff --git a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/CustomBiomeImpl.java b/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/CustomBiomeImpl.java deleted file mode 100644 index aa5bb17..0000000 --- a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/CustomBiomeImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R2; - -import de.cubeside.nmsutils.biome.CustomBiome; -import net.minecraft.core.BlockPos.MutableBlockPos; -import net.minecraft.core.Holder.Reference; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.chunk.LevelChunk; -import org.bukkit.Location; -import org.bukkit.NamespacedKey; -import org.bukkit.craftbukkit.v1_19_R2.CraftWorld; - -public class CustomBiomeImpl implements CustomBiome { - private NamespacedKey bukkitKey; - private Reference biomeHolder; - private MutableBlockPos pos = new MutableBlockPos(); - - public CustomBiomeImpl(NamespacedKey bukkitKey, ResourceKey key, Biome biome, Reference biomeHolder) { - this.bukkitKey = bukkitKey; - this.biomeHolder = biomeHolder; - } - - @Override - public NamespacedKey getId() { - return bukkitKey; - } - - @Override - public boolean setBiome(Location location) { - location.getWorld().getChunkAt(location); - Level level = ((CraftWorld) location.getWorld()).getHandle(); - int x = location.getBlockX(); - int y = location.getBlockY(); - int z = location.getBlockZ(); - - pos.set(x, 0, z); - if (level.isLoaded(pos)) { - LevelChunk chunk = level.getChunkAt(pos); - if (chunk != null) { - - chunk.setBiome(x >> 2, y >> 2, z >> 2, biomeHolder); - chunk.setUnsaved(true); - return true; - } - } - return false; - } -} diff --git a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/EntityUtilsImpl.java b/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/EntityUtilsImpl.java deleted file mode 100644 index 09c0cbd..0000000 --- a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/EntityUtilsImpl.java +++ /dev/null @@ -1,376 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R2; - -import com.destroystokyo.paper.entity.ai.VanillaGoal; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.util.ReobfHelper; -import java.lang.reflect.Field; -import java.util.function.Function; -import java.util.logging.Level; -import net.minecraft.core.BlockPos; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.server.level.ChunkMap; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.WrappedGoal; -import net.minecraft.world.entity.animal.Wolf; -import net.minecraft.world.entity.animal.camel.Camel; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.phys.Vec3; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftBat; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftCamel; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftMob; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPiglin; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftRaider; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftShulker; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftVex; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftWolf; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Creature; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Mob; -import org.bukkit.entity.Pose; -import org.bukkit.entity.Vex; -import org.bukkit.util.Vector; - -public class EntityUtilsImpl implements EntityUtils { - private static final Field FIELD_BAT_TARGET = ReobfHelper.getFieldByMojangName(net.minecraft.world.entity.ambient.Bat.class, "targetPosition"); // "bW"; - private static final Field FIELD_ENTITY_TRACKER = ReobfHelper.getFieldByMojangName(Entity.class, "tracker"); // "tracker"; - - private final NMSUtilsImpl nmsUtils; - - public EntityUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void clearAI(org.bukkit.entity.Entity entity) { - if (entity instanceof Mob) { - nmsUtils.getPlugin().getServer().getMobGoals().removeAllGoals((Mob) entity); - } - } - - @Override - public void addGoalFloat(Mob mob) { - if (!Bukkit.getMobGoals().hasGoal(mob, VanillaGoal.FLOAT)) { - net.minecraft.world.entity.Mob h = ((CraftMob) mob).getHandle(); - h.goalSelector.addGoal(1, new FloatGoal(h)); - } - } - - @Override - public void addGoalLimitedStrollLand(Creature mob, double velocity, Function checkTargetFunction) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - h.goalSelector.addGoal(7, new PathfinderGoalLimitedRandomStrollLand(h, velocity, checkTargetFunction)); - } - - @Override - public void removeGoalLimitedStrollLand(Creature mob) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - for (WrappedGoal wrappedGoal : h.goalSelector.getAvailableGoals()) { - if (wrappedGoal.getGoal() instanceof PathfinderGoalLimitedRandomStrollLand goal) { - wrappedGoal.stop(); - h.goalSelector.removeGoal(goal); - break; - } - } - } - - @Override - public int getShulkerOpenState(org.bukkit.entity.Entity shulker) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return 0; - } - CraftShulker cs = (CraftShulker) shulker; - return cs.getHandle().getRawPeekAmount(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get shulker open state", e); - } - return 0; - } - - @Override - public void setShulkerOpenState(org.bukkit.entity.Entity shulker, int state) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return; - } - state = Math.max(0, Math.min(Byte.MAX_VALUE, state)); - CraftShulker cs = (CraftShulker) shulker; - cs.getHandle().setRawPeekAmount(state); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set shulker open state", e); - } - } - - @Override - public boolean isPiglinDancing(org.bukkit.entity.Entity piglin) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return false; - } - CraftPiglin cs = (CraftPiglin) piglin; - return cs.getHandle().isDancing(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get piglin dancing state", e); - } - return false; - } - - @Override - public void setPiglinDancing(org.bukkit.entity.Entity piglin, boolean dancing) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return; - } - CraftPiglin cs = (CraftPiglin) piglin; - cs.getHandle().setDancing(dancing); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set piglin dancing state", e); - } - } - - @Override - public void sendEntityPositionUpdate(org.bukkit.entity.Entity entity) { - Entity handle = ((CraftEntity) entity).getHandle(); - try { - ChunkMap.TrackedEntity ete = (ChunkMap.TrackedEntity) FIELD_ENTITY_TRACKER.get(handle); - if (ete != null) { - ClientboundTeleportEntityPacket positionPacket = new ClientboundTeleportEntityPacket(handle); - ete.seenBy.stream().forEach(viewer -> { - viewer.send(positionPacket); - }); - } - } catch (ReflectiveOperationException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not send teleport packet", e); - } - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, double x, double y, double z) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.move(MoverType.SELF, new Vec3(x, y, z)); - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, Vector v) { - moveEntity(e, v.getX(), v.getY(), v.getZ()); - } - - @Override - public void setEntityHeadRotation(org.bukkit.entity.Entity e, float headRotation) { - Entity handle = ((CraftEntity) e).getHandle(); - if (handle instanceof LivingEntity) { - // required for goats - ((LivingEntity) handle).yHeadRot = headRotation; - } else { - handle.setYHeadRot(headRotation); - } - } - - @Override - public float getEntityHeadRotation(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYHeadRot(); - } - - @Override - public void setEntityYaw(org.bukkit.entity.Entity e, float yaw) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setYRot(yaw); - } - - @Override - public float getEntityYaw(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYRot(); - } - - @Override - public void setEntityPitch(org.bukkit.entity.Entity e, float pitch) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setXRot(pitch); - } - - @Override - public float getEntityPitch(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getXRot(); - } - - @Override - public void setEntityNavigationTarget(org.bukkit.entity.Entity entity, Location target, double speed) { - if (entity instanceof Bat) { - try { - FIELD_BAT_TARGET.set(((CraftBat) entity).getHandle(), new BlockPos(target.getX(), target.getY(), target.getZ())); - } catch (ReflectiveOperationException e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "could not set field", e); - } - } else if (entity instanceof Vex) { - net.minecraft.world.entity.monster.Vex entityVex = ((CraftVex) entity).getHandle(); - entityVex.getMoveControl().setWantedPosition(target.getX(), target.getY(), target.getZ(), speed); - if (entityVex.getTarget() == null) { - entityVex.getLookControl().setLookAt(target.getX(), target.getY(), target.getZ(), 180, 20); - } - } else if (entity instanceof CraftMob) { - ((CraftMob) entity).getHandle().getNavigation().moveTo(target.getX(), target.getY(), target.getZ(), speed); - } else { - throw new IllegalArgumentException("Cannot set the navigation target for this mob: " + (entity == null ? "null" : entity.getType())); - } - } - - @Override - public void setEntityLeftHanded(org.bukkit.entity.Entity ent, boolean left) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - mob.setLeftHanded(left); - } - } - - @Override - public boolean isEntityLeftHanded(org.bukkit.entity.Entity ent) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - return mob.isLeftHanded(); - } - return false; - } - - @Override - public boolean isEntityInvisible(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isInvisible(); - } - - @Override - public void setEntityInvisible(org.bukkit.entity.Entity entity, boolean invisible) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setInvisible(invisible); - } - - @Override - public boolean hasEntityNoClip(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noPhysics; - } - - @Override - public void setEntityNoClip(org.bukkit.entity.Entity entity, boolean noClip) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noPhysics = noClip; - } - - @Override - public boolean areChunkEntitiesLoaded(Chunk c) { - return ((CraftWorld) c.getWorld()).getHandle().areEntitiesLoaded(ChunkPos.asLong(c.getX(), c.getZ())); - } - - @Override - public void loadChunkEntities(Chunk c) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Call to unimplemented method", new RuntimeException()); - // int x = c.getX(); - // int z = c.getZ(); - // World world = c.getWorld(); - // if (!world.isChunkLoaded(x, z)) { - // world.getChunkAt(x, z); - // } - // - // if (areChunkEntitiesLoaded(c)) { - // return; - // } - // ServerLevel serverLevel = ((CraftWorld) world).getHandle(); - // serverLevel.entityManager.updateChunkStatus(new ChunkPos(x, z), Visibility.TRACKED); - // // now wait until entities are loaded - // if (!areChunkEntitiesLoaded(c)) { - // serverLevel.getServer().managedBlock(() -> { - // if (areChunkEntitiesLoaded(c)) { - // return true; - // } - // // process chunk inbox - // serverLevel.entityManager.tick(); - // return areChunkEntitiesLoaded(c); - // }); - // } - } - - @Override - public void setOnGround(org.bukkit.entity.Entity entity, boolean onGround) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setOnGround(onGround); - } - - @Override - public org.bukkit.entity.Entity getEntityById(World world, int id) { - Entity entity = ((CraftWorld) world).getHandle().getEntity(id); - return entity == null ? null : entity.getBukkitEntity(); - } - - @Override - public void setPose(org.bukkit.entity.Entity entity, Pose pose) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); - } - - @Override - public void setWolfAngerTime(org.bukkit.entity.Wolf entity, int timeInTicks) { - Wolf nmsEntity = ((CraftWolf) entity).getHandle(); - nmsEntity.setRemainingPersistentAngerTime(timeInTicks); - } - - @Override - public void setAggressive(org.bukkit.entity.Mob entity, boolean aggressive) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - nmsEntity.setAggressive(aggressive); - } - - @Override - public boolean isAggressive(org.bukkit.entity.Mob entity) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - return nmsEntity.isAggressive(); - } - - @Override - public boolean isCelebrating(org.bukkit.entity.Raider entity) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - return nmsEntity.isCelebrating(); - } - - @Override - public void setCelebrating(org.bukkit.entity.Raider entity, boolean celebrating) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - nmsEntity.setCelebrating(celebrating); - } - - @Override - public void setCamelLastPoseChange(org.bukkit.entity.Camel entity, long tick) { - Camel nmsEntity = ((CraftCamel) entity).getHandle(); - nmsEntity.resetLastPoseChangeTick(nmsEntity.getLevel().getGameTime() - tick); - } - - @Override - public long getCamelLastPoseChange(org.bukkit.entity.Camel entity) { - Camel nmsEntity = ((CraftCamel) entity).getHandle(); - return nmsEntity.getPoseTime(); - } - - @Override - public boolean isCamelSitting(org.bukkit.entity.Camel entity) { - return entity.isSitting(); - } -} diff --git a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/MiscUtilsImpl.java b/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/MiscUtilsImpl.java deleted file mode 100644 index 895e696..0000000 --- a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/MiscUtilsImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R2; - -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockBehaviour.BlockStateBase; -import net.minecraft.world.level.block.state.BlockBehaviour.Properties; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.MaterialColor; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_19_R2.util.CraftMagicNumbers; - -public class MiscUtilsImpl implements MiscUtils { - private final NMSUtilsImpl nmsUtils; - - private Field fieldBlockBehaviour_properties; - private MaterialColor transparentColor; - private Field fieldBlockStateBase_materialColor; - - public MiscUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void setBlockMapColorTransparent(Material m) { - if (fieldBlockBehaviour_properties == null) { - Class classBlockProperties = BlockBehaviour.Properties.class; - Class classBlockBehaviour = BlockBehaviour.class; - fieldBlockBehaviour_properties = null; - for (Field f : classBlockBehaviour.getDeclaredFields()) { - if (f.getType() == classBlockProperties) { - fieldBlockBehaviour_properties = f; - fieldBlockBehaviour_properties.setAccessible(true); - } - } - if (fieldBlockBehaviour_properties == null) { - throw new IllegalStateException("Could not find block properties field!"); - } - - Class classBlockStateBase = BlockBehaviour.BlockStateBase.class; - for (Field f : classBlockStateBase.getDeclaredFields()) { - if (f.getType() == MaterialColor.class) { - fieldBlockStateBase_materialColor = f; - fieldBlockStateBase_materialColor.setAccessible(true); - } - } - if (fieldBlockStateBase_materialColor == null) { - throw new IllegalStateException("Could not find BlockStateBase materialColor field!"); - } - - try { - Constructor constructorMaterialColor = MaterialColor.class.getDeclaredConstructor(int.class, int.class); - constructorMaterialColor.setAccessible(true); - transparentColor = constructorMaterialColor.newInstance(0, 0); - } catch (ReflectiveOperationException e) { - throw new IllegalStateException("Could not create custom transparent MaterialColor!"); - } - } - - if (!m.isBlock()) { - throw new IllegalArgumentException("Material must be a block"); - } - Block b = CraftMagicNumbers.getBlock(m); - try { - BlockBehaviour.Properties properties = (Properties) fieldBlockBehaviour_properties.get(b); - properties.color(transparentColor); - for (BlockState state : b.getStateDefinition().getPossibleStates()) { - fieldBlockStateBase_materialColor.set(state, transparentColor); - } - } catch (IllegalAccessException e) { - throw new IllegalStateException("Could not set the MaterialColor!"); - } - } -} diff --git a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/NMSUtilsImpl.java b/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/NMSUtilsImpl.java deleted file mode 100644 index b0a0bde..0000000 --- a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/NMSUtilsImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R2; - -import de.cubeside.nmsutils.BiomeUtils; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.WorldUtils; -import org.bukkit.plugin.Plugin; - -public class NMSUtilsImpl implements NMSUtils { - private final Plugin plugin; - private EntityUtils entityUtilsImpl; - private WorldUtilsImpl worldUtilsImpl; - private MiscUtilsImpl miscUtilsImpl; - private BiomeUtilsImpl biomeUtils; - - public NMSUtilsImpl(Plugin plugin) { - this.plugin = plugin; - this.entityUtilsImpl = new EntityUtilsImpl(this); - this.worldUtilsImpl = new WorldUtilsImpl(this); - this.miscUtilsImpl = new MiscUtilsImpl(this); - this.biomeUtils = new BiomeUtilsImpl(this); - } - - @Override - public Plugin getPlugin() { - return plugin; - } - - @Override - public EntityUtils getEntityUtils() { - return entityUtilsImpl; - } - - @Override - public WorldUtils getWorldUtils() { - return worldUtilsImpl; - } - - @Override - public MiscUtils getMiscUtils() { - return miscUtilsImpl; - } - - @Override - public BiomeUtils getBiomeUtils() { - return biomeUtils; - } -} diff --git a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/PathfinderGoalLimitedRandomStrollLand.java b/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/PathfinderGoalLimitedRandomStrollLand.java deleted file mode 100644 index c2c5520..0000000 --- a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/PathfinderGoalLimitedRandomStrollLand.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R2; - -import java.util.function.Function; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.RandomStrollGoal; -import net.minecraft.world.phys.Vec3; -import org.bukkit.util.Vector; - -public class PathfinderGoalLimitedRandomStrollLand extends RandomStrollGoal { - - private Function checkVectorFunction; - // private EntityCreature entity; - - public PathfinderGoalLimitedRandomStrollLand(PathfinderMob entity, double velocity, Function checkVectorFunction) { - super(entity, velocity, 1, false); - // this.entity = entity; - this.checkVectorFunction = checkVectorFunction; - } - - @Override - protected Vec3 getPosition() { - Vec3 base = super.getPosition(); - if (base == null || checkVectorFunction.apply(org.bukkit.craftbukkit.v1_19_R2.util.CraftVector.toBukkit(base)) != Boolean.TRUE) { - base = null; - } - return base; - } -} diff --git a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/WorldUtilsImpl.java b/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/WorldUtilsImpl.java deleted file mode 100644 index 1adf763..0000000 --- a/nmsutils-v1_19_R2/src/main/java/de/cubeside/nmsutils/v1_19_R2/WorldUtilsImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R2; - -import de.cubeside.nmsutils.WorldUtils; -import java.util.ArrayList; -import java.util.logging.Level; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R2.CraftWorld; -import org.bukkit.entity.Player; - -public class WorldUtilsImpl implements WorldUtils { - private final NMSUtilsImpl nmsUtils; - - public WorldUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public void saveWorldNow(World world) { - world.save(); - - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - try { - handle.save(null, true, false); - } catch (Exception e) { - Bukkit.getLogger().log(Level.SEVERE, "Exception while saving world", e); - } - } - - @Override - public void forceUnloadWorldWithoutSaving(World world, Location playerTarget) { - // final long t0 = System.currentTimeMillis(); - // String worldName = world.getName(); - - if (playerTarget.getWorld() == null || playerTarget.getWorld() == world) { - throw new IllegalArgumentException("Valid target world required"); - } - // move players out of this world - try { - for (Player p : world.getPlayers()) { - if (p.isDead()) { - p.spigot().respawn(); - } - if (p.getWorld() == world) { - p.teleport(playerTarget); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - // remove broken players - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - if (!handle.players().isEmpty()) { - for (ServerPlayer human : new ArrayList<>(handle.players())) { - kickPlayer((human.getBukkitEntity()), "Connection lost"); - } - handle.players().clear(); - } - - // unload the now empty world from the server - if (!nmsUtils.getPlugin().getServer().unloadWorld(world, false)) { - throw new IllegalStateException("Could not unload world"); - } - - // long t = System.currentTimeMillis(); - // nmsUtils.getPlugin().getLogger().info("Unloading world " + worldName + " completed in " + (t - t0) + "ms."); - } - - @SuppressWarnings("deprecation") - private void kickPlayer(Player player, String message) { - player.kickPlayer(message); - } -} diff --git a/nmsutils-v1_19_R3/pom.xml b/nmsutils-v1_19_R3/pom.xml deleted file mode 100644 index 6cf49fa..0000000 --- a/nmsutils-v1_19_R3/pom.xml +++ /dev/null @@ -1,100 +0,0 @@ - - 4.0.0 - nmsutils-v1_19_R3 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper-api - 1.19.4-R0.1-SNAPSHOT - provided - - - io.papermc.paper - paper-server - 1.19.4-R0.1-SNAPSHOT - mojang-mapped - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - net.fabricmc - mapping-io - 0.3.0 - provided - - - com.mojang - datafixerupper - 5.0.28 - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - fabric-repo - https://maven.fabricmc.net/ - - - - - - maven-compiler-plugin - 3.8.1 - - 17 - - - - net.md-5 - specialsource-maven-plugin - 1.2.3 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:1.19.4-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.19.4-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.19.4-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.19.4-R0.1-SNAPSHOT:jar:remapped-obf - - - - - - - \ No newline at end of file diff --git a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/CompoundTagImpl.java b/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/CompoundTagImpl.java deleted file mode 100644 index 08c7060..0000000 --- a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/CompoundTagImpl.java +++ /dev/null @@ -1,322 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R3; - -import com.google.common.base.Preconditions; -import de.cubeside.nmsutils.nbt.TagType; -import java.util.Collections; -import java.util.Set; -import java.util.UUID; -import net.minecraft.nbt.ByteArrayTag; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntArrayTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.LongArrayTag; -import net.minecraft.nbt.NumericTag; -import net.minecraft.nbt.StringTag; -import net.minecraft.nbt.Tag; - -public final class CompoundTagImpl implements de.cubeside.nmsutils.nbt.CompoundTag { - final CompoundTag handle; - - public CompoundTagImpl(CompoundTag handle) { - this.handle = handle; - } - - @Override - public boolean containsKey(String name) { - return handle.contains(name); - } - - @Override - public boolean containsKey(String name, TagType type) { - return handle.contains(name, type.internalId()); - } - - @Override - public void clear() { - handle.getAllKeys().clear(); - } - - @Override - public void remove(String name) { - handle.remove(name); - } - - @Override - public Set getAllKeys() { - return Collections.unmodifiableSet(handle.getAllKeys()); - } - - @Override - public void size() { - handle.size(); - } - - @Override - public void merge(de.cubeside.nmsutils.nbt.CompoundTag source) { - handle.merge(((CompoundTagImpl) source).handle); - } - - @Override - public CompoundTagImpl getCompound(String name) { - return getCompound(name, false); - } - - @Override - public CompoundTagImpl getCompound(String name, boolean createIfMissing) { - Preconditions.checkNotNull(name); - Tag tag = handle.get(name); - if (!(tag instanceof CompoundTag)) { - if (!createIfMissing) { - return null; - } - tag = new CompoundTag(); - handle.put(name, tag); - } - return new CompoundTagImpl((CompoundTag) tag); - } - - @Override - public ListTagImpl getList(String name) { - return getList(name, false); - } - - @Override - public ListTagImpl getList(String name, boolean createIfMissing) { - Preconditions.checkNotNull(name); - Tag tag = handle.get(name); - if (!(tag instanceof ListTag)) { - if (!createIfMissing) { - return null; - } - tag = new ListTag(); - handle.put(name, tag); - } - return new ListTagImpl((ListTag) tag); - } - - @Override - public byte getByte(String name) { - return getByte(name, (byte) 0); - } - - @Override - public byte getByte(String name, byte defaultValue) { - if (handle.get(name) instanceof NumericTag tag) { - return tag.getAsByte(); - } - return defaultValue; - } - - @Override - public void setByte(String name, byte b) { - Preconditions.checkNotNull(name); - handle.putByte(name, b); - } - - @Override - public short getShort(String name) { - return getShort(name, (short) 0); - } - - @Override - public short getShort(String name, short defaultValue) { - if (handle.get(name) instanceof NumericTag tag) { - return tag.getAsShort(); - } - return defaultValue; - } - - @Override - public void setShort(String name, short s) { - Preconditions.checkNotNull(name); - handle.putShort(name, s); - } - - @Override - public int getInt(String name) { - return getInt(name, 0); - } - - @Override - public int getInt(String name, int defaultValue) { - if (handle.get(name) instanceof NumericTag tag) { - return tag.getAsInt(); - } - return defaultValue; - } - - @Override - public void setInt(String name, int v) { - Preconditions.checkNotNull(name); - handle.putInt(name, v); - } - - @Override - public long getLong(String name) { - return getLong(name, 0L); - } - - @Override - public long getLong(String name, long defaultValue) { - if (handle.get(name) instanceof NumericTag tag) { - return tag.getAsLong(); - } - return defaultValue; - } - - @Override - public void setLong(String name, long l) { - Preconditions.checkNotNull(name); - handle.putLong(name, l); - } - - @Override - public float getFloat(String name) { - return getFloat(name, 0.0f); - } - - @Override - public float getFloat(String name, float defaultValue) { - if (handle.get(name) instanceof NumericTag tag) { - return tag.getAsFloat(); - } - return defaultValue; - } - - @Override - public void setFloat(String name, float f) { - Preconditions.checkNotNull(name); - handle.putFloat(name, f); - } - - @Override - public double getDouble(String name) { - return getDouble(name, 0.0); - } - - @Override - public double getDouble(String name, double defaultValue) { - if (handle.get(name) instanceof NumericTag tag) { - return tag.getAsDouble(); - } - return defaultValue; - } - - @Override - public void setDouble(String name, double d) { - Preconditions.checkNotNull(name); - handle.putDouble(name, d); - } - - @Override - public byte[] getByteArray(String name) { - return getByteArray(name, null); - } - - @Override - public byte[] getByteArray(String name, byte[] defaultValue) { - if (handle.get(name) instanceof ByteArrayTag tag) { - return tag.getAsByteArray(); - } - return defaultValue; - } - - @Override - public void setByteArray(String name, byte[] b) { - Preconditions.checkNotNull(name); - Preconditions.checkNotNull(b); - handle.putByteArray(name, b); - } - - @Override - public int[] getIntArray(String name) { - return getIntArray(name, null); - } - - @Override - public int[] getIntArray(String name, int[] defaultValue) { - if (handle.get(name) instanceof IntArrayTag tag) { - return tag.getAsIntArray(); - } - return defaultValue; - } - - @Override - public void setIntArray(String name, int[] v) { - Preconditions.checkNotNull(name); - Preconditions.checkNotNull(v); - handle.putIntArray(name, v); - } - - @Override - public long[] getLongArray(String name) { - return getLongArray(name, null); - } - - @Override - public long[] getLongArray(String name, long[] defaultValue) { - if (handle.get(name) instanceof LongArrayTag tag) { - return tag.getAsLongArray(); - } - return defaultValue; - } - - @Override - public void setLongArray(String name, long[] v) { - Preconditions.checkNotNull(name); - Preconditions.checkNotNull(v); - handle.putLongArray(name, v); - } - - @Override - public String getString(String name) { - return getString(name, null); - } - - @Override - public String getString(String name, String defaultValue) { - if (handle.get(name) instanceof StringTag tag) { - return tag.getAsString(); - } - return defaultValue; - } - - @Override - public void setString(String name, String v) { - Preconditions.checkNotNull(name); - Preconditions.checkNotNull(v); - handle.putString(name, v); - } - - @Override - public UUID getUUID(String name) { - return handle.hasUUID(name) ? handle.getUUID(name) : null; - } - - @Override - public boolean containsUUID(String name) { - return handle.hasUUID(name); - } - - @Override - public void setUUID(String name, UUID v) { - Preconditions.checkNotNull(name); - Preconditions.checkNotNull(v); - handle.putUUID(name, v); - } - - @Override - public int hashCode() { - return handle.hashCode(); - } - - @Override - public boolean equals(Object obj) { - return obj instanceof CompoundTagImpl o && handle.equals(o.handle); - } - - @Override - public CompoundTagImpl clone() { - return new CompoundTagImpl(handle.copy()); - } -} diff --git a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/EntityUtilsImpl.java b/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/EntityUtilsImpl.java deleted file mode 100644 index 7488153..0000000 --- a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/EntityUtilsImpl.java +++ /dev/null @@ -1,397 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R3; - -import com.destroystokyo.paper.entity.ai.VanillaGoal; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.nbt.CompoundTag; -import java.util.UUID; -import java.util.function.Function; -import java.util.logging.Level; -import net.minecraft.core.BlockPos; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.server.level.ChunkMap; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.WrappedGoal; -import net.minecraft.world.entity.animal.Wolf; -import net.minecraft.world.entity.animal.camel.Camel; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.phys.Vec3; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftBat; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftCamel; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftMob; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPiglin; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftRaider; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftShulker; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftVex; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftWolf; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Creature; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Mob; -import org.bukkit.entity.Pose; -import org.bukkit.entity.Vex; -import org.bukkit.util.Vector; - -public class EntityUtilsImpl implements EntityUtils { - private final NMSUtilsImpl nmsUtils; - - public EntityUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void clearAI(org.bukkit.entity.Entity entity) { - if (entity instanceof Mob) { - nmsUtils.getPlugin().getServer().getMobGoals().removeAllGoals((Mob) entity); - } - } - - @Override - public void addGoalFloat(Mob mob) { - if (!Bukkit.getMobGoals().hasGoal(mob, VanillaGoal.FLOAT)) { - net.minecraft.world.entity.Mob h = ((CraftMob) mob).getHandle(); - h.goalSelector.addGoal(1, new FloatGoal(h)); - } - } - - @Override - public void addGoalLimitedStrollLand(Creature mob, double velocity, Function checkTargetFunction) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - h.goalSelector.addGoal(7, new PathfinderGoalLimitedRandomStrollLand(h, velocity, checkTargetFunction)); - } - - @Override - public void removeGoalLimitedStrollLand(Creature mob) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - for (WrappedGoal wrappedGoal : h.goalSelector.getAvailableGoals()) { - if (wrappedGoal.getGoal() instanceof PathfinderGoalLimitedRandomStrollLand goal) { - wrappedGoal.stop(); - h.goalSelector.removeGoal(goal); - break; - } - } - } - - @Override - public int getShulkerOpenState(org.bukkit.entity.Entity shulker) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return 0; - } - CraftShulker cs = (CraftShulker) shulker; - return cs.getHandle().getRawPeekAmount(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get shulker open state", e); - } - return 0; - } - - @Override - public void setShulkerOpenState(org.bukkit.entity.Entity shulker, int state) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return; - } - state = Math.max(0, Math.min(Byte.MAX_VALUE, state)); - CraftShulker cs = (CraftShulker) shulker; - cs.getHandle().setRawPeekAmount(state); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set shulker open state", e); - } - } - - @Override - public boolean isPiglinDancing(org.bukkit.entity.Entity piglin) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return false; - } - CraftPiglin cs = (CraftPiglin) piglin; - return cs.getHandle().isDancing(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get piglin dancing state", e); - } - return false; - } - - @Override - public void setPiglinDancing(org.bukkit.entity.Entity piglin, boolean dancing) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return; - } - CraftPiglin cs = (CraftPiglin) piglin; - cs.getHandle().setDancing(dancing); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set piglin dancing state", e); - } - } - - @Override - public void sendEntityPositionUpdate(org.bukkit.entity.Entity entity) { - Entity handle = ((CraftEntity) entity).getHandle(); - ChunkMap.TrackedEntity ete = handle.tracker; - if (ete != null) { - ClientboundTeleportEntityPacket positionPacket = new ClientboundTeleportEntityPacket(handle); - ete.seenBy.stream().forEach(viewer -> { - viewer.send(positionPacket); - }); - } - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, double x, double y, double z) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.move(MoverType.SELF, new Vec3(x, y, z)); - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, Vector v) { - moveEntity(e, v.getX(), v.getY(), v.getZ()); - } - - @Override - public void setEntityHeadRotation(org.bukkit.entity.Entity e, float headRotation) { - Entity handle = ((CraftEntity) e).getHandle(); - if (handle instanceof LivingEntity) { - // required for goats - ((LivingEntity) handle).yHeadRot = headRotation; - } else { - handle.setYHeadRot(headRotation); - } - } - - @Override - public float getEntityHeadRotation(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYHeadRot(); - } - - @Override - public void setEntityYaw(org.bukkit.entity.Entity e, float yaw) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setYRot(yaw); - } - - @Override - public float getEntityYaw(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYRot(); - } - - @Override - public void setEntityPitch(org.bukkit.entity.Entity e, float pitch) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setXRot(pitch); - } - - @Override - public float getEntityPitch(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getXRot(); - } - - @Override - public void setEntityNavigationTarget(org.bukkit.entity.Entity entity, Location target, double speed) { - if (entity instanceof Bat) { - ((CraftBat) entity).getHandle().targetPosition = new BlockPos(target.getBlockX(), target.getBlockY(), target.getBlockZ()); - } else if (entity instanceof Vex) { - net.minecraft.world.entity.monster.Vex entityVex = ((CraftVex) entity).getHandle(); - entityVex.getMoveControl().setWantedPosition(target.getX(), target.getY(), target.getZ(), speed); - if (entityVex.getTarget() == null) { - entityVex.getLookControl().setLookAt(target.getX(), target.getY(), target.getZ(), 180, 20); - } - } else if (entity instanceof CraftMob) { - ((CraftMob) entity).getHandle().getNavigation().moveTo(target.getX(), target.getY(), target.getZ(), speed); - } else { - throw new IllegalArgumentException("Cannot set the navigation target for this mob: " + (entity == null ? "null" : entity.getType())); - } - } - - @Override - public void setEntityLeftHanded(org.bukkit.entity.Entity ent, boolean left) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - mob.setLeftHanded(left); - } - } - - @Override - public boolean isEntityLeftHanded(org.bukkit.entity.Entity ent) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - return mob.isLeftHanded(); - } - return false; - } - - @Override - public boolean isEntityInvisible(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isInvisible(); - } - - @Override - public void setEntityInvisible(org.bukkit.entity.Entity entity, boolean invisible) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setInvisible(invisible); - } - - @Override - public boolean hasEntityNoClip(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noPhysics; - } - - @Override - public void setEntityNoClip(org.bukkit.entity.Entity entity, boolean noClip) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noPhysics = noClip; - } - - @Override - public boolean areChunkEntitiesLoaded(Chunk c) { - return ((CraftWorld) c.getWorld()).getHandle().areEntitiesLoaded(ChunkPos.asLong(c.getX(), c.getZ())); - } - - @Override - public void loadChunkEntities(Chunk c) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Call to unimplemented method", new RuntimeException()); - // int x = c.getX(); - // int z = c.getZ(); - // World world = c.getWorld(); - // if (!world.isChunkLoaded(x, z)) { - // world.getChunkAt(x, z); - // } - // - // if (areChunkEntitiesLoaded(c)) { - // return; - // } - // ServerLevel serverLevel = ((CraftWorld) world).getHandle(); - // serverLevel.entityManager.updateChunkStatus(new ChunkPos(x, z), Visibility.TRACKED); - // // now wait until entities are loaded - // if (!areChunkEntitiesLoaded(c)) { - // serverLevel.getServer().managedBlock(() -> { - // if (areChunkEntitiesLoaded(c)) { - // return true; - // } - // // process chunk inbox - // serverLevel.entityManager.tick(); - // return areChunkEntitiesLoaded(c); - // }); - // } - } - - @Override - public void setOnGround(org.bukkit.entity.Entity entity, boolean onGround) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setOnGround(onGround); - } - - @Override - public org.bukkit.entity.Entity getEntityById(World world, int id) { - Entity entity = ((CraftWorld) world).getHandle().getEntity(id); - return entity == null ? null : entity.getBukkitEntity(); - } - - @Override - public void setPose(org.bukkit.entity.Entity entity, Pose pose) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); - } - - @Override - public void setWolfAngerTime(org.bukkit.entity.Wolf entity, int timeInTicks) { - Wolf nmsEntity = ((CraftWolf) entity).getHandle(); - nmsEntity.setRemainingPersistentAngerTime(timeInTicks); - } - - @Override - public void setAggressive(org.bukkit.entity.Mob entity, boolean aggressive) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - nmsEntity.setAggressive(aggressive); - } - - @Override - public boolean isAggressive(org.bukkit.entity.Mob entity) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - return nmsEntity.isAggressive(); - } - - @Override - public boolean isCelebrating(org.bukkit.entity.Raider entity) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - return nmsEntity.isCelebrating(); - } - - @Override - public void setCelebrating(org.bukkit.entity.Raider entity, boolean celebrating) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - nmsEntity.setCelebrating(celebrating); - } - - @Override - public void setCamelLastPoseChange(org.bukkit.entity.Camel entity, long tick) { - Camel nmsEntity = ((CraftCamel) entity).getHandle(); - nmsEntity.resetLastPoseChangeTick(nmsEntity.getLevel().getGameTime() - tick); - } - - @Override - public long getCamelLastPoseChange(org.bukkit.entity.Camel entity) { - Camel nmsEntity = ((CraftCamel) entity).getHandle(); - return nmsEntity.getPoseTime(); - } - - @Override - public boolean isCamelSitting(org.bukkit.entity.Camel entity) { - Camel nmsEntity = ((CraftCamel) entity).getHandle(); - return nmsEntity.isCamelSitting(); - } - - @Override - public CompoundTag getNbt(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - net.minecraft.nbt.CompoundTag compoundTag = nmsEntity.saveWithoutId(new net.minecraft.nbt.CompoundTag()); - return new CompoundTagImpl(compoundTag); - } - - @Override - public void setNbt(org.bukkit.entity.Entity entity, CompoundTag nbt) { - net.minecraft.nbt.CompoundTag nativeNbt = ((CompoundTagImpl) nbt).handle; - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - - UUID uuid = nmsEntity.getUUID(); - nmsEntity.load(nativeNbt); - nmsEntity.setUUID(uuid); - } - - @Override - public void mergeNbt(org.bukkit.entity.Entity entity, CompoundTag nbt) { - net.minecraft.nbt.CompoundTag nativeNbt = ((CompoundTagImpl) nbt).handle; - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - - net.minecraft.nbt.CompoundTag oldNbt = nmsEntity.saveWithoutId(new net.minecraft.nbt.CompoundTag()); - net.minecraft.nbt.CompoundTag newNbt = oldNbt.copy().merge(nativeNbt); - if (!oldNbt.equals(newNbt)) { - UUID uuid = nmsEntity.getUUID(); - nmsEntity.load(newNbt); - nmsEntity.setUUID(uuid); - } - } -} diff --git a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/ListTagImpl.java b/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/ListTagImpl.java deleted file mode 100644 index 2fba9b0..0000000 --- a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/ListTagImpl.java +++ /dev/null @@ -1,422 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R3; - -import de.cubeside.nmsutils.nbt.TagType; -import java.util.UUID; -import net.minecraft.nbt.ByteArrayTag; -import net.minecraft.nbt.ByteTag; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.DoubleTag; -import net.minecraft.nbt.FloatTag; -import net.minecraft.nbt.IntArrayTag; -import net.minecraft.nbt.IntTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.LongArrayTag; -import net.minecraft.nbt.LongTag; -import net.minecraft.nbt.NbtUtils; -import net.minecraft.nbt.NumericTag; -import net.minecraft.nbt.ShortTag; -import net.minecraft.nbt.StringTag; - -public final class ListTagImpl implements de.cubeside.nmsutils.nbt.ListTag { - final ListTag handle; - - public ListTagImpl(ListTag handle) { - this.handle = handle; - } - - @Override - public int size() { - return handle.size(); - } - - @Override - public boolean isEmpty() { - return handle.isEmpty(); - } - - @Override - public TagType getElementType() { - return TagType.ofInternal(handle.getElementType()); - } - - @Override - public CompoundTagImpl getCompound(int index) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof CompoundTag t) { - return new CompoundTagImpl(t); - } - return null; - } - - @Override - public CompoundTagImpl addCompound() { - return addCompound(size()); - } - - @Override - public CompoundTagImpl addCompound(int index) { - CompoundTag tag = new CompoundTag(); - return handle.addTag(index, tag) ? new CompoundTagImpl(tag) : null; - } - - @Override - public CompoundTagImpl setCompound(int index) { - CompoundTag tag = new CompoundTag(); - return handle.setTag(index, tag) ? new CompoundTagImpl(tag) : null; - } - - @Override - public ListTagImpl getList(int index) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof ListTag t) { - return new ListTagImpl(t); - } - return null; - } - - @Override - public ListTagImpl addList() { - return addList(size()); - } - - @Override - public ListTagImpl addList(int index) { - ListTag tag = new ListTag(); - return handle.addTag(index, tag) ? new ListTagImpl(tag) : null; - } - - @Override - public ListTagImpl setList(int index) { - ListTag tag = new ListTag(); - return handle.setTag(index, tag) ? new ListTagImpl(tag) : null; - } - - @Override - public byte getByte(int index) { - return getByte(index, (byte) 0); - } - - @Override - public byte getByte(int index, byte defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof NumericTag t) { - return t.getAsByte(); - } - return defaultValue; - } - - @Override - public boolean addByte(byte v) { - return addByte(size(), v); - } - - @Override - public boolean addByte(int index, byte v) { - return handle.addTag(index, ByteTag.valueOf(v)); - } - - @Override - public boolean setByte(int index, byte v) { - return handle.setTag(index, ByteTag.valueOf(v)); - } - - @Override - public short getShort(int index) { - return getShort(index, (short) 0); - } - - @Override - public short getShort(int index, short defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof NumericTag t) { - return t.getAsShort(); - } - return defaultValue; - } - - @Override - public boolean addShort(short v) { - return addShort(size(), v); - } - - @Override - public boolean addShort(int index, short v) { - return handle.addTag(index, ShortTag.valueOf(v)); - } - - @Override - public boolean setShort(int index, short v) { - return handle.setTag(index, ShortTag.valueOf(v)); - } - - @Override - public int getInt(int index) { - return getInt(index, 0); - } - - @Override - public int getInt(int index, int defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof NumericTag t) { - return t.getAsInt(); - } - return defaultValue; - } - - @Override - public boolean addInt(int v) { - return addInt(size(), v); - } - - @Override - public boolean addInt(int index, int v) { - return handle.addTag(index, IntTag.valueOf(v)); - } - - @Override - public boolean setInt(int index, int v) { - return handle.setTag(index, IntTag.valueOf(v)); - } - - @Override - public long getLong(int index) { - return getLong(index, 0); - } - - @Override - public long getLong(int index, long defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof NumericTag t) { - return t.getAsLong(); - } - return defaultValue; - } - - @Override - public boolean addLong(long v) { - return addLong(size(), v); - } - - @Override - public boolean addLong(int index, long v) { - return handle.addTag(index, LongTag.valueOf(v)); - } - - @Override - public boolean setLong(int index, long v) { - return handle.setTag(index, LongTag.valueOf(v)); - } - - @Override - public float getFloat(int index) { - return getFloat(index, 0); - } - - @Override - public float getFloat(int index, float defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof NumericTag t) { - return t.getAsFloat(); - } - return defaultValue; - } - - @Override - public boolean addFloat(float v) { - return addFloat(size(), v); - } - - @Override - public boolean addFloat(int index, float v) { - return handle.addTag(index, FloatTag.valueOf(v)); - } - - @Override - public boolean setFloat(int index, float v) { - return handle.setTag(index, FloatTag.valueOf(v)); - } - - @Override - public double getDouble(int index) { - return getDouble(index, 0); - } - - @Override - public double getDouble(int index, double defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof NumericTag t) { - return t.getAsDouble(); - } - return defaultValue; - } - - @Override - public boolean addDouble(double v) { - return addDouble(size(), v); - } - - @Override - public boolean addDouble(int index, double v) { - return handle.addTag(index, DoubleTag.valueOf(v)); - } - - @Override - public boolean setDouble(int index, double v) { - return handle.setTag(index, DoubleTag.valueOf(v)); - } - - @Override - public byte[] getByteArray(int index) { - return getByteArray(index, null); - } - - @Override - public byte[] getByteArray(int index, byte[] defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof ByteArrayTag t) { - return t.getAsByteArray(); - } - return defaultValue; - } - - @Override - public boolean addByteArray(byte[] v) { - return addByteArray(size(), v); - } - - @Override - public boolean addByteArray(int index, byte[] v) { - return handle.addTag(index, new ByteArrayTag(v)); - } - - @Override - public boolean setByteArray(int index, byte[] v) { - return handle.setTag(index, new ByteArrayTag(v)); - } - - @Override - public int[] getIntArray(int index) { - return getIntArray(index, null); - } - - @Override - public int[] getIntArray(int index, int[] defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof IntArrayTag t) { - return t.getAsIntArray(); - } - return defaultValue; - } - - @Override - public boolean addIntArray(int[] v) { - return addIntArray(size(), v); - } - - @Override - public boolean addIntArray(int index, int[] v) { - return handle.addTag(index, new IntArrayTag(v)); - } - - @Override - public boolean setIntArray(int index, int[] v) { - return handle.setTag(index, new IntArrayTag(v)); - } - - @Override - public long[] getLongArray(int index) { - return getLongArray(index, null); - } - - @Override - public long[] getLongArray(int index, long[] defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof LongArrayTag t) { - return t.getAsLongArray(); - } - return defaultValue; - } - - @Override - public boolean addLongArray(long[] v) { - return addLongArray(size(), v); - } - - @Override - public boolean addLongArray(int index, long[] v) { - return handle.addTag(index, new LongArrayTag(v)); - } - - @Override - public boolean setLongArray(int index, long[] v) { - return handle.setTag(index, new LongArrayTag(v)); - } - - @Override - public String getString(int index) { - return getString(index, null); - } - - @Override - public String getString(int index, String defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof StringTag t) { - return t.getAsString(); - } - return defaultValue; - } - - @Override - public boolean addString(String v) { - return addString(size(), v); - } - - @Override - public boolean addString(int index, String v) { - return handle.addTag(index, StringTag.valueOf(v)); - } - - @Override - public boolean setString(int index, String v) { - return handle.setTag(index, StringTag.valueOf(v)); - } - - @Override - public UUID getUUID(int index) { - return getUUID(index, null); - } - - @Override - public UUID getUUID(int index, UUID defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof IntArrayTag t && t.size() == 4) { - return NbtUtils.loadUUID(t); - } - return defaultValue; - } - - @Override - public boolean addUUID(UUID v) { - return addUUID(size(), v); - } - - @Override - public boolean addUUID(int index, UUID v) { - return handle.addTag(index, NbtUtils.createUUID(v)); - } - - @Override - public boolean setUUID(int index, UUID v) { - return handle.setTag(index, NbtUtils.createUUID(v)); - } - - public void remove(int i) { - handle.remove(i); - } - - public void clear() { - handle.clear(); - } - - @Override - public int hashCode() { - return handle.hashCode(); - } - - @Override - public boolean equals(Object obj) { - return obj instanceof ListTagImpl o && handle.equals(o.handle); - } - - @Override - public ListTagImpl clone() { - return new ListTagImpl(handle.copy()); - } -} diff --git a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/MiscUtilsImpl.java b/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/MiscUtilsImpl.java deleted file mode 100644 index b1921a0..0000000 --- a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/MiscUtilsImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R3; - -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockBehaviour.BlockStateBase; -import net.minecraft.world.level.block.state.BlockBehaviour.Properties; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.MaterialColor; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_19_R3.util.CraftMagicNumbers; - -public class MiscUtilsImpl implements MiscUtils { - private final NMSUtilsImpl nmsUtils; - - private Field fieldBlockBehaviour_properties; - private MaterialColor transparentColor; - private Field fieldBlockStateBase_materialColor; - - public MiscUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void setBlockMapColorTransparent(Material m) { - if (fieldBlockBehaviour_properties == null) { - Class classBlockProperties = BlockBehaviour.Properties.class; - Class classBlockBehaviour = BlockBehaviour.class; - fieldBlockBehaviour_properties = null; - for (Field f : classBlockBehaviour.getDeclaredFields()) { - if (f.getType() == classBlockProperties) { - fieldBlockBehaviour_properties = f; - fieldBlockBehaviour_properties.setAccessible(true); - } - } - if (fieldBlockBehaviour_properties == null) { - throw new IllegalStateException("Could not find block properties field!"); - } - - Class classBlockStateBase = BlockBehaviour.BlockStateBase.class; - for (Field f : classBlockStateBase.getDeclaredFields()) { - if (f.getType() == MaterialColor.class) { - fieldBlockStateBase_materialColor = f; - fieldBlockStateBase_materialColor.setAccessible(true); - } - } - if (fieldBlockStateBase_materialColor == null) { - throw new IllegalStateException("Could not find BlockStateBase materialColor field!"); - } - - try { - Constructor constructorMaterialColor = MaterialColor.class.getDeclaredConstructor(int.class, int.class); - constructorMaterialColor.setAccessible(true); - transparentColor = constructorMaterialColor.newInstance(0, 0); - } catch (ReflectiveOperationException e) { - throw new IllegalStateException("Could not create custom transparent MaterialColor!"); - } - } - - if (!m.isBlock()) { - throw new IllegalArgumentException("Material must be a block"); - } - Block b = CraftMagicNumbers.getBlock(m); - try { - BlockBehaviour.Properties properties = (Properties) fieldBlockBehaviour_properties.get(b); - properties.color(transparentColor); - for (BlockState state : b.getStateDefinition().getPossibleStates()) { - fieldBlockStateBase_materialColor.set(state, transparentColor); - } - } catch (IllegalAccessException e) { - throw new IllegalStateException("Could not set the MaterialColor!"); - } - } -} diff --git a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/PathfinderGoalLimitedRandomStrollLand.java b/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/PathfinderGoalLimitedRandomStrollLand.java deleted file mode 100644 index a25b399..0000000 --- a/nmsutils-v1_19_R3/src/main/java/de/cubeside/nmsutils/v1_19_R3/PathfinderGoalLimitedRandomStrollLand.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.cubeside.nmsutils.v1_19_R3; - -import java.util.function.Function; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.RandomStrollGoal; -import net.minecraft.world.phys.Vec3; -import org.bukkit.util.Vector; - -public class PathfinderGoalLimitedRandomStrollLand extends RandomStrollGoal { - - private Function checkVectorFunction; - // private EntityCreature entity; - - public PathfinderGoalLimitedRandomStrollLand(PathfinderMob entity, double velocity, Function checkVectorFunction) { - super(entity, velocity, 1, false); - // this.entity = entity; - this.checkVectorFunction = checkVectorFunction; - } - - @Override - protected Vec3 getPosition() { - Vec3 base = super.getPosition(); - if (base == null || checkVectorFunction.apply(org.bukkit.craftbukkit.v1_19_R3.util.CraftVector.toBukkit(base)) != Boolean.TRUE) { - base = null; - } - return base; - } -} diff --git a/nmsutils-v1_20_R1/pom.xml b/nmsutils-v1_20_R1/pom.xml deleted file mode 100644 index 2f1ea61..0000000 --- a/nmsutils-v1_20_R1/pom.xml +++ /dev/null @@ -1,100 +0,0 @@ - - 4.0.0 - nmsutils-v1_20_R1 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper-api - 1.20-R0.1-SNAPSHOT - provided - - - io.papermc.paper - paper-server - 1.20-R0.1-SNAPSHOT - mojang-mapped - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - net.fabricmc - mapping-io - 0.3.0 - provided - - - com.mojang - datafixerupper - 5.0.28 - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - fabric-repo - https://maven.fabricmc.net/ - - - - - - maven-compiler-plugin - 3.8.1 - - 17 - - - - net.md-5 - specialsource-maven-plugin - 1.2.3 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:1.20-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.20-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.20-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.20-R0.1-SNAPSHOT:jar:remapped-obf - - - - - - - \ No newline at end of file diff --git a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/BiomeUtilsImpl.java b/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/BiomeUtilsImpl.java deleted file mode 100644 index d96687a..0000000 --- a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/BiomeUtilsImpl.java +++ /dev/null @@ -1,161 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R1; - -import com.mojang.serialization.Lifecycle; -import de.cubeside.nmsutils.BiomeUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.biome.CustomBiome; -import de.cubeside.nmsutils.util.ReobfHelper; -import java.lang.reflect.Field; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.IdentityHashMap; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.core.Holder.Reference; -import net.minecraft.core.MappedRegistry; -import net.minecraft.core.WritableRegistry; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.dedicated.DedicatedServer; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.biome.AmbientMoodSettings; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.Biome.BiomeBuilder; -import net.minecraft.world.level.biome.Biome.TemperatureModifier; -import net.minecraft.world.level.biome.BiomeSpecialEffects; -import net.minecraft.world.level.biome.BiomeSpecialEffects.Builder; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.chunk.LevelChunk; -import org.bukkit.Location; -import org.bukkit.NamespacedKey; -import org.bukkit.Server; -import org.bukkit.craftbukkit.v1_20_R1.CraftServer; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; - -public class BiomeUtilsImpl implements BiomeUtils { - private final NMSUtilsImpl nmsUtils; - - private HashMap customBiomes; - private HashMap customBiomesByBiome; - private Collection unmodifiableCustomBiomes; - - private static final Field FIELD_MAPPED_REGISTRY_FROZEN = ReobfHelper.getFieldByMojangName(MappedRegistry.class, "frozen"); - private static final Field FIELD_MAPPED_REGISTRY_UNREGISTERED_INTRUSIVE_HOLDERS = ReobfHelper.getFieldByMojangName(MappedRegistry.class, "unregisteredIntrusiveHolders"); - - public BiomeUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - this.customBiomes = new HashMap<>(); - this.customBiomesByBiome = new HashMap<>(); - this.unmodifiableCustomBiomes = Collections.unmodifiableCollection(customBiomes.values()); - } - - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public CustomBiome registerCustomBiome(NamespacedKey id, float downfall, float temperature, de.cubeside.nmsutils.biome.Precipitation precipitation, Integer fogColor, Integer waterColor, Integer waterFogColor, Integer skyColor, Integer foliageColor, Integer grassColor, - GrassColorModifier grassColorModifier) { - Server server = nmsUtils.getPlugin().getServer(); - CraftServer craftserver = (CraftServer) server; - DedicatedServer dedicatedserver = craftserver.getServer(); - ResourceKey newKey = ResourceKey.create(Registries.BIOME, new ResourceLocation(id.getNamespace(), id.getKey())); - - ResourceKey oldKey = Biomes.FOREST; - WritableRegistry registrywritable = (WritableRegistry) dedicatedserver.registryAccess().registryOrThrow(Registries.BIOME); - - try { - FIELD_MAPPED_REGISTRY_FROZEN.set(registrywritable, false); - FIELD_MAPPED_REGISTRY_UNREGISTERED_INTRUSIVE_HOLDERS.set(registrywritable, new IdentityHashMap<>()); - } catch (IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - - Biome forestbiome = registrywritable.get(oldKey); - - BiomeBuilder builder = new Biome.BiomeBuilder(); - builder.downfall(downfall); - builder.temperature(temperature); - boolean mojangPrecipitation = false; - - if (precipitation == de.cubeside.nmsutils.biome.Precipitation.RAIN) { - mojangPrecipitation = true; - } else if (precipitation == de.cubeside.nmsutils.biome.Precipitation.SNOW) { - mojangPrecipitation = true; - } - builder.hasPrecipitation(mojangPrecipitation); - builder.mobSpawnSettings(forestbiome.getMobSettings()); - builder.generationSettings(forestbiome.getGenerationSettings()); - builder.temperatureAdjustment(TemperatureModifier.NONE); - Builder effects = new BiomeSpecialEffects.Builder(); - effects.waterColor(waterColor == null ? forestbiome.getWaterColor() : waterColor); - effects.waterFogColor(waterFogColor == null ? forestbiome.getWaterFogColor() : waterFogColor); - effects.fogColor(fogColor == null ? forestbiome.getFogColor() : fogColor); - effects.skyColor(skyColor == null ? forestbiome.getSkyColor() : skyColor); - if (foliageColor != null) { - effects.foliageColorOverride(foliageColor); - } - if (grassColor != null) { - effects.grassColorOverride(grassColor); - } - effects.ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS); - net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier nativeGrassColorModifier = switch (grassColorModifier) { - case DARK_FOREST -> net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier.DARK_FOREST; - case SWAMP -> net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier.SWAMP; - default -> net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier.NONE; - }; - effects.grassColorModifier(nativeGrassColorModifier); - builder.specialEffects(effects.build()); - - Biome newbiome = builder.build(); - - registrywritable.createIntrusiveHolder(newbiome); - Reference biomeHolder = registrywritable.register(newKey, newbiome, Lifecycle.stable()); - - try { - FIELD_MAPPED_REGISTRY_UNREGISTERED_INTRUSIVE_HOLDERS.set(registrywritable, null); - } catch (IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - CustomBiomeImpl impl = new CustomBiomeImpl(id, newKey, newbiome, biomeHolder); - customBiomes.put(id, impl); - customBiomesByBiome.put(newbiome, impl); - - return new CustomBiomeImpl(id, newKey, newbiome, biomeHolder); - } - - @Override - public Collection getAllCustomBiomes() { - return unmodifiableCustomBiomes; - } - - @Override - public CustomBiome getCustomBiome(NamespacedKey id) { - return customBiomes.get(id); - } - - @Override - public CustomBiome getCustomBiomeAt(Location location) { - location.getWorld().getChunkAt(location); - Level level = ((CraftWorld) location.getWorld()).getHandle(); - int x = location.getBlockX(); - int y = location.getBlockY(); - int z = location.getBlockZ(); - - BlockPos pos = new BlockPos(x, 0, z); - if (level.isLoaded(pos)) { - LevelChunk chunk = level.getChunkAt(pos); - if (chunk != null) { - - Holder biomeHolder = chunk.getNoiseBiome(x >> 2, y >> 2, z >> 2); - if (biomeHolder.isBound()) { - Biome biome = biomeHolder.value(); - return customBiomesByBiome.get(biome); - } - } - } - return null; - } -} diff --git a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/CustomBiomeImpl.java b/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/CustomBiomeImpl.java deleted file mode 100644 index 593db26..0000000 --- a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/CustomBiomeImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R1; - -import de.cubeside.nmsutils.biome.CustomBiome; -import net.minecraft.core.BlockPos.MutableBlockPos; -import net.minecraft.core.Holder.Reference; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.chunk.LevelChunk; -import org.bukkit.Location; -import org.bukkit.NamespacedKey; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; - -public class CustomBiomeImpl implements CustomBiome { - private NamespacedKey bukkitKey; - private Reference biomeHolder; - private MutableBlockPos pos = new MutableBlockPos(); - - public CustomBiomeImpl(NamespacedKey bukkitKey, ResourceKey key, Biome biome, Reference biomeHolder) { - this.bukkitKey = bukkitKey; - this.biomeHolder = biomeHolder; - } - - @Override - public NamespacedKey getId() { - return bukkitKey; - } - - @Override - public boolean setBiome(Location location) { - location.getWorld().getChunkAt(location); - Level level = ((CraftWorld) location.getWorld()).getHandle(); - int x = location.getBlockX(); - int y = location.getBlockY(); - int z = location.getBlockZ(); - - pos.set(x, 0, z); - if (level.isLoaded(pos)) { - LevelChunk chunk = level.getChunkAt(pos); - if (chunk != null) { - - chunk.setBiome(x >> 2, y >> 2, z >> 2, biomeHolder); - chunk.setUnsaved(true); - return true; - } - } - return false; - } -} diff --git a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/EntityUtilsImpl.java b/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/EntityUtilsImpl.java deleted file mode 100644 index 4f2c08a..0000000 --- a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/EntityUtilsImpl.java +++ /dev/null @@ -1,397 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R1; - -import com.destroystokyo.paper.entity.ai.VanillaGoal; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.nbt.CompoundTag; -import java.util.UUID; -import java.util.function.Function; -import java.util.logging.Level; -import net.minecraft.core.BlockPos; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.server.level.ChunkMap; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.WrappedGoal; -import net.minecraft.world.entity.animal.Wolf; -import net.minecraft.world.entity.animal.camel.Camel; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.phys.Vec3; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftBat; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftCamel; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftMob; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPiglin; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftRaider; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftShulker; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftVex; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftWolf; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Creature; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Mob; -import org.bukkit.entity.Pose; -import org.bukkit.entity.Vex; -import org.bukkit.util.Vector; - -public class EntityUtilsImpl implements EntityUtils { - private final NMSUtilsImpl nmsUtils; - - public EntityUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void clearAI(org.bukkit.entity.Entity entity) { - if (entity instanceof Mob) { - nmsUtils.getPlugin().getServer().getMobGoals().removeAllGoals((Mob) entity); - } - } - - @Override - public void addGoalFloat(Mob mob) { - if (!Bukkit.getMobGoals().hasGoal(mob, VanillaGoal.FLOAT)) { - net.minecraft.world.entity.Mob h = ((CraftMob) mob).getHandle(); - h.goalSelector.addGoal(1, new FloatGoal(h)); - } - } - - @Override - public void addGoalLimitedStrollLand(Creature mob, double velocity, Function checkTargetFunction) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - h.goalSelector.addGoal(7, new PathfinderGoalLimitedRandomStrollLand(h, velocity, checkTargetFunction)); - } - - @Override - public void removeGoalLimitedStrollLand(Creature mob) { - PathfinderMob h = ((CraftCreature) mob).getHandle(); - for (WrappedGoal wrappedGoal : h.goalSelector.getAvailableGoals()) { - if (wrappedGoal.getGoal() instanceof PathfinderGoalLimitedRandomStrollLand goal) { - wrappedGoal.stop(); - h.goalSelector.removeGoal(goal); - break; - } - } - } - - @Override - public int getShulkerOpenState(org.bukkit.entity.Entity shulker) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return 0; - } - CraftShulker cs = (CraftShulker) shulker; - return cs.getHandle().getRawPeekAmount(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get shulker open state", e); - } - return 0; - } - - @Override - public void setShulkerOpenState(org.bukkit.entity.Entity shulker, int state) { - try { - if (shulker.getType() != EntityType.SHULKER) { - return; - } - state = Math.max(0, Math.min(Byte.MAX_VALUE, state)); - CraftShulker cs = (CraftShulker) shulker; - cs.getHandle().setRawPeekAmount(state); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set shulker open state", e); - } - } - - @Override - public boolean isPiglinDancing(org.bukkit.entity.Entity piglin) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return false; - } - CraftPiglin cs = (CraftPiglin) piglin; - return cs.getHandle().isDancing(); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not get piglin dancing state", e); - } - return false; - } - - @Override - public void setPiglinDancing(org.bukkit.entity.Entity piglin, boolean dancing) { - try { - if (piglin.getType() != EntityType.PIGLIN) { - return; - } - CraftPiglin cs = (CraftPiglin) piglin; - cs.getHandle().setDancing(dancing); - } catch (Exception e) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Could not set piglin dancing state", e); - } - } - - @Override - public void sendEntityPositionUpdate(org.bukkit.entity.Entity entity) { - Entity handle = ((CraftEntity) entity).getHandle(); - ChunkMap.TrackedEntity ete = handle.tracker; - if (ete != null) { - ClientboundTeleportEntityPacket positionPacket = new ClientboundTeleportEntityPacket(handle); - ete.seenBy.stream().forEach(viewer -> { - viewer.send(positionPacket); - }); - } - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, double x, double y, double z) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.move(MoverType.SELF, new Vec3(x, y, z)); - } - - @Override - public void moveEntity(org.bukkit.entity.Entity e, Vector v) { - moveEntity(e, v.getX(), v.getY(), v.getZ()); - } - - @Override - public void setEntityHeadRotation(org.bukkit.entity.Entity e, float headRotation) { - Entity handle = ((CraftEntity) e).getHandle(); - if (handle instanceof LivingEntity) { - // required for goats - ((LivingEntity) handle).yHeadRot = headRotation; - } else { - handle.setYHeadRot(headRotation); - } - } - - @Override - public float getEntityHeadRotation(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYHeadRot(); - } - - @Override - public void setEntityYaw(org.bukkit.entity.Entity e, float yaw) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setYRot(yaw); - } - - @Override - public float getEntityYaw(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getYRot(); - } - - @Override - public void setEntityPitch(org.bukkit.entity.Entity e, float pitch) { - Entity handle = ((CraftEntity) e).getHandle(); - handle.setXRot(pitch); - } - - @Override - public float getEntityPitch(org.bukkit.entity.Entity e) { - Entity handle = ((CraftEntity) e).getHandle(); - return handle.getXRot(); - } - - @Override - public void setEntityNavigationTarget(org.bukkit.entity.Entity entity, Location target, double speed) { - if (entity instanceof Bat) { - ((CraftBat) entity).getHandle().targetPosition = new BlockPos(target.getBlockX(), target.getBlockY(), target.getBlockZ()); - } else if (entity instanceof Vex) { - net.minecraft.world.entity.monster.Vex entityVex = ((CraftVex) entity).getHandle(); - entityVex.getMoveControl().setWantedPosition(target.getX(), target.getY(), target.getZ(), speed); - if (entityVex.getTarget() == null) { - entityVex.getLookControl().setLookAt(target.getX(), target.getY(), target.getZ(), 180, 20); - } - } else if (entity instanceof CraftMob) { - ((CraftMob) entity).getHandle().getNavigation().moveTo(target.getX(), target.getY(), target.getZ(), speed); - } else { - throw new IllegalArgumentException("Cannot set the navigation target for this mob: " + (entity == null ? "null" : entity.getType())); - } - } - - @Override - public void setEntityLeftHanded(org.bukkit.entity.Entity ent, boolean left) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - mob.setLeftHanded(left); - } - } - - @Override - public boolean isEntityLeftHanded(org.bukkit.entity.Entity ent) { - Entity nmsEntity = ((CraftEntity) ent).getHandle(); - if (nmsEntity instanceof net.minecraft.world.entity.Mob mob) { - return mob.isLeftHanded(); - } - return false; - } - - @Override - public boolean isEntityInvisible(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isInvisible(); - } - - @Override - public void setEntityInvisible(org.bukkit.entity.Entity entity, boolean invisible) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setInvisible(invisible); - } - - @Override - public boolean hasEntityNoClip(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noPhysics; - } - - @Override - public void setEntityNoClip(org.bukkit.entity.Entity entity, boolean noClip) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noPhysics = noClip; - } - - @Override - public boolean areChunkEntitiesLoaded(Chunk c) { - return ((CraftWorld) c.getWorld()).getHandle().areEntitiesLoaded(ChunkPos.asLong(c.getX(), c.getZ())); - } - - @Override - public void loadChunkEntities(Chunk c) { - nmsUtils.getPlugin().getLogger().log(Level.SEVERE, "Call to unimplemented method", new RuntimeException()); - // int x = c.getX(); - // int z = c.getZ(); - // World world = c.getWorld(); - // if (!world.isChunkLoaded(x, z)) { - // world.getChunkAt(x, z); - // } - // - // if (areChunkEntitiesLoaded(c)) { - // return; - // } - // ServerLevel serverLevel = ((CraftWorld) world).getHandle(); - // serverLevel.entityManager.updateChunkStatus(new ChunkPos(x, z), Visibility.TRACKED); - // // now wait until entities are loaded - // if (!areChunkEntitiesLoaded(c)) { - // serverLevel.getServer().managedBlock(() -> { - // if (areChunkEntitiesLoaded(c)) { - // return true; - // } - // // process chunk inbox - // serverLevel.entityManager.tick(); - // return areChunkEntitiesLoaded(c); - // }); - // } - } - - @Override - public void setOnGround(org.bukkit.entity.Entity entity, boolean onGround) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setOnGround(onGround); - } - - @Override - public org.bukkit.entity.Entity getEntityById(World world, int id) { - Entity entity = ((CraftWorld) world).getHandle().getEntity(id); - return entity == null ? null : entity.getBukkitEntity(); - } - - @Override - public void setPose(org.bukkit.entity.Entity entity, Pose pose) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); - } - - @Override - public void setWolfAngerTime(org.bukkit.entity.Wolf entity, int timeInTicks) { - Wolf nmsEntity = ((CraftWolf) entity).getHandle(); - nmsEntity.setRemainingPersistentAngerTime(timeInTicks); - } - - @Override - public void setAggressive(org.bukkit.entity.Mob entity, boolean aggressive) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - nmsEntity.setAggressive(aggressive); - } - - @Override - public boolean isAggressive(org.bukkit.entity.Mob entity) { - net.minecraft.world.entity.Mob nmsEntity = ((CraftMob) entity).getHandle(); - return nmsEntity.isAggressive(); - } - - @Override - public boolean isCelebrating(org.bukkit.entity.Raider entity) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - return nmsEntity.isCelebrating(); - } - - @Override - public void setCelebrating(org.bukkit.entity.Raider entity, boolean celebrating) { - net.minecraft.world.entity.raid.Raider nmsEntity = ((CraftRaider) entity).getHandle(); - nmsEntity.setCelebrating(celebrating); - } - - @Override - public void setCamelLastPoseChange(org.bukkit.entity.Camel entity, long tick) { - Camel nmsEntity = ((CraftCamel) entity).getHandle(); - nmsEntity.resetLastPoseChangeTick(nmsEntity.level().getGameTime() - tick); - } - - @Override - public long getCamelLastPoseChange(org.bukkit.entity.Camel entity) { - Camel nmsEntity = ((CraftCamel) entity).getHandle(); - return nmsEntity.getPoseTime(); - } - - @Override - public boolean isCamelSitting(org.bukkit.entity.Camel entity) { - Camel nmsEntity = ((CraftCamel) entity).getHandle(); - return nmsEntity.isCamelSitting(); - } - - @Override - public CompoundTag getNbt(org.bukkit.entity.Entity entity) { - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - net.minecraft.nbt.CompoundTag compoundTag = nmsEntity.saveWithoutId(new net.minecraft.nbt.CompoundTag()); - return new CompoundTagImpl(compoundTag); - } - - @Override - public void setNbt(org.bukkit.entity.Entity entity, CompoundTag nbt) { - net.minecraft.nbt.CompoundTag nativeNbt = ((CompoundTagImpl) nbt).handle; - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - - UUID uuid = nmsEntity.getUUID(); - nmsEntity.load(nativeNbt); - nmsEntity.setUUID(uuid); - } - - @Override - public void mergeNbt(org.bukkit.entity.Entity entity, CompoundTag nbt) { - net.minecraft.nbt.CompoundTag nativeNbt = ((CompoundTagImpl) nbt).handle; - Entity nmsEntity = ((CraftEntity) entity).getHandle(); - - net.minecraft.nbt.CompoundTag oldNbt = nmsEntity.saveWithoutId(new net.minecraft.nbt.CompoundTag()); - net.minecraft.nbt.CompoundTag newNbt = oldNbt.copy().merge(nativeNbt); - if (!oldNbt.equals(newNbt)) { - UUID uuid = nmsEntity.getUUID(); - nmsEntity.load(newNbt); - nmsEntity.setUUID(uuid); - } - } -} diff --git a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/ListTagImpl.java b/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/ListTagImpl.java deleted file mode 100644 index 1f35579..0000000 --- a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/ListTagImpl.java +++ /dev/null @@ -1,422 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R1; - -import de.cubeside.nmsutils.nbt.TagType; -import java.util.UUID; -import net.minecraft.nbt.ByteArrayTag; -import net.minecraft.nbt.ByteTag; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.DoubleTag; -import net.minecraft.nbt.FloatTag; -import net.minecraft.nbt.IntArrayTag; -import net.minecraft.nbt.IntTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.LongArrayTag; -import net.minecraft.nbt.LongTag; -import net.minecraft.nbt.NbtUtils; -import net.minecraft.nbt.NumericTag; -import net.minecraft.nbt.ShortTag; -import net.minecraft.nbt.StringTag; - -public final class ListTagImpl implements de.cubeside.nmsutils.nbt.ListTag { - final ListTag handle; - - public ListTagImpl(ListTag handle) { - this.handle = handle; - } - - @Override - public int size() { - return handle.size(); - } - - @Override - public boolean isEmpty() { - return handle.isEmpty(); - } - - @Override - public TagType getElementType() { - return TagType.ofInternal(handle.getElementType()); - } - - @Override - public CompoundTagImpl getCompound(int index) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof CompoundTag t) { - return new CompoundTagImpl(t); - } - return null; - } - - @Override - public CompoundTagImpl addCompound() { - return addCompound(size()); - } - - @Override - public CompoundTagImpl addCompound(int index) { - CompoundTag tag = new CompoundTag(); - return handle.addTag(index, tag) ? new CompoundTagImpl(tag) : null; - } - - @Override - public CompoundTagImpl setCompound(int index) { - CompoundTag tag = new CompoundTag(); - return handle.setTag(index, tag) ? new CompoundTagImpl(tag) : null; - } - - @Override - public ListTagImpl getList(int index) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof ListTag t) { - return new ListTagImpl(t); - } - return null; - } - - @Override - public ListTagImpl addList() { - return addList(size()); - } - - @Override - public ListTagImpl addList(int index) { - ListTag tag = new ListTag(); - return handle.addTag(index, tag) ? new ListTagImpl(tag) : null; - } - - @Override - public ListTagImpl setList(int index) { - ListTag tag = new ListTag(); - return handle.setTag(index, tag) ? new ListTagImpl(tag) : null; - } - - @Override - public byte getByte(int index) { - return getByte(index, (byte) 0); - } - - @Override - public byte getByte(int index, byte defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof NumericTag t) { - return t.getAsByte(); - } - return defaultValue; - } - - @Override - public boolean addByte(byte v) { - return addByte(size(), v); - } - - @Override - public boolean addByte(int index, byte v) { - return handle.addTag(index, ByteTag.valueOf(v)); - } - - @Override - public boolean setByte(int index, byte v) { - return handle.setTag(index, ByteTag.valueOf(v)); - } - - @Override - public short getShort(int index) { - return getShort(index, (short) 0); - } - - @Override - public short getShort(int index, short defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof NumericTag t) { - return t.getAsShort(); - } - return defaultValue; - } - - @Override - public boolean addShort(short v) { - return addShort(size(), v); - } - - @Override - public boolean addShort(int index, short v) { - return handle.addTag(index, ShortTag.valueOf(v)); - } - - @Override - public boolean setShort(int index, short v) { - return handle.setTag(index, ShortTag.valueOf(v)); - } - - @Override - public int getInt(int index) { - return getInt(index, 0); - } - - @Override - public int getInt(int index, int defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof NumericTag t) { - return t.getAsInt(); - } - return defaultValue; - } - - @Override - public boolean addInt(int v) { - return addInt(size(), v); - } - - @Override - public boolean addInt(int index, int v) { - return handle.addTag(index, IntTag.valueOf(v)); - } - - @Override - public boolean setInt(int index, int v) { - return handle.setTag(index, IntTag.valueOf(v)); - } - - @Override - public long getLong(int index) { - return getLong(index, 0); - } - - @Override - public long getLong(int index, long defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof NumericTag t) { - return t.getAsLong(); - } - return defaultValue; - } - - @Override - public boolean addLong(long v) { - return addLong(size(), v); - } - - @Override - public boolean addLong(int index, long v) { - return handle.addTag(index, LongTag.valueOf(v)); - } - - @Override - public boolean setLong(int index, long v) { - return handle.setTag(index, LongTag.valueOf(v)); - } - - @Override - public float getFloat(int index) { - return getFloat(index, 0); - } - - @Override - public float getFloat(int index, float defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof NumericTag t) { - return t.getAsFloat(); - } - return defaultValue; - } - - @Override - public boolean addFloat(float v) { - return addFloat(size(), v); - } - - @Override - public boolean addFloat(int index, float v) { - return handle.addTag(index, FloatTag.valueOf(v)); - } - - @Override - public boolean setFloat(int index, float v) { - return handle.setTag(index, FloatTag.valueOf(v)); - } - - @Override - public double getDouble(int index) { - return getDouble(index, 0); - } - - @Override - public double getDouble(int index, double defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof NumericTag t) { - return t.getAsDouble(); - } - return defaultValue; - } - - @Override - public boolean addDouble(double v) { - return addDouble(size(), v); - } - - @Override - public boolean addDouble(int index, double v) { - return handle.addTag(index, DoubleTag.valueOf(v)); - } - - @Override - public boolean setDouble(int index, double v) { - return handle.setTag(index, DoubleTag.valueOf(v)); - } - - @Override - public byte[] getByteArray(int index) { - return getByteArray(index, null); - } - - @Override - public byte[] getByteArray(int index, byte[] defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof ByteArrayTag t) { - return t.getAsByteArray(); - } - return defaultValue; - } - - @Override - public boolean addByteArray(byte[] v) { - return addByteArray(size(), v); - } - - @Override - public boolean addByteArray(int index, byte[] v) { - return handle.addTag(index, new ByteArrayTag(v)); - } - - @Override - public boolean setByteArray(int index, byte[] v) { - return handle.setTag(index, new ByteArrayTag(v)); - } - - @Override - public int[] getIntArray(int index) { - return getIntArray(index, null); - } - - @Override - public int[] getIntArray(int index, int[] defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof IntArrayTag t) { - return t.getAsIntArray(); - } - return defaultValue; - } - - @Override - public boolean addIntArray(int[] v) { - return addIntArray(size(), v); - } - - @Override - public boolean addIntArray(int index, int[] v) { - return handle.addTag(index, new IntArrayTag(v)); - } - - @Override - public boolean setIntArray(int index, int[] v) { - return handle.setTag(index, new IntArrayTag(v)); - } - - @Override - public long[] getLongArray(int index) { - return getLongArray(index, null); - } - - @Override - public long[] getLongArray(int index, long[] defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof LongArrayTag t) { - return t.getAsLongArray(); - } - return defaultValue; - } - - @Override - public boolean addLongArray(long[] v) { - return addLongArray(size(), v); - } - - @Override - public boolean addLongArray(int index, long[] v) { - return handle.addTag(index, new LongArrayTag(v)); - } - - @Override - public boolean setLongArray(int index, long[] v) { - return handle.setTag(index, new LongArrayTag(v)); - } - - @Override - public String getString(int index) { - return getString(index, null); - } - - @Override - public String getString(int index, String defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof StringTag t) { - return t.getAsString(); - } - return defaultValue; - } - - @Override - public boolean addString(String v) { - return addString(size(), v); - } - - @Override - public boolean addString(int index, String v) { - return handle.addTag(index, StringTag.valueOf(v)); - } - - @Override - public boolean setString(int index, String v) { - return handle.setTag(index, StringTag.valueOf(v)); - } - - @Override - public UUID getUUID(int index) { - return getUUID(index, null); - } - - @Override - public UUID getUUID(int index, UUID defaultValue) { - if (index >= 0 && index < handle.size() && handle.get(index) instanceof IntArrayTag t && t.size() == 4) { - return NbtUtils.loadUUID(t); - } - return defaultValue; - } - - @Override - public boolean addUUID(UUID v) { - return addUUID(size(), v); - } - - @Override - public boolean addUUID(int index, UUID v) { - return handle.addTag(index, NbtUtils.createUUID(v)); - } - - @Override - public boolean setUUID(int index, UUID v) { - return handle.setTag(index, NbtUtils.createUUID(v)); - } - - public void remove(int i) { - handle.remove(i); - } - - public void clear() { - handle.clear(); - } - - @Override - public int hashCode() { - return handle.hashCode(); - } - - @Override - public boolean equals(Object obj) { - return obj instanceof ListTagImpl o && handle.equals(o.handle); - } - - @Override - public ListTagImpl clone() { - return new ListTagImpl(handle.copy()); - } -} diff --git a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/MiscUtilsImpl.java b/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/MiscUtilsImpl.java deleted file mode 100644 index f023b96..0000000 --- a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/MiscUtilsImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R1; - -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockBehaviour.BlockStateBase; -import net.minecraft.world.level.block.state.BlockBehaviour.Properties; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.MapColor; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_20_R1.util.CraftMagicNumbers; - -public class MiscUtilsImpl implements MiscUtils { - private final NMSUtilsImpl nmsUtils; - - private Field fieldBlockBehaviour_properties; - private MapColor transparentColor; - private Field fieldBlockStateBase_materialColor; - - public MiscUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public void setBlockMapColorTransparent(Material m) { - if (fieldBlockBehaviour_properties == null) { - Class classBlockProperties = BlockBehaviour.Properties.class; - Class classBlockBehaviour = BlockBehaviour.class; - fieldBlockBehaviour_properties = null; - for (Field f : classBlockBehaviour.getDeclaredFields()) { - if (f.getType() == classBlockProperties) { - fieldBlockBehaviour_properties = f; - fieldBlockBehaviour_properties.setAccessible(true); - } - } - if (fieldBlockBehaviour_properties == null) { - throw new IllegalStateException("Could not find block properties field!"); - } - - Class classBlockStateBase = BlockBehaviour.BlockStateBase.class; - for (Field f : classBlockStateBase.getDeclaredFields()) { - if (f.getType() == MapColor.class) { - fieldBlockStateBase_materialColor = f; - fieldBlockStateBase_materialColor.setAccessible(true); - } - } - if (fieldBlockStateBase_materialColor == null) { - throw new IllegalStateException("Could not find BlockStateBase materialColor field!"); - } - - try { - Constructor constructorMaterialColor = MapColor.class.getDeclaredConstructor(int.class, int.class); - constructorMaterialColor.setAccessible(true); - transparentColor = constructorMaterialColor.newInstance(0, 0); - } catch (ReflectiveOperationException e) { - throw new IllegalStateException("Could not create custom transparent MaterialColor!"); - } - } - - if (!m.isBlock()) { - throw new IllegalArgumentException("Material must be a block"); - } - Block b = CraftMagicNumbers.getBlock(m); - try { - BlockBehaviour.Properties properties = (Properties) fieldBlockBehaviour_properties.get(b); - properties.mapColor(transparentColor); - for (BlockState state : b.getStateDefinition().getPossibleStates()) { - fieldBlockStateBase_materialColor.set(state, transparentColor); - } - } catch (IllegalAccessException e) { - throw new IllegalStateException("Could not set the MaterialColor!"); - } - } -} diff --git a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/NMSUtilsImpl.java b/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/NMSUtilsImpl.java deleted file mode 100644 index f53ffbe..0000000 --- a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/NMSUtilsImpl.java +++ /dev/null @@ -1,56 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R1; - -import de.cubeside.nmsutils.BiomeUtils; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.WorldUtils; -import org.bukkit.plugin.Plugin; - -public class NMSUtilsImpl implements NMSUtils { - private final Plugin plugin; - private EntityUtils entityUtilsImpl; - private WorldUtilsImpl worldUtilsImpl; - private MiscUtilsImpl miscUtilsImpl; - private BiomeUtilsImpl biomeUtils; - private NbtUtilsImpl nbtUtils; - - public NMSUtilsImpl(Plugin plugin) { - this.plugin = plugin; - this.entityUtilsImpl = new EntityUtilsImpl(this); - this.worldUtilsImpl = new WorldUtilsImpl(this); - this.miscUtilsImpl = new MiscUtilsImpl(this); - this.biomeUtils = new BiomeUtilsImpl(this); - this.nbtUtils = new NbtUtilsImpl(this); - } - - @Override - public Plugin getPlugin() { - return plugin; - } - - @Override - public EntityUtils getEntityUtils() { - return entityUtilsImpl; - } - - @Override - public WorldUtils getWorldUtils() { - return worldUtilsImpl; - } - - @Override - public MiscUtils getMiscUtils() { - return miscUtilsImpl; - } - - @Override - public BiomeUtils getBiomeUtils() { - return biomeUtils; - } - - @Override - public NbtUtilsImpl getNbtUtils() { - return nbtUtils; - } -} diff --git a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/NbtUtilsImpl.java b/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/NbtUtilsImpl.java deleted file mode 100644 index d9995c5..0000000 --- a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/NbtUtilsImpl.java +++ /dev/null @@ -1,51 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R1; - -import de.cubeside.nmsutils.NbtUtils; -import de.cubeside.nmsutils.nbt.CompoundTag; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -public class NbtUtilsImpl implements NbtUtils { - // private final NMSUtilsImpl nmsUtils; - - public NbtUtilsImpl(NMSUtilsImpl nmsUtils) { - // this.nmsUtils = nmsUtils; - } - - @Override - public CompoundTag parseBinary(byte[] in) { - try { - return new CompoundTagImpl(net.minecraft.nbt.NbtIo.read(new DataInputStream(new ByteArrayInputStream(in)))); - } catch (IOException e) { - throw new RuntimeException("invalid nbt"); - } - } - - @Override - public byte[] writeBinary(CompoundTag in) { - ByteArrayOutputStream os = new ByteArrayOutputStream(); - try { - net.minecraft.nbt.NbtIo.write(((CompoundTagImpl) in).handle, new DataOutputStream(os)); - } catch (IOException e) { - throw new RuntimeException("could not serialize nbt"); - } - return os.toByteArray(); - } - - @Override - public CompoundTag parseString(String in) { - try { - return new CompoundTagImpl(net.minecraft.nbt.NbtUtils.snbtToStructure(in)); - } catch (Exception e) { - throw new IllegalArgumentException("Could not parse snbt string", e); - } - } - - @Override - public String writeString(CompoundTag in) { - return net.minecraft.nbt.NbtUtils.structureToSnbt(((CompoundTagImpl) in).handle); - } -} diff --git a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/PathfinderGoalLimitedRandomStrollLand.java b/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/PathfinderGoalLimitedRandomStrollLand.java deleted file mode 100644 index 589fee8..0000000 --- a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/PathfinderGoalLimitedRandomStrollLand.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R1; - -import java.util.function.Function; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.RandomStrollGoal; -import net.minecraft.world.phys.Vec3; -import org.bukkit.util.Vector; - -public class PathfinderGoalLimitedRandomStrollLand extends RandomStrollGoal { - - private Function checkVectorFunction; - // private EntityCreature entity; - - public PathfinderGoalLimitedRandomStrollLand(PathfinderMob entity, double velocity, Function checkVectorFunction) { - super(entity, velocity, 1, false); - // this.entity = entity; - this.checkVectorFunction = checkVectorFunction; - } - - @Override - protected Vec3 getPosition() { - Vec3 base = super.getPosition(); - if (base == null || checkVectorFunction.apply(org.bukkit.craftbukkit.v1_20_R1.util.CraftVector.toBukkit(base)) != Boolean.TRUE) { - base = null; - } - return base; - } -} diff --git a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/WorldUtilsImpl.java b/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/WorldUtilsImpl.java deleted file mode 100644 index 39e294d..0000000 --- a/nmsutils-v1_20_R1/src/main/java/de/cubeside/nmsutils/v1_20_R1/WorldUtilsImpl.java +++ /dev/null @@ -1,98 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R1; - -import de.cubeside.nmsutils.WorldUtils; -import io.papermc.paper.chunk.system.io.RegionFileIOThread; -import io.papermc.paper.chunk.system.scheduling.NewChunkHolder; -import java.util.ArrayList; -import java.util.logging.Level; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.chunk.ChunkStatus; -import net.minecraft.world.level.chunk.LevelChunk; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R1.CraftChunk; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; -import org.bukkit.entity.Player; - -public class WorldUtilsImpl implements WorldUtils { - private final NMSUtilsImpl nmsUtils; - - public WorldUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public void saveWorldNow(World world) { - world.save(); - - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - try { - handle.save(null, true, false); - } catch (Exception e) { - Bukkit.getLogger().log(Level.SEVERE, "Exception while saving world", e); - } - } - - @Override - public void forceUnloadWorldWithoutSaving(World world, Location playerTarget) { - // final long t0 = System.currentTimeMillis(); - // String worldName = world.getName(); - - if (playerTarget.getWorld() == null || playerTarget.getWorld() == world) { - throw new IllegalArgumentException("Valid target world required"); - } - // move players out of this world - try { - for (Player p : world.getPlayers()) { - if (p.isDead()) { - p.spigot().respawn(); - } - if (p.getWorld() == world) { - p.teleport(playerTarget); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - // remove broken players - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - if (!handle.players().isEmpty()) { - for (ServerPlayer human : new ArrayList<>(handle.players())) { - kickPlayer((human.getBukkitEntity()), "Connection lost"); - } - handle.players().clear(); - } - - // unload the now empty world from the server - if (!nmsUtils.getPlugin().getServer().unloadWorld(world, false)) { - throw new IllegalStateException("Could not unload world"); - } - - // long t = System.currentTimeMillis(); - // nmsUtils.getPlugin().getLogger().info("Unloading world " + worldName + " completed in " + (t - t0) + "ms."); - } - - @Override - public void saveChunkNow(Chunk chunk) { - CraftChunk craftChunk = (CraftChunk) chunk; - if (craftChunk.getHandle(ChunkStatus.FULL) instanceof LevelChunk levelChunk) { - NewChunkHolder holder = levelChunk.getChunkHolder(); - holder.save(false, false); - } - } - - @Override - public void flushChunkSaves() { - RegionFileIOThread.flush(); - } - - @SuppressWarnings("deprecation") - private void kickPlayer(Player player, String message) { - player.kickPlayer(message); - } -} diff --git a/nmsutils-v1_20_R2/pom.xml b/nmsutils-v1_20_R2/pom.xml deleted file mode 100644 index a561158..0000000 --- a/nmsutils-v1_20_R2/pom.xml +++ /dev/null @@ -1,100 +0,0 @@ - - 4.0.0 - nmsutils-v1_20_R2 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper-api - 1.20.2-R0.1-SNAPSHOT - provided - - - io.papermc.paper - paper-server - 1.20.2-R0.1-SNAPSHOT - mojang-mapped - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - net.fabricmc - mapping-io - 0.3.0 - provided - - - com.mojang - datafixerupper - 5.0.28 - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - fabric-repo - https://maven.fabricmc.net/ - - - - - - maven-compiler-plugin - 3.8.1 - - 17 - - - - net.md-5 - specialsource-maven-plugin - 1.2.3 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:1.20.2-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.20.2-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.20.2-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.20.2-R0.1-SNAPSHOT:jar:remapped-obf - - - - - - - \ No newline at end of file diff --git a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/BiomeUtilsImpl.java b/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/BiomeUtilsImpl.java deleted file mode 100644 index 65f9772..0000000 --- a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/BiomeUtilsImpl.java +++ /dev/null @@ -1,161 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R2; - -import com.mojang.serialization.Lifecycle; -import de.cubeside.nmsutils.BiomeUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.biome.CustomBiome; -import de.cubeside.nmsutils.util.ReobfHelper; -import java.lang.reflect.Field; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.IdentityHashMap; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.core.Holder.Reference; -import net.minecraft.core.MappedRegistry; -import net.minecraft.core.WritableRegistry; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.dedicated.DedicatedServer; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.biome.AmbientMoodSettings; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.Biome.BiomeBuilder; -import net.minecraft.world.level.biome.Biome.TemperatureModifier; -import net.minecraft.world.level.biome.BiomeSpecialEffects; -import net.minecraft.world.level.biome.BiomeSpecialEffects.Builder; -import net.minecraft.world.level.biome.Biomes; -import net.minecraft.world.level.chunk.LevelChunk; -import org.bukkit.Location; -import org.bukkit.NamespacedKey; -import org.bukkit.Server; -import org.bukkit.craftbukkit.v1_20_R2.CraftServer; -import org.bukkit.craftbukkit.v1_20_R2.CraftWorld; - -public class BiomeUtilsImpl implements BiomeUtils { - private final NMSUtilsImpl nmsUtils; - - private HashMap customBiomes; - private HashMap customBiomesByBiome; - private Collection unmodifiableCustomBiomes; - - private static final Field FIELD_MAPPED_REGISTRY_FROZEN = ReobfHelper.getFieldByMojangName(MappedRegistry.class, "frozen"); - private static final Field FIELD_MAPPED_REGISTRY_UNREGISTERED_INTRUSIVE_HOLDERS = ReobfHelper.getFieldByMojangName(MappedRegistry.class, "unregisteredIntrusiveHolders"); - - public BiomeUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - this.customBiomes = new HashMap<>(); - this.customBiomesByBiome = new HashMap<>(); - this.unmodifiableCustomBiomes = Collections.unmodifiableCollection(customBiomes.values()); - } - - public NMSUtils getNMSUtils() { - return nmsUtils; - } - - @Override - public CustomBiome registerCustomBiome(NamespacedKey id, float downfall, float temperature, de.cubeside.nmsutils.biome.Precipitation precipitation, Integer fogColor, Integer waterColor, Integer waterFogColor, Integer skyColor, Integer foliageColor, Integer grassColor, - GrassColorModifier grassColorModifier) { - Server server = nmsUtils.getPlugin().getServer(); - CraftServer craftserver = (CraftServer) server; - DedicatedServer dedicatedserver = craftserver.getServer(); - ResourceKey newKey = ResourceKey.create(Registries.BIOME, new ResourceLocation(id.getNamespace(), id.getKey())); - - ResourceKey oldKey = Biomes.FOREST; - WritableRegistry registrywritable = (WritableRegistry) dedicatedserver.registryAccess().registryOrThrow(Registries.BIOME); - - try { - FIELD_MAPPED_REGISTRY_FROZEN.set(registrywritable, false); - FIELD_MAPPED_REGISTRY_UNREGISTERED_INTRUSIVE_HOLDERS.set(registrywritable, new IdentityHashMap<>()); - } catch (IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - - Biome forestbiome = registrywritable.get(oldKey); - - BiomeBuilder builder = new Biome.BiomeBuilder(); - builder.downfall(downfall); - builder.temperature(temperature); - boolean mojangPrecipitation = false; - - if (precipitation == de.cubeside.nmsutils.biome.Precipitation.RAIN) { - mojangPrecipitation = true; - } else if (precipitation == de.cubeside.nmsutils.biome.Precipitation.SNOW) { - mojangPrecipitation = true; - } - builder.hasPrecipitation(mojangPrecipitation); - builder.mobSpawnSettings(forestbiome.getMobSettings()); - builder.generationSettings(forestbiome.getGenerationSettings()); - builder.temperatureAdjustment(TemperatureModifier.NONE); - Builder effects = new BiomeSpecialEffects.Builder(); - effects.waterColor(waterColor == null ? forestbiome.getWaterColor() : waterColor); - effects.waterFogColor(waterFogColor == null ? forestbiome.getWaterFogColor() : waterFogColor); - effects.fogColor(fogColor == null ? forestbiome.getFogColor() : fogColor); - effects.skyColor(skyColor == null ? forestbiome.getSkyColor() : skyColor); - if (foliageColor != null) { - effects.foliageColorOverride(foliageColor); - } - if (grassColor != null) { - effects.grassColorOverride(grassColor); - } - effects.ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS); - net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier nativeGrassColorModifier = switch (grassColorModifier) { - case DARK_FOREST -> net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier.DARK_FOREST; - case SWAMP -> net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier.SWAMP; - default -> net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier.NONE; - }; - effects.grassColorModifier(nativeGrassColorModifier); - builder.specialEffects(effects.build()); - - Biome newbiome = builder.build(); - - registrywritable.createIntrusiveHolder(newbiome); - Reference biomeHolder = registrywritable.register(newKey, newbiome, Lifecycle.stable()); - - try { - FIELD_MAPPED_REGISTRY_UNREGISTERED_INTRUSIVE_HOLDERS.set(registrywritable, null); - } catch (IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - CustomBiomeImpl impl = new CustomBiomeImpl(id, newKey, newbiome, biomeHolder); - customBiomes.put(id, impl); - customBiomesByBiome.put(newbiome, impl); - - return new CustomBiomeImpl(id, newKey, newbiome, biomeHolder); - } - - @Override - public Collection getAllCustomBiomes() { - return unmodifiableCustomBiomes; - } - - @Override - public CustomBiome getCustomBiome(NamespacedKey id) { - return customBiomes.get(id); - } - - @Override - public CustomBiome getCustomBiomeAt(Location location) { - location.getWorld().getChunkAt(location); - Level level = ((CraftWorld) location.getWorld()).getHandle(); - int x = location.getBlockX(); - int y = location.getBlockY(); - int z = location.getBlockZ(); - - BlockPos pos = new BlockPos(x, 0, z); - if (level.isLoaded(pos)) { - LevelChunk chunk = level.getChunkAt(pos); - if (chunk != null) { - - Holder biomeHolder = chunk.getNoiseBiome(x >> 2, y >> 2, z >> 2); - if (biomeHolder.isBound()) { - Biome biome = biomeHolder.value(); - return customBiomesByBiome.get(biome); - } - } - } - return null; - } -} diff --git a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/CompoundTagImpl.java b/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/CompoundTagImpl.java deleted file mode 100644 index 0329903..0000000 --- a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/CompoundTagImpl.java +++ /dev/null @@ -1,322 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R2; - -import com.google.common.base.Preconditions; -import de.cubeside.nmsutils.nbt.TagType; -import java.util.Collections; -import java.util.Set; -import java.util.UUID; -import net.minecraft.nbt.ByteArrayTag; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntArrayTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.LongArrayTag; -import net.minecraft.nbt.NumericTag; -import net.minecraft.nbt.StringTag; -import net.minecraft.nbt.Tag; - -public final class CompoundTagImpl implements de.cubeside.nmsutils.nbt.CompoundTag { - final CompoundTag handle; - - public CompoundTagImpl(CompoundTag handle) { - this.handle = handle; - } - - @Override - public boolean containsKey(String name) { - return handle.contains(name); - } - - @Override - public boolean containsKey(String name, TagType type) { - return handle.contains(name, type.internalId()); - } - - @Override - public void clear() { - handle.getAllKeys().clear(); - } - - @Override - public void remove(String name) { - handle.remove(name); - } - - @Override - public Set getAllKeys() { - return Collections.unmodifiableSet(handle.getAllKeys()); - } - - @Override - public void size() { - handle.size(); - } - - @Override - public void merge(de.cubeside.nmsutils.nbt.CompoundTag source) { - handle.merge(((CompoundTagImpl) source).handle); - } - - @Override - public CompoundTagImpl getCompound(String name) { - return getCompound(name, false); - } - - @Override - public CompoundTagImpl getCompound(String name, boolean createIfMissing) { - Preconditions.checkNotNull(name); - Tag tag = handle.get(name); - if (!(tag instanceof CompoundTag)) { - if (!createIfMissing) { - return null; - } - tag = new CompoundTag(); - handle.put(name, tag); - } - return new CompoundTagImpl((CompoundTag) tag); - } - - @Override - public ListTagImpl getList(String name) { - return getList(name, false); - } - - @Override - public ListTagImpl getList(String name, boolean createIfMissing) { - Preconditions.checkNotNull(name); - Tag tag = handle.get(name); - if (!(tag instanceof ListTag)) { - if (!createIfMissing) { - return null; - } - tag = new ListTag(); - handle.put(name, tag); - } - return new ListTagImpl((ListTag) tag); - } - - @Override - public byte getByte(String name) { - return getByte(name, (byte) 0); - } - - @Override - public byte getByte(String name, byte defaultValue) { - if (handle.get(name) instanceof NumericTag tag) { - return tag.getAsByte(); - } - return defaultValue; - } - - @Override - public void setByte(String name, byte b) { - Preconditions.checkNotNull(name); - handle.putByte(name, b); - } - - @Override - public short getShort(String name) { - return getShort(name, (short) 0); - } - - @Override - public short getShort(String name, short defaultValue) { - if (handle.get(name) instanceof NumericTag tag) { - return tag.getAsShort(); - } - return defaultValue; - } - - @Override - public void setShort(String name, short s) { - Preconditions.checkNotNull(name); - handle.putShort(name, s); - } - - @Override - public int getInt(String name) { - return getInt(name, 0); - } - - @Override - public int getInt(String name, int defaultValue) { - if (handle.get(name) instanceof NumericTag tag) { - return tag.getAsInt(); - } - return defaultValue; - } - - @Override - public void setInt(String name, int v) { - Preconditions.checkNotNull(name); - handle.putInt(name, v); - } - - @Override - public long getLong(String name) { - return getLong(name, 0L); - } - - @Override - public long getLong(String name, long defaultValue) { - if (handle.get(name) instanceof NumericTag tag) { - return tag.getAsLong(); - } - return defaultValue; - } - - @Override - public void setLong(String name, long l) { - Preconditions.checkNotNull(name); - handle.putLong(name, l); - } - - @Override - public float getFloat(String name) { - return getFloat(name, 0.0f); - } - - @Override - public float getFloat(String name, float defaultValue) { - if (handle.get(name) instanceof NumericTag tag) { - return tag.getAsFloat(); - } - return defaultValue; - } - - @Override - public void setFloat(String name, float f) { - Preconditions.checkNotNull(name); - handle.putFloat(name, f); - } - - @Override - public double getDouble(String name) { - return getDouble(name, 0.0); - } - - @Override - public double getDouble(String name, double defaultValue) { - if (handle.get(name) instanceof NumericTag tag) { - return tag.getAsDouble(); - } - return defaultValue; - } - - @Override - public void setDouble(String name, double d) { - Preconditions.checkNotNull(name); - handle.putDouble(name, d); - } - - @Override - public byte[] getByteArray(String name) { - return getByteArray(name, null); - } - - @Override - public byte[] getByteArray(String name, byte[] defaultValue) { - if (handle.get(name) instanceof ByteArrayTag tag) { - return tag.getAsByteArray(); - } - return defaultValue; - } - - @Override - public void setByteArray(String name, byte[] b) { - Preconditions.checkNotNull(name); - Preconditions.checkNotNull(b); - handle.putByteArray(name, b); - } - - @Override - public int[] getIntArray(String name) { - return getIntArray(name, null); - } - - @Override - public int[] getIntArray(String name, int[] defaultValue) { - if (handle.get(name) instanceof IntArrayTag tag) { - return tag.getAsIntArray(); - } - return defaultValue; - } - - @Override - public void setIntArray(String name, int[] v) { - Preconditions.checkNotNull(name); - Preconditions.checkNotNull(v); - handle.putIntArray(name, v); - } - - @Override - public long[] getLongArray(String name) { - return getLongArray(name, null); - } - - @Override - public long[] getLongArray(String name, long[] defaultValue) { - if (handle.get(name) instanceof LongArrayTag tag) { - return tag.getAsLongArray(); - } - return defaultValue; - } - - @Override - public void setLongArray(String name, long[] v) { - Preconditions.checkNotNull(name); - Preconditions.checkNotNull(v); - handle.putLongArray(name, v); - } - - @Override - public String getString(String name) { - return getString(name, null); - } - - @Override - public String getString(String name, String defaultValue) { - if (handle.get(name) instanceof StringTag tag) { - return tag.getAsString(); - } - return defaultValue; - } - - @Override - public void setString(String name, String v) { - Preconditions.checkNotNull(name); - Preconditions.checkNotNull(v); - handle.putString(name, v); - } - - @Override - public UUID getUUID(String name) { - return handle.hasUUID(name) ? handle.getUUID(name) : null; - } - - @Override - public boolean containsUUID(String name) { - return handle.hasUUID(name); - } - - @Override - public void setUUID(String name, UUID v) { - Preconditions.checkNotNull(name); - Preconditions.checkNotNull(v); - handle.putUUID(name, v); - } - - @Override - public int hashCode() { - return handle.hashCode(); - } - - @Override - public boolean equals(Object obj) { - return obj instanceof CompoundTagImpl o && handle.equals(o.handle); - } - - @Override - public CompoundTagImpl clone() { - return new CompoundTagImpl(handle.copy()); - } -} diff --git a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/CustomBiomeImpl.java b/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/CustomBiomeImpl.java deleted file mode 100644 index 905ca7b..0000000 --- a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/CustomBiomeImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R2; - -import de.cubeside.nmsutils.biome.CustomBiome; -import net.minecraft.core.BlockPos.MutableBlockPos; -import net.minecraft.core.Holder.Reference; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.chunk.LevelChunk; -import org.bukkit.Location; -import org.bukkit.NamespacedKey; -import org.bukkit.craftbukkit.v1_20_R2.CraftWorld; - -public class CustomBiomeImpl implements CustomBiome { - private NamespacedKey bukkitKey; - private Reference biomeHolder; - private MutableBlockPos pos = new MutableBlockPos(); - - public CustomBiomeImpl(NamespacedKey bukkitKey, ResourceKey key, Biome biome, Reference biomeHolder) { - this.bukkitKey = bukkitKey; - this.biomeHolder = biomeHolder; - } - - @Override - public NamespacedKey getId() { - return bukkitKey; - } - - @Override - public boolean setBiome(Location location) { - location.getWorld().getChunkAt(location); - Level level = ((CraftWorld) location.getWorld()).getHandle(); - int x = location.getBlockX(); - int y = location.getBlockY(); - int z = location.getBlockZ(); - - pos.set(x, 0, z); - if (level.isLoaded(pos)) { - LevelChunk chunk = level.getChunkAt(pos); - if (chunk != null) { - - chunk.setBiome(x >> 2, y >> 2, z >> 2, biomeHolder); - chunk.setUnsaved(true); - return true; - } - } - return false; - } -} diff --git a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/NMSUtilsImpl.java b/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/NMSUtilsImpl.java deleted file mode 100644 index 1d613cd..0000000 --- a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/NMSUtilsImpl.java +++ /dev/null @@ -1,56 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R2; - -import de.cubeside.nmsutils.BiomeUtils; -import de.cubeside.nmsutils.EntityUtils; -import de.cubeside.nmsutils.MiscUtils; -import de.cubeside.nmsutils.NMSUtils; -import de.cubeside.nmsutils.WorldUtils; -import org.bukkit.plugin.Plugin; - -public class NMSUtilsImpl implements NMSUtils { - private final Plugin plugin; - private EntityUtils entityUtilsImpl; - private WorldUtilsImpl worldUtilsImpl; - private MiscUtilsImpl miscUtilsImpl; - private BiomeUtilsImpl biomeUtils; - private NbtUtilsImpl nbtUtils; - - public NMSUtilsImpl(Plugin plugin) { - this.plugin = plugin; - this.entityUtilsImpl = new EntityUtilsImpl(this); - this.worldUtilsImpl = new WorldUtilsImpl(this); - this.miscUtilsImpl = new MiscUtilsImpl(this); - this.biomeUtils = new BiomeUtilsImpl(this); - this.nbtUtils = new NbtUtilsImpl(this); - } - - @Override - public Plugin getPlugin() { - return plugin; - } - - @Override - public EntityUtils getEntityUtils() { - return entityUtilsImpl; - } - - @Override - public WorldUtils getWorldUtils() { - return worldUtilsImpl; - } - - @Override - public MiscUtils getMiscUtils() { - return miscUtilsImpl; - } - - @Override - public BiomeUtils getBiomeUtils() { - return biomeUtils; - } - - @Override - public NbtUtilsImpl getNbtUtils() { - return nbtUtils; - } -} diff --git a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/NbtUtilsImpl.java b/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/NbtUtilsImpl.java deleted file mode 100644 index 3d36f2d..0000000 --- a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/NbtUtilsImpl.java +++ /dev/null @@ -1,51 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R2; - -import de.cubeside.nmsutils.NbtUtils; -import de.cubeside.nmsutils.nbt.CompoundTag; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -public class NbtUtilsImpl implements NbtUtils { - // private final NMSUtilsImpl nmsUtils; - - public NbtUtilsImpl(NMSUtilsImpl nmsUtils) { - // this.nmsUtils = nmsUtils; - } - - @Override - public CompoundTag parseBinary(byte[] in) { - try { - return new CompoundTagImpl(net.minecraft.nbt.NbtIo.read(new DataInputStream(new ByteArrayInputStream(in)))); - } catch (IOException e) { - throw new RuntimeException("invalid nbt"); - } - } - - @Override - public byte[] writeBinary(CompoundTag in) { - ByteArrayOutputStream os = new ByteArrayOutputStream(); - try { - net.minecraft.nbt.NbtIo.write(((CompoundTagImpl) in).handle, new DataOutputStream(os)); - } catch (IOException e) { - throw new RuntimeException("could not serialize nbt"); - } - return os.toByteArray(); - } - - @Override - public CompoundTag parseString(String in) { - try { - return new CompoundTagImpl(net.minecraft.nbt.NbtUtils.snbtToStructure(in)); - } catch (Exception e) { - throw new IllegalArgumentException("Could not parse snbt string", e); - } - } - - @Override - public String writeString(CompoundTag in) { - return net.minecraft.nbt.NbtUtils.structureToSnbt(((CompoundTagImpl) in).handle); - } -} diff --git a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/WorldUtilsImpl.java b/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/WorldUtilsImpl.java deleted file mode 100644 index 3e1f489..0000000 --- a/nmsutils-v1_20_R2/src/main/java/de/cubeside/nmsutils/v1_20_R2/WorldUtilsImpl.java +++ /dev/null @@ -1,98 +0,0 @@ -package de.cubeside.nmsutils.v1_20_R2; - -import de.cubeside.nmsutils.WorldUtils; -import io.papermc.paper.chunk.system.io.RegionFileIOThread; -import io.papermc.paper.chunk.system.scheduling.NewChunkHolder; -import java.util.ArrayList; -import java.util.logging.Level; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.chunk.ChunkStatus; -import net.minecraft.world.level.chunk.LevelChunk; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R2.CraftChunk; -import org.bukkit.craftbukkit.v1_20_R2.CraftWorld; -import org.bukkit.entity.Player; - -public class WorldUtilsImpl implements WorldUtils { - private final NMSUtilsImpl nmsUtils; - - public WorldUtilsImpl(NMSUtilsImpl nmsUtils) { - this.nmsUtils = nmsUtils; - } - - @Override - public void saveWorldNow(World world) { - world.save(); - - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - try { - handle.save(null, true, false); - } catch (Exception e) { - Bukkit.getLogger().log(Level.SEVERE, "Exception while saving world", e); - } - } - - @Override - public void forceUnloadWorldWithoutSaving(World world, Location playerTarget) { - // final long t0 = System.currentTimeMillis(); - // String worldName = world.getName(); - - if (playerTarget.getWorld() == null || playerTarget.getWorld() == world) { - throw new IllegalArgumentException("Valid target world required"); - } - // move players out of this world - try { - for (Player p : world.getPlayers()) { - if (p.isDead()) { - p.spigot().respawn(); - } - if (p.getWorld() == world) { - p.teleport(playerTarget); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - // remove broken players - CraftWorld craftWorld = (CraftWorld) world; - ServerLevel handle = craftWorld.getHandle(); - if (!handle.players().isEmpty()) { - for (ServerPlayer human : new ArrayList<>(handle.players())) { - kickPlayer((human.getBukkitEntity()), "Connection lost"); - } - handle.players().clear(); - } - - // unload the now empty world from the server - if (!nmsUtils.getPlugin().getServer().unloadWorld(world, false)) { - throw new IllegalStateException("Could not unload world"); - } - - // long t = System.currentTimeMillis(); - // nmsUtils.getPlugin().getLogger().info("Unloading world " + worldName + " completed in " + (t - t0) + "ms."); - } - - @Override - public void saveChunkNow(Chunk chunk) { - CraftChunk craftChunk = (CraftChunk) chunk; - if (craftChunk.getHandle(ChunkStatus.FULL) instanceof LevelChunk levelChunk) { - NewChunkHolder holder = levelChunk.getChunkHolder(); - holder.save(false, false); - } - } - - @Override - public void flushChunkSaves() { - RegionFileIOThread.flush(); - } - - @SuppressWarnings("deprecation") - private void kickPlayer(Player player, String message) { - player.kickPlayer(message); - } -} diff --git a/nmsutils-v1_20_R3/pom.xml b/nmsutils-v1_20_R3/pom.xml deleted file mode 100644 index b8e6911..0000000 --- a/nmsutils-v1_20_R3/pom.xml +++ /dev/null @@ -1,100 +0,0 @@ - - 4.0.0 - nmsutils-v1_20_R3 - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - io.papermc.paper - paper-api - 1.20.4-R0.1-SNAPSHOT - provided - - - io.papermc.paper - paper-server - 1.20.4-R0.1-SNAPSHOT - mojang-mapped - provided - - - ${project.groupId} - nmsutils-core - ${project.version} - provided - - - net.fabricmc - mapping-io - 0.3.0 - provided - - - com.mojang - datafixerupper - 5.0.28 - provided - - - - - minecraft-repo - https://libraries.minecraft.net/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - fabric-repo - https://maven.fabricmc.net/ - - - - - - maven-compiler-plugin - 3.8.1 - - 17 - - - - net.md-5 - specialsource-maven-plugin - 1.2.3 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:1.20.4-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.20.4-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.20.4-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.20.4-R0.1-SNAPSHOT:jar:remapped-obf - - - - - - - \ No newline at end of file diff --git a/nmsutils/pom.xml b/nmsutils/pom.xml deleted file mode 100644 index 1e28500..0000000 --- a/nmsutils/pom.xml +++ /dev/null @@ -1,236 +0,0 @@ - - 4.0.0 - nmsutils - - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - - - - ${project.groupId} - nmsutils-core - ${project.version} - - - - - v1_20 - - true - - all - - - - - ${project.groupId} - nmsutils-v1_20_R1 - ${project.version} - - - ${project.groupId} - nmsutils-v1_20_R2 - ${project.version} - - - - - v1_20_3 - - true - - all - - - - - ${project.groupId} - nmsutils-v1_20_R3 - ${project.version} - - - - - v1_19_4 - - - all - - - - - ${project.groupId} - nmsutils-v1_19_R3 - ${project.version} - - - - - v1_19 - - - all - - - - - ${project.groupId} - nmsutils-v1_19_R1 - ${project.version} - - - ${project.groupId} - nmsutils-v1_19_R1_0 - ${project.version} - - - ${project.groupId} - nmsutils-v1_19_R1_1 - ${project.version} - - - ${project.groupId} - nmsutils-v1_19_R2 - ${project.version} - - - ${project.groupId} - nmsutils-v1_19_R3 - ${project.version} - - - - - v1_18_2 - - - all - - - - - ${project.groupId} - nmsutils-v1_18_R2 - ${project.version} - - - - - v1_18 - - - all - - - - - ${project.groupId} - nmsutils-v1_18_R1 - ${project.version} - - - - - v1_17_1 - - - all - - - - - ${project.groupId} - nmsutils-v1_17_R1 - ${project.version} - - - de.cubeside.nmsutils - nmsutils-v1_17_R1_1 - 0.0.1-SNAPSHOT - - - - - v1_17 - - - all - - - - - ${project.groupId} - nmsutils-v1_17_R1 - ${project.version} - - - de.cubeside.nmsutils - nmsutils-v1_17_R1_0 - 0.0.1-SNAPSHOT - - - - - v1_16_5 - - - all - - - - - ${project.groupId} - nmsutils-v1_16_R3 - ${project.version} - - - - - v1_16_3 - - - all - - - - - ${project.groupId} - nmsutils-v1_16_R2 - ${project.version} - - - - - - - - maven-compiler-plugin - 3.8.1 - - 11 - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.3 - - - package - - shade - - - - - - - - - - - - - diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts new file mode 100644 index 0000000..0de92b4 --- /dev/null +++ b/plugin/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + `maven-publish` + id("com.github.johnrengelman.shadow") version "8.1.1" + `java-library` +} + +group = "de.cubeside.nmsutils" +version = "0.0.1-SNAPSHOT" +description = "nms plugin" + +repositories { + mavenCentral() + maven("https://repo.papermc.io/repository/maven-public/") + maven("https://maven.fabricmc.net/") +} + +dependencies { + compileOnly("io.papermc.paper:paper-api:1.20.4-R0.1-SNAPSHOT") + implementation(project(":standalone", "shadow")) +} + +java { + toolchain.languageVersion.set(JavaLanguageVersion.of(17)) +} + +tasks.named("assemble").configure { + dependsOn("shadowJar") +} + +tasks { + shadowJar { + archiveFileName = "CubesideNMSUtils.jar" + } +} + +publishing { + publications { + create("maven") { + project.shadow.component(this) + groupId = "de.cubeside.nmsutils" + artifactId = "nmsutils-plugin" + } + } +} \ No newline at end of file diff --git a/nmsutils-plugin/src/main/java/de/cubeside/nmsutils/plugin/NMSUtilsPlugin.java b/plugin/src/main/java/de/cubeside/nmsutils/plugin/NMSUtilsPlugin.java similarity index 100% rename from nmsutils-plugin/src/main/java/de/cubeside/nmsutils/plugin/NMSUtilsPlugin.java rename to plugin/src/main/java/de/cubeside/nmsutils/plugin/NMSUtilsPlugin.java diff --git a/nmsutils-plugin/src/main/resources/plugin.yml b/plugin/src/main/resources/plugin.yml similarity index 100% rename from nmsutils-plugin/src/main/resources/plugin.yml rename to plugin/src/main/resources/plugin.yml diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 37e5fe8..0000000 --- a/pom.xml +++ /dev/null @@ -1,170 +0,0 @@ - - 4.0.0 - de.cubeside.nmsutils - nmsutils-parent - 0.0.1-SNAPSHOT - pom - - nmsutils-core - nmsutils - nmsutils-plugin - - - UTF-8 - - - - papermc - https://papermc.io/repo/repository/maven-public/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/groups/public/ - - - - - v1_20_3 - - true - - all - - - - nmsutils-v1_20_R3 - - - - v1_20 - - true - - all - - - - nmsutils-v1_20_R1 - nmsutils-v1_20_R2 - - - - v1_19_4 - - - all - - - - nmsutils-v1_19_R3 - - - - v1_19 - - - all - - - - nmsutils-v1_19_R1 - nmsutils-v1_19_R1_0 - nmsutils-v1_19_R1_1 - nmsutils-v1_19_R2 - nmsutils-v1_19_R3 - - - - v1_18_2 - - - all - - - - nmsutils-v1_18_R2 - - - - v1_18 - - - all - - - - nmsutils-v1_18_R1 - - - - v1_17_1 - - - all - - - - nmsutils-v1_17_R1 - nmsutils-v1_17_R1_1 - - - - v1_17 - - - all - - - - nmsutils-v1_17_R1 - nmsutils-v1_17_R1_0 - - - - v1_16_5 - - - all - - - - nmsutils-v1_16_R3 - - - - v1_16_3 - - - all - - - - nmsutils-v1_16_R2 - - - - - - - maven-compiler-plugin - 3.8.1 - - 11 - - - - - - - nexus - Releases - https://www.iani.de/nexus/content/repositories/releases/ - - - nexus - Snapshot - https://www.iani.de/nexus/content/repositories/snapshots/ - - - diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..7d582cc --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "nmsutils_parent" +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" +} +include("core") + +// Include all adapters +val adapterDirName = "adapter"; +// Get all directories inside the adapters directory +val subprojectDirs = File(adapterDirName).listFiles().filter { it.isDirectory } +// Add them as subprojects +subprojectDirs.forEach { subprojectDir -> + include(adapterDirName + ":" + subprojectDir.name) +} + +include("standalone") +include("plugin") \ No newline at end of file diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 0000000..034be1e --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,8 @@ +/** + * + */ +/** + * + */ +module nmsutils { +} \ No newline at end of file diff --git a/standalone/build.gradle.kts b/standalone/build.gradle.kts new file mode 100644 index 0000000..f41c90e --- /dev/null +++ b/standalone/build.gradle.kts @@ -0,0 +1,51 @@ +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar + +plugins { + `maven-publish` + id("com.github.johnrengelman.shadow") version "8.1.1" + `java-library` +} + +group = "de.cubeside.nmsutils" +version = "0.0.1-SNAPSHOT" +description = "nms adapter" + +repositories { + mavenCentral() + maven("https://repo.papermc.io/repository/maven-public/") + maven("https://maven.fabricmc.net/") +} + +dependencies { + compileOnly("io.papermc.paper:paper-api:1.20.4-R0.1-SNAPSHOT") + implementation("net.fabricmc:mapping-io:0.3.0") + implementation(project(":core")) + project.project(":adapter").subprojects.forEach { + implementation(project(it.path, "reobf")) + } +} + +java { + toolchain.languageVersion.set(JavaLanguageVersion.of(17)) +} + +tasks { + shadowJar { + relocate("net.fabricmc.mappingio", "de.cubeside.nmsutils.libs.net.fabricmc.mappingio") + relocate("org.objectweb.asm", "de.cubeside.nmsutils.libs.org.objectweb.asm") + } +} + +tasks.named("assemble").configure { + dependsOn("shadowJar") +} + +publishing { + publications { + create("maven") { + project.shadow.component(this) + groupId = "de.cubeside.nmsutils" + artifactId = "nmsutils-standalone" + } + } +} \ No newline at end of file