Added CTM integration

This commit is contained in:
raoulvdberge
2017-07-30 14:55:53 +02:00
parent 8c953753e3
commit 68bc1f8278
25 changed files with 329 additions and 103 deletions

View File

@@ -8,6 +8,7 @@
- Fixed performance issue with Controllers turning off and on and Interfaces (raoulvdberge) - Fixed performance issue with Controllers turning off and on and Interfaces (raoulvdberge)
- Fixed Interfaces exposing network inventory don't hide storages that are disconnected (raoulvdberge) - Fixed Interfaces exposing network inventory don't hide storages that are disconnected (raoulvdberge)
- Added config option to modify the Solderer speed per Speed Upgrade, defaulting to 22.5% faster per upgrade, making it 90% faster on a fully upgraded Solderer (raoulvdberge) - Added config option to modify the Solderer speed per Speed Upgrade, defaulting to 22.5% faster per upgrade, making it 90% faster on a fully upgraded Solderer (raoulvdberge)
- Added CTM integration (raoulvdberge)
### 1.5.13 ### 1.5.13
- Fixed Wireless Fluid Grid not using up energy (raoulvdberge) - Fixed Wireless Fluid Grid not using up energy (raoulvdberge)

View File

@@ -5,7 +5,6 @@ import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.item.ItemBlockController; import com.raoulvdberge.refinedstorage.item.ItemBlockController;
import com.raoulvdberge.refinedstorage.tile.TileController; import com.raoulvdberge.refinedstorage.tile.TileController;
import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.creativetab.CreativeTabs;
@@ -22,10 +21,11 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World; import net.minecraft.world.World;
import javax.annotation.Nullable;
public class BlockController extends BlockBase { public class BlockController extends BlockBase {
public static final PropertyEnum TYPE = PropertyEnum.create("type", ControllerType.class); public static final PropertyEnum TYPE = PropertyEnum.create("type", ControllerType.class);
public static final PropertyEnum ENERGY_TYPE = PropertyEnum.create("energy_type", ControllerEnergyType.class);
private static final PropertyInteger ENERGY = PropertyInteger.create("energy", 0, 7);
public BlockController() { public BlockController() {
super("controller"); super("controller");
@@ -42,7 +42,7 @@ public class BlockController extends BlockBase {
protected BlockStateContainer createBlockState() { protected BlockStateContainer createBlockState() {
return createBlockStateBuilder() return createBlockStateBuilder()
.add(TYPE) .add(TYPE)
.add(ENERGY) .add(ENERGY_TYPE)
.build(); .build();
} }
@@ -59,7 +59,7 @@ public class BlockController extends BlockBase {
@Override @Override
public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) {
return super.getActualState(state, world, pos) return super.getActualState(state, world, pos)
.withProperty(ENERGY, ((TileController) world.getTileEntity(pos)).getEnergyScaledForDisplay()); .withProperty(ENERGY_TYPE, ((TileController) world.getTileEntity(pos)).getEnergyType());
} }
@Override @Override
@@ -111,4 +111,10 @@ public class BlockController extends BlockBase {
public Item createItem() { public Item createItem() {
return new ItemBlockController(); return new ItemBlockController();
} }
@Nullable
@Override
public Direction getDirection() {
return null;
}
} }

View File

@@ -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;
}
}

View File

@@ -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.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.block.statemap.StateMap; 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.color.ItemColors;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.client.resources.IResourceManager; 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.client.model.ModelLoaderRegistry;
import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.FMLCommonHandler; 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.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.EventPriority;
@@ -274,11 +276,16 @@ public class ProxyClient extends ProxyCommon {
}); });
// Controller // 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 -> { 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 // Portable Grid

View File

@@ -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.StorageCacheFluid;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem;
import com.raoulvdberge.refinedstorage.block.BlockController; import com.raoulvdberge.refinedstorage.block.BlockController;
import com.raoulvdberge.refinedstorage.block.ControllerEnergyType;
import com.raoulvdberge.refinedstorage.block.ControllerType; import com.raoulvdberge.refinedstorage.block.ControllerType;
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy; import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor; 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 = "Energy";
public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity"; 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_CHANNELS = "ReaderWriterChannels";
private static final String NBT_READER_WRITER_NAME = "Name"; 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 EnergyForge energy = new EnergyForge(RS.INSTANCE.config.controllerCapacity);
private int lastEnergyDisplay;
private boolean couldRun; private boolean couldRun;
private int ticksSinceUpdateChanged; private int ticksSinceUpdateChanged;
private boolean craftingMonitorUpdateRequested; private boolean craftingMonitorUpdateRequested;
private ControllerType type; private ControllerType type;
private ControllerEnergyType energyType;
private RedstoneMode redstoneMode = RedstoneMode.IGNORE; private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
@@ -235,10 +236,10 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
ticksSinceUpdateChanged = 0; ticksSinceUpdateChanged = 0;
} }
int energyDisplay = getEnergyScaledForDisplay(); ControllerEnergyType energyType = getEnergyType();
if (lastEnergyDisplay != energyDisplay) { if (this.energyType != energyType) {
lastEnergyDisplay = energyDisplay; this.energyType = energyType;
WorldUtils.updateBlock(world, pos); WorldUtils.updateBlock(world, pos);
} }
@@ -635,16 +636,16 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
public NBTTagCompound writeUpdate(NBTTagCompound tag) { public NBTTagCompound writeUpdate(NBTTagCompound tag) {
super.writeUpdate(tag); super.writeUpdate(tag);
tag.setInteger(NBT_ENERGY_CAPACITY, energy.getMaxEnergyStored()); tag.setInteger(NBT_ENERGY_TYPE, getEnergyType().getId());
tag.setInteger(NBT_ENERGY, energy.getEnergyStored());
return tag; return tag;
} }
@Override @Override
public void readUpdate(NBTTagCompound tag) { public void readUpdate(NBTTagCompound tag) {
energy.setMaxEnergyStored(tag.getInteger(NBT_ENERGY_CAPACITY)); if (tag.hasKey(NBT_ENERGY_TYPE)) {
energy.setEnergyStored(tag.getInteger(NBT_ENERGY)); this.energyType = ControllerEnergyType.getById(tag.getInteger(NBT_ENERGY_TYPE));
}
super.readUpdate(tag); super.readUpdate(tag);
} }
@@ -653,8 +654,26 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
return (int) ((float) stored / (float) capacity * (float) scale); return (int) ((float) stored / (float) capacity * (float) scale);
} }
public int getEnergyScaledForDisplay() { public static ControllerEnergyType getEnergyType(int stored, int capacity) {
return getEnergyScaled(energy.getEnergyStored(), energy.getMaxEnergyStored(), 7); 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 @Override

View File

@@ -1,12 +1,10 @@
{ {
"forge_marker": 1, "forge_marker": 1,
"defaults": { "defaults": {
"model": "orientable", "model": "cube_all",
"textures": { "textures": {
"particle": "refinedstorage:blocks/controller_0", "particle": "refinedstorage:blocks/controller_off",
"side": "refinedstorage:blocks/controller_0", "all": "refinedstorage:blocks/controller_off"
"top": "refinedstorage:blocks/controller_0",
"front": "refinedstorage:blocks/controller_0"
} }
}, },
"variants": { "variants": {
@@ -15,80 +13,23 @@
"transform": "forge:default-block" "transform": "forge:default-block"
} }
], ],
"energy": { "energy_type": {
"0": { "off": {
},
"nearly_off": {
"textures": { "textures": {
"front": "refinedstorage:blocks/controller_0" "all": "refinedstorage:blocks/controller_nearly_off"
} }
}, },
"1": { "nearly_on": {
"textures": { "textures": {
"side": "refinedstorage:blocks/controller_1", "all": "refinedstorage:blocks/controller_nearly_on"
"top": "refinedstorage:blocks/controller_1",
"front": "refinedstorage:blocks/controller_1"
} }
}, },
"2": { "on": {
"textures": { "textures": {
"side": "refinedstorage:blocks/controller_2", "all": "refinedstorage:blocks/controller_on"
"top": "refinedstorage:blocks/controller_2",
"front": "refinedstorage:blocks/controller_2"
} }
},
"3": {
"textures": {
"side": "refinedstorage:blocks/controller_on",
"top": "refinedstorage:blocks/controller_on",
"front": "refinedstorage:blocks/controller_on"
}
},
"4": {
"textures": {
"side": "refinedstorage:blocks/controller_on",
"top": "refinedstorage:blocks/controller_on",
"front": "refinedstorage:blocks/controller_on"
}
},
"5": {
"textures": {
"side": "refinedstorage:blocks/controller_on",
"top": "refinedstorage:blocks/controller_on",
"front": "refinedstorage:blocks/controller_on"
}
},
"6": {
"textures": {
"side": "refinedstorage:blocks/controller_on",
"top": "refinedstorage:blocks/controller_on",
"front": "refinedstorage:blocks/controller_on"
}
},
"7": {
"textures": {
"side": "refinedstorage:blocks/controller_on",
"top": "refinedstorage:blocks/controller_on",
"front": "refinedstorage:blocks/controller_on"
}
}
},
"direction": {
"north": {
"y": 0
},
"east": {
"y": 90
},
"south": {
"y": 180
},
"west": {
"y": 270
},
"up": {
"x": 270
},
"down": {
"x": 90
} }
} }
} }

View File

@@ -0,0 +1,40 @@
{
"forge_marker": 1,
"defaults": {
"model": "refinedstorage:cube_all_glow",
"textures": {
"particle": "refinedstorage:blocks/controller_off",
"all": "refinedstorage:blocks/controller_off",
"glow": "refinedstorage:blocks/none"
}
},
"variants": {
"inventory": [
{
"transform": "forge:default-block"
}
],
"energy_type": {
"off": {
},
"nearly_off": {
"textures": {
"all": "refinedstorage:blocks/controller_nearly_off",
"glow": "refinedstorage:blocks/controller_nearly_off_glow"
}
},
"nearly_on": {
"textures": {
"all": "refinedstorage:blocks/controller_nearly_on",
"glow": "refinedstorage:blocks/controller_nearly_on_glow"
}
},
"on": {
"textures": {
"all": "refinedstorage:blocks/controller_on",
"glow": "refinedstorage:blocks/controller_on_glow"
}
}
}
}
}

View File

@@ -0,0 +1,83 @@
{
"parent": "block/cube_all",
"ambientocclusion": false,
"elements": [
{
"from": [
0,
0,
0
],
"to": [
16,
16,
16
],
"faces": {
"down": {
"texture": "#all",
"cullface": "down"
},
"up": {
"texture": "#all",
"cullface": "up"
},
"north": {
"texture": "#all",
"cullface": "north"
},
"south": {
"texture": "#all",
"cullface": "south"
},
"west": {
"texture": "#all",
"cullface": "west"
},
"east": {
"texture": "#all",
"cullface": "east"
}
}
},
{
"from": [
0,
0,
0
],
"to": [
16,
16,
16
],
"shade": false,
"faces": {
"down": {
"texture": "#glow",
"cullface": "down"
},
"up": {
"texture": "#glow",
"cullface": "up"
},
"north": {
"texture": "#glow",
"cullface": "north"
},
"south": {
"texture": "#glow",
"cullface": "south"
},
"west": {
"texture": "#glow",
"cullface": "west"
},
"east": {
"texture": "#glow",
"cullface": "east"
}
}
}
]
}

View File

@@ -1,6 +1,6 @@
{ {
"animation": { "animation": {
"frametime": 2, "frametime": 2,
"frames": [ "frames": [
0, 0,
1, 1,

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -1,6 +1,6 @@
{ {
"animation": { "animation": {
"frametime": 1, "frametime": 1,
"frames": [ "frames": [
0, 0,
1, 1,

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,26 @@
{
"ctm": {
"ctm_version": 1,
"layer": "CUTOUT",
"extra": {
"light": 15
}
},
"animation": {
"frametime": 1,
"frames": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11
]
}
}

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -1,6 +1,6 @@
{ {
"animation": { "animation": {
"frametime": 2, "frametime": 2,
"frames": [ "frames": [
0, 0,
1, 1,

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,26 @@
{
"ctm": {
"ctm_version": 1,
"layer": "CUTOUT",
"extra": {
"light": 15
}
},
"animation": {
"frametime": 2,
"frames": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11
]
}
}

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,6 +1,6 @@
{ {
"animation": { "animation": {
"frametime": 2, "frametime": 2,
"frames": [ "frames": [
0, 0,
1, 1,

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,26 @@
{
"ctm": {
"ctm_version": 1,
"layer": "CUTOUT",
"extra": {
"light": 15
}
},
"animation": {
"frametime": 2,
"frames": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11
]
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -1,6 +1,6 @@
{ {
"animation": { "animation": {
"frametime": 1, "frametime": 1,
"frames": [ "frames": [
0, 0,
1, 1,
@@ -14,14 +14,14 @@
9, 9,
10, 10,
11, 11,
12, 12,
13, 13,
14, 14,
15, 15,
16, 16,
17, 17,
18, 18,
19 19
] ]
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

View File

@@ -0,0 +1,9 @@
{
"ctm": {
"ctm_version": 1,
"layer": "CUTOUT",
"extra": {
"light": 15
}
}
}