package de.maxgb.minecraft.second_screen.world_observer;
import net.minecraft.block.Block;
import net.minecraft.block.BlockLever;
import net.minecraft.block.state.BlockState;
import net.minecraft.block.state.IBlockState;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.FMLCommonHandler;
import org.json.JSONArray;
import org.json.JSONObject;
import de.maxgb.minecraft.second_screen.util.Logger;
public class RedstoneObserver implements ObservedBlock.ObservingType {
public final static int ID = 1;
public static boolean canObserve(Block block) {
if (block != null && block instanceof BlockLever) {
return true;
} else if (block != null && block.isNormalCube()) {
return true;
}
return false;
}
/**
* Sets the state of a lever
*
* @param b
* Block
* @param state
* State
* @return Whether the block is a lever or not
*/
public static boolean setLeverState(ObservedBlock b, boolean state) {
if (b.type == ID) {
World w = FMLCommonHandler.instance().getMinecraftServerInstance().worldServerForDimension(b.dimensionId);
if (w.getBlockState(b.pos).getBlock() instanceof BlockLever) {
IBlockState st = w.getBlockState(b.pos);
if(!st.getValue(BlockLever.POWERED).equals(Boolean.valueOf(state))){
st=st.withProperty(BlockLever.POWERED, Boolean.valueOf(state));
w.setBlockState(b.pos, st, 3);
w.notifyNeighborsOfStateChange(b.pos, w.getBlockState(b.pos).getBlock());
EnumFacing enumfacing1 = ((BlockLever.EnumOrientation)st.getValue(BlockLever.FACING)).getFacing();
w.notifyNeighborsOfStateChange(b.pos.offset(enumfacing1.getOpposite()), w.getBlockState(b.pos).getBlock());
}
w.spawnParticle(EnumParticleTypes.REDSTONE, b.pos.getX(), b.pos.getY() + 1, b.pos.getZ(), 0.0D, 255.0D, 0.0D);
return true;
}
}
return false;
}
private JSONArray info;
@Override
public boolean addInfoForBlock(World world, ObservedBlock block) {
if (info == null) {
info = new JSONArray();
}
JSONArray in = new JSONArray();
in.put(block.label).put((world.isBlockIndirectlyGettingPowered(block.pos)>0))
.put(block.getBlock(world) instanceof BlockLever);
info.put(in);
return true;
}
@Override
public boolean canObserve(Block block, TileEntity tile) {
return RedstoneObserver.canObserve(block);
}
@Override
public void finishInfoCreation(JSONObject parent) {
if (info != null && info.length() > 0) {
parent.put("redstone", info);
info = null;
}
}
@Override
public int getId() {
return RedstoneObserver.ID;
}
@Override
public String getIdentifier() {
return "redstone";
}
@Override
public String getShortIndentifier() {
return "r";
}
}