Added CTM integration
This commit is contained in:
@@ -5,7 +5,6 @@ import com.raoulvdberge.refinedstorage.RSGui;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemBlockController;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileController;
|
||||
import net.minecraft.block.properties.PropertyEnum;
|
||||
import net.minecraft.block.properties.PropertyInteger;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
@@ -22,10 +21,11 @@ import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class BlockController extends BlockBase {
|
||||
public static final PropertyEnum TYPE = PropertyEnum.create("type", ControllerType.class);
|
||||
|
||||
private static final PropertyInteger ENERGY = PropertyInteger.create("energy", 0, 7);
|
||||
public static final PropertyEnum ENERGY_TYPE = PropertyEnum.create("energy_type", ControllerEnergyType.class);
|
||||
|
||||
public BlockController() {
|
||||
super("controller");
|
||||
@@ -42,7 +42,7 @@ public class BlockController extends BlockBase {
|
||||
protected BlockStateContainer createBlockState() {
|
||||
return createBlockStateBuilder()
|
||||
.add(TYPE)
|
||||
.add(ENERGY)
|
||||
.add(ENERGY_TYPE)
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public class BlockController extends BlockBase {
|
||||
@Override
|
||||
public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) {
|
||||
return super.getActualState(state, world, pos)
|
||||
.withProperty(ENERGY, ((TileController) world.getTileEntity(pos)).getEnergyScaledForDisplay());
|
||||
.withProperty(ENERGY_TYPE, ((TileController) world.getTileEntity(pos)).getEnergyType());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -111,4 +111,10 @@ public class BlockController extends BlockBase {
|
||||
public Item createItem() {
|
||||
return new ItemBlockController();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Direction getDirection() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.raoulvdberge.refinedstorage.block;
|
||||
|
||||
import net.minecraft.util.IStringSerializable;
|
||||
|
||||
public enum ControllerEnergyType implements IStringSerializable {
|
||||
OFF(0, "off"),
|
||||
NEARLY_OFF(1, "nearly_off"),
|
||||
NEARLY_ON(2, "nearly_on"),
|
||||
ON(3, "on");
|
||||
|
||||
private int id;
|
||||
private String name;
|
||||
|
||||
ControllerEnergyType(int id, String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public static ControllerEnergyType getById(int id) {
|
||||
for (ControllerEnergyType type : values()) {
|
||||
if (type.id == id) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
||||
return OFF;
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,7 @@ import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.block.model.ModelBakery;
|
||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||
import net.minecraft.client.renderer.block.statemap.StateMap;
|
||||
import net.minecraft.client.renderer.block.statemap.StateMapperBase;
|
||||
import net.minecraft.client.renderer.color.ItemColors;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.client.resources.IResourceManager;
|
||||
@@ -46,6 +47,7 @@ import net.minecraftforge.client.model.ModelLoader;
|
||||
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
||||
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
import net.minecraftforge.fml.common.Loader;
|
||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
||||
@@ -274,11 +276,16 @@ public class ProxyClient extends ProxyCommon {
|
||||
});
|
||||
|
||||
// Controller
|
||||
ModelLoader.setCustomStateMapper(RSBlocks.CONTROLLER, new StateMap.Builder().ignore(BlockController.TYPE).build());
|
||||
ModelLoader.setCustomStateMapper(RSBlocks.CONTROLLER, new StateMapperBase() {
|
||||
@Override
|
||||
protected ModelResourceLocation getModelResourceLocation(IBlockState state) {
|
||||
return new ModelResourceLocation("refinedstorage:controller" + (Loader.isModLoaded("ctm") ? "_glow" : ""), "energy_type=" + state.getValue(BlockController.ENERGY_TYPE));
|
||||
}
|
||||
});
|
||||
ModelLoader.setCustomMeshDefinition(Item.getItemFromBlock(RSBlocks.CONTROLLER), stack -> {
|
||||
int energy = stack.getItemDamage() == ControllerType.CREATIVE.getId() ? 7 : TileController.getEnergyScaled(ItemBlockController.getEnergyStored(stack), ItemBlockController.getEnergyCapacity(stack), 7);
|
||||
ControllerEnergyType energyType = stack.getItemDamage() == ControllerType.CREATIVE.getId() ? ControllerEnergyType.ON : TileController.getEnergyType(ItemBlockController.getEnergyStored(stack), ItemBlockController.getEnergyCapacity(stack));
|
||||
|
||||
return new ModelResourceLocation("refinedstorage:controller", "direction=north,energy=" + energy);
|
||||
return new ModelResourceLocation("refinedstorage:controller" + (Loader.isModLoaded("ctm") ? "_glow" : ""), "energy_type=" + energyType);
|
||||
});
|
||||
|
||||
// Portable Grid
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.security.SecurityManager;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem;
|
||||
import com.raoulvdberge.refinedstorage.block.BlockController;
|
||||
import com.raoulvdberge.refinedstorage.block.ControllerEnergyType;
|
||||
import com.raoulvdberge.refinedstorage.block.ControllerType;
|
||||
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor;
|
||||
@@ -114,6 +115,7 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
||||
|
||||
public static final String NBT_ENERGY = "Energy";
|
||||
public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity";
|
||||
public static final String NBT_ENERGY_TYPE = "EnergyType";
|
||||
|
||||
private static final String NBT_READER_WRITER_CHANNELS = "ReaderWriterChannels";
|
||||
private static final String NBT_READER_WRITER_NAME = "Name";
|
||||
@@ -136,14 +138,13 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
||||
|
||||
private EnergyForge energy = new EnergyForge(RS.INSTANCE.config.controllerCapacity);
|
||||
|
||||
private int lastEnergyDisplay;
|
||||
|
||||
private boolean couldRun;
|
||||
private int ticksSinceUpdateChanged;
|
||||
|
||||
private boolean craftingMonitorUpdateRequested;
|
||||
|
||||
private ControllerType type;
|
||||
private ControllerEnergyType energyType;
|
||||
|
||||
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
|
||||
|
||||
@@ -235,10 +236,10 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
||||
ticksSinceUpdateChanged = 0;
|
||||
}
|
||||
|
||||
int energyDisplay = getEnergyScaledForDisplay();
|
||||
ControllerEnergyType energyType = getEnergyType();
|
||||
|
||||
if (lastEnergyDisplay != energyDisplay) {
|
||||
lastEnergyDisplay = energyDisplay;
|
||||
if (this.energyType != energyType) {
|
||||
this.energyType = energyType;
|
||||
|
||||
WorldUtils.updateBlock(world, pos);
|
||||
}
|
||||
@@ -635,16 +636,16 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
||||
public NBTTagCompound writeUpdate(NBTTagCompound tag) {
|
||||
super.writeUpdate(tag);
|
||||
|
||||
tag.setInteger(NBT_ENERGY_CAPACITY, energy.getMaxEnergyStored());
|
||||
tag.setInteger(NBT_ENERGY, energy.getEnergyStored());
|
||||
tag.setInteger(NBT_ENERGY_TYPE, getEnergyType().getId());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readUpdate(NBTTagCompound tag) {
|
||||
energy.setMaxEnergyStored(tag.getInteger(NBT_ENERGY_CAPACITY));
|
||||
energy.setEnergyStored(tag.getInteger(NBT_ENERGY));
|
||||
if (tag.hasKey(NBT_ENERGY_TYPE)) {
|
||||
this.energyType = ControllerEnergyType.getById(tag.getInteger(NBT_ENERGY_TYPE));
|
||||
}
|
||||
|
||||
super.readUpdate(tag);
|
||||
}
|
||||
@@ -653,8 +654,26 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
||||
return (int) ((float) stored / (float) capacity * (float) scale);
|
||||
}
|
||||
|
||||
public int getEnergyScaledForDisplay() {
|
||||
return getEnergyScaled(energy.getEnergyStored(), energy.getMaxEnergyStored(), 7);
|
||||
public static ControllerEnergyType getEnergyType(int stored, int capacity) {
|
||||
int energy = getEnergyScaled(stored, capacity, 100);
|
||||
|
||||
if (energy <= 0) {
|
||||
return ControllerEnergyType.OFF;
|
||||
} else if (energy <= 10) {
|
||||
return ControllerEnergyType.NEARLY_OFF;
|
||||
} else if (energy <= 20) {
|
||||
return ControllerEnergyType.NEARLY_ON;
|
||||
}
|
||||
|
||||
return ControllerEnergyType.ON;
|
||||
}
|
||||
|
||||
public ControllerEnergyType getEnergyType() {
|
||||
if (world.isRemote) {
|
||||
return energyType;
|
||||
}
|
||||
|
||||
return getEnergyType(energy.getEnergyStored(), energy.getMaxEnergyStored());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user