Introduced Capabilities for World (#3069)

This commit is contained in:
Abastro authored and LexManos committed 2016-08-13 20:42:00 -07:00
1 parent b5db198f8b
commit bfddcfb4fc
9 files changed
+387 -87

No files matched your search

@@ -0,0 +1,57 @@
package net.minecraftforge.common.util;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.WorldProvider;
import net.minecraft.world.WorldSavedData;
public class WorldCapabilityData extends WorldSavedData
{
public static final String ID = "capabilities";
private INBTSerializable<NBTTagCompound> serializable;
private NBTTagCompound capNBT = null;
public WorldCapabilityData(String name)
{
super(name);
}
public WorldCapabilityData(INBTSerializable<NBTTagCompound> serializable)
{
super(ID);
this.serializable = serializable;
}
@Override
public void readFromNBT(NBTTagCompound nbt)
{
this.capNBT = nbt;
if(serializable != null)
{
serializable.deserializeNBT(this.capNBT);
this.capNBT = null;
}
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbt)
{
return nbt = serializable.serializeNBT();
}
@Override
public boolean isDirty()
{
return true;
}
public void setCapabilities(WorldProvider provider, INBTSerializable<NBTTagCompound> capabilities)
{
this.serializable = capabilities;
if(this.capNBT != null)
{
serializable.deserializeNBT(this.capNBT);
this.capNBT = null;
}
}
}
@@ -133,4 +133,21 @@ public class AttachCapabilitiesEvent extends Event
return this.stack;
}
}
/**
* A version of the parent event which is only fired for Worlds.
*/
public static class World extends AttachCapabilitiesEvent
{
private final net.minecraft.world.World world;
public World(net.minecraft.world.World world)
{
super(world);
this.world = world;
}
public net.minecraft.world.World getWorld()
{
return this.world;
}
}
}
@@ -525,6 +525,10 @@ public class ForgeEventFactory
return gatherCapabilities(new AttachCapabilitiesEvent.Item(item, stack), parent);
}
public static CapabilityDispatcher gatherCapabilities(World world, ICapabilityProvider parent) {
return gatherCapabilities(new AttachCapabilitiesEvent.World(world), parent);
}
private static CapabilityDispatcher gatherCapabilities(AttachCapabilitiesEvent event, ICapabilityProvider parent)
{
MinecraftForge.EVENT_BUS.post(event);