Created
June 26, 2017 09:44
-
-
Save adudewithapc/ff409debcba3ee394f1c7ca76bd569bf to your computer and use it in GitHub Desktop.
A version of TileEntityLamp that crashes the game.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package thatmartinguy.brightenup.tileentity; | |
import cofh.api.energy.EnergyStorage; | |
import cofh.api.energy.IEnergyReceiver; | |
import net.minecraft.entity.player.EntityPlayerMP; | |
import net.minecraft.nbt.NBTTagCompound; | |
import net.minecraft.server.management.PlayerChunkMapEntry; | |
import net.minecraft.tileentity.TileEntity; | |
import net.minecraft.util.EnumFacing; | |
import net.minecraft.util.ITickable; | |
import net.minecraft.world.WorldServer; | |
import net.minecraftforge.fml.relauncher.ReflectionHelper; | |
import thatmartinguy.brightenup.BrightenUp; | |
import thatmartinguy.brightenup.block.BlockLamp; | |
import thatmartinguy.brightenup.energy.EnergyLevel; | |
import thatmartinguy.brightenup.network.LampEnergyMessage; | |
import java.lang.reflect.Field; | |
import java.util.List; | |
public class TileEntityLamp extends TileEntity implements ITickable, IEnergyReceiver | |
{ | |
private EnergyStorage storage; | |
private float lifetime; | |
private static final Field PLAYER_ENTRY_LIST = ReflectionHelper.findField(PlayerChunkMapEntry.class, "players", "field_187283_c"); | |
public TileEntityLamp() | |
{ | |
if(worldObj.getBlockState(pos).getBlock() instanceof BlockLamp) | |
{ | |
BlockLamp lamp = (BlockLamp) worldObj.getBlockState(pos); | |
storage = new EnergyStorage(lamp.capacity); | |
this.lifetime = lamp.maxLifetime; | |
} | |
PLAYER_ENTRY_LIST.setAccessible(true); | |
} | |
/**public TileEntityLamp(BlockLamp lamp, float maxLifetime) | |
{ | |
storage = new EnergyStorage(lamp.capacity); | |
this.lifetime = maxLifetime; | |
PLAYER_ENTRY_LIST.setAccessible(true); | |
}**/ | |
@Override | |
public void update() | |
{ | |
if(!worldObj.isRemote) | |
{ | |
if (worldObj.getBlockState(this.pos).getBlock() instanceof BlockLamp) | |
{ | |
BlockLamp lamp = (BlockLamp) worldObj.getBlockState(pos).getBlock(); | |
EnergyLevel energyLevel = EnergyLevel.getEnergyLevel(storage.getEnergyStored(), storage.getMaxEnergyStored()); | |
storage.modifyEnergyStored(-lamp.loss); | |
if (EnergyLevel.getEnergyLevel(storage.getEnergyStored(), storage.getMaxEnergyStored()) != energyLevel) | |
{ | |
switch (EnergyLevel.getEnergyLevel(storage.getEnergyStored(), storage.getMaxEnergyStored())) | |
{ | |
case EMPTY: | |
break; | |
case LOW: | |
lifetime -= 1 * lamp.lowEnergyMultiplier; | |
break; | |
case MEDIUM: | |
lifetime -= 1 * lamp.mediumEnergyMultiplier; | |
break; | |
case HIGH: | |
lifetime -= 1 * lamp.highEnergyMultiplier; | |
break; | |
} | |
try | |
{ | |
List<EntityPlayerMP> playerList = (List<EntityPlayerMP>) PLAYER_ENTRY_LIST.get(((WorldServer)worldObj).getPlayerChunkMap().getEntry(worldObj.getChunkFromBlockCoords(pos).xPosition, worldObj.getChunkFromBlockCoords(pos).zPosition)); | |
LampEnergyMessage message = new LampEnergyMessage(storage.getEnergyStored(), pos); | |
for(EntityPlayerMP player : playerList) | |
{ | |
BrightenUp.network.sendTo(message, player); | |
} | |
} | |
catch (IllegalAccessException e) | |
{ | |
e.printStackTrace(); | |
} | |
worldObj.checkLight(pos); | |
worldObj.notifyBlockUpdate(pos, worldObj.getBlockState(pos), worldObj.getBlockState(pos), 3); | |
this.markDirty(); | |
} | |
} | |
} | |
} | |
@Override | |
public NBTTagCompound writeToNBT(NBTTagCompound compound) | |
{ | |
super.writeToNBT(compound); | |
storage.writeToNBT(compound); | |
compound.setFloat("lifetime", lifetime); | |
return compound; | |
} | |
@Override | |
public void readFromNBT(NBTTagCompound compound) | |
{ | |
super.readFromNBT(compound); | |
storage.readFromNBT(compound); | |
lifetime = compound.getFloat("lifetime"); | |
} | |
@Override | |
public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate) | |
{ | |
return storage.receiveEnergy(maxReceive, simulate); | |
} | |
@Override | |
public int getEnergyStored(EnumFacing from) | |
{ | |
return storage.getEnergyStored(); | |
} | |
@Override | |
public int getMaxEnergyStored(EnumFacing from) | |
{ | |
return storage.getMaxEnergyStored(); | |
} | |
@Override | |
public boolean canConnectEnergy(EnumFacing from) | |
{ | |
return from == EnumFacing.DOWN || from == EnumFacing.UP; | |
} | |
public EnergyLevel getEnergyLevel() | |
{ | |
return EnergyLevel.getEnergyLevel(storage.getEnergyStored(), storage.getMaxEnergyStored()); | |
} | |
public void setEnergyStored(int energy) | |
{ | |
storage.setEnergyStored(energy); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment