From 9b7b8131bec31217bb9d1449c43f85cbd5450849 Mon Sep 17 00:00:00 2001 From: Xamora64 <49618907+Xamora64@users.noreply.github.com> Date: Mon, 7 Apr 2025 13:49:22 +0200 Subject: [PATCH] New teleport to stop spawn Portal, issue save criminals, new function for cancel kill criminal --- build.gradle | 2 +- src/main/java/xamora/gp_dbc/system/Cell.java | 5 +-- .../java/xamora/gp_dbc/system/Criminal.java | 20 ++++++++- .../java/xamora/gp_dbc/system/Criminals.java | 13 ++++++ src/main/java/xamora/gp_dbc/system/Jail.java | 5 +-- src/main/java/xamora/gp_dbc/utils/Data.java | 2 +- .../xamora/gp_dbc/utils/TeleportUtils.java | 42 +++++++++++++++++++ 7 files changed, 80 insertions(+), 9 deletions(-) create mode 100644 src/main/java/xamora/gp_dbc/utils/TeleportUtils.java diff --git a/build.gradle b/build.gradle index 1ac47ae..c8d28d5 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ apply plugin: 'forge' sourceCompatibility = 1.8 targetCompatibility = 1.8 -version = "1.1.2" +version = "1.2.4" group = "xamora.gp_dbc" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "gp_dbc" diff --git a/src/main/java/xamora/gp_dbc/system/Cell.java b/src/main/java/xamora/gp_dbc/system/Cell.java index 15e6a13..a3b8672 100644 --- a/src/main/java/xamora/gp_dbc/system/Cell.java +++ b/src/main/java/xamora/gp_dbc/system/Cell.java @@ -2,6 +2,7 @@ package xamora.gp_dbc.system; import xamora.gp_dbc.utils.Pos; import net.minecraft.entity.player.EntityPlayer; +import xamora.gp_dbc.utils.TeleportUtils; import java.util.ArrayList; import java.util.List; @@ -83,9 +84,7 @@ public class Cell { public void tpTo(EntityPlayer player) { Pos pos = getPos(); - if (player.dimension != pos.dimension) - player.travelToDimension(pos.dimension); - player.setPositionAndUpdate(pos.x + 0.5, pos.y + 1, pos.z + 0.5); + TeleportUtils.teleportDimension(player, pos.x + 0.5, pos.y + 1, pos.z + 0.5, pos.dimension); } @Override diff --git a/src/main/java/xamora/gp_dbc/system/Criminal.java b/src/main/java/xamora/gp_dbc/system/Criminal.java index be31254..3a97ce0 100644 --- a/src/main/java/xamora/gp_dbc/system/Criminal.java +++ b/src/main/java/xamora/gp_dbc/system/Criminal.java @@ -9,6 +9,8 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import xamora.gp_dbc.config.ConfigManager; +import java.util.HashMap; +import java.util.List; import java.util.UUID; import static xamora.gp_dbc.config.ConfigManager.*; @@ -21,6 +23,8 @@ public class Criminal { private long last_time_pos; private Pos last_pos; + public HashMap victims_alignLoose = new HashMap<>(); + public Criminal(EntityPlayer player) { this(player, 0); } @@ -43,10 +47,24 @@ public class Criminal { public void addKill(EntityPlayer killed) { JGPlayerMP jgKilled = new JGPlayerMP(killed); - long add = Math.max(jgKilled.getAlignment() - 32, 0); + jgKilled.connectBaseNBT(); + int add = Math.max(jgKilled.getAlignment() - 33, 0); if (Main.gp.isInGalacticPatrol(killed)) add *= 2; rate += add; + + victims_alignLoose.put(killed.getUniqueID(), add); + } + + public boolean cancelVictim(UUID killed) { + if (!victims_alignLoose.containsKey(killed)) + return false; + + int align = victims_alignLoose.get(killed); + rate -= align; + victims_alignLoose.remove(killed); + + return true; } // Jail in second diff --git a/src/main/java/xamora/gp_dbc/system/Criminals.java b/src/main/java/xamora/gp_dbc/system/Criminals.java index 09831c7..30f737b 100644 --- a/src/main/java/xamora/gp_dbc/system/Criminals.java +++ b/src/main/java/xamora/gp_dbc/system/Criminals.java @@ -4,6 +4,7 @@ import JinRyuu.JRMCore.server.JGPlayerMP; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import fastcraft.U; import xamora.gp_dbc.config.ConfigManager; import xamora.gp_dbc.utils.Data; import xamora.gp_dbc.utils.PlayerUtils; @@ -14,6 +15,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraftforge.event.entity.living.LivingDeathEvent; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.UUID; @@ -66,6 +68,17 @@ public class Criminals { Data.saveDataString(listCriminalToString(criminals), "criminals"); } + public boolean cancelVictim(UUID killer, UUID dead) { + if (!isCriminal(killer)) + return false; + Criminal criminal = getCriminal(killer); + boolean canceled = criminal.cancelVictim(dead); + if (criminal.getRate() <= 0) + criminals.remove(criminal); + + return canceled; + } + public Criminal getCriminal(UUID uuid) { for (Criminal criminal : criminals) if (criminal.getUuid().equals(uuid)) diff --git a/src/main/java/xamora/gp_dbc/system/Jail.java b/src/main/java/xamora/gp_dbc/system/Jail.java index 5945da4..0f56598 100644 --- a/src/main/java/xamora/gp_dbc/system/Jail.java +++ b/src/main/java/xamora/gp_dbc/system/Jail.java @@ -4,6 +4,7 @@ import xamora.gp_dbc.Main; import xamora.gp_dbc.config.ConfigManager; import xamora.gp_dbc.utils.Data; import xamora.gp_dbc.utils.Pos; +import xamora.gp_dbc.utils.TeleportUtils; import xamora.gp_dbc.utils.TimeUtils; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayer; @@ -221,9 +222,7 @@ public class Jail { public void tpOutOfJail(EntityPlayer player) { Pos pos = ConfigManager.pos_exit_jail; - if (player.dimension != pos.dimension) - player.travelToDimension(pos.dimension); - player.setPositionAndUpdate(pos.x + 0.5, pos.y, pos.z + 0.5); + TeleportUtils.teleportDimension(player, pos.x + 0.5, pos.y + 1, pos.z + 0.5, pos.dimension); } public Cell getRandomCell() throws Exception { diff --git a/src/main/java/xamora/gp_dbc/utils/Data.java b/src/main/java/xamora/gp_dbc/utils/Data.java index 0a4e621..924c733 100644 --- a/src/main/java/xamora/gp_dbc/utils/Data.java +++ b/src/main/java/xamora/gp_dbc/utils/Data.java @@ -28,7 +28,7 @@ public class Data { BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(path, true)); - for (int i = 0; i < list.size() - 2; i++) + for (int i = 0; i < list.size() - 1; i++) bufferedWriter.write(list.get(i) + "\n"); if (list.size() > 0) bufferedWriter.write(list.get(list.size() - 1)); diff --git a/src/main/java/xamora/gp_dbc/utils/TeleportUtils.java b/src/main/java/xamora/gp_dbc/utils/TeleportUtils.java new file mode 100644 index 0000000..3b38b1c --- /dev/null +++ b/src/main/java/xamora/gp_dbc/utils/TeleportUtils.java @@ -0,0 +1,42 @@ +package xamora.gp_dbc.utils; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.MathHelper; +import net.minecraft.world.Teleporter; +import net.minecraft.world.WorldServer; + +public class TeleportUtils extends Teleporter +{ + + private final WorldServer worldServerInstance; + + public TeleportUtils(WorldServer par1WorldServer) { + super(par1WorldServer); + this.worldServerInstance = par1WorldServer; + } + + @Override + public void placeInPortal(Entity entity, double p2, double p3, double p4, float p5) { + int i = MathHelper.floor_double(entity.posX); + int j = MathHelper.floor_double(entity.posY); + int k = MathHelper.floor_double(entity.posZ); + + this.worldServerInstance.getBlock(i, j, k); //dummy load to maybe gen chunk + int height = this.worldServerInstance.getHeightValue(i, k); + entity.setPosition( i, height, k ); + return; + + } // dont do ANY portal junk, just grab a dummy block then SHOVE the player setPosition() at height + + public static void teleportDimension(EntityPlayer player, double x, double y, double z, int dimension) { + MinecraftServer ms = MinecraftServer.getServer(); + WorldServer ws = ms.worldServerForDimension(dimension); + Teleporter teleporter = new TeleportUtils(ws); + ms.getConfigurationManager().transferPlayerToDimension((EntityPlayerMP) player, dimension, teleporter); + player.setPositionAndUpdate(x + 0.5, y, z + 0.5); + } + +} \ No newline at end of file