mirror of
https://github.com/GTNewHorizons/Botania.git
synced 2026-11-14 01:04:16 +00:00
NBT save/write for the force relay.
This commit is contained in:
1 parent
17fb824489
commit
4abcdf2c32
2 files changed
+59
No files matched your search
@@ -12,6 +12,7 @@
|
||||
package vazkii.botania.common.block;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -22,10 +23,17 @@ import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTBase;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagString;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldSavedData;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.ForgeSubscribe;
|
||||
import net.minecraftforge.event.world.WorldEvent;
|
||||
import vazkii.botania.api.IWandable;
|
||||
import vazkii.botania.common.lib.LibBlockIDs;
|
||||
import vazkii.botania.common.lib.LibBlockNames;
|
||||
@@ -39,7 +47,9 @@ public class BlockPistonRelay extends BlockMod implements IWandable {
|
||||
public BlockPistonRelay() {
|
||||
super(LibBlockIDs.idPistonRelay, Material.pumpkin);
|
||||
setUnlocalizedName(LibBlockNames.PISTON_RELAY);
|
||||
|
||||
TickRegistry.registerTickHandler(new InternalTickHandler(), Side.SERVER);
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -106,6 +116,52 @@ public class BlockPistonRelay extends BlockMod implements IWandable {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ForgeSubscribe
|
||||
public void onWorldLoad(WorldEvent.Load event) {
|
||||
WorldData.get(event.world);
|
||||
}
|
||||
|
||||
public static class WorldData extends WorldSavedData {
|
||||
|
||||
private static final String ID = "PistonRelayPairs";
|
||||
|
||||
public WorldData(String id) {
|
||||
super(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbttagcompound) {
|
||||
InternalTickHandler.mappedPositions.clear();
|
||||
|
||||
Collection<NBTBase> tags = nbttagcompound.getTags();
|
||||
for(NBTBase tag : tags) {
|
||||
if(tag instanceof NBTTagString) {
|
||||
String key = tag.getName();
|
||||
String value = ((NBTTagString) tag).data;
|
||||
|
||||
InternalTickHandler.mappedPositions.put(key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbttagcompound) {
|
||||
for(String s : InternalTickHandler.mappedPositions.keySet())
|
||||
nbttagcompound.setString(s, InternalTickHandler.mappedPositions.get(s));
|
||||
}
|
||||
|
||||
public static WorldData get(World world) {
|
||||
WorldData data = (WorldData) world.mapStorage.loadData(WorldData.class, ID);
|
||||
|
||||
if (data == null) {
|
||||
data = new WorldData(ID);
|
||||
data.markDirty();
|
||||
world.mapStorage.setData(ID, data);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
public static class InternalTickHandler implements ITickHandler {
|
||||
|
||||
public static Map<String, String> playerPositions = new HashMap();
|
||||
@@ -164,6 +220,7 @@ public class BlockPistonRelay extends BlockMod implements IWandable {
|
||||
pos = mappedPositions.get(s);
|
||||
mappedPositions.remove(s);
|
||||
mappedPositions.put(newPos, pos);
|
||||
WorldData.get(world).markDirty();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import vazkii.botania.api.IWandable;
|
||||
import vazkii.botania.client.core.helper.IconHelper;
|
||||
import vazkii.botania.common.Botania;
|
||||
import vazkii.botania.common.block.BlockPistonRelay;
|
||||
import vazkii.botania.common.block.BlockPistonRelay.WorldData;
|
||||
import vazkii.botania.common.core.helper.ItemNBTHelper;
|
||||
import vazkii.botania.common.lib.LibItemIDs;
|
||||
import vazkii.botania.common.lib.LibItemNames;
|
||||
@@ -56,6 +57,7 @@ public class ItemTwigWand extends Item16Colors {
|
||||
|
||||
BlockPistonRelay.InternalTickHandler.playerPositions.remove(par2EntityPlayer.username);
|
||||
BlockPistonRelay.InternalTickHandler.mappedPositions.put(bindPos, currentPos);
|
||||
BlockPistonRelay.WorldData.get(par3World).markDirty();
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
Reference in new issue
Block a user