From 8ce0f47f01ac5c7cdf83997cffa1a8d409c5a464 Mon Sep 17 00:00:00 2001 From: JozsefA Date: Mon, 8 Mar 2021 02:02:47 -0800 Subject: [PATCH] No more 7 circles of callbacks. - Instead of using consumers to edit instance data, just give the user a pointer to the data. - Easier to use, more predictable access. --- .../base/KineticTileInstance.java | 39 +++++----- .../base/SingleRotatingInstance.java | 4 +- .../components/actors/DrillInstance.java | 24 +++--- .../components/actors/HarvesterRenderer.java | 21 +++-- .../components/fan/FanInstance.java | 77 ++++++++----------- .../components/flywheel/FlyWheelInstance.java | 6 +- .../relays/belt/BeltInstance.java | 48 ++++++------ .../relays/encased/SplitShaftInstance.java | 19 ++--- .../relays/gearbox/GearboxInstance.java | 38 +++++---- .../belts/tunnel/BeltTunnelInstance.java | 31 ++++---- .../block/funnel/FunnelInstance.java | 30 +++++--- .../backend/instancing/InstanceKey.java | 4 - .../backend/instancing/InstancedModel.java | 23 ------ 13 files changed, 164 insertions(+), 200 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java index 861d51752..71cdb735d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java @@ -1,7 +1,5 @@ package com.simibubi.create.content.contraptions.base; -import java.util.function.Consumer; - import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock; import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock; @@ -19,28 +17,29 @@ public abstract class KineticTileInstance extends T } protected final void updateRotation(InstanceKey key, Direction.Axis axis) { - key.modifyInstance(data -> { - data.setColor(tile.network) - .setRotationalSpeed(tile.getSpeed()) - .setRotationOffset(getRotationOffset(axis)) - .setRotationAxis(axis); - }); + key.getInstance() + .setColor(tile.network) + .setRotationalSpeed(tile.getSpeed()) + .setRotationOffset(getRotationOffset(axis)) + .setRotationAxis(axis); } - protected final Consumer setupFunc(float speed, Direction.Axis axis) { - return data -> { - data.setBlockLight(world.getLightLevel(LightType.BLOCK, pos)) - .setSkyLight(world.getLightLevel(LightType.SKY, pos)) - .setTileEntity(tile) - .setRotationalSpeed(speed) - .setRotationOffset(getRotationOffset(axis)) - .setRotationAxis(axis); - }; + protected final InstanceKey setup(InstanceKey key, float speed, Direction.Axis axis) { + key.getInstance() + .setBlockLight(world.getLightLevel(LightType.BLOCK, pos)) + .setSkyLight(world.getLightLevel(LightType.SKY, pos)) + .setTileEntity(tile) + .setRotationalSpeed(speed) + .setRotationOffset(getRotationOffset(axis)) + .setRotationAxis(axis); + + return key; } - protected final void relight(KineticData data) { - data.setBlockLight(world.getLightLevel(LightType.BLOCK, pos)) - .setSkyLight(world.getLightLevel(LightType.SKY, pos)); + protected final void relight(InstanceKey> key) { + key.getInstance() + .setBlockLight(world.getLightLevel(LightType.BLOCK, pos)) + .setSkyLight(world.getLightLevel(LightType.SKY, pos)); } protected float getRotationOffset(final Direction.Axis axis) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/SingleRotatingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/SingleRotatingInstance.java index baa9d10f2..10f342f0a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/SingleRotatingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/SingleRotatingInstance.java @@ -28,7 +28,7 @@ public class SingleRotatingInstance extends KineticTileInstance model = renderMaterial.getModel(AllBlockPartials.DRILL_HEAD, state); - model.createInstance(data -> { - Direction facing = state.get(DrillBlock.FACING); - float eulerX = AngleHelper.verticalAngle(facing) + ((facing.getAxis() == Direction.Axis.Y) ? 180 : 0); - float eulerY = facing.getHorizontalAngle(); - data.setPosition(context.localPos) - .setBlockLight(contraption.renderWorld.getLightLevel(LightType.BLOCK, context.localPos)) - .setRotationOffset(0) - .setRotationAxis(0, 0, 1) - .setLocalRotation(eulerX, eulerY, 0); - }); + Direction facing = state.get(DrillBlock.FACING); + float eulerX = AngleHelper.verticalAngle(facing) + ((facing.getAxis() == Direction.Axis.Y) ? 180 : 0); + float eulerY = facing.getHorizontalAngle(); + model.getInstance(model.createInstance()) + .setPosition(context.localPos) + .setBlockLight(contraption.renderWorld.getLightLevel(LightType.BLOCK, context.localPos)) + .setRotationOffset(0) + .setRotationAxis(0, 0, 1) + .setLocalRotation(eulerX, eulerY, 0); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterRenderer.java index 017fea6b9..d3455237d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterRenderer.java @@ -46,17 +46,16 @@ public class HarvesterRenderer extends SafeTileEntityRenderer model = renderMaterial.getModel(AllBlockPartials.HARVESTER_BLADE, state); - model.createInstance(data -> { - Direction facing = state.get(HORIZONTAL_FACING); - float originOffset = 1 / 16f; - Vector3f rotOffset = new Vector3f(0.5f, -2 * originOffset + 0.5f, originOffset + 0.5f); - data.setPosition(context.localPos) - .setBlockLight(contraption.renderWorld.getLightLevel(LightType.BLOCK, context.localPos)) - .setRotationOffset(0) - .setRotationCenter(rotOffset) - .setRotationAxis(-1, 0, 0) - .setLocalRotation(0, facing.getHorizontalAngle(), 0); - }); + Direction facing = state.get(HORIZONTAL_FACING); + float originOffset = 1 / 16f; + Vector3f rotOffset = new Vector3f(0.5f, -2 * originOffset + 0.5f, originOffset + 0.5f); + model.getInstance(model.createInstance()) + .setPosition(context.localPos) + .setBlockLight(contraption.renderWorld.getLightLevel(LightType.BLOCK, context.localPos)) + .setRotationOffset(0) + .setRotationCenter(rotOffset) + .setRotationAxis(-1, 0, 0) + .setLocalRotation(0, facing.getHorizontalAngle(), 0); } public static void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal, diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/FanInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/FanInstance.java index 804dd22e6..5e2aa0f7c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/FanInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/FanInstance.java @@ -28,7 +28,7 @@ public class FanInstance extends KineticTileInstance { protected InstanceKey shaft; protected InstanceKey fan; - public FanInstance(InstancedTileRenderer modelManager, EncasedFanTileEntity tile) { + public FanInstance(InstancedTileRenderer modelManager, EncasedFanTileEntity tile) { super(modelManager, tile); } @@ -42,30 +42,22 @@ public class FanInstance extends KineticTileInstance { InstancedModel fanInner = AllBlockPartials.ENCASED_FAN_INNER.renderOnDirectionalSouthRotating(modelManager, lastState, direction.getOpposite()); - shaft = shaftHalf.createInstance(data -> { - BlockPos behind = pos.offset(direction.getOpposite()); - int blockLight = world.getLightLevel(LightType.BLOCK, behind); - int skyLight = world.getLightLevel(LightType.SKY, behind); + shaft = shaftHalf.createInstance(); + shaft.getInstance() + .setRotationalSpeed(tile.getSpeed()) + .setRotationOffset(getRotationOffset(axis)) + .setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()) + .setTileEntity(tile); - data.setRotationalSpeed(tile.getSpeed()) - .setRotationOffset(getRotationOffset(axis)) - .setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()) - .setTileEntity(tile) - .setBlockLight(blockLight) - .setSkyLight(skyLight); - }); - fan = fanInner.createInstance(data -> { - BlockPos inFront = pos.offset(direction); - int blockLight = world.getLightLevel(LightType.BLOCK, inFront); - int skyLight = world.getLightLevel(LightType.SKY, inFront); - data.setRotationalSpeed(getFanSpeed()) - .setRotationOffset(getRotationOffset(axis)) - .setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()) - .setTileEntity(tile) - .setBlockLight(blockLight) - .setSkyLight(skyLight); - }); + fan = fanInner.createInstance(); + fan.getInstance() + .setRotationalSpeed(getFanSpeed()) + .setRotationOffset(getRotationOffset(axis)) + .setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()) + .setTileEntity(tile); + + updateLight(); } private float getFanSpeed() { @@ -82,32 +74,31 @@ public class FanInstance extends KineticTileInstance { Direction.Axis axis = lastState.get(FACING).getAxis(); updateRotation(shaft, axis); - fan.modifyInstance(data -> { - data.setColor(tile.network) - .setRotationalSpeed(getFanSpeed()) - .setRotationOffset(getRotationOffset(axis)) - .setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()); - }); + fan.getInstance() + .setColor(tile.network) + .setRotationalSpeed(getFanSpeed()) + .setRotationOffset(getRotationOffset(axis)) + .setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()); } @Override public void updateLight() { final Direction direction = lastState.get(FACING); - shaft.modifyInstance(data -> { - BlockPos behind = pos.offset(direction.getOpposite()); - int blockLight = world.getLightLevel(LightType.BLOCK, behind); - int skyLight = world.getLightLevel(LightType.SKY, behind); - data.setBlockLight(blockLight) - .setSkyLight(skyLight); - }); - fan.modifyInstance(data -> { - BlockPos inFront = pos.offset(direction); - int blockLight = world.getLightLevel(LightType.BLOCK, inFront); - int skyLight = world.getLightLevel(LightType.SKY, inFront); - data.setBlockLight(blockLight) - .setSkyLight(skyLight); - }); + BlockPos behind = pos.offset(direction.getOpposite()); + putLight(shaft, behind); + + BlockPos inFront = pos.offset(direction); + putLight(fan, inFront); + } + + private void putLight(InstanceKey key, BlockPos pos) { + int blockLight = world.getLightLevel(LightType.BLOCK, pos); + int skyLight = world.getLightLevel(LightType.SKY, pos); + + key.getInstance() + .setBlockLight(blockLight) + .setSkyLight(skyLight); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlyWheelInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlyWheelInstance.java index 2dcde88a6..e81756d8f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlyWheelInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlyWheelInstance.java @@ -39,8 +39,7 @@ public class FlyWheelInstance extends KineticTileInstance { facing = lastState.get(BlockStateProperties.HORIZONTAL_FACING); Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState); - Consumer setup = setupFunc(tile.getSpeed(), axis); - shaft = shaftModel().createInstance(setup); + shaft = setup(shaftModel().createInstance(), tile.getSpeed(), axis); // wheel = wheelModel().setupInstance(setup); } @@ -53,14 +52,13 @@ public class FlyWheelInstance extends KineticTileInstance { @Override public void updateLight() { - shaft.modifyInstance(this::relight); + relight(shaft); // wheel.modifyInstance(this::relight); } @Override public void remove() { shaft.delete(); - shaft = null; // wheel.delete(); // wheel = null; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltInstance.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltInstance.java index 3e28761c9..50b15124a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltInstance.java @@ -72,9 +72,8 @@ public class BeltInstance extends KineticTileInstance { SpriteShiftEntry spriteShift = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom); InstancedModel beltModel = beltPartial.renderOnBelt(modelManager, lastState); - Consumer setupFunc = setupFunc(bottom, spriteShift); - keys.add(beltModel.createInstance(setupFunc)); + keys.add(setup(beltModel.createInstance(), bottom, spriteShift)); if (diagonal) break; } @@ -82,7 +81,7 @@ public class BeltInstance extends KineticTileInstance { if (tile.hasPulley()) { InstancedModel pulleyModel = getPulleyModel(); - pulleyKey = pulleyModel.createInstance(setupFunc(tile.getSpeed(), getRotationAxis())); + pulleyKey = setup(pulleyModel.createInstance(), tile.getSpeed(), getRotationAxis()); } } @@ -94,9 +93,10 @@ public class BeltInstance extends KineticTileInstance { for (InstanceKey key : keys) { SpriteShiftEntry spriteShiftEntry = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom); - key.modifyInstance(data -> data.setScrollTexture(spriteShiftEntry) - .setColor(tile.network) - .setRotationalSpeed(getScrollSpeed())); + key.getInstance() + .setScrollTexture(spriteShiftEntry) + .setColor(tile.network) + .setRotationalSpeed(getScrollSpeed()); bottom = false; } @@ -107,11 +107,9 @@ public class BeltInstance extends KineticTileInstance { @Override public void updateLight() { - for (InstanceKey key : keys) { - key.modifyInstance(this::relight); - } + keys.forEach(this::relight); - if (pulleyKey != null) pulleyKey.modifyInstance(this::relight); + if (pulleyKey != null) relight(pulleyKey); } @Override @@ -165,22 +163,22 @@ public class BeltInstance extends KineticTileInstance { return dir; } - private Consumer setupFunc(boolean bottom, SpriteShiftEntry spriteShift) { - return data -> { - float rotX = (!diagonal && beltSlope != BeltSlope.HORIZONTAL ? 90 : 0) + (beltSlope == BeltSlope.DOWNWARD ? 180 : 0); - float rotY = facing.getHorizontalAngle() + (upward ? 180 : 0) + (sideways ? 90 : 0); - float rotZ = sideways ? 90 : ((vertical && facing.getAxisDirection() == Direction.AxisDirection.NEGATIVE) ? 180 : 0); + private InstanceKey setup(InstanceKey key, boolean bottom, SpriteShiftEntry spriteShift) { + float rotX = (!diagonal && beltSlope != BeltSlope.HORIZONTAL ? 90 : 0) + (beltSlope == BeltSlope.DOWNWARD ? 180 : 0); + float rotY = facing.getHorizontalAngle() + (upward ? 180 : 0) + (sideways ? 90 : 0); + float rotZ = sideways ? 90 : ((vertical && facing.getAxisDirection() == Direction.AxisDirection.NEGATIVE) ? 180 : 0); - BlockPos pos = tile.getPos(); - data.setTileEntity(tile) - .setBlockLight(world.getLightLevel(LightType.BLOCK, pos)) - .setSkyLight(world.getLightLevel(LightType.SKY, pos)) - .setRotation(rotX, rotY, rotZ) - .setRotationalSpeed(getScrollSpeed()) - .setRotationOffset(bottom ? 0.5f : 0f) - .setScrollTexture(spriteShift) - .setScrollMult(diagonal ? 3f / 8f : 0.5f); - }; + key.getInstance() + .setTileEntity(tile) + .setBlockLight(world.getLightLevel(LightType.BLOCK, pos)) + .setSkyLight(world.getLightLevel(LightType.SKY, pos)) + .setRotation(rotX, rotY, rotZ) + .setRotationalSpeed(getScrollSpeed()) + .setRotationOffset(bottom ? 0.5f : 0f) + .setScrollTexture(spriteShift) + .setScrollMult(diagonal ? 3f / 8f : 0.5f); + + return key; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftInstance.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftInstance.java index f21f5d4ff..c61315fd1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/SplitShaftInstance.java @@ -45,7 +45,7 @@ public class SplitShaftInstance extends KineticTileInstance key : keys) { - key.modifyInstance(this::relight); - } + keys.forEach(this::relight); } @Override @@ -75,13 +73,12 @@ public class SplitShaftInstance extends KineticTileInstance key, Direction dir) { - key.modifyInstance(data -> { - Direction.Axis axis = dir.getAxis(); + Direction.Axis axis = dir.getAxis(); - data.setColor(tile.network) - .setRotationalSpeed(tile.getSpeed() * tile.getRotationSpeedModifier(dir)) - .setRotationOffset(getRotationOffset(axis)) - .setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()); - }); + key.getInstance() + .setColor(tile.network) + .setRotationalSpeed(tile.getSpeed() * tile.getRotationSpeedModifier(dir)) + .setRotationOffset(getRotationOffset(axis)) + .setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxInstance.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxInstance.java index 3ee63c088..9ef1a4326 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxInstance.java @@ -50,14 +50,16 @@ public class GearboxInstance extends KineticTileInstance { InstancedModel shaft = AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState, direction); - InstanceKey key = shaft.createInstance(data -> { - data.setBlockLight(blockLight) - .setSkyLight(skyLight) - .setRotationalSpeed(getSpeed(direction)) - .setRotationOffset(getRotationOffset(axis)) - .setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()) - .setTileEntity(tile); - }); + InstanceKey key = shaft.createInstance(); + + key.getInstance() + .setBlockLight(blockLight) + .setSkyLight(skyLight) + .setRotationalSpeed(getSpeed(direction)) + .setRotationOffset(getRotationOffset(axis)) + .setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()) + .setTileEntity(tile); + keys.put(direction, key); } } @@ -87,15 +89,15 @@ public class GearboxInstance extends KineticTileInstance { public void onUpdate() { updateSourceFacing(); for (Map.Entry> key : keys.entrySet()) { - key.getValue().modifyInstance(data -> { - Direction direction = key.getKey(); - Direction.Axis axis = direction.getAxis(); + Direction direction = key.getKey(); + Direction.Axis axis = direction.getAxis(); - data.setColor(tile.network) - .setRotationalSpeed(getSpeed(direction)) - .setRotationOffset(getRotationOffset(axis)) - .setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()); - }); + key.getValue() + .getInstance() + .setColor(tile.network) + .setRotationalSpeed(getSpeed(direction)) + .setRotationOffset(getRotationOffset(axis)) + .setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()); } } @@ -105,7 +107,9 @@ public class GearboxInstance extends KineticTileInstance { int skyLight = tile.getWorld().getLightLevel(LightType.SKY, pos); for (InstanceKey key : keys.values()) { - key.modifyInstance(data -> data.setBlockLight(blockLight).setSkyLight(skyLight)); + key.getInstance() + .setBlockLight(blockLight) + .setSkyLight(skyLight); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelInstance.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelInstance.java index d2f6fa318..b22a8437c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelInstance.java @@ -53,17 +53,20 @@ public class BeltTunnelInstance extends TileEntityInstance float intensity = segment == 3 ? 1.5f : segment + 1; float segmentOffset = -3 / 16f * segment; - flaps.add(model.createInstance(flapData -> { - flapData.setPosition(pos) - .setSegmentOffset(segmentOffset, 0, 0) - .setBlockLight(blockLight) - .setSkyLight(skyLight) - .setHorizontalAngle(horizontalAngle) - .setFlapness(flapness) - .setFlapScale(flapScale) - .setPivotVoxelSpace(0, 10, 1) - .setIntensity(intensity); - })); + InstanceKey key = model.createInstance(); + + key.getInstance() + .setPosition(pos) + .setSegmentOffset(segmentOffset, 0, 0) + .setBlockLight(blockLight) + .setSkyLight(skyLight) + .setHorizontalAngle(horizontalAngle) + .setFlapness(flapness) + .setFlapScale(flapScale) + .setPivotVoxelSpace(0, 10, 1) + .setIntensity(intensity); + + flaps.add(key); } tunnelFlaps.put(direction, flaps); @@ -80,7 +83,7 @@ public class BeltTunnelInstance extends TileEntityInstance float flapness = flapValue.get(AnimationTickHolder.getPartialTicks()); for (InstanceKey key : keys) { - key.modifyInstance(data -> data.setFlapness(flapness)); + key.getInstance().setFlapness(flapness); } }); } @@ -95,8 +98,8 @@ public class BeltTunnelInstance extends TileEntityInstance for (ArrayList> instanceKeys : tunnelFlaps.values()) { for (InstanceKey it : instanceKeys) { - it.modifyInstance(data -> data.setBlockLight(blockLight) - .setSkyLight(skyLight)); + it.getInstance().setBlockLight(blockLight) + .setSkyLight(skyLight); } } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java index cf5b54e6a..ca6283483 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java @@ -48,15 +48,20 @@ public class FunnelInstance extends TileEntityInstance impleme float intensity = segment == 3 ? 1.5f : segment + 1; float segmentOffset = -3 / 16f * segment; - flaps.add(model.createInstance(flapData -> flapData.setPosition(pos) - .setSegmentOffset(segmentOffset, 0, -tile.getFlapOffset()) - .setBlockLight(blockLight) - .setSkyLight(skyLight) - .setHorizontalAngle(horizontalAngle) - .setFlapness(flapness) - .setFlapScale(-1) - .setPivotVoxelSpace(0, 10, 9.5f) - .setIntensity(intensity))); + InstanceKey key = model.createInstance(); + + key.getInstance() + .setPosition(pos) + .setSegmentOffset(segmentOffset, 0, -tile.getFlapOffset()) + .setBlockLight(blockLight) + .setSkyLight(skyLight) + .setHorizontalAngle(horizontalAngle) + .setFlapness(flapness) + .setFlapScale(-1) + .setPivotVoxelSpace(0, 10, 9.5f) + .setIntensity(intensity); + + flaps.add(key); } } @@ -67,7 +72,7 @@ public class FunnelInstance extends TileEntityInstance impleme float flapness = tile.flap.get(AnimationTickHolder.getPartialTicks()); for (InstanceKey key : flaps) { - key.modifyInstance(data -> data.setFlapness(flapness)); + key.getInstance().setFlapness(flapness); } } @@ -79,8 +84,9 @@ public class FunnelInstance extends TileEntityInstance impleme int skyLight = world.getLightLevel(LightType.SKY, pos); for (InstanceKey it : flaps) { - it.modifyInstance(data -> data.setBlockLight(blockLight) - .setSkyLight(skyLight)); + it.getInstance() + .setBlockLight(blockLight) + .setSkyLight(skyLight); } } diff --git a/src/main/java/com/simibubi/create/foundation/render/backend/instancing/InstanceKey.java b/src/main/java/com/simibubi/create/foundation/render/backend/instancing/InstanceKey.java index e25440f75..6a3ec6d1e 100644 --- a/src/main/java/com/simibubi/create/foundation/render/backend/instancing/InstanceKey.java +++ b/src/main/java/com/simibubi/create/foundation/render/backend/instancing/InstanceKey.java @@ -21,10 +21,6 @@ public class InstanceKey { return index != INVALID; } - public void modifyInstance(Consumer edit) { - model.modifyInstance(this, edit); - } - public D getInstance() { return model.getInstance(this); } diff --git a/src/main/java/com/simibubi/create/foundation/render/backend/instancing/InstancedModel.java b/src/main/java/com/simibubi/create/foundation/render/backend/instancing/InstancedModel.java index ab1b292a7..857541f6b 100644 --- a/src/main/java/com/simibubi/create/foundation/render/backend/instancing/InstancedModel.java +++ b/src/main/java/com/simibubi/create/foundation/render/backend/instancing/InstancedModel.java @@ -85,16 +85,6 @@ public abstract class InstancedModel extends BufferedMod return this.data.get(key.index); } - public synchronized void modifyInstance(InstanceKey key, Consumer edit) { - verifyKey(key); - - D data = this.data.get(key.index); - - edit.accept(data); - - markIndexChanged(key.index); - } - public synchronized InstanceKey createInstance() { D instanceData = newInstance(); @@ -107,19 +97,6 @@ public abstract class InstancedModel extends BufferedMod return key; } - public synchronized InstanceKey createInstance(Consumer setup) { - D instanceData = newInstance(); - setup.accept(instanceData); - - InstanceKey key = new InstanceKey<>(this, data.size()); - data.add(instanceData); - keys.add(key); - - markIndexChanged(key.index); - - return key; - } - protected void doRender() { vao.with(vao -> { renderSetup();