From cd7cf4e7ca590f5dc24343a8e15bbbdd1fda45f8 Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Wed, 5 Mar 2014 20:24:07 -0400 Subject: [PATCH] Added DeathTracker and Removed PlayerTracker Added DeathTracker - a class for tracking the deaths of players on the server while in pocket dimensions. It'll be used for generating skulls for grave chests. Also removed PlayerTracker since it wasn't being used for anything at all. I'm guessing it was supposed to be used for something later. We can restore it if it's ever needed. --- .../mod_pocketDim/DeathTracker.java | 102 ++++++++++++++++++ .../mod_pocketDim/PlayerTracker.java | 39 ------- .../mod_pocketDim/mod_pocketDim.java | 17 +-- 3 files changed, 112 insertions(+), 46 deletions(-) create mode 100644 src/main/java/StevenDimDoors/mod_pocketDim/DeathTracker.java delete mode 100644 src/main/java/StevenDimDoors/mod_pocketDim/PlayerTracker.java diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/DeathTracker.java b/src/main/java/StevenDimDoors/mod_pocketDim/DeathTracker.java new file mode 100644 index 0000000..be0dfcf --- /dev/null +++ b/src/main/java/StevenDimDoors/mod_pocketDim/DeathTracker.java @@ -0,0 +1,102 @@ +package StevenDimDoors.mod_pocketDim; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Random; + +public class DeathTracker +{ + private ArrayList usernameList; + private HashSet usernameSet; + private String filePath; + private boolean modified; + + public DeathTracker(String filePath) + { + this.usernameList = new ArrayList(); + this.usernameSet = new HashSet(); + this.filePath = filePath; + this.modified = false; + + readFromFile(); + } + + private void readFromFile() + { + try + { + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath))); + for (String line = reader.readLine(); line != null; line = reader.readLine()) + { + line = line.trim(); + if (!line.isEmpty()) + { + usernameSet.add(line); + } + } + reader.close(); + } + catch (FileNotFoundException e) { } + catch (IOException e) + { + System.err.println("An unexpected exception occurred while trying to read DeathTracker data:"); + System.err.println(e.toString()); + } + usernameList.addAll(usernameSet); + } + + public void writeToFile() + { + try + { + PrintWriter writer = new PrintWriter(filePath); + for (String username : usernameList) + { + writer.println(username); + } + writer.close(); + modified = false; + } + catch (FileNotFoundException e) + { + System.err.println("An unexpected exception occurred while trying to read DeathTracker data:"); + System.err.println(e.toString()); + } + } + + public boolean isModified() + { + return modified; + } + + public boolean isEmpty() + { + return usernameList.isEmpty(); + } + + public String getRandomUsername(Random random) + { + if (usernameList.isEmpty()) + { + throw new IllegalStateException("Cannot retrieve a random username from an empty list."); + } + return usernameList.get(random.nextInt(usernameList.size())); + } + + public boolean addUsername(String username) + { + if (usernameSet.add(username)) + { + usernameList.add(username); + modified = true; + return true; + } + return false; + } +} diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/PlayerTracker.java b/src/main/java/StevenDimDoors/mod_pocketDim/PlayerTracker.java deleted file mode 100644 index c7cb895..0000000 --- a/src/main/java/StevenDimDoors/mod_pocketDim/PlayerTracker.java +++ /dev/null @@ -1,39 +0,0 @@ -package StevenDimDoors.mod_pocketDim; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.network.packet.Packet250CustomPayload; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.network.ForgePacket; -import net.minecraftforge.common.network.packet.DimensionRegisterPacket; -import cpw.mods.fml.common.IPlayerTracker; - -public class PlayerTracker implements IPlayerTracker -{ - - @Override - public void onPlayerLogin(EntityPlayer player) - { - - } - - @Override - public void onPlayerLogout(EntityPlayer player) { - // TODO Auto-generated method stub - - } - - @Override - public void onPlayerChangedDimension(EntityPlayer player) { - // TODO Auto-generated method stub - - } - - @Override - public void onPlayerRespawn(EntityPlayer player) - { - - - } - -} diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java b/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java index ccc716f..c25ecb3 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java @@ -134,9 +134,9 @@ public class mod_pocketDim public static DDProperties properties; public static CustomLimboPopulator spawner; //Added this field temporarily. Will be refactored out later. - public FastRiftRegenerator fastRiftRegenerator; + public static FastRiftRegenerator fastRiftRegenerator; public static GatewayGenerator gatewayGenerator; - public static PlayerTracker tracker; + public static DeathTracker deathTracker; public static CreativeTabs dimDoorsCreativeTab = new CreativeTabs("dimDoorsCreativeTab") { @@ -206,14 +206,11 @@ public class mod_pocketDim itemRiftBlade = (new ItemRiftBlade(properties.RiftBladeItemID, properties)).setUnlocalizedName("ItemRiftBlade"); itemStabilizedLinkSignature = (new ItemStabilizedRiftSignature(properties.StabilizedRiftSignatureItemID)).setUnlocalizedName("itemStabilizedRiftSig"); itemWorldThread = (new ItemWorldThread(properties.WorldThreadItemID)).setUnlocalizedName("itemWorldThread"); - mod_pocketDim.limboBiome = (new BiomeGenLimbo(properties.LimboBiomeID)); mod_pocketDim.pocketBiome = (new BiomeGenPocket(properties.PocketBiomeID)); GameRegistry.registerWorldGenerator(mod_pocketDim.gatewayGenerator); - tracker = new PlayerTracker(); - GameRegistry.registerPlayerTracker(tracker); GameRegistry.registerBlock(goldenDoor, "Golden Door"); GameRegistry.registerBlock(goldenDimensionalDoor, "Golden Dimensional Door"); @@ -298,6 +295,8 @@ public class mod_pocketDim try { PocketManager.unload(); + deathTracker.writeToFile(); + deathTracker = null; } catch (Exception e) { @@ -308,9 +307,9 @@ public class mod_pocketDim @EventHandler public void onServerStarting(FMLServerStartingEvent event) { - //TODO- load dims with forced chunks on server startup here + // Register commands with the server CommandResetDungeons.instance().register(event); CommandCreateDungeonRift.instance().register(event); CommandDeleteAllLinks.instance().register(event); @@ -321,7 +320,11 @@ public class mod_pocketDim //CommandPruneDimensions.instance().register(event); CommandCreatePocket.instance().register(event); CommandTeleportPlayer.instance().register(event); - + + // Initialize a new DeathTracker + String deathTrackerFile = DimensionManager.getCurrentSaveRootDirectory() + "/DimensionalDoors/data/deaths.txt"; + deathTracker = new DeathTracker(deathTrackerFile); + try { ChunkLoaderHelper.loadChunkForcedWorlds(event);