Files
Mohammad-Ali Minaie b86dedad2f base mod created
2018-10-08 09:07:47 -04:00

122 lines
4.0 KiB
Java

package net.minecraft.tileentity;
import javax.annotation.Nullable;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
import net.minecraft.util.ITickable;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.WeightedSpawnerEntity;
import net.minecraft.util.datafix.DataFixer;
import net.minecraft.util.datafix.FixTypes;
import net.minecraft.util.datafix.IDataFixer;
import net.minecraft.util.datafix.IDataWalker;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class TileEntityMobSpawner extends TileEntity implements ITickable
{
private final MobSpawnerBaseLogic spawnerLogic = new MobSpawnerBaseLogic()
{
public void broadcastEvent(int id)
{
TileEntityMobSpawner.this.world.addBlockEvent(TileEntityMobSpawner.this.pos, Blocks.MOB_SPAWNER, id, 0);
}
public World getSpawnerWorld()
{
return TileEntityMobSpawner.this.world;
}
public BlockPos getSpawnerPosition()
{
return TileEntityMobSpawner.this.pos;
}
public void setNextSpawnData(WeightedSpawnerEntity p_184993_1_)
{
super.setNextSpawnData(p_184993_1_);
if (this.getSpawnerWorld() != null)
{
IBlockState iblockstate = this.getSpawnerWorld().getBlockState(this.getSpawnerPosition());
this.getSpawnerWorld().notifyBlockUpdate(TileEntityMobSpawner.this.pos, iblockstate, iblockstate, 4);
}
}
};
public static void registerFixesMobSpawner(DataFixer fixer)
{
fixer.registerWalker(FixTypes.BLOCK_ENTITY, new IDataWalker()
{
public NBTTagCompound process(IDataFixer fixer, NBTTagCompound compound, int versionIn)
{
if (TileEntity.getKey(TileEntityMobSpawner.class).equals(new ResourceLocation(compound.getString("id"))))
{
if (compound.hasKey("SpawnPotentials", 9))
{
NBTTagList nbttaglist = compound.getTagList("SpawnPotentials", 10);
for (int i = 0; i < nbttaglist.tagCount(); ++i)
{
NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i);
nbttagcompound.setTag("Entity", fixer.process(FixTypes.ENTITY, nbttagcompound.getCompoundTag("Entity"), versionIn));
}
}
compound.setTag("SpawnData", fixer.process(FixTypes.ENTITY, compound.getCompoundTag("SpawnData"), versionIn));
}
return compound;
}
});
}
public void readFromNBT(NBTTagCompound compound)
{
super.readFromNBT(compound);
this.spawnerLogic.readFromNBT(compound);
}
public NBTTagCompound writeToNBT(NBTTagCompound compound)
{
super.writeToNBT(compound);
this.spawnerLogic.writeToNBT(compound);
return compound;
}
/**
* Like the old updateEntity(), except more generic.
*/
public void update()
{
this.spawnerLogic.updateSpawner();
}
@Nullable
public SPacketUpdateTileEntity getUpdatePacket()
{
return new SPacketUpdateTileEntity(this.pos, 1, this.getUpdateTag());
}
public NBTTagCompound getUpdateTag()
{
NBTTagCompound nbttagcompound = this.writeToNBT(new NBTTagCompound());
nbttagcompound.removeTag("SpawnPotentials");
return nbttagcompound;
}
public boolean receiveClientEvent(int id, int type)
{
return this.spawnerLogic.setDelayToMin(id) ? true : super.receiveClientEvent(id, type);
}
public boolean onlyOpsCanSetNbt()
{
return true;
}
public MobSpawnerBaseLogic getSpawnerBaseLogic()
{
return this.spawnerLogic;
}
}