aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2026-03-17 18:33:47 +0100
committerAnhgelus Morhtuuzh <william@herges.fr>2026-03-17 18:33:47 +0100
commit0473971208eac8116dd0761e595d3a0a83d8e4ee (patch)
tree95bcac4db216fb2554284b241f1db6e741b34076
parent32234ce4d1a08090357af81ac824ab42c0462065 (diff)
feat(): update to 1.21.11
-rw-r--r--build.gradle23
-rw-r--r--gradle.properties14
-rw-r--r--gradle/wrapper/gradle-wrapper.jarbin43583 -> 43764 bytes
-rw-r--r--gradle/wrapper/gradle-wrapper.properties2
-rwxr-xr-x[-rw-r--r--]gradlew9
-rw-r--r--gradlew.bat4
-rw-r--r--src/main/java/world/anhgelus/manhunt/Manhunt.java424
-rw-r--r--src/main/resources/data/minecraft/loot_table/gameplay/piglin_bartering.json15
8 files changed, 247 insertions, 244 deletions
diff --git a/build.gradle b/build.gradle
index a6022a9..fdbfef6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,5 +1,5 @@
plugins {
- id 'fabric-loom' version '1.10-SNAPSHOT'
+ id 'fabric-loom' version '1.15-SNAPSHOT'
id 'maven-publish'
}
@@ -59,32 +59,21 @@ processResources {
}
}
-def targetJavaVersion = 21
tasks.withType(JavaCompile).configureEach {
- // ensure that the encoding is set to UTF-8, no matter what the system default is
- // this fixes some edge cases with special characters not displaying correctly
- // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
- // If Javadoc is generated, this must be specified in that task too.
+ it.options.release = 21
it.options.encoding = "UTF-8"
- if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) {
- it.options.release.set(targetJavaVersion)
- }
}
java {
- def javaVersion = JavaVersion.toVersion(targetJavaVersion)
- if (JavaVersion.current() < javaVersion) {
- toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion)
- }
- // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
- // if it is present.
- // If you remove this line, sources will not be generated.
withSourcesJar()
+
+ sourceCompatibility = JavaVersion.VERSION_21
+ targetCompatibility = JavaVersion.VERSION_21
}
jar {
from("LICENSE") {
- rename { "${it}_${project.archivesBaseName}"}
+ rename { "${it}_${inputs.properties.archivesName}"}
}
}
diff --git a/gradle.properties b/gradle.properties
index f3d49eb..8a80059 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,20 +1,20 @@
# Done to increase the memory available to gradle.
-org.gradle.jvmargs=-Xmx1G
+org.gradle.jvmargs=-Xmx2G
org.gradle.parallel=true
# Fabric Properties
# check these on https://fabricmc.net/develop
-minecraft_version=1.21.5
-yarn_mappings=1.21.5+build.1
-loader_version=0.16.14
+minecraft_version=1.21.11
+yarn_mappings=1.21.11+build.4
+loader_version=0.18.4
# Fabric API
-fabric_version=0.125.3+1.21.5
+fabric_version=0.141.3+1.21.11
# Libs
-midnightlib_version=1.7.3+1.21.4-fabric
+midnightlib_version=1.9.2+1.21.11-fabric
# Mod Properties
-mod_version=1.3.0
+mod_version=1.4.0
maven_group=world.anhgelus.manhunt
archives_base_name=manhunt
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index a4b76b9..1b33c55 100644
--- a/gradle/wrapper/gradle-wrapper.jar
+++ b/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 002b867..dbc3ce4 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
index f5feea6..23d15a9 100644..100755
--- a/gradlew
+++ b/gradlew
@@ -86,8 +86,7 @@ done
# 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 -P "${APP_HOME:-./}" > /dev/null && printf '%s
-' "$PWD" ) || exit
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -115,7 +114,7 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
@@ -206,7 +205,7 @@ fi
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,
+# * DEFAULT_JVM_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.
@@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
diff --git a/gradlew.bat b/gradlew.bat
index 9d21a21..db3a6ac 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -70,11 +70,11 @@ goto fail
:execute
@rem Setup the command line
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+set CLASSPATH=
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
diff --git a/src/main/java/world/anhgelus/manhunt/Manhunt.java b/src/main/java/world/anhgelus/manhunt/Manhunt.java
index ee373e1..dc14731 100644
--- a/src/main/java/world/anhgelus/manhunt/Manhunt.java
+++ b/src/main/java/world/anhgelus/manhunt/Manhunt.java
@@ -20,13 +20,12 @@ import net.minecraft.entity.attribute.EntityAttributeModifier;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects;
-import net.minecraft.entity.mob.MobEntity;
import net.minecraft.entity.mob.PiglinBruteEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
-import net.minecraft.nbt.NbtCompound;
import net.minecraft.server.PlayerManager;
+import net.minecraft.server.command.CommandManager;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text;
@@ -41,229 +40,230 @@ import java.util.*;
import static com.mojang.brigadier.builder.LiteralArgumentBuilder.literal;
public class Manhunt implements ModInitializer {
- public static final String MOD_ID = "manhunt";
- public static final Logger LOGGER = LogManager.getLogger(MOD_ID);
+ public static final String MOD_ID = "manhunt";
+ public static final Logger LOGGER = LogManager.getLogger(MOD_ID);
- private final Set<UUID> hunters = new HashSet<>();
- private final Set<UUID> speedrunners = new HashSet<>();
- private final Map<UUID, UUID> trackedMap = new HashMap<>();
+ private final Set<UUID> hunters = new HashSet<>();
+ private final Set<UUID> speedrunners = new HashSet<>();
+ private final Map<UUID, UUID> trackedMap = new HashMap<>();
- private final Timer timer = new Timer();
+ private final Timer timer = new Timer();
+ private State state = State.OFF;
- private enum State {
- ON, OFF
- }
+ @Override
+ public void onInitialize() {
+ LOGGER.info("Initializing Manhunt");
+ MidnightConfig.init(MOD_ID, Config.class);
+ LOGGER.info(Config.secondsBeforeRelease);
+ LOGGER.info(Config.updateCompassEach);
- private State state = State.OFF;
+ final LiteralArgumentBuilder<ServerCommandSource> command = literal("manhunt");
- @Override
- public void onInitialize() {
- LOGGER.info("Initializing Manhunt");
- MidnightConfig.init(MOD_ID, Config.class);
- LOGGER.info(Config.secondsBeforeRelease);
- LOGGER.info(Config.updateCompassEach);
-
- final LiteralArgumentBuilder<ServerCommandSource> command = literal("manhunt");
-
- final LiteralArgumentBuilder<ServerCommandSource> track = literal("track");
- track.then(RequiredArgumentBuilder.<ServerCommandSource, EntitySelector>argument("player", EntityArgumentType.player())
- .executes(context -> {
- final var source = context.getSource();
- final var tracked = (ServerPlayerEntity) EntityArgumentType.getEntity(context, "player");
- assert tracked.getDisplayName() != null;
- final var player = source.getPlayer();
- if (player == null) return 2;
- final var uuid = player.getUuid();
- if (trackedMap.get(uuid) != null && trackedMap.get(uuid) == tracked.getUuid()) {
- source.sendFeedback(() -> Text.literal("Already tracking "+tracked.getDisplayName().getString()), false);
- return Command.SINGLE_SUCCESS;
- }
- trackedMap.put(player.getUuid(), tracked.getUuid());
- updateCompass(player, tracked);
- source.sendFeedback(() -> Text.literal("Tracking "+tracked.getDisplayName().getString()), false);
- return Command.SINGLE_SUCCESS;
- })
- );
- final LiteralArgumentBuilder<ServerCommandSource> team = literal("team");
- final RequiredArgumentBuilder<ServerCommandSource, EntitySelector> teamP = RequiredArgumentBuilder.argument("player", EntityArgumentType.player());
- teamP.then(LiteralArgumentBuilder.<ServerCommandSource>literal("hunter").executes(context -> {
- final var p = (ServerPlayerEntity) EntityArgumentType.getEntity(context, "player");
+ final LiteralArgumentBuilder<ServerCommandSource> track = literal("track");
+ track.then(RequiredArgumentBuilder.<ServerCommandSource, EntitySelector>argument("player", EntityArgumentType.player())
+ .executes(context -> {
+ final var source = context.getSource();
+ final var tracked = (ServerPlayerEntity) EntityArgumentType.getEntity(context, "player");
+ assert tracked.getDisplayName() != null;
+ final var player = source.getPlayer();
+ if (player == null) return 2;
+ final var uuid = player.getUuid();
+ if (trackedMap.get(uuid) != null && trackedMap.get(uuid) == tracked.getUuid()) {
+ source.sendFeedback(() -> Text.literal("Already tracking " + tracked.getDisplayName().getString()), false);
+ return Command.SINGLE_SUCCESS;
+ }
+ trackedMap.put(player.getUuid(), tracked.getUuid());
+ updateCompass(player, tracked);
+ source.sendFeedback(() -> Text.literal("Tracking " + tracked.getDisplayName().getString()), false);
+ return Command.SINGLE_SUCCESS;
+ })
+ );
+ final LiteralArgumentBuilder<ServerCommandSource> team = literal("team");
+ final RequiredArgumentBuilder<ServerCommandSource, EntitySelector> teamP = RequiredArgumentBuilder.argument("player", EntityArgumentType.player());
+ teamP.then(LiteralArgumentBuilder.<ServerCommandSource>literal("hunter").executes(context -> {
+ final var p = (ServerPlayerEntity) EntityArgumentType.getEntity(context, "player");
speedrunners.remove(p.getUuid());
- hunters.add(p.getUuid());
- assert p.getDisplayName() != null;
- context.getSource().sendFeedback(() -> Text.literal(p.getDisplayName().getString()+" added to hunter"), true);
- return Command.SINGLE_SUCCESS;
- }))
- .then(LiteralArgumentBuilder.<ServerCommandSource>literal("speedrunner").executes(context -> {
- final var p = (ServerPlayerEntity) EntityArgumentType.getEntity(context, "player");
- hunters.remove(p.getUuid());
- speedrunners.add(p.getUuid());
- assert p.getDisplayName() != null;
- context.getSource().sendFeedback(() -> Text.literal(p.getDisplayName().getString()+" added to speedrunner"), true);
- return Command.SINGLE_SUCCESS;
- }));
- team.then(teamP);
- final LiteralArgumentBuilder<ServerCommandSource> start = literal("start");
- start.requires(source -> source.hasPermissionLevel(2));
- start.executes(context -> {
- if (state == State.ON) {
- context.getSource().sendFeedback(() -> Text.literal("Cannot start a manhunt if one is already started!"), false);
- return Command.SINGLE_SUCCESS;
- }
- final PlayerManager pm = context.getSource().getServer().getPlayerManager();
- for (final ServerPlayerEntity player : pm.getPlayerList()) {
- player.setHealth(player.getMaxHealth());
- player.setExperienceLevel(0);
- player.getInventory().clear();
- player.getHungerManager().eat(
- new FoodComponent(20, 20.0f, true)
- );
- final var spawn = player.getServerWorld().getSpawnPos();
- player.teleport(spawn.getX(), spawn.getY(), spawn.getZ(), false);
- }
- state = State.ON;
- for (final UUID uuid : hunters) {
- final var hunter = pm.getPlayer(uuid);
- assert hunter != null;
- final var isACompass = new ItemStack(Items.COMPASS);
- hunter.giveItemStack(isACompass);
- hunter.addStatusEffect(new StatusEffectInstance(StatusEffects.MINING_FATIGUE, Config.secondsBeforeRelease*20, 255, false, false));
- var attr = hunter.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED);
- if (attr != null) {
- final var modifier = new EntityAttributeModifier(
- Identifier.of("manhunt.speed"),
- -1,
- EntityAttributeModifier.Operation.ADD_MULTIPLIED_BASE
- );
- attr.addTemporaryModifier(modifier);
- }
- attr = hunter.getAttributeInstance(EntityAttributes.GRAVITY);
- if (attr != null) {
- final var modifier = new EntityAttributeModifier(
- Identifier.of("manhunt.gravity"),
- 5,
- EntityAttributeModifier.Operation.ADD_VALUE
- );
- attr.addTemporaryModifier(modifier);
- }
+ hunters.add(p.getUuid());
+ assert p.getDisplayName() != null;
+ context.getSource().sendFeedback(() -> Text.literal(p.getDisplayName().getString() + " added to hunter"), true);
+ return Command.SINGLE_SUCCESS;
+ }))
+ .then(LiteralArgumentBuilder.<ServerCommandSource>literal("speedrunner").executes(context -> {
+ final var p = (ServerPlayerEntity) EntityArgumentType.getEntity(context, "player");
+ hunters.remove(p.getUuid());
+ speedrunners.add(p.getUuid());
+ assert p.getDisplayName() != null;
+ context.getSource().sendFeedback(() -> Text.literal(p.getDisplayName().getString() + " added to speedrunner"), true);
+ return Command.SINGLE_SUCCESS;
+ }));
+ team.then(teamP);
+ final LiteralArgumentBuilder<ServerCommandSource> start = literal("start");
+ start.requires(CommandManager.requirePermissionLevel(CommandManager.GAMEMASTERS_CHECK));
+ start.executes(context -> {
+ if (state == State.ON) {
+ context.getSource().sendFeedback(() -> Text.literal("Cannot start a manhunt if one is already started!"), false);
+ return Command.SINGLE_SUCCESS;
+ }
+ final PlayerManager pm = context.getSource().getServer().getPlayerManager();
+ for (final ServerPlayerEntity player : pm.getPlayerList()) {
+ player.setHealth(player.getMaxHealth());
+ player.setExperienceLevel(0);
+ player.getInventory().clear();
+ player.getHungerManager().eat(
+ new FoodComponent(20, 20.0f, true)
+ );
+ final var spawn = player.getEntityWorld().getSpawnPoint().getPos();
+ player.teleport(spawn.getX(), spawn.getY(), spawn.getZ(), false);
+ }
+ state = State.ON;
+ for (final UUID uuid : hunters) {
+ final var hunter = pm.getPlayer(uuid);
+ assert hunter != null;
+ final var isACompass = new ItemStack(Items.COMPASS);
+ hunter.giveItemStack(isACompass);
+ hunter.addStatusEffect(new StatusEffectInstance(StatusEffects.MINING_FATIGUE, Config.secondsBeforeRelease * 20, 255, false, false));
+ var attr = hunter.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED);
+ if (attr != null) {
+ final var modifier = new EntityAttributeModifier(
+ Identifier.of("manhunt.speed"),
+ -1,
+ EntityAttributeModifier.Operation.ADD_MULTIPLIED_BASE
+ );
+ attr.addTemporaryModifier(modifier);
+ }
+ attr = hunter.getAttributeInstance(EntityAttributes.GRAVITY);
+ if (attr != null) {
+ final var modifier = new EntityAttributeModifier(
+ Identifier.of("manhunt.gravity"),
+ 5,
+ EntityAttributeModifier.Operation.ADD_VALUE
+ );
+ attr.addTemporaryModifier(modifier);
+ }
LOGGER.info("Added modifiers to {}", hunter.getDisplayName());
- }
- timer.schedule(new TimerTask() {
- @Override
- public void run() {
- LOGGER.info("Removing modifier to hunters");
- for (final UUID uuid : hunters) {
- final var hunter = pm.getPlayer(uuid);
- assert hunter != null;
- var attr = hunter.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED);
- if (attr != null) {
- attr.removeModifier(Identifier.of("manhunt.speed"));
- }
- attr = hunter.getAttributeInstance(EntityAttributes.GRAVITY);
- if (attr != null) {
- attr.removeModifier(Identifier.of("manhunt.gravity"));
- }
- }
- }
- }, Config.secondsBeforeRelease*1000L);
- setTimer(pm);
- context.getSource().sendFeedback(() -> Text.literal("Game started!"), true);
- return Command.SINGLE_SUCCESS;
- });
+ }
+ timer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ LOGGER.info("Removing modifier to hunters");
+ for (final UUID uuid : hunters) {
+ final var hunter = pm.getPlayer(uuid);
+ assert hunter != null;
+ var attr = hunter.getAttributeInstance(EntityAttributes.MOVEMENT_SPEED);
+ if (attr != null) {
+ attr.removeModifier(Identifier.of("manhunt.speed"));
+ }
+ attr = hunter.getAttributeInstance(EntityAttributes.GRAVITY);
+ if (attr != null) {
+ attr.removeModifier(Identifier.of("manhunt.gravity"));
+ }
+ }
+ }
+ }, Config.secondsBeforeRelease * 1000L);
+ setTimer(pm);
+ context.getSource().sendFeedback(() -> Text.literal("Game started!"), true);
+ return Command.SINGLE_SUCCESS;
+ });
+
+ final LiteralArgumentBuilder<ServerCommandSource> resetTimer = literal("reset-timer");
+ resetTimer.requires(CommandManager.requirePermissionLevel(CommandManager.GAMEMASTERS_CHECK));
+ resetTimer.executes(context -> {
+ state = State.ON;
+ setTimer(context.getSource().getServer().getPlayerManager());
+ context.getSource().sendFeedback(() -> Text.literal("Timer reset"), true);
+ return Command.SINGLE_SUCCESS;
+ });
- final LiteralArgumentBuilder<ServerCommandSource> resetTimer = literal("reset-timer");
- resetTimer.requires(source -> source.hasPermissionLevel(2));
- resetTimer.executes(context -> {
- state = State.ON;
- setTimer(context.getSource().getServer().getPlayerManager());
- context.getSource().sendFeedback(() -> Text.literal("Timer reset"), true);
- return Command.SINGLE_SUCCESS;
- });
+ command.then(track);
+ command.then(team);
+ command.then(start);
+ command.then(resetTimer);
- command.then(track);
- command.then(team);
- command.then(start);
- command.then(resetTimer);
+ CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> dispatcher.register(command));
- CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> dispatcher.register(command));
+ ServerPlayerEvents.AFTER_RESPAWN.register((oldPlayer, newPlayer, alive) -> {
+ if (state == State.OFF) return;
+ final var uuid = oldPlayer.getUuid();
+ if (hunters.contains(uuid)) {
+ newPlayer.giveItemStack(new ItemStack(Items.COMPASS));
+ return;
+ }
+ speedrunners.remove(uuid);
+ newPlayer.changeGameMode(GameMode.SPECTATOR);
+ if (!speedrunners.isEmpty()) return;
+ final var server = newPlayer.getEntityWorld().getServer();
+ assert server != null;
+ for (final ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) {
+ player.changeGameMode(GameMode.SPECTATOR);
+ hunters.remove(player.getUuid());
+ speedrunners.remove(player.getUuid());
+ }
+ state = State.OFF;
+ timer.cancel();
+ });
- ServerPlayerEvents.AFTER_RESPAWN.register((oldPlayer, newPlayer, alive) -> {
- if (state == State.OFF) return;
- final var uuid = oldPlayer.getUuid();
- if (hunters.contains(uuid)) {
- newPlayer.giveItemStack(new ItemStack(Items.COMPASS));
- return;
- }
- speedrunners.remove(uuid);
- newPlayer.changeGameMode(GameMode.SPECTATOR);
- if (!speedrunners.isEmpty()) return;
- for (final ServerPlayerEntity player : newPlayer.server.getPlayerManager().getPlayerList()) {
- player.changeGameMode(GameMode.SPECTATOR);
- hunters.remove(player.getUuid());
- speedrunners.remove(player.getUuid());
- }
- state = State.OFF;
- timer.cancel();
- });
+ ServerEntityEvents.ENTITY_LOAD.register((entity, world) -> {
+ if (!(entity instanceof PiglinBruteEntity)) return;
+ EntityType.PIGLIN.spawn(world, entity.getBlockPos(), SpawnReason.MOB_SUMMONED);
+ entity.discard();
+ });
- ServerEntityEvents.ENTITY_LOAD.register((entity, world) -> {
- if (!(entity instanceof PiglinBruteEntity)) return;
- EntityType.PIGLIN.spawn(world, entity.getBlockPos(), SpawnReason.MOB_SUMMONED);
- entity.discard();
- });
+ ServerLifecycleEvents.SERVER_STOPPED.register((server) -> {
+ timer.cancel();
+ });
+ }
- ServerLifecycleEvents.SERVER_STOPPED.register((server) -> {
- timer.cancel();
- });
- }
+ private void setTimer(PlayerManager pm) {
+ timer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ for (final UUID uuid : hunters) {
+ final ServerPlayerEntity hunter = pm.getPlayer(uuid);
+ if (hunter == null) continue;
+ final ServerPlayerEntity tracked = pm.getPlayer(trackedMap.get(uuid));
+ if (tracked == null) continue;
+ updateCompass(hunter, tracked);
+ }
+ }
+ }, Config.secondsBeforeRelease * 1000L, Config.updateCompassEach * 1000L);
+ }
- private void setTimer(PlayerManager pm) {
- timer.schedule(new TimerTask() {
- @Override
- public void run() {
- for (final UUID uuid : hunters) {
- final ServerPlayerEntity hunter = pm.getPlayer(uuid);
- if (hunter == null) continue;
- final ServerPlayerEntity tracked = pm.getPlayer(trackedMap.get(uuid));
- if (tracked == null) continue;
- updateCompass(hunter, tracked);
- }
- }
- }, Config.secondsBeforeRelease*1000L, Config.updateCompassEach*1000L);
- }
+ private void updateCompass(ServerPlayerEntity player, ServerPlayerEntity tracked) {
+ final var trackerCpnt = new LodestoneTrackerComponent(Optional.of(GlobalPos.create(tracked.getEntityWorld().getRegistryKey(), tracked.getBlockPos())), true);
+ LOGGER.info(tracked.getEntityWorld().getRegistryKey().toString());
+ LOGGER.info(tracked.getBlockPos().toString());
+ LOGGER.info(trackerCpnt.toString());
+ ItemStack is = null;
+ int slot = PlayerInventory.NOT_FOUND;
+ final var inv = player.getInventory();
+ if (inv.getSelectedStack().isOf(Items.COMPASS)) {
+ is = inv.getSelectedStack();
+ slot = inv.getSlotWithStack(is);
+ } else if (inv.getStack(PlayerInventory.OFF_HAND_SLOT).isOf(Items.COMPASS)) {
+ is = inv.getStack(PlayerInventory.OFF_HAND_SLOT);
+ slot = PlayerInventory.OFF_HAND_SLOT;
+ } else {
+ for (int i = 0; i < PlayerInventory.MAIN_SIZE && is == null; i++) {
+ final var stack = inv.getStack(i);
+ if (stack.isOf(Items.COMPASS)) {
+ is = stack;
+ slot = i;
+ }
+ }
+ }
+ if (is == null) {
+ LOGGER.warn("Compass item is null");
+ is = new ItemStack(Items.COMPASS);
+ }
+ is.set(DataComponentTypes.LODESTONE_TRACKER, trackerCpnt);
+ if (slot == PlayerInventory.NOT_FOUND) {
+ player.giveItemStack(is);
+ return;
+ }
+ inv.setStack(slot, is);
+ }
- private void updateCompass(ServerPlayerEntity player, ServerPlayerEntity tracked) {
- final var trackerCpnt = new LodestoneTrackerComponent(Optional.of(GlobalPos.create(tracked.getWorld().getRegistryKey(), tracked.getBlockPos())), true);
- LOGGER.info(tracked.getWorld().getRegistryKey().toString());
- LOGGER.info(tracked.getBlockPos().toString());
- LOGGER.info(trackerCpnt.toString());
- ItemStack is = null;
- int slot = PlayerInventory.NOT_FOUND;
- final var inv = player.getInventory();
- if (inv.getSelectedStack().isOf(Items.COMPASS)) {
- is = inv.getSelectedStack();
- slot = inv.getSlotWithStack(is);
- } else if (inv.getStack(PlayerInventory.OFF_HAND_SLOT).isOf(Items.COMPASS)) {
- is = inv.getStack(PlayerInventory.OFF_HAND_SLOT);
- slot = PlayerInventory.OFF_HAND_SLOT;
- } else {
- for (int i = 0; i < PlayerInventory.MAIN_SIZE && is == null; i++) {
- final var stack = inv.getStack(i);
- if (stack.isOf(Items.COMPASS)) {
- is = stack;
- slot = i;
- }
- }
- }
- if (is == null) {
- LOGGER.warn("Compass item is null");
- is = new ItemStack(Items.COMPASS);
- }
- is.set(DataComponentTypes.LODESTONE_TRACKER, trackerCpnt);
- if (slot == PlayerInventory.NOT_FOUND) {
- player.giveItemStack(is);
- return;
- }
- inv.setStack(slot, is);
- }
+ private enum State {
+ ON, OFF
+ }
} \ No newline at end of file
diff --git a/src/main/resources/data/minecraft/loot_table/gameplay/piglin_bartering.json b/src/main/resources/data/minecraft/loot_table/gameplay/piglin_bartering.json
index 09f15e8..61599ab 100644
--- a/src/main/resources/data/minecraft/loot_table/gameplay/piglin_bartering.json
+++ b/src/main/resources/data/minecraft/loot_table/gameplay/piglin_bartering.json
@@ -65,6 +65,21 @@
},
{
"type": "minecraft:item",
+ "name": "minecraft:dried_ghast",
+ "weight": 10,
+ "functions": [
+ {
+ "function": "minecraft:set_count",
+ "count": {
+ "type": "minecraft:uniform",
+ "min": 9,
+ "max": 36
+ }
+ }
+ ]
+ },
+ {
+ "type": "minecraft:item",
"name": "minecraft:quartz",
"weight": 20,
"functions": [