mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-22 23:28:35 +01:00
Changed world data save system in hope that laser relays will disconnect less often
This commit is contained in:
parent
596d2d0175
commit
bec7252405
8 changed files with 28 additions and 55 deletions
|
@ -127,11 +127,6 @@ public class ActuallyAdditions{
|
||||||
FakePlayerUtil.info();
|
FakePlayerUtil.info();
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void serverStarting(FMLServerStartingEvent event){
|
|
||||||
WorldData.init(event.getServer());
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void missingMapping(FMLMissingMappingsEvent event){
|
public void missingMapping(FMLMissingMappingsEvent event){
|
||||||
for(FMLMissingMappingsEvent.MissingMapping mapping : event.getAll()){
|
for(FMLMissingMappingsEvent.MissingMapping mapping : event.getAll()){
|
||||||
|
|
|
@ -87,7 +87,7 @@ public class EntityLivingEvents{
|
||||||
data.setTag("Deaths", deaths);
|
data.setTag("Deaths", deaths);
|
||||||
|
|
||||||
//player.addChatComponentMessage(new TextComponentTranslation("info."+ModUtil.MOD_ID+".deathRecorded"));
|
//player.addChatComponentMessage(new TextComponentTranslation("info."+ModUtil.MOD_ID+".deathRecorded"));
|
||||||
WorldData.makeDirty();
|
WorldData.get(((EntityPlayer)event.getEntityLiving()).worldObj).markDirty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class PlayerObtainEvents{
|
||||||
NBTTagCompound compound = PlayerServerData.getDataFromPlayer(event.player);
|
NBTTagCompound compound = PlayerServerData.getDataFromPlayer(event.player);
|
||||||
if(compound != null && !compound.getBoolean("BookGottenAlready")){
|
if(compound != null && !compound.getBoolean("BookGottenAlready")){
|
||||||
compound.setBoolean("BookGottenAlready", true);
|
compound.setBoolean("BookGottenAlready", true);
|
||||||
WorldData.makeDirty();
|
WorldData.get(event.player.worldObj).markDirty();
|
||||||
|
|
||||||
EntityItem entityItem = new EntityItem(event.player.worldObj, event.player.posX, event.player.posY, event.player.posZ, new ItemStack(InitItems.itemBooklet));
|
EntityItem entityItem = new EntityItem(event.player.worldObj, event.player.posX, event.player.posY, event.player.posZ, new ItemStack(InitItems.itemBooklet));
|
||||||
entityItem.setPickupDelay(0);
|
entityItem.setPickupDelay(0);
|
||||||
|
|
|
@ -19,17 +19,17 @@ public class WorldLoadingEvents{
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onLoad(WorldEvent.Load event){
|
public void onLoad(WorldEvent.Load event){
|
||||||
WorldData.makeDirty();
|
if(!event.getWorld().isRemote){
|
||||||
|
WorldData.get(event.getWorld());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onUnload(WorldEvent.Unload event){
|
public void onUnload(WorldEvent.Unload event){
|
||||||
WorldData.makeDirty();
|
if(!event.getWorld().isRemote){
|
||||||
|
WorldData.get(event.getWorld()).markDirty();
|
||||||
FakePlayerUtil.unloadFakePlayer();
|
FakePlayerUtil.unloadFakePlayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public void onSave(WorldEvent.Save event){
|
|
||||||
WorldData.makeDirty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.items;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
|
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
|
||||||
import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler;
|
import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler;
|
||||||
|
import de.ellpeck.actuallyadditions.mod.misc.WorldData;
|
||||||
import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay;
|
import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.ModUtil;
|
import de.ellpeck.actuallyadditions.mod.util.ModUtil;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
|
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
|
||||||
|
@ -59,6 +60,8 @@ public class ItemLaserWrench extends ItemBase{
|
||||||
((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate();
|
((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate();
|
||||||
((TileEntityLaserRelay)world.getTileEntity(pos)).sendUpdate();
|
((TileEntityLaserRelay)world.getTileEntity(pos)).sendUpdate();
|
||||||
|
|
||||||
|
WorldData.get(world).markDirty();
|
||||||
|
|
||||||
player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".laser.connected.desc"));
|
player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".laser.connected.desc"));
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
|
@ -82,7 +82,6 @@ public class LaserRelayConnectionHandler{
|
||||||
}
|
}
|
||||||
//System.out.println("Removing a Relay from the Network!");
|
//System.out.println("Removing a Relay from the Network!");
|
||||||
}
|
}
|
||||||
WorldData.makeDirty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -135,7 +134,6 @@ public class LaserRelayConnectionHandler{
|
||||||
else{
|
else{
|
||||||
secondNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay));
|
secondNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay));
|
||||||
}
|
}
|
||||||
WorldData.makeDirty();
|
|
||||||
//System.out.println("Connected "+firstRelay.toString()+" to "+secondRelay.toString());
|
//System.out.println("Connected "+firstRelay.toString()+" to "+secondRelay.toString());
|
||||||
//System.out.println(firstNetwork == null ? secondNetwork.toString() : firstNetwork.toString());
|
//System.out.println(firstNetwork == null ? secondNetwork.toString() : firstNetwork.toString());
|
||||||
//System.out.println(this.networks);
|
//System.out.println(this.networks);
|
||||||
|
@ -151,7 +149,6 @@ public class LaserRelayConnectionHandler{
|
||||||
firstNetwork.connections.add(secondPair);
|
firstNetwork.connections.add(secondPair);
|
||||||
}
|
}
|
||||||
this.networks.remove(secondNetwork);
|
this.networks.remove(secondNetwork);
|
||||||
WorldData.makeDirty();
|
|
||||||
//System.out.println("Merged Two Networks!");
|
//System.out.println("Merged Two Networks!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,64 +14,38 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.playerdata.PlayerServerData;
|
import de.ellpeck.actuallyadditions.mod.util.playerdata.PlayerServerData;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagList;
|
||||||
import net.minecraft.server.MinecraftServer;
|
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.WorldSavedData;
|
import net.minecraft.world.WorldSavedData;
|
||||||
|
|
||||||
public class WorldData extends WorldSavedData{
|
public class WorldData extends WorldSavedData{
|
||||||
|
|
||||||
public static final String DATA_TAG = ModUtil.MOD_ID+"worlddata";
|
public static final String DATA_TAG = ModUtil.MOD_ID+"worlddata";
|
||||||
private static WorldData instance;
|
|
||||||
|
|
||||||
public WorldData(String tag){
|
public WorldData(String tag){
|
||||||
super(tag);
|
super(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void makeDirty(){
|
public static WorldData get(World world){
|
||||||
if(instance != null){
|
if(world.getMapStorage() != null){
|
||||||
instance.markDirty();
|
WorldData data = (WorldData)world.getMapStorage().getOrLoadData(WorldData.class, DATA_TAG);
|
||||||
}
|
if(data == null){
|
||||||
|
data = new WorldData(DATA_TAG);
|
||||||
|
data.markDirty();
|
||||||
|
world.getMapStorage().setData(DATA_TAG, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void init(MinecraftServer server){
|
return data;
|
||||||
if(server != null){
|
|
||||||
World world = server.getEntityWorld();
|
|
||||||
if(!world.isRemote){
|
|
||||||
clearOldData();
|
|
||||||
ModUtil.LOGGER.info("Loading WorldData!");
|
|
||||||
|
|
||||||
WorldData savedData = (WorldData)world.loadItemData(WorldData.class, DATA_TAG);
|
|
||||||
//Generate new SavedData
|
|
||||||
if(savedData == null){
|
|
||||||
ModUtil.LOGGER.info("No WorldData found, creating...");
|
|
||||||
|
|
||||||
savedData = new WorldData(DATA_TAG);
|
|
||||||
world.setItemData(DATA_TAG, savedData);
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
ModUtil.LOGGER.info("WorldData sucessfully received!");
|
return null;
|
||||||
}
|
|
||||||
|
|
||||||
//Set the current SavedData to the retreived one
|
|
||||||
WorldData.instance = savedData;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void clearOldData(){
|
|
||||||
if(!LaserRelayConnectionHandler.getInstance().networks.isEmpty()){
|
|
||||||
ModUtil.LOGGER.info("Clearing leftover Laser Relay Connection Data from other worlds!");
|
|
||||||
LaserRelayConnectionHandler.getInstance().networks.clear();
|
|
||||||
}
|
|
||||||
if(!PlayerServerData.playerSaveData.isEmpty()){
|
|
||||||
ModUtil.LOGGER.info("Clearing leftover Persistent Server Data from other worlds!");
|
|
||||||
PlayerServerData.playerSaveData.clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readFromNBT(NBTTagCompound compound){
|
public void readFromNBT(NBTTagCompound compound){
|
||||||
//Laser World Data
|
//Laser World Data
|
||||||
|
LaserRelayConnectionHandler.getInstance().networks.clear();
|
||||||
|
|
||||||
NBTTagList networkList = compound.getTagList("Networks", 10);
|
NBTTagList networkList = compound.getTagList("Networks", 10);
|
||||||
for(int i = 0; i < networkList.tagCount(); i++){
|
for(int i = 0; i < networkList.tagCount(); i++){
|
||||||
LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().readNetworkFromNBT(networkList.getCompoundTagAt(i));
|
LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().readNetworkFromNBT(networkList.getCompoundTagAt(i));
|
||||||
|
@ -79,6 +53,8 @@ public class WorldData extends WorldSavedData{
|
||||||
}
|
}
|
||||||
|
|
||||||
//Player Data
|
//Player Data
|
||||||
|
PlayerServerData.playerSaveData.clear();
|
||||||
|
|
||||||
NBTTagList playerList = compound.getTagList("PlayerData", 10);
|
NBTTagList playerList = compound.getTagList("PlayerData", 10);
|
||||||
for(int i = 0; i < playerList.tagCount(); i++){
|
for(int i = 0; i < playerList.tagCount(); i++){
|
||||||
PlayerServerData.PlayerSave aSave = PlayerServerData.PlayerSave.fromNBT(playerList.getCompoundTagAt(i));
|
PlayerServerData.PlayerSave aSave = PlayerServerData.PlayerSave.fromNBT(playerList.getCompoundTagAt(i));
|
||||||
|
|
|
@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.mod.config.ConfigValues;
|
import de.ellpeck.actuallyadditions.mod.config.ConfigValues;
|
||||||
import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler;
|
import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler;
|
||||||
|
import de.ellpeck.actuallyadditions.mod.misc.WorldData;
|
||||||
import de.ellpeck.actuallyadditions.mod.network.PacketParticle;
|
import de.ellpeck.actuallyadditions.mod.network.PacketParticle;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.PosUtil;
|
import de.ellpeck.actuallyadditions.mod.util.PosUtil;
|
||||||
import de.ellpeck.actuallyadditions.mod.util.Util;
|
import de.ellpeck.actuallyadditions.mod.util.Util;
|
||||||
|
@ -99,6 +100,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{
|
||||||
public void invalidate(){
|
public void invalidate(){
|
||||||
super.invalidate();
|
super.invalidate();
|
||||||
LaserRelayConnectionHandler.getInstance().removeRelayFromNetwork(this.pos);
|
LaserRelayConnectionHandler.getInstance().removeRelayFromNetwork(this.pos);
|
||||||
|
WorldData.get(this.worldObj).markDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue