private static final String DATA_NAME = Realism.MODID + "_coordData";
static boolean IS_GLOBAL;
@SubscribeEvent
public void handleWorldLoad(WorldEvent.Load event) {
MapStorage storage = IS_GLOBAL ? event.getWorld().getMapStorage() : event.getWorld().getPerWorldStorage();
CoordSaveData data = (CoordSaveData) storage.getOrLoadData(CoordSaveData.class, DATA_NAME);
event.getWorld().getMapStorage().getOrLoadData(CoordSaveData.class, DATA_NAME);
if (data == null) {
data = new CoordSaveData(DATA_NAME);
event.getWorld().getMapStorage().setData(DATA_NAME, data);
}
event.getWorld().getMapStorage().setData(DATA_NAME, data);
}
public class CoordSaveData extends WorldSavedData
{
public List<BlockPos> list = new ArrayList<>();
private final EntityPlayer player = mc.player;
private final World world = mc.world;
private BlockPos playerpos = player.getPosition();
ChunkProviderClient cp = (ChunkProviderClient) world.getChunkProvider();
Chunk chunk = cp.getLoadedChunk(playerpos.getX() >> 4, playerpos.getZ() >> 4);
int x = chunk.x << 4;
int z = chunk.z << 4;
BlockPos pos = new BlockPos(x, 3, z);
public CoordSaveData(String name)
{
super(name);
}
@Override
public void readFromNBT(NBTTagCompound nbt)
{
list.clear();
final int size = nbt.getInteger("size");
for (int i = 0; i < size; i++)
{
final int posX = nbt.getInteger("posX_" + i);
final int posY = nbt.getInteger("posY_" + i);
final int posZ = nbt.getInteger("posZ_" + i);
list.add(new BlockPos(posX, posY, posZ));
}
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbt)
{
nbt.setInteger("size", list.size());
for (int i = 0; i < list.size(); i++)
{
nbt.setInteger("posX_" + i, pos.getX());
nbt.setInteger("posY_" + i, pos.getY());
nbt.setInteger("posZ_" + i, pos.getZ());
}
return nbt;
}
}
@SubscribeEvent
public void render(RenderWorldLastEvent e)
{
final Minecraft mc = Minecraft.getMinecraft();
final World world = mc.world;
final EntityPlayer player = mc.player;
if (world != null && player != null)
{
GlStateManager.enableBlend();
GlStateManager.color(1.0F, 1.0F, 1.0F, 0.5F);
GlStateManager.doPolygonOffset(-3.0F, -3.0F);
GlStateManager.enablePolygonOffset();
GlStateManager.alphaFunc(516, 0.1F);
GlStateManager.enableAlpha();
GlStateManager.pushMatrix();
playerpos = player.getPosition();
ChunkProviderClient cp = (ChunkProviderClient) world.getChunkProvider();
Chunk chunk = cp.getLoadedChunk(playerpos.getX() >> 4, playerpos.getZ() >> 4);
int x = chunk.x << 4;
int z = chunk.z << 4;
BlockPos pos = new BlockPos(x, 3, z);
drawPuddleTexture(player, mc.getRenderPartialTicks(), pos.getX() + RandomUtils.nextInt(0, 16) , pos.getY(), pos.getZ() + RandomUtils.nextInt(0, 16), world, "realism:textatlas/puddle");
// System.out.println("puddle on: " + pos);
GlStateManager.disableAlpha();
GlStateManager.doPolygonOffset(0F, 0.0F);
GlStateManager.disablePolygonOffset();
GlStateManager.enableAlpha();
GlStateManager.depthMask(true);
GlStateManager.popMatrix();
}
}