Fix World Capabilities NPE when there are no attached capabilities.
This commit is contained in:
parent
bfddcfb4fc
commit
0e286f880e
|
@ -26,7 +26,7 @@ public class WorldCapabilityData extends WorldSavedData
|
||||||
public void readFromNBT(NBTTagCompound nbt)
|
public void readFromNBT(NBTTagCompound nbt)
|
||||||
{
|
{
|
||||||
this.capNBT = nbt;
|
this.capNBT = nbt;
|
||||||
if(serializable != null)
|
if (serializable != null)
|
||||||
{
|
{
|
||||||
serializable.deserializeNBT(this.capNBT);
|
serializable.deserializeNBT(this.capNBT);
|
||||||
this.capNBT = null;
|
this.capNBT = null;
|
||||||
|
@ -36,7 +36,9 @@ public class WorldCapabilityData extends WorldSavedData
|
||||||
@Override
|
@Override
|
||||||
public NBTTagCompound writeToNBT(NBTTagCompound nbt)
|
public NBTTagCompound writeToNBT(NBTTagCompound nbt)
|
||||||
{
|
{
|
||||||
return nbt = serializable.serializeNBT();
|
if (serializable != null)
|
||||||
|
nbt = serializable.serializeNBT();
|
||||||
|
return nbt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -48,7 +50,7 @@ public class WorldCapabilityData extends WorldSavedData
|
||||||
public void setCapabilities(WorldProvider provider, INBTSerializable<NBTTagCompound> capabilities)
|
public void setCapabilities(WorldProvider provider, INBTSerializable<NBTTagCompound> capabilities)
|
||||||
{
|
{
|
||||||
this.serializable = capabilities;
|
this.serializable = capabilities;
|
||||||
if(this.capNBT != null)
|
if (this.capNBT != null)
|
||||||
{
|
{
|
||||||
serializable.deserializeNBT(this.capNBT);
|
serializable.deserializeNBT(this.capNBT);
|
||||||
this.capNBT = null;
|
this.capNBT = null;
|
||||||
|
|
|
@ -525,7 +525,8 @@ public class ForgeEventFactory
|
||||||
return gatherCapabilities(new AttachCapabilitiesEvent.Item(item, stack), parent);
|
return gatherCapabilities(new AttachCapabilitiesEvent.Item(item, stack), parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CapabilityDispatcher gatherCapabilities(World world, ICapabilityProvider parent) {
|
public static CapabilityDispatcher gatherCapabilities(World world, ICapabilityProvider parent)
|
||||||
|
{
|
||||||
return gatherCapabilities(new AttachCapabilitiesEvent.World(world), parent);
|
return gatherCapabilities(new AttachCapabilitiesEvent.World(world), parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,8 +74,11 @@ public class NoBedSleepingTest
|
||||||
public static class EventHandler
|
public static class EventHandler
|
||||||
{
|
{
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onEntityConstruct(AttachCapabilitiesEvent evt)
|
public void onEntityConstruct(AttachCapabilitiesEvent.Entity evt)
|
||||||
{
|
{
|
||||||
|
if (!(evt.getEntity() instanceof EntityPlayer))
|
||||||
|
return;
|
||||||
|
|
||||||
evt.addCapability(new ResourceLocation(MODID, "IExtraSleeping"), new ICapabilitySerializable<NBTPrimitive>()
|
evt.addCapability(new ResourceLocation(MODID, "IExtraSleeping"), new ICapabilitySerializable<NBTPrimitive>()
|
||||||
{
|
{
|
||||||
IExtraSleeping inst = SLEEP_CAP.getDefaultInstance();
|
IExtraSleeping inst = SLEEP_CAP.getDefaultInstance();
|
||||||
|
|
|
@ -1,16 +1,9 @@
|
||||||
package net.minecraftforge.test;
|
package net.minecraftforge.test;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
|
||||||
|
|
||||||
import net.minecraft.nbt.NBTBase;
|
import net.minecraft.nbt.NBTBase;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.nbt.NBTTagIntArray;
|
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.world.storage.WorldInfo;
|
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
import net.minecraftforge.common.capabilities.Capability.IStorage;
|
import net.minecraftforge.common.capabilities.Capability.IStorage;
|
||||||
|
@ -44,6 +37,7 @@ public class WorldCapabilityRainTimerTest {
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void attatchTimer(AttachCapabilitiesEvent.World event)
|
public void attatchTimer(AttachCapabilitiesEvent.World event)
|
||||||
{
|
{
|
||||||
|
if (!event.getWorld().isRemote && !event.getWorld().provider.getHasNoSky())
|
||||||
event.addCapability(new ResourceLocation(MODID, "rainTimer"), new RainTimerProvider());
|
event.addCapability(new ResourceLocation(MODID, "rainTimer"), new RainTimerProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,18 +49,22 @@ public class WorldCapabilityRainTimerTest {
|
||||||
|
|
||||||
IRainTimer timer = event.world.getCapability(TIMER_CAP, null);
|
IRainTimer timer = event.world.getCapability(TIMER_CAP, null);
|
||||||
|
|
||||||
if(event.phase == TickEvent.Phase.END)
|
if (timer == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.phase == TickEvent.Phase.END)
|
||||||
timer.onTick();
|
timer.onTick();
|
||||||
|
|
||||||
if(event.phase == TickEvent.Phase.START)
|
if (event.phase == TickEvent.Phase.START)
|
||||||
{
|
{
|
||||||
if(!event.world.provider.getHasNoSky() && event.world.isRaining())
|
if(event.world.isRaining())
|
||||||
{
|
{
|
||||||
if(timer.getDuration() == 0)
|
if (timer.getDuration() == 0)
|
||||||
timer.refreshTimer(1000, 0);
|
timer.refreshTimer(1000, 0);
|
||||||
else if(timer.isTimerReachedDuration())
|
else if (timer.isTimerReachedDuration())
|
||||||
event.world.provider.resetRainAndThunder();
|
event.world.provider.resetRainAndThunder();
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
timer.refreshTimer(0, 0);
|
timer.refreshTimer(0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue