fix for radentitysaveddata, scheduled updates for radioactive blocks

This commit is contained in:
HbmMods 2018-11-20 20:09:49 +01:00
parent f55293ceb1
commit 782f445b88
5 changed files with 72 additions and 28 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

View File

@ -8,6 +8,7 @@ import com.hbm.items.ModItems;
import com.hbm.lib.Library;
import com.hbm.lib.ModDamageSource;
import com.hbm.potion.HbmPotion;
import com.hbm.saveddata.RadiationSavedData;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -278,11 +279,55 @@ public class BlockOre extends Block {
@Override
public void updateTick(World world, int x, int y, int z, Random rand)
{
if(this == ModBlocks.block_meteor_molten && rand.nextInt(3) == 0) {
if(this == ModBlocks.block_meteor_molten) {
if(!world.isRemote)
world.setBlock(x, y, z, ModBlocks.block_meteor_cobble);
world.playSoundEffect((double)((float)x + 0.5F), (double)((float)y + 0.5F), (double)((float)z + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F);
}
if(this == ModBlocks.waste_trinitite || this == ModBlocks.waste_trinitite_red) {
RadiationSavedData.incrementRad(world, x, z, 2, 20);
world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world));
}
if(this == ModBlocks.block_waste) {
RadiationSavedData.incrementRad(world, x, z, 5, 50);
world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world));
}
if(this == ModBlocks.block_trinitite) {
RadiationSavedData.incrementRad(world, x, z, 3, 35);
world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world));
}
}
@Override
public int tickRate(World world) {
if(this == ModBlocks.block_meteor_molten)
return 30;
if(this == ModBlocks.waste_trinitite
|| this == ModBlocks.waste_trinitite_red
|| this == ModBlocks.block_waste
|| this == ModBlocks.block_trinitite)
return 20;
return 100;
}
public void onBlockAdded(World world, int x, int y, int z)
{
super.onBlockAdded(world, x, y, z);
if(this == ModBlocks.waste_trinitite
|| this == ModBlocks.waste_trinitite_red
|| this == ModBlocks.block_waste
|| this == ModBlocks.block_trinitite)
world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world));
}
@Override

View File

@ -205,7 +205,7 @@ public class TestEventTester extends Block {
Chunk chunk = worldObj.getChunkFromBlockCoords(x1, z1);
data.setRadForCoord(chunk.xPosition, chunk.zPosition, 100);
data.setRadForCoord(chunk.xPosition, chunk.zPosition, 1000);
System.out.println(data.getRadNumFromCoord(chunk.xPosition, chunk.zPosition));
}

View File

@ -14,7 +14,7 @@ import net.minecraft.world.chunk.Chunk;
public class RadEntitySavedData extends WorldSavedData {
public HashMap<Integer, Float> contaminated = new HashMap();
public List<RadEntry> contaminated = new ArrayList();
private World worldObj;
@ -31,37 +31,25 @@ public class RadEntitySavedData extends WorldSavedData {
public float getRadFromEntity(Entity e) {
Iterator it = contaminated.entrySet().iterator();
while(it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
if(((Integer)pair.getKey()).intValue() == e.getEntityId()) {
return (Float)pair.getValue();
}
for(int i = 0; i < contaminated.size(); i++) {
if(contaminated.get(i).entID == e.getEntityId())
return contaminated.get(i).rad;
}
return 0F;
}
public void setRadForEntity(Entity e, float rad) {
Iterator it = contaminated.entrySet().iterator();
while(it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
if(((Integer)pair.getKey()).intValue() == e.getEntityId()) {
pair.setValue(rad);
this.markDirty();
for(int i = 0; i < contaminated.size(); i++) {
if(contaminated.get(i).entID == e.getEntityId()) {
contaminated.get(i).rad = rad;
this.markDirty();
return;
}
}
contaminated.put(e.getEntityId(), rad);
contaminated.add(new RadEntry(e.getEntityId(), rad));
this.markDirty();
}
@ -72,20 +60,20 @@ public class RadEntitySavedData extends WorldSavedData {
for(int i = 0; i < count; i++) {
contaminated.put(nbt.getInteger("entID_" + i), nbt.getFloat("cont_" + i));
contaminated.add(new RadEntry(nbt.getInteger("entID_" + i), nbt.getFloat("cont_" + i)));
}
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
nbt.setInteger("contCount", contaminated.entrySet().size());
nbt.setInteger("contCount", contaminated.size());
int i = 0;
for (Map.Entry<Integer, Float> entry : contaminated.entrySet()) {
for (RadEntry entry : contaminated) {
nbt.setInteger("entID_" + i, entry.getKey());
nbt.setFloat("cont_" + i, entry.getValue());
nbt.setInteger("entID_" + i, entry.entID);
nbt.setFloat("cont_" + i, entry.rad);
i++;
}
@ -102,5 +90,16 @@ public class RadEntitySavedData extends WorldSavedData {
return data;
}
public class RadEntry {
int entID;
float rad;
public RadEntry(int id, float rad) {
this.entID = id;
this.rad = rad;
}
}
}