diff options
| -rw-r--r-- | build.gradle | 23 | ||||
| -rw-r--r-- | gradle.properties | 14 | ||||
| -rw-r--r-- | gradle/wrapper/gradle-wrapper.jar | bin | 43583 -> 43764 bytes | |||
| -rw-r--r-- | gradle/wrapper/gradle-wrapper.properties | 2 | ||||
| -rwxr-xr-x[-rw-r--r--] | gradlew | 9 | ||||
| -rw-r--r-- | gradlew.bat | 4 | ||||
| -rw-r--r-- | src/main/java/world/anhgelus/manhunt/Manhunt.java | 424 | ||||
| -rw-r--r-- | src/main/resources/data/minecraft/loot_table/gameplay/piglin_bartering.json | 15 |
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 Binary files differindex a4b76b9..1b33c55 100644 --- a/gradle/wrapper/gradle-wrapper.jar +++ b/gradle/wrapper/gradle-wrapper.jar 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 @@ -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": [
|
