COMBAT TRACKING YIPEEEEE

This commit is contained in:
NotCoded committed 2024-07-06 19:16:12 +02:00
1 parent e946e076d0
commit ecaab4bcda
7 files changed
+73 -7

No files matched your search

+2
View File
@@ -13,6 +13,7 @@ base {
repositories {
maven { url 'https://repo.minebench.de/' }
maven { url 'https://maven.nucleoid.xyz' }
maven { url 'https://masa.dy.fi/maven' }
}
dependencies {
@@ -23,6 +24,7 @@ dependencies {
// Fabric API. This is technically optional, but you probably want it anyway.
modRuntimeOnly(modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}")
modRuntimeOnly(modImplementation("carpet:fabric-carpet:${project.minecraft_version}-${project.carpet_version}"))
include(implementation("net.kyori:adventure-text-minimessage:4.17.0-SNAPSHOT"))
include(implementation("net.kyori:adventure-text-serializer-gson:4.17.0-SNAPSHOT"))
+3 -2
View File
@@ -5,7 +5,7 @@ org.gradle.jvmargs=-Xmx1G
# check these on https://modmuss50.me/fabric.html
minecraft_version=1.20.6
yarn_mappings=1.20.6+build.3
loader_version=0.15.6
loader_version=0.15.11
# Mod Properties
mod_version = 1.0.0
@@ -15,4 +15,5 @@ archives_base_name = nexia-teams
# Dependencies
# check this on https://modmuss50.me/fabric.html
fabric_version=0.100.0+1.20.6
gson_version=2.11.0
gson_version=2.11.0
carpet_version=1.4.141+v240429
@@ -1,6 +1,7 @@
package com.nexia.teams;
import com.nexia.teams.commands.CommandLoader;
import com.nexia.teams.utilities.CombatUtil;
import com.nexia.teams.utilities.chat.ChatFormat;
import com.nexia.teams.utilities.time.ServerTime;
import net.fabricmc.api.ModInitializer;
@@ -30,6 +31,8 @@ public class NexiaTeams implements ModInitializer {
ServerPlayer player = handler.getPlayer();
player.sendSystemMessage(ChatFormat.convertComponent(ChatFormat.nexiaMessage.append(Component.text("Welcome to Nexia Teams!"))));
CombatUtil.combatLoggedPlayersTimer.remove(player.getUUID());
});
ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> {
@@ -37,9 +40,7 @@ public class NexiaTeams implements ModInitializer {
player.getCombatTracker().recheckStatus();
if(player.getCombatTracker().inCombat) {
// idk if this even works
ServerTime.minecraftServer.getCommands().performPrefixedCommand(ServerTime.minecraftServer.createCommandSourceStack().withPermission(4).withSuppressedOutput(), "player " + player.getScoreboardName() + " shadow");
ServerTime.minecraftServer.getCommands().performPrefixedCommand(ServerTime.minecraftServer.createCommandSourceStack().withPermission(4).withSuppressedOutput(), "player " + player.getScoreboardName() + " spawn");
CombatUtil.addPlayer(player);
}
});
@@ -15,7 +15,7 @@ public abstract class Meteor {
public static ServerPlayer serverPlayer = null;
public static int[] meteorCoordinates = new int[]{0, 324, 0};
public static void tick() {
public static void second() {
if (scheduledTimestamp == null) return;
long unixTime = System.currentTimeMillis() / 1000L;
@@ -45,6 +45,7 @@ public class AxeItemMixin {
player.sendSystemMessage(ChatFormat.convertComponent(ChatFormat.nexiaMessage.append(Component.text("Finished editing koth."))));
kothGame.initialCoordinates = null;
player.getInventory().removeItem(useOnContext.getItemInHand());
player.removeTag("koth_" + kothName);
}
}
@@ -0,0 +1,57 @@
package com.nexia.teams.utilities;
import com.nexia.teams.utilities.time.ServerTime;
import net.minecraft.server.level.ServerPlayer;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.UUID;
public class CombatUtil {
public static final Logger logger = LoggerFactory.getLogger(CombatUtil.class);
public static HashMap<UUID, Integer> combatLoggedPlayersTimer = new HashMap<>();
public static void second() {
try {
CombatUtil.combatLoggedPlayersTimer.forEach(((uuid, integer) -> {
ServerPlayer serverPlayer = getPlayer(uuid);
int newInt = integer - 1;
combatLoggedPlayersTimer.replace(uuid, newInt);
if(serverPlayer == null || newInt > 0) return;
CombatUtil.logger.debug("Removing fake player {}: Combat Timer ran out", serverPlayer.getScoreboardName());
//serverPlayer.connection.disconnect(ChatFormat.convertComponent(Component.text("Combat Log Timer ran out. Disconnecting Bot\n\nIf you are not a bot then please report this issue to the developers.")));
serverPlayer.kill();
combatLoggedPlayersTimer.remove(uuid);
}));
} catch (Exception ignored) { }
}
public static void stop() {
CombatUtil.logger.debug("Clearing all fake players.");
combatLoggedPlayersTimer.clear();
}
public static boolean addPlayer(ServerPlayer player) {
CombatUtil.logger.debug("Spawning player {} as a fake player.", player.getScoreboardName());
ServerTime.minecraftServer.getCommands().performPrefixedCommand(ServerTime.minecraftServer.createCommandSourceStack().withPermission(4), "player " + player.getScoreboardName() + " shadow");
combatLoggedPlayersTimer.put(player.getUUID(), player.getCombatTracker().getCombatDuration());
return getPlayer(player.getUUID()) != null;
}
private static @Nullable ServerPlayer getPlayer(UUID uuid) {
return ServerTime.minecraftServer.getPlayerList().getPlayer(uuid);
}
}
@@ -4,6 +4,7 @@ import com.google.common.base.Suppliers;
import com.nexia.teams.events.koth.KothGame;
import com.nexia.teams.events.koth.KothGameHandler;
import com.nexia.teams.events.meteor.Meteor;
import com.nexia.teams.utilities.CombatUtil;
import com.nexia.teams.utilities.chat.ChatFormat;
import com.nexia.teams.utilities.data.KothDataManager;
import com.nexia.teams.utilities.data.NexiaDataManager;
@@ -32,6 +33,7 @@ public abstract class ServerTime {
NexiaDataManager.saveNexiaData();
KothGameHandler.stopAllKothGames();
KothDataManager.saveKothGamesData();
CombatUtil.stop();
try {
for (ServerPlayer player : server.getPlayerList().getPlayers()) {
@@ -54,7 +56,9 @@ public abstract class ServerTime {
static void everySecond() {
totalSecondCount++;
Meteor.tick();
Meteor.second();
CombatUtil.second();
long unixTime = System.currentTimeMillis() / 1000L;
for (KothGame kothGame : KothGameHandler.kothGames) {
if (kothGame.scheduledTimestamp == null) continue;