mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-22 23:28:35 +01:00
Moved server-side Player Data to WorldSaveData because ExtendedEntityProperties doesn't work properly
This commit is contained in:
parent
2f0b73930e
commit
4d082485e0
6 changed files with 63 additions and 70 deletions
|
@ -100,14 +100,9 @@ public class InitBlocks{
|
|||
public static Block blockLaserRelay;
|
||||
|
||||
//TODO: Plan for Laser Power Transmitters:
|
||||
//TODO: Connectable with Laser Wrench
|
||||
//TODO: Generate a Network that is (maybe) stored via WorldSavedData
|
||||
//TODO: Whenever a Transmitter is fed with energy, it tries to find a connector that is connected to a block that needs energy
|
||||
//TODO: The power then gets transferred through a Laser Entity that will find its way past all of the transmitters on its way to the block in need
|
||||
//TODO: Or maybe, instead, if I can't be bothered, the points will be connected through shiny lines that light up or flash when power is transmitted
|
||||
//TODO: Save the Connections via an Array of "ConnectionPairs" which stores two connected lasers to make calculating the laser entity easier
|
||||
//TODO: -> To find every laser one is connected to, just go through the array, find the laser itself and get the second part of the pair
|
||||
//TODO: Notify Client of Connections through NBT -> Every laser adds itself to the connection list on the client
|
||||
//TODO: When there is a block in the way, they don't render their laser and don't transmit
|
||||
//TODO: They stay connected and can be connected together even though they're blocked
|
||||
//TODO: If blocked, they display the block coords blocking them on right-click
|
||||
|
||||
public static void init(){
|
||||
ModUtil.LOGGER.info("Initializing Blocks...");
|
||||
|
|
|
@ -16,12 +16,14 @@ import ellpeck.actuallyadditions.achievement.InitAchievements;
|
|||
import ellpeck.actuallyadditions.achievement.TheAchievements;
|
||||
import ellpeck.actuallyadditions.config.values.ConfigBoolValues;
|
||||
import ellpeck.actuallyadditions.items.InitItems;
|
||||
import ellpeck.actuallyadditions.misc.WorldData;
|
||||
import ellpeck.actuallyadditions.util.IActAddItemOrBlock;
|
||||
import ellpeck.actuallyadditions.util.playerdata.PersistentServerData;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
public class CraftEvent{
|
||||
|
||||
|
@ -31,9 +33,10 @@ public class CraftEvent{
|
|||
|
||||
if(ConfigBoolValues.GIVE_BOOKLET_ON_FIRST_CRAFT.isEnabled()){
|
||||
if(!event.player.worldObj.isRemote && event.crafting.getItem() != InitItems.itemLexicon && (event.crafting.getItem() instanceof IActAddItemOrBlock || Block.getBlockFromItem(event.crafting.getItem()) instanceof IActAddItemOrBlock)){
|
||||
PersistentServerData data = PersistentServerData.get(event.player);
|
||||
if(data != null && !data.bookGottenAlready){
|
||||
data.bookGottenAlready = true;
|
||||
NBTTagCompound compound = PersistentServerData.getDataFromPlayer(event.player);
|
||||
if(compound != null && !compound.getBoolean("BookGottenAlready")){
|
||||
compound.setBoolean("BookGottenAlready", true);
|
||||
WorldData.makeDirty();
|
||||
|
||||
EntityItem entityItem = new EntityItem(event.player.worldObj, event.player.posX, event.player.posY, event.player.posZ, new ItemStack(InitItems.itemLexicon));
|
||||
entityItem.delayBeforeCanPickup = 0;
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
/*
|
||||
* This file ("EntityConstructingEvent.java") is part of the Actually Additions Mod for Minecraft.
|
||||
* It is created and owned by Ellpeck and distributed
|
||||
* under the Actually Additions License to be found at
|
||||
* http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md
|
||||
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
|
||||
*
|
||||
* © 2015 Ellpeck
|
||||
*/
|
||||
|
||||
package ellpeck.actuallyadditions.event;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
import ellpeck.actuallyadditions.util.playerdata.PersistentServerData;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraftforge.event.entity.EntityEvent;
|
||||
|
||||
public class EntityConstructingEvent{
|
||||
|
||||
@SubscribeEvent
|
||||
public void onEntityConstructing(EntityEvent.EntityConstructing event){
|
||||
if(event.entity instanceof EntityPlayer && !event.entity.worldObj.isRemote){
|
||||
if(PersistentServerData.get((EntityPlayer)event.entity) == null){
|
||||
event.entity.registerExtendedProperties(ModUtil.MOD_ID, new PersistentServerData());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -24,13 +24,13 @@ public class InitEvents{
|
|||
ModUtil.LOGGER.info("Initializing Events...");
|
||||
|
||||
Util.registerEvent(new SmeltEvent());
|
||||
|
||||
Util.registerEvent(new CraftEvent());
|
||||
Util.registerEvent(new LivingDropEvent());
|
||||
Util.registerEvent(new PickupEvent());
|
||||
Util.registerEvent(new EntityLivingEvent());
|
||||
Util.registerEvent(new BucketFillEvent());
|
||||
Util.registerEvent(new LogoutEvent());
|
||||
Util.registerEvent(new EntityConstructingEvent());
|
||||
Util.registerEvent(new WorldLoadEvent());
|
||||
MinecraftForge.TERRAIN_GEN_BUS.register(new WorldDecorationEvent());
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
package ellpeck.actuallyadditions.misc;
|
||||
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
import ellpeck.actuallyadditions.util.playerdata.PersistentServerData;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.world.World;
|
||||
|
@ -30,8 +31,8 @@ public class WorldData extends WorldSavedData{
|
|||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound compound){
|
||||
//Laser World Data
|
||||
int netAmount = compound.getInteger("LaserNetworkAmount");
|
||||
|
||||
LaserRelayConnectionHandler.getInstance().networks.clear();
|
||||
for(int i = 0; i < netAmount; i++){
|
||||
ArrayList<LaserRelayConnectionHandler.ConnectionPair> network = LaserRelayConnectionHandler.getInstance().readNetworkFromNBT(compound, "LaserNetwork"+i);
|
||||
|
@ -39,16 +40,34 @@ public class WorldData extends WorldSavedData{
|
|||
LaserRelayConnectionHandler.getInstance().networks.add(network);
|
||||
}
|
||||
}
|
||||
|
||||
//Player Data
|
||||
int dataSize = compound.getInteger("PersistentDataSize");
|
||||
PersistentServerData.playerSaveData.clear();
|
||||
for(int i = 0; i < dataSize; i++){
|
||||
PersistentServerData.PlayerSave aSave = PersistentServerData.PlayerSave.fromNBT(compound, "PlayerSaveData"+i);
|
||||
if(aSave != null){
|
||||
PersistentServerData.playerSaveData.add(aSave);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound compound){
|
||||
//Laser World Data
|
||||
int netAmount = LaserRelayConnectionHandler.getInstance().networks.size();
|
||||
compound.setInteger("LaserNetworkAmount", netAmount);
|
||||
|
||||
for(int i = 0; i < netAmount; i++){
|
||||
LaserRelayConnectionHandler.getInstance().writeNetworkToNBT(LaserRelayConnectionHandler.getInstance().networks.get(i), compound, "LaserNetwork"+i);
|
||||
}
|
||||
|
||||
//Player Data
|
||||
compound.setInteger("PersistentDataSize", PersistentServerData.playerSaveData.size());
|
||||
for(int i = 0; i < PersistentServerData.playerSaveData.size(); i++){
|
||||
PersistentServerData.PlayerSave theSave = PersistentServerData.playerSaveData.get(i);
|
||||
theSave.toNBT(compound, "PlayerSaveData"+i);
|
||||
}
|
||||
}
|
||||
|
||||
public static void makeDirty(){
|
||||
|
|
|
@ -10,47 +10,52 @@
|
|||
|
||||
package ellpeck.actuallyadditions.util.playerdata;
|
||||
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.NBTBase;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.IExtendedEntityProperties;
|
||||
|
||||
public class PersistentServerData implements IExtendedEntityProperties{
|
||||
import java.util.ArrayList;
|
||||
import java.util.UUID;
|
||||
|
||||
public boolean bookGottenAlready;
|
||||
public class PersistentServerData{
|
||||
|
||||
public static PersistentServerData get(EntityPlayer player){
|
||||
IExtendedEntityProperties properties = player.getExtendedProperties(ModUtil.MOD_ID);
|
||||
if(properties != null && properties instanceof PersistentServerData){
|
||||
return (PersistentServerData)properties;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public static ArrayList<PlayerSave> playerSaveData = new ArrayList<PlayerSave>();
|
||||
|
||||
@Override
|
||||
public void saveNBTData(NBTTagCompound aComp){
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
|
||||
compound.setBoolean("BookGotten", this.bookGottenAlready);
|
||||
|
||||
aComp.setTag(ModUtil.MOD_ID, compound);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadNBTData(NBTTagCompound aComp){
|
||||
NBTBase base = aComp.getTag(ModUtil.MOD_ID);
|
||||
if(base != null && base instanceof NBTTagCompound){
|
||||
NBTTagCompound compound = (NBTTagCompound)base;
|
||||
|
||||
this.bookGottenAlready = compound.getBoolean("BookGotten");
|
||||
public static NBTTagCompound getDataFromPlayer(EntityPlayer player){
|
||||
//Get Data from existing data
|
||||
for(PlayerSave save : playerSaveData){
|
||||
if(save.thePlayerUUID.equals(player.getUniqueID())){
|
||||
return save.theCompound;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Entity entity, World world){
|
||||
//Add Data if none is existant
|
||||
PlayerSave aSave = new PlayerSave(player.getUniqueID(), new NBTTagCompound());
|
||||
playerSaveData.add(aSave);
|
||||
return aSave.theCompound;
|
||||
}
|
||||
|
||||
public static class PlayerSave{
|
||||
|
||||
public UUID thePlayerUUID;
|
||||
public NBTTagCompound theCompound;
|
||||
|
||||
public PlayerSave(UUID theUUID, NBTTagCompound theCompound){
|
||||
this.thePlayerUUID = theUUID;
|
||||
this.theCompound = theCompound;
|
||||
}
|
||||
|
||||
public void toNBT(NBTTagCompound compound, String name){
|
||||
compound.setLong(name+"LeastSignificant", this.thePlayerUUID.getLeastSignificantBits());
|
||||
compound.setLong(name+"MostSignificant", this.thePlayerUUID.getMostSignificantBits());
|
||||
|
||||
compound.setTag(name+"Tag", this.theCompound);
|
||||
}
|
||||
|
||||
public static PlayerSave fromNBT(NBTTagCompound compound, String name){
|
||||
UUID theID = new UUID(compound.getLong(name+"MostSignificant"), compound.getLong(name+"LeastSignificant"));
|
||||
NBTTagCompound theCompound = compound.getCompoundTag(name+"Tag");
|
||||
return new PlayerSave(theID, theCompound);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue