mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-28 16:06:48 +01:00
Ticking things.
- Differentiate tickable and dynamic instances. - Instanced repeaters.
This commit is contained in:
parent
9df9a99185
commit
f6cfd377a7
33 changed files with 221 additions and 242 deletions
|
@ -97,6 +97,7 @@ import com.simibubi.create.content.logistics.block.chute.SmartChuteTileEntity;
|
||||||
import com.simibubi.create.content.logistics.block.depot.DepotRenderer;
|
import com.simibubi.create.content.logistics.block.depot.DepotRenderer;
|
||||||
import com.simibubi.create.content.logistics.block.depot.DepotTileEntity;
|
import com.simibubi.create.content.logistics.block.depot.DepotTileEntity;
|
||||||
import com.simibubi.create.content.logistics.block.diodes.AdjustablePulseRepeaterTileEntity;
|
import com.simibubi.create.content.logistics.block.diodes.AdjustablePulseRepeaterTileEntity;
|
||||||
|
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterInstance;
|
||||||
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterRenderer;
|
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterRenderer;
|
||||||
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterTileEntity;
|
import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterTileEntity;
|
||||||
import com.simibubi.create.content.logistics.block.funnel.FunnelInstance;
|
import com.simibubi.create.content.logistics.block.funnel.FunnelInstance;
|
||||||
|
@ -595,6 +596,7 @@ public class AllTileEntities {
|
||||||
|
|
||||||
public static final TileEntityEntry<AdjustableRepeaterTileEntity> ADJUSTABLE_REPEATER = Create.registrate()
|
public static final TileEntityEntry<AdjustableRepeaterTileEntity> ADJUSTABLE_REPEATER = Create.registrate()
|
||||||
.tileEntity("adjustable_repeater", AdjustableRepeaterTileEntity::new)
|
.tileEntity("adjustable_repeater", AdjustableRepeaterTileEntity::new)
|
||||||
|
.instance(() -> AdjustableRepeaterInstance::new)
|
||||||
.validBlocks(AllBlocks.ADJUSTABLE_REPEATER)
|
.validBlocks(AllBlocks.ADJUSTABLE_REPEATER)
|
||||||
.renderer(() -> AdjustableRepeaterRenderer::new)
|
.renderer(() -> AdjustableRepeaterRenderer::new)
|
||||||
.register();
|
.register();
|
||||||
|
@ -602,6 +604,7 @@ public class AllTileEntities {
|
||||||
public static final TileEntityEntry<AdjustablePulseRepeaterTileEntity> ADJUSTABLE_PULSE_REPEATER =
|
public static final TileEntityEntry<AdjustablePulseRepeaterTileEntity> ADJUSTABLE_PULSE_REPEATER =
|
||||||
Create.registrate()
|
Create.registrate()
|
||||||
.tileEntity("adjustable_pulse_repeater", AdjustablePulseRepeaterTileEntity::new)
|
.tileEntity("adjustable_pulse_repeater", AdjustablePulseRepeaterTileEntity::new)
|
||||||
|
.instance(() -> AdjustableRepeaterInstance::new)
|
||||||
.validBlocks(AllBlocks.ADJUSTABLE_PULSE_REPEATER)
|
.validBlocks(AllBlocks.ADJUSTABLE_PULSE_REPEATER)
|
||||||
.renderer(() -> AdjustableRepeaterRenderer::new)
|
.renderer(() -> AdjustableRepeaterRenderer::new)
|
||||||
.register();
|
.register();
|
||||||
|
|
|
@ -2,14 +2,10 @@ package com.simibubi.create.content.contraptions.base;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlockPartials;
|
import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
|
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class HalfShaftInstance extends SingleRotatingInstance {
|
public class HalfShaftInstance extends SingleRotatingInstance {
|
||||||
public HalfShaftInstance(InstancedTileRenderer<?> modelManager, KineticTileEntity tile) {
|
public HalfShaftInstance(InstancedTileRenderer<?> modelManager, KineticTileEntity tile) {
|
||||||
|
@ -19,10 +15,10 @@ public class HalfShaftInstance extends SingleRotatingInstance {
|
||||||
@Override
|
@Override
|
||||||
protected InstancedModel<RotatingData> getModel() {
|
protected InstancedModel<RotatingData> getModel() {
|
||||||
Direction dir = getShaftDirection();
|
Direction dir = getShaftDirection();
|
||||||
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState, dir);
|
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, blockState, dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Direction getShaftDirection() {
|
protected Direction getShaftDirection() {
|
||||||
return lastState.get(BlockStateProperties.FACING);
|
return blockState.get(BlockStateProperties.FACING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,9 @@
|
||||||
package com.simibubi.create.content.contraptions.base;
|
package com.simibubi.create.content.contraptions.base;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
|
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class HorizontalHalfShaftInstance extends HalfShaftInstance {
|
public class HorizontalHalfShaftInstance extends HalfShaftInstance {
|
||||||
|
|
||||||
|
@ -17,6 +13,6 @@ public class HorizontalHalfShaftInstance extends HalfShaftInstance {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Direction getShaftDirection() {
|
protected Direction getShaftDirection() {
|
||||||
return lastState.get(BlockStateProperties.HORIZONTAL_FACING).getOpposite();
|
return blockState.get(BlockStateProperties.HORIZONTAL_FACING).getOpposite();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ public abstract class KineticTileInstance<T extends KineticTileEntity> extends T
|
||||||
}
|
}
|
||||||
|
|
||||||
protected float getRotationOffset(final Direction.Axis axis) {
|
protected float getRotationOffset(final Direction.Axis axis) {
|
||||||
float offset = CogWheelBlock.isLargeCog(lastState) ? 11.25f : 0;
|
float offset = CogWheelBlock.isLargeCog(blockState) ? 11.25f : 0;
|
||||||
double d = (((axis == Direction.Axis.X) ? 0 : pos.getX()) + ((axis == Direction.Axis.Y) ? 0 : pos.getY())
|
double d = (((axis == Direction.Axis.X) ? 0 : pos.getX()) + ((axis == Direction.Axis.Y) ? 0 : pos.getY())
|
||||||
+ ((axis == Direction.Axis.Z) ? 0 : pos.getZ())) % 2;
|
+ ((axis == Direction.Axis.Z) ? 0 : pos.getZ())) % 2;
|
||||||
if (d == 0) {
|
if (d == 0) {
|
||||||
|
@ -52,7 +52,7 @@ public abstract class KineticTileInstance<T extends KineticTileEntity> extends T
|
||||||
}
|
}
|
||||||
|
|
||||||
public Direction.Axis getRotationAxis() {
|
public Direction.Axis getRotationAxis() {
|
||||||
return ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
|
return ((IRotate) blockState.getBlock()).getRotationAxis(blockState);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final RenderMaterial<?, InstancedModel<RotatingData>> rotatingMaterial() {
|
protected final RenderMaterial<?, InstancedModel<RotatingData>> rotatingMaterial() {
|
||||||
|
|
|
@ -19,13 +19,13 @@ public class SingleRotatingInstance extends KineticTileInstance<KineticTileEntit
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
|
Direction.Axis axis = ((IRotate) blockState.getBlock()).getRotationAxis(blockState);
|
||||||
rotatingModelKey = setup(getModel().createInstance(), tile.getSpeed(), axis);
|
rotatingModelKey = setup(getModel().createInstance(), tile.getSpeed(), axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdate() {
|
public void onUpdate() {
|
||||||
Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
|
Direction.Axis axis = ((IRotate) blockState.getBlock()).getRotationAxis(blockState);
|
||||||
updateRotation(rotatingModelKey, axis);
|
updateRotation(rotatingModelKey, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ public class SingleRotatingInstance extends KineticTileInstance<KineticTileEntit
|
||||||
}
|
}
|
||||||
|
|
||||||
protected BlockState getRenderedBlockState() {
|
protected BlockState getRenderedBlockState() {
|
||||||
return lastState;
|
return blockState;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected InstancedModel<RotatingData> getModel() {
|
protected InstancedModel<RotatingData> getModel() {
|
||||||
|
|
|
@ -8,14 +8,10 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.base.RotatingData;
|
import com.simibubi.create.content.contraptions.base.RotatingData;
|
||||||
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
|
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class MechanicalCrafterInstance extends SingleRotatingInstance {
|
public class MechanicalCrafterInstance extends SingleRotatingInstance {
|
||||||
|
|
||||||
|
@ -25,7 +21,7 @@ public class MechanicalCrafterInstance extends SingleRotatingInstance {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected InstancedModel<RotatingData> getModel() {
|
protected InstancedModel<RotatingData> getModel() {
|
||||||
Direction facing = lastState.get(MechanicalCrafterBlock.HORIZONTAL_FACING);
|
Direction facing = blockState.get(MechanicalCrafterBlock.HORIZONTAL_FACING);
|
||||||
|
|
||||||
Supplier<MatrixStack> ms = () -> {
|
Supplier<MatrixStack> ms = () -> {
|
||||||
MatrixStack stack = new MatrixStack();
|
MatrixStack stack = new MatrixStack();
|
||||||
|
@ -39,6 +35,6 @@ public class MechanicalCrafterInstance extends SingleRotatingInstance {
|
||||||
stacker.unCentre();
|
stacker.unCentre();
|
||||||
return stack;
|
return stack;
|
||||||
};
|
};
|
||||||
return rotatingMaterial().getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, lastState, facing, ms);
|
return rotatingMaterial().getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, blockState, facing, ms);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,21 +4,15 @@ import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.simibubi.create.AllBlockPartials;
|
import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
||||||
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverInstance;
|
|
||||||
import com.simibubi.create.content.logistics.block.redstone.AnalogLeverTileEntity;
|
|
||||||
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.*;
|
import com.simibubi.create.foundation.render.backend.instancing.*;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class HandCrankInstance extends SingleRotatingInstance implements ITickableInstance {
|
public class HandCrankInstance extends SingleRotatingInstance implements IDynamicInstance {
|
||||||
|
|
||||||
private InstanceKey<ModelData> crank;
|
private InstanceKey<ModelData> crank;
|
||||||
private Direction facing;
|
private Direction facing;
|
||||||
|
@ -31,22 +25,22 @@ public class HandCrankInstance extends SingleRotatingInstance implements ITickab
|
||||||
protected void init() {
|
protected void init() {
|
||||||
super.init();
|
super.init();
|
||||||
|
|
||||||
Block block = lastState.getBlock();
|
Block block = blockState.getBlock();
|
||||||
AllBlockPartials renderedHandle = null;
|
AllBlockPartials renderedHandle = null;
|
||||||
if (block instanceof HandCrankBlock)
|
if (block instanceof HandCrankBlock)
|
||||||
renderedHandle = ((HandCrankBlock) block).getRenderedHandle();
|
renderedHandle = ((HandCrankBlock) block).getRenderedHandle();
|
||||||
if (renderedHandle == null)
|
if (renderedHandle == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
facing = lastState.get(BlockStateProperties.FACING);
|
facing = blockState.get(BlockStateProperties.FACING);
|
||||||
InstancedModel<ModelData> model = renderedHandle.renderOnDirectionalSouthModel(modelManager, lastState, facing.getOpposite());
|
InstancedModel<ModelData> model = renderedHandle.renderOnDirectionalSouthModel(modelManager, blockState, facing.getOpposite());
|
||||||
crank = model.createInstance();
|
crank = model.createInstance();
|
||||||
|
|
||||||
updateLight();
|
updateLight();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
if (crank == null) return;
|
if (crank == null) return;
|
||||||
|
|
||||||
HandCrankTileEntity crankTile = (HandCrankTileEntity) tile;
|
HandCrankTileEntity crankTile = (HandCrankTileEntity) tile;
|
||||||
|
|
|
@ -16,7 +16,7 @@ import net.minecraft.util.math.Vec3d;
|
||||||
import static com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE;
|
import static com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE;
|
||||||
import static com.simibubi.create.content.contraptions.base.DirectionalKineticBlock.FACING;
|
import static com.simibubi.create.content.contraptions.base.DirectionalKineticBlock.FACING;
|
||||||
|
|
||||||
public class DeployerInstance extends ShaftInstance implements ITickableInstance {
|
public class DeployerInstance extends ShaftInstance implements IDynamicInstance {
|
||||||
|
|
||||||
DeployerTileEntity tile;
|
DeployerTileEntity tile;
|
||||||
|
|
||||||
|
@ -42,22 +42,22 @@ public class DeployerInstance extends ShaftInstance implements ITickableInstance
|
||||||
super.init();
|
super.init();
|
||||||
|
|
||||||
this.tile = (DeployerTileEntity) super.tile;
|
this.tile = (DeployerTileEntity) super.tile;
|
||||||
facing = lastState.get(FACING);
|
facing = blockState.get(FACING);
|
||||||
|
|
||||||
boolean rotatePole = lastState.get(AXIS_ALONG_FIRST_COORDINATE) ^ facing.getAxis() == Direction.Axis.Z;
|
boolean rotatePole = blockState.get(AXIS_ALONG_FIRST_COORDINATE) ^ facing.getAxis() == Direction.Axis.Z;
|
||||||
|
|
||||||
yRot = AngleHelper.horizontalAngle(facing);
|
yRot = AngleHelper.horizontalAngle(facing);
|
||||||
zRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0;
|
zRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0;
|
||||||
zRotPole = rotatePole ? 90 : 0;
|
zRotPole = rotatePole ? 90 : 0;
|
||||||
|
|
||||||
pole = modelManager.getBasicMaterial().getModel(AllBlockPartials.DEPLOYER_POLE, lastState).createInstance();
|
pole = modelManager.getBasicMaterial().getModel(AllBlockPartials.DEPLOYER_POLE, blockState).createInstance();
|
||||||
|
|
||||||
updateHandPose();
|
updateHandPose();
|
||||||
relight(pos, pole.getInstance());
|
relight(pos, pole.getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
|
|
||||||
boolean newHand = updateHandPose();
|
boolean newHand = updateHandPose();
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ public class DeployerInstance extends ShaftInstance implements ITickableInstance
|
||||||
|
|
||||||
if (hand != null) hand.delete();
|
if (hand != null) hand.delete();
|
||||||
|
|
||||||
hand = modelManager.getBasicMaterial().getModel(currentHand, lastState).createInstance();
|
hand = modelManager.getBasicMaterial().getModel(currentHand, blockState).createInstance();
|
||||||
|
|
||||||
relight(pos, hand.getInstance());
|
relight(pos, hand.getInstance());
|
||||||
|
|
||||||
|
|
|
@ -8,16 +8,11 @@ import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
||||||
import com.simibubi.create.content.contraptions.base.RotatingData;
|
import com.simibubi.create.content.contraptions.base.RotatingData;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
|
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.world.LightType;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class FanInstance extends KineticTileInstance<EncasedFanTileEntity> {
|
public class FanInstance extends KineticTileInstance<EncasedFanTileEntity> {
|
||||||
|
|
||||||
|
@ -30,13 +25,13 @@ public class FanInstance extends KineticTileInstance<EncasedFanTileEntity> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
final Direction direction = lastState.get(FACING);
|
final Direction direction = blockState.get(FACING);
|
||||||
final Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
|
final Direction.Axis axis = ((IRotate) blockState.getBlock()).getRotationAxis(blockState);
|
||||||
|
|
||||||
InstancedModel<RotatingData> shaftHalf =
|
InstancedModel<RotatingData> shaftHalf =
|
||||||
AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState, direction.getOpposite());
|
AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, blockState, direction.getOpposite());
|
||||||
InstancedModel<RotatingData> fanInner =
|
InstancedModel<RotatingData> fanInner =
|
||||||
AllBlockPartials.ENCASED_FAN_INNER.renderOnDirectionalSouthRotating(modelManager, lastState, direction.getOpposite());
|
AllBlockPartials.ENCASED_FAN_INNER.renderOnDirectionalSouthRotating(modelManager, blockState, direction.getOpposite());
|
||||||
|
|
||||||
shaft = shaftHalf.createInstance();
|
shaft = shaftHalf.createInstance();
|
||||||
shaft.getInstance()
|
shaft.getInstance()
|
||||||
|
@ -67,7 +62,7 @@ public class FanInstance extends KineticTileInstance<EncasedFanTileEntity> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onUpdate() {
|
protected void onUpdate() {
|
||||||
Direction.Axis axis = lastState.get(FACING).getAxis();
|
Direction.Axis axis = blockState.get(FACING).getAxis();
|
||||||
updateRotation(shaft, axis);
|
updateRotation(shaft, axis);
|
||||||
|
|
||||||
fan.getInstance()
|
fan.getInstance()
|
||||||
|
@ -79,7 +74,7 @@ public class FanInstance extends KineticTileInstance<EncasedFanTileEntity> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateLight() {
|
public void updateLight() {
|
||||||
final Direction direction = lastState.get(FACING);
|
final Direction direction = blockState.get(FACING);
|
||||||
|
|
||||||
BlockPos behind = pos.offset(direction.getOpposite());
|
BlockPos behind = pos.offset(direction.getOpposite());
|
||||||
relight(behind, shaft.getInstance());
|
relight(behind, shaft.getInstance());
|
||||||
|
|
|
@ -1,17 +1,14 @@
|
||||||
package com.simibubi.create.content.contraptions.components.flywheel;
|
package com.simibubi.create.content.contraptions.components.flywheel;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.google.common.collect.Collections2;
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.simibubi.create.AllBlockPartials;
|
import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.content.contraptions.base.IRotate;
|
import com.simibubi.create.content.contraptions.base.IRotate;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
||||||
import com.simibubi.create.content.contraptions.base.RotatingData;
|
import com.simibubi.create.content.contraptions.base.RotatingData;
|
||||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
|
||||||
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.*;
|
import com.simibubi.create.foundation.render.backend.instancing.*;
|
||||||
|
|
||||||
|
@ -20,16 +17,11 @@ import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.Rotation;
|
import net.minecraft.util.Rotation;
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.world.LightType;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> implements ITickableInstance {
|
public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> implements IDynamicInstance {
|
||||||
|
|
||||||
protected Direction facing;
|
protected Direction facing;
|
||||||
protected boolean connectedLeft;
|
protected boolean connectedLeft;
|
||||||
|
@ -57,16 +49,16 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
facing = lastState.get(BlockStateProperties.HORIZONTAL_FACING);
|
facing = blockState.get(BlockStateProperties.HORIZONTAL_FACING);
|
||||||
|
|
||||||
Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
|
Direction.Axis axis = ((IRotate) blockState.getBlock()).getRotationAxis(blockState);
|
||||||
shaft = setup(shaftModel().createInstance(), tile.getSpeed(), axis);
|
shaft = setup(shaftModel().createInstance(), tile.getSpeed(), axis);
|
||||||
|
|
||||||
wheel = AllBlockPartials.FLYWHEEL.renderOnHorizontalModel(modelManager, lastState.rotate(Rotation.CLOCKWISE_90)).createInstance();
|
wheel = AllBlockPartials.FLYWHEEL.renderOnHorizontalModel(modelManager, blockState.rotate(Rotation.CLOCKWISE_90)).createInstance();
|
||||||
|
|
||||||
connection = FlywheelBlock.getConnection(lastState);
|
connection = FlywheelBlock.getConnection(blockState);
|
||||||
if (connection != null) {
|
if (connection != null) {
|
||||||
connectedLeft = lastState.get(FlywheelBlock.CONNECTION) == FlywheelBlock.ConnectionState.LEFT;
|
connectedLeft = blockState.get(FlywheelBlock.CONNECTION) == FlywheelBlock.ConnectionState.LEFT;
|
||||||
|
|
||||||
boolean flipAngle = connection.getAxis() == Direction.Axis.X ^ connection.getAxisDirection() == Direction.AxisDirection.NEGATIVE;
|
boolean flipAngle = connection.getAxis() == Direction.Axis.X ^ connection.getAxisDirection() == Direction.AxisDirection.NEGATIVE;
|
||||||
|
|
||||||
|
@ -74,10 +66,10 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
|
||||||
|
|
||||||
RenderMaterial<?, InstancedModel<ModelData>> mat = modelManager.getMaterial(RenderMaterials.MODELS);
|
RenderMaterial<?, InstancedModel<ModelData>> mat = modelManager.getMaterial(RenderMaterials.MODELS);
|
||||||
|
|
||||||
upperRotating = mat.getModel(AllBlockPartials.FLYWHEEL_UPPER_ROTATING, lastState).createInstance();
|
upperRotating = mat.getModel(AllBlockPartials.FLYWHEEL_UPPER_ROTATING, blockState).createInstance();
|
||||||
lowerRotating = mat.getModel(AllBlockPartials.FLYWHEEL_LOWER_ROTATING, lastState).createInstance();
|
lowerRotating = mat.getModel(AllBlockPartials.FLYWHEEL_LOWER_ROTATING, blockState).createInstance();
|
||||||
upperSliding = mat.getModel(AllBlockPartials.FLYWHEEL_UPPER_SLIDING, lastState).createInstance();
|
upperSliding = mat.getModel(AllBlockPartials.FLYWHEEL_UPPER_SLIDING, blockState).createInstance();
|
||||||
lowerSliding = mat.getModel(AllBlockPartials.FLYWHEEL_LOWER_SLIDING, lastState).createInstance();
|
lowerSliding = mat.getModel(AllBlockPartials.FLYWHEEL_LOWER_SLIDING, blockState).createInstance();
|
||||||
|
|
||||||
connectors = Lists.newArrayList(upperRotating, lowerRotating, upperSliding, lowerSliding);
|
connectors = Lists.newArrayList(upperRotating, lowerRotating, upperSliding, lowerSliding);
|
||||||
} else {
|
} else {
|
||||||
|
@ -89,7 +81,7 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
|
|
||||||
float partialTicks = AnimationTickHolder.getPartialTicks();
|
float partialTicks = AnimationTickHolder.getPartialTicks();
|
||||||
|
|
||||||
|
@ -144,7 +136,7 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onUpdate() {
|
protected void onUpdate() {
|
||||||
Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
|
Direction.Axis axis = ((IRotate) blockState.getBlock()).getRotationAxis(blockState);
|
||||||
updateRotation(shaft, axis);
|
updateRotation(shaft, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,7 +159,7 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
|
||||||
}
|
}
|
||||||
|
|
||||||
protected InstancedModel<RotatingData> shaftModel() {
|
protected InstancedModel<RotatingData> shaftModel() {
|
||||||
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState, facing.getOpposite());
|
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, blockState, facing.getOpposite());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void transformConnector(MatrixStacker ms, boolean upper, boolean rotating, float angle, boolean flip) {
|
protected void transformConnector(MatrixStacker ms, boolean upper, boolean rotating, float angle, boolean flip) {
|
||||||
|
|
|
@ -4,7 +4,6 @@ import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.simibubi.create.AllBlockPartials;
|
import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.TileEntityInstance;
|
import com.simibubi.create.foundation.render.backend.instancing.TileEntityInstance;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
||||||
|
@ -12,12 +11,7 @@ import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.world.LightType;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class EngineInstance extends TileEntityInstance<EngineTileEntity> {
|
public class EngineInstance extends TileEntityInstance<EngineTileEntity> {
|
||||||
|
|
||||||
|
@ -29,7 +23,7 @@ public class EngineInstance extends TileEntityInstance<EngineTileEntity> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
Block block = lastState
|
Block block = blockState
|
||||||
.getBlock();
|
.getBlock();
|
||||||
if (!(block instanceof EngineBlock))
|
if (!(block instanceof EngineBlock))
|
||||||
return;
|
return;
|
||||||
|
@ -37,9 +31,9 @@ public class EngineInstance extends TileEntityInstance<EngineTileEntity> {
|
||||||
EngineBlock engineBlock = (EngineBlock) block;
|
EngineBlock engineBlock = (EngineBlock) block;
|
||||||
AllBlockPartials frame = engineBlock.getFrameModel();
|
AllBlockPartials frame = engineBlock.getFrameModel();
|
||||||
|
|
||||||
Direction facing = lastState.get(BlockStateProperties.HORIZONTAL_FACING);
|
Direction facing = blockState.get(BlockStateProperties.HORIZONTAL_FACING);
|
||||||
|
|
||||||
this.frame = modelManager.getMaterial(RenderMaterials.MODELS).getModel(frame, lastState).createInstance();
|
this.frame = modelManager.getMaterial(RenderMaterials.MODELS).getModel(frame, blockState).createInstance();
|
||||||
|
|
||||||
float angle = AngleHelper.rad(AngleHelper.horizontalAngle(facing));
|
float angle = AngleHelper.rad(AngleHelper.horizontalAngle(facing));
|
||||||
|
|
||||||
|
|
|
@ -5,22 +5,14 @@ import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.base.RotatingData;
|
import com.simibubi.create.content.contraptions.base.RotatingData;
|
||||||
import com.simibubi.create.content.contraptions.base.ShaftlessCogInstance;
|
import com.simibubi.create.content.contraptions.base.ShaftlessCogInstance;
|
||||||
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
|
|
||||||
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.*;
|
import com.simibubi.create.foundation.render.backend.instancing.*;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
import net.minecraft.client.renderer.Vector3d;
|
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.util.math.Vec3d;
|
|
||||||
import net.minecraft.world.LightType;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class MixerInstance extends ShaftlessCogInstance implements ITickableInstance {
|
public class MixerInstance extends ShaftlessCogInstance implements IDynamicInstance {
|
||||||
|
|
||||||
private InstanceKey<RotatingData> mixerHead;
|
private InstanceKey<RotatingData> mixerHead;
|
||||||
private InstanceKey<ModelData> mixerPole;
|
private InstanceKey<ModelData> mixerPole;
|
||||||
|
@ -33,14 +25,14 @@ public class MixerInstance extends ShaftlessCogInstance implements ITickableInst
|
||||||
protected void init() {
|
protected void init() {
|
||||||
super.init();
|
super.init();
|
||||||
|
|
||||||
mixerHead = rotatingMaterial().getModel(AllBlockPartials.MECHANICAL_MIXER_HEAD, lastState)
|
mixerHead = rotatingMaterial().getModel(AllBlockPartials.MECHANICAL_MIXER_HEAD, blockState)
|
||||||
.createInstance();
|
.createInstance();
|
||||||
|
|
||||||
mixerHead.getInstance()
|
mixerHead.getInstance()
|
||||||
.setRotationAxis(Direction.Axis.Y);
|
.setRotationAxis(Direction.Axis.Y);
|
||||||
|
|
||||||
mixerPole = modelManager.getMaterial(RenderMaterials.MODELS)
|
mixerPole = modelManager.getMaterial(RenderMaterials.MODELS)
|
||||||
.getModel(AllBlockPartials.MECHANICAL_MIXER_POLE, lastState)
|
.getModel(AllBlockPartials.MECHANICAL_MIXER_POLE, blockState)
|
||||||
.createInstance();
|
.createInstance();
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,7 +45,7 @@ public class MixerInstance extends ShaftlessCogInstance implements ITickableInst
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
MechanicalMixerTileEntity mixer = (MechanicalMixerTileEntity) tile;
|
MechanicalMixerTileEntity mixer = (MechanicalMixerTileEntity) tile;
|
||||||
|
|
||||||
float renderedHeadOffset = getRenderedHeadOffset(mixer);
|
float renderedHeadOffset = getRenderedHeadOffset(mixer);
|
||||||
|
|
|
@ -5,19 +5,14 @@ import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
|
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
|
||||||
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.ITickableInstance;
|
import com.simibubi.create.foundation.render.backend.instancing.IDynamicInstance;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.world.LightType;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class PressInstance extends ShaftInstance implements ITickableInstance {
|
public class PressInstance extends ShaftInstance implements IDynamicInstance {
|
||||||
|
|
||||||
private InstanceKey<ModelData> pressHead;
|
private InstanceKey<ModelData> pressHead;
|
||||||
|
|
||||||
|
@ -30,7 +25,7 @@ public class PressInstance extends ShaftInstance implements ITickableInstance {
|
||||||
super.init();
|
super.init();
|
||||||
|
|
||||||
pressHead = modelManager.getMaterial(RenderMaterials.MODELS)
|
pressHead = modelManager.getMaterial(RenderMaterials.MODELS)
|
||||||
.getModel(AllBlockPartials.MECHANICAL_PRESS_HEAD, lastState)
|
.getModel(AllBlockPartials.MECHANICAL_PRESS_HEAD, blockState)
|
||||||
.createInstance();
|
.createInstance();
|
||||||
|
|
||||||
updateLight();
|
updateLight();
|
||||||
|
@ -38,7 +33,7 @@ public class PressInstance extends ShaftInstance implements ITickableInstance {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
MechanicalPressTileEntity press = (MechanicalPressTileEntity) tile;
|
MechanicalPressTileEntity press = (MechanicalPressTileEntity) tile;
|
||||||
if (!press.running)
|
if (!press.running)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -8,13 +8,9 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||||
import com.simibubi.create.content.contraptions.base.RotatingData;
|
import com.simibubi.create.content.contraptions.base.RotatingData;
|
||||||
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
|
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Rotation;
|
import net.minecraft.util.Rotation;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class SawInstance extends SingleRotatingInstance {
|
public class SawInstance extends SingleRotatingInstance {
|
||||||
|
|
||||||
|
@ -24,8 +20,8 @@ public class SawInstance extends SingleRotatingInstance {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected InstancedModel<RotatingData> getModel() {
|
protected InstancedModel<RotatingData> getModel() {
|
||||||
if (lastState.get(FACING).getAxis().isHorizontal())
|
if (blockState.get(FACING).getAxis().isHorizontal())
|
||||||
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState.rotate(tile.getWorld(), tile.getPos(), Rotation.CLOCKWISE_180));
|
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, blockState.rotate(tile.getWorld(), tile.getPos(), Rotation.CLOCKWISE_180));
|
||||||
else
|
else
|
||||||
return rotatingMaterial().getModel(KineticTileEntityRenderer.KINETIC_TILE, shaft(getRotationAxis()));
|
return rotatingMaterial().getModel(KineticTileEntityRenderer.KINETIC_TILE, shaft(getRotationAxis()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,13 +9,9 @@ import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.world.LightType;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class StickerInstance extends TileEntityInstance<StickerTileEntity> implements ITickableInstance {
|
public class StickerInstance extends TileEntityInstance<StickerTileEntity> implements IDynamicInstance {
|
||||||
|
|
||||||
float lastOffset = Float.NaN;
|
float lastOffset = Float.NaN;
|
||||||
|
|
||||||
|
@ -27,24 +23,24 @@ public class StickerInstance extends TileEntityInstance<StickerTileEntity> imple
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
head = modelManager.getMaterial(RenderMaterials.MODELS).getModel(AllBlockPartials.STICKER_HEAD, lastState).createInstance();
|
head = modelManager.getMaterial(RenderMaterials.MODELS).getModel(AllBlockPartials.STICKER_HEAD, blockState).createInstance();
|
||||||
|
|
||||||
updateLight();
|
updateLight();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
lastState = world.getBlockState(pos);
|
blockState = world.getBlockState(pos);
|
||||||
|
|
||||||
float offset = tile.piston.getValue(AnimationTickHolder.getPartialTicks());
|
float offset = tile.piston.getValue(AnimationTickHolder.getPartialTicks());
|
||||||
|
|
||||||
if (tile.getWorld() != Minecraft.getInstance().world)
|
if (tile.getWorld() != Minecraft.getInstance().world)
|
||||||
offset = lastState.get(StickerBlock.EXTENDED) ? 1 : 0;
|
offset = blockState.get(StickerBlock.EXTENDED) ? 1 : 0;
|
||||||
|
|
||||||
if (Math.abs(offset - lastOffset) < 1e-4)
|
if (Math.abs(offset - lastOffset) < 1e-4)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Direction facing = lastState.get(StickerBlock.FACING);
|
Direction facing = blockState.get(StickerBlock.FACING);
|
||||||
MatrixStack stack = new MatrixStack();
|
MatrixStack stack = new MatrixStack();
|
||||||
MatrixStacker.of(stack)
|
MatrixStacker.of(stack)
|
||||||
.translate(getFloatingPos())
|
.translate(getFloatingPos())
|
||||||
|
|
|
@ -6,23 +6,18 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||||
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
|
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
|
||||||
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.ITickableInstance;
|
import com.simibubi.create.foundation.render.backend.instancing.IDynamicInstance;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
||||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
import com.simibubi.create.foundation.utility.Iterate;
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
import net.minecraft.client.renderer.Vector3f;
|
import net.minecraft.client.renderer.Vector3f;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.LightType;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class GantryCarriageInstance extends ShaftInstance implements ITickableInstance {
|
public class GantryCarriageInstance extends ShaftInstance implements IDynamicInstance {
|
||||||
|
|
||||||
private InstanceKey<ModelData> gantryCogs;
|
private InstanceKey<ModelData> gantryCogs;
|
||||||
|
|
||||||
|
@ -35,17 +30,17 @@ public class GantryCarriageInstance extends ShaftInstance implements ITickableIn
|
||||||
super.init();
|
super.init();
|
||||||
|
|
||||||
gantryCogs = modelManager.getMaterial(RenderMaterials.MODELS)
|
gantryCogs = modelManager.getMaterial(RenderMaterials.MODELS)
|
||||||
.getModel(AllBlockPartials.GANTRY_COGS, lastState)
|
.getModel(AllBlockPartials.GANTRY_COGS, blockState)
|
||||||
.createInstance();
|
.createInstance();
|
||||||
|
|
||||||
updateLight();
|
updateLight();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
lastState = tile.getBlockState();
|
blockState = tile.getBlockState();
|
||||||
Direction facing = lastState.get(GantryCarriageBlock.FACING);
|
Direction facing = blockState.get(GantryCarriageBlock.FACING);
|
||||||
Boolean alongFirst = lastState.get(GantryCarriageBlock.AXIS_ALONG_FIRST_COORDINATE);
|
Boolean alongFirst = blockState.get(GantryCarriageBlock.AXIS_ALONG_FIRST_COORDINATE);
|
||||||
Direction.Axis rotationAxis = KineticTileEntityRenderer.getRotationAxisOf(tile);
|
Direction.Axis rotationAxis = KineticTileEntityRenderer.getRotationAxisOf(tile);
|
||||||
BlockPos visualPos = facing.getAxisDirection() == Direction.AxisDirection.POSITIVE ? tile.getPos()
|
BlockPos visualPos = facing.getAxisDirection() == Direction.AxisDirection.POSITIVE ? tile.getPos()
|
||||||
: tile.getPos()
|
: tile.getPos()
|
||||||
|
|
|
@ -5,7 +5,7 @@ import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||||
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
|
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.ITickableInstance;
|
import com.simibubi.create.foundation.render.backend.instancing.IDynamicInstance;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
||||||
|
@ -15,7 +15,7 @@ import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
|
||||||
public class FluidValveInstance extends ShaftInstance implements ITickableInstance {
|
public class FluidValveInstance extends ShaftInstance implements IDynamicInstance {
|
||||||
|
|
||||||
protected InstanceKey<ModelData> pointer;
|
protected InstanceKey<ModelData> pointer;
|
||||||
|
|
||||||
|
@ -31,26 +31,26 @@ public class FluidValveInstance extends ShaftInstance implements ITickableInstan
|
||||||
protected void init() {
|
protected void init() {
|
||||||
super.init();
|
super.init();
|
||||||
|
|
||||||
Direction facing = lastState.get(FluidValveBlock.FACING);
|
Direction facing = blockState.get(FluidValveBlock.FACING);
|
||||||
|
|
||||||
yRot = AngleHelper.horizontalAngle(facing);
|
yRot = AngleHelper.horizontalAngle(facing);
|
||||||
xRot = facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90;
|
xRot = facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90;
|
||||||
|
|
||||||
Direction.Axis pipeAxis = FluidValveBlock.getPipeAxis(lastState);
|
Direction.Axis pipeAxis = FluidValveBlock.getPipeAxis(blockState);
|
||||||
Direction.Axis shaftAxis = KineticTileEntityRenderer.getRotationAxisOf(tile);
|
Direction.Axis shaftAxis = KineticTileEntityRenderer.getRotationAxisOf(tile);
|
||||||
|
|
||||||
pointerRotationOffset = 0;
|
pointerRotationOffset = 0;
|
||||||
if (pipeAxis.isHorizontal() && shaftAxis == Direction.Axis.Z || pipeAxis.isVertical())
|
if (pipeAxis.isHorizontal() && shaftAxis == Direction.Axis.Z || pipeAxis.isVertical())
|
||||||
pointerRotationOffset = 90;
|
pointerRotationOffset = 90;
|
||||||
|
|
||||||
pointer = modelManager.getBasicMaterial().getModel(AllBlockPartials.FLUID_VALVE_POINTER, lastState).createInstance();
|
pointer = modelManager.getBasicMaterial().getModel(AllBlockPartials.FLUID_VALVE_POINTER, blockState).createInstance();
|
||||||
|
|
||||||
updateLight();
|
updateLight();
|
||||||
transformPointer((FluidValveTileEntity) tile);
|
transformPointer((FluidValveTileEntity) tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
|
|
||||||
FluidValveTileEntity valve = (FluidValveTileEntity) tile;
|
FluidValveTileEntity valve = (FluidValveTileEntity) tile;
|
||||||
|
|
||||||
|
|
|
@ -6,14 +6,12 @@ import java.util.function.Supplier;
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.simibubi.create.AllBlockPartials;
|
import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticData;
|
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
||||||
import com.simibubi.create.content.contraptions.base.RotatingData;
|
import com.simibubi.create.content.contraptions.base.RotatingData;
|
||||||
import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
|
import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
|
||||||
import com.simibubi.create.foundation.utility.Iterate;
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
|
|
||||||
|
@ -41,13 +39,13 @@ public class BeltInstance extends KineticTileInstance<BeltTileEntity> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
if (!AllBlocks.BELT.has(lastState))
|
if (!AllBlocks.BELT.has(blockState))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
keys = new ArrayList<>(2);
|
keys = new ArrayList<>(2);
|
||||||
|
|
||||||
beltSlope = lastState.get(BeltBlock.SLOPE);
|
beltSlope = blockState.get(BeltBlock.SLOPE);
|
||||||
facing = lastState.get(BeltBlock.HORIZONTAL_FACING);
|
facing = blockState.get(BeltBlock.HORIZONTAL_FACING);
|
||||||
upward = beltSlope == BeltSlope.UPWARD;
|
upward = beltSlope == BeltSlope.UPWARD;
|
||||||
diagonal = beltSlope.isDiagonal();
|
diagonal = beltSlope.isDiagonal();
|
||||||
sideways = beltSlope == BeltSlope.SIDEWAYS;
|
sideways = beltSlope == BeltSlope.SIDEWAYS;
|
||||||
|
@ -55,7 +53,7 @@ public class BeltInstance extends KineticTileInstance<BeltTileEntity> {
|
||||||
alongX = facing.getAxis() == Direction.Axis.X;
|
alongX = facing.getAxis() == Direction.Axis.X;
|
||||||
alongZ = facing.getAxis() == Direction.Axis.Z;
|
alongZ = facing.getAxis() == Direction.Axis.Z;
|
||||||
|
|
||||||
BeltPart part = lastState.get(BeltBlock.PART);
|
BeltPart part = blockState.get(BeltBlock.PART);
|
||||||
boolean start = part == BeltPart.START;
|
boolean start = part == BeltPart.START;
|
||||||
boolean end = part == BeltPart.END;
|
boolean end = part == BeltPart.END;
|
||||||
DyeColor color = tile.color.orElse(null);
|
DyeColor color = tile.color.orElse(null);
|
||||||
|
@ -64,7 +62,7 @@ public class BeltInstance extends KineticTileInstance<BeltTileEntity> {
|
||||||
AllBlockPartials beltPartial = BeltRenderer.getBeltPartial(diagonal, start, end, bottom);
|
AllBlockPartials beltPartial = BeltRenderer.getBeltPartial(diagonal, start, end, bottom);
|
||||||
SpriteShiftEntry spriteShift = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom);
|
SpriteShiftEntry spriteShift = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom);
|
||||||
|
|
||||||
InstancedModel<BeltData> beltModel = beltPartial.renderOnBelt(modelManager, lastState);
|
InstancedModel<BeltData> beltModel = beltPartial.renderOnBelt(modelManager, blockState);
|
||||||
|
|
||||||
keys.add(setup(beltModel.createInstance(), bottom, spriteShift));
|
keys.add(setup(beltModel.createInstance(), bottom, spriteShift));
|
||||||
|
|
||||||
|
@ -144,11 +142,11 @@ public class BeltInstance extends KineticTileInstance<BeltTileEntity> {
|
||||||
return modelTransform;
|
return modelTransform;
|
||||||
};
|
};
|
||||||
|
|
||||||
return rotatingMaterial().getModel(AllBlockPartials.BELT_PULLEY, lastState, dir, ms);
|
return rotatingMaterial().getModel(AllBlockPartials.BELT_PULLEY, blockState, dir, ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Direction getOrientation() {
|
private Direction getOrientation() {
|
||||||
Direction dir = lastState.get(BeltBlock.HORIZONTAL_FACING)
|
Direction dir = blockState.get(BeltBlock.HORIZONTAL_FACING)
|
||||||
.rotateY();
|
.rotateY();
|
||||||
if (beltSlope == BeltSlope.SIDEWAYS)
|
if (beltSlope == BeltSlope.SIDEWAYS)
|
||||||
dir = Direction.UP;
|
dir = Direction.UP;
|
||||||
|
|
|
@ -27,14 +27,14 @@ public class SplitShaftInstance extends KineticTileInstance<SplitShaftTileEntity
|
||||||
protected void init() {
|
protected void init() {
|
||||||
keys = new ArrayList<>(2);
|
keys = new ArrayList<>(2);
|
||||||
|
|
||||||
Block block = lastState.getBlock();
|
Block block = blockState.getBlock();
|
||||||
final Direction.Axis boxAxis = ((IRotate) block).getRotationAxis(lastState);
|
final Direction.Axis boxAxis = ((IRotate) block).getRotationAxis(blockState);
|
||||||
|
|
||||||
float speed = tile.getSpeed();
|
float speed = tile.getSpeed();
|
||||||
|
|
||||||
for (Direction dir : Iterate.directionsInAxis(boxAxis)) {
|
for (Direction dir : Iterate.directionsInAxis(boxAxis)) {
|
||||||
|
|
||||||
InstancedModel<RotatingData> half = AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState, dir);
|
InstancedModel<RotatingData> half = AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, blockState, dir);
|
||||||
|
|
||||||
float splitSpeed = speed * tile.getRotationSpeedModifier(dir);
|
float splitSpeed = speed * tile.getRotationSpeedModifier(dir);
|
||||||
|
|
||||||
|
@ -44,8 +44,8 @@ public class SplitShaftInstance extends KineticTileInstance<SplitShaftTileEntity
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdate() {
|
public void onUpdate() {
|
||||||
Block block = lastState.getBlock();
|
Block block = blockState.getBlock();
|
||||||
final Direction.Axis boxAxis = ((IRotate) block).getRotationAxis(lastState);
|
final Direction.Axis boxAxis = ((IRotate) block).getRotationAxis(blockState);
|
||||||
|
|
||||||
Direction[] directions = Iterate.directionsInAxis(boxAxis);
|
Direction[] directions = Iterate.directionsInAxis(boxAxis);
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
|
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
|
||||||
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.ITickableInstance;
|
import com.simibubi.create.foundation.render.backend.instancing.IDynamicInstance;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
|
@ -16,7 +16,7 @@ import net.minecraft.util.math.MathHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public abstract class GaugeInstance extends ShaftInstance implements ITickableInstance {
|
public abstract class GaugeInstance extends ShaftInstance implements IDynamicInstance {
|
||||||
|
|
||||||
protected ArrayList<DialFace> faces;
|
protected ArrayList<DialFace> faces;
|
||||||
|
|
||||||
|
@ -33,9 +33,9 @@ public abstract class GaugeInstance extends ShaftInstance implements ITickableIn
|
||||||
faces = new ArrayList<>(2);
|
faces = new ArrayList<>(2);
|
||||||
|
|
||||||
GaugeTileEntity gaugeTile = (GaugeTileEntity) tile;
|
GaugeTileEntity gaugeTile = (GaugeTileEntity) tile;
|
||||||
GaugeBlock gaugeBlock = (GaugeBlock) lastState.getBlock();
|
GaugeBlock gaugeBlock = (GaugeBlock) blockState.getBlock();
|
||||||
|
|
||||||
InstancedModel<ModelData> dialModel = modelManager.getMaterial(RenderMaterials.MODELS).getModel(AllBlockPartials.GAUGE_DIAL, lastState);
|
InstancedModel<ModelData> dialModel = modelManager.getMaterial(RenderMaterials.MODELS).getModel(AllBlockPartials.GAUGE_DIAL, blockState);
|
||||||
InstancedModel<ModelData> headModel = getHeadModel();
|
InstancedModel<ModelData> headModel = getHeadModel();
|
||||||
|
|
||||||
ms = new MatrixStack();
|
ms = new MatrixStack();
|
||||||
|
@ -45,7 +45,7 @@ public abstract class GaugeInstance extends ShaftInstance implements ITickableIn
|
||||||
float progress = MathHelper.lerp(AnimationTickHolder.getPartialTicks(), gaugeTile.prevDialState, gaugeTile.dialState);
|
float progress = MathHelper.lerp(AnimationTickHolder.getPartialTicks(), gaugeTile.prevDialState, gaugeTile.dialState);
|
||||||
|
|
||||||
for (Direction facing : Iterate.directions) {
|
for (Direction facing : Iterate.directions) {
|
||||||
if (!gaugeBlock.shouldRenderHeadOnFace(world, pos, lastState, facing))
|
if (!gaugeBlock.shouldRenderHeadOnFace(world, pos, blockState, facing))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
DialFace face = makeFace(facing, dialModel, headModel);
|
DialFace face = makeFace(facing, dialModel, headModel);
|
||||||
|
@ -63,7 +63,7 @@ public abstract class GaugeInstance extends ShaftInstance implements ITickableIn
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
GaugeTileEntity gaugeTile = (GaugeTileEntity) tile;
|
GaugeTileEntity gaugeTile = (GaugeTileEntity) tile;
|
||||||
|
|
||||||
if (MathHelper.epsilonEquals(gaugeTile.prevDialState, gaugeTile.dialState))
|
if (MathHelper.epsilonEquals(gaugeTile.prevDialState, gaugeTile.dialState))
|
||||||
|
@ -156,7 +156,7 @@ public abstract class GaugeInstance extends ShaftInstance implements ITickableIn
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected InstancedModel<ModelData> getHeadModel() {
|
protected InstancedModel<ModelData> getHeadModel() {
|
||||||
return modelManager.getMaterial(RenderMaterials.MODELS).getModel(AllBlockPartials.GAUGE_HEAD_SPEED, lastState);
|
return modelManager.getMaterial(RenderMaterials.MODELS).getModel(AllBlockPartials.GAUGE_HEAD_SPEED, blockState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,7 +167,7 @@ public abstract class GaugeInstance extends ShaftInstance implements ITickableIn
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected InstancedModel<ModelData> getHeadModel() {
|
protected InstancedModel<ModelData> getHeadModel() {
|
||||||
return modelManager.getMaterial(RenderMaterials.MODELS).getModel(AllBlockPartials.GAUGE_HEAD_STRESS, lastState);
|
return modelManager.getMaterial(RenderMaterials.MODELS).getModel(AllBlockPartials.GAUGE_HEAD_STRESS, blockState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,17 +8,13 @@ import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
||||||
import com.simibubi.create.content.contraptions.base.RotatingData;
|
import com.simibubi.create.content.contraptions.base.RotatingData;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderRegistry;
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.utility.Iterate;
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
|
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.LightType;
|
import net.minecraft.world.LightType;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class GearboxInstance extends KineticTileInstance<GearboxTileEntity> {
|
public class GearboxInstance extends KineticTileInstance<GearboxTileEntity> {
|
||||||
|
|
||||||
|
@ -33,7 +29,7 @@ public class GearboxInstance extends KineticTileInstance<GearboxTileEntity> {
|
||||||
protected void init() {
|
protected void init() {
|
||||||
keys = new EnumMap<>(Direction.class);
|
keys = new EnumMap<>(Direction.class);
|
||||||
|
|
||||||
final Direction.Axis boxAxis = lastState.get(BlockStateProperties.AXIS);
|
final Direction.Axis boxAxis = blockState.get(BlockStateProperties.AXIS);
|
||||||
|
|
||||||
int blockLight = world.getLightLevel(LightType.BLOCK, pos);
|
int blockLight = world.getLightLevel(LightType.BLOCK, pos);
|
||||||
int skyLight = world.getLightLevel(LightType.SKY, pos);
|
int skyLight = world.getLightLevel(LightType.SKY, pos);
|
||||||
|
@ -44,7 +40,7 @@ public class GearboxInstance extends KineticTileInstance<GearboxTileEntity> {
|
||||||
if (boxAxis == axis)
|
if (boxAxis == axis)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
InstancedModel<RotatingData> shaft = AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState, direction);
|
InstancedModel<RotatingData> shaft = AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, blockState, direction);
|
||||||
|
|
||||||
InstanceKey<RotatingData> key = shaft.createInstance();
|
InstanceKey<RotatingData> key = shaft.createInstance();
|
||||||
|
|
||||||
|
|
|
@ -6,18 +6,15 @@ import com.simibubi.create.content.logistics.block.FlapData;
|
||||||
import com.simibubi.create.foundation.gui.widgets.InterpolatedValue;
|
import com.simibubi.create.foundation.gui.widgets.InterpolatedValue;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.*;
|
import com.simibubi.create.foundation.render.backend.instancing.*;
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.world.LightType;
|
import net.minecraft.world.LightType;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class BeltTunnelInstance extends TileEntityInstance<BeltTunnelTileEntity> implements ITickableInstance {
|
public class BeltTunnelInstance extends TileEntityInstance<BeltTunnelTileEntity> implements IDynamicInstance {
|
||||||
|
|
||||||
|
|
||||||
private Map<Direction, ArrayList<InstanceKey<FlapData>>> tunnelFlaps;
|
private Map<Direction, ArrayList<InstanceKey<FlapData>>> tunnelFlaps;
|
||||||
|
@ -31,7 +28,7 @@ public class BeltTunnelInstance extends TileEntityInstance<BeltTunnelTileEntity>
|
||||||
tunnelFlaps = new EnumMap<>(Direction.class);
|
tunnelFlaps = new EnumMap<>(Direction.class);
|
||||||
|
|
||||||
InstancedModel<FlapData> model = modelManager.getMaterial(KineticRenderMaterials.FLAPS)
|
InstancedModel<FlapData> model = modelManager.getMaterial(KineticRenderMaterials.FLAPS)
|
||||||
.getModel(AllBlockPartials.BELT_TUNNEL_FLAP, lastState);
|
.getModel(AllBlockPartials.BELT_TUNNEL_FLAP, blockState);
|
||||||
|
|
||||||
int blockLight = world.getLightLevel(LightType.BLOCK, pos);
|
int blockLight = world.getLightLevel(LightType.BLOCK, pos);
|
||||||
int skyLight = world.getLightLevel(LightType.SKY, pos);
|
int skyLight = world.getLightLevel(LightType.SKY, pos);
|
||||||
|
@ -71,7 +68,7 @@ public class BeltTunnelInstance extends TileEntityInstance<BeltTunnelTileEntity>
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
tunnelFlaps.forEach((direction, keys) -> {
|
tunnelFlaps.forEach((direction, keys) -> {
|
||||||
InterpolatedValue flapValue = tile.flaps.get(direction);
|
InterpolatedValue flapValue = tile.flaps.get(direction);
|
||||||
if (flapValue == null) {
|
if (flapValue == null) {
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
package com.simibubi.create.content.logistics.block.diodes;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.*;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
||||||
|
import com.simibubi.create.foundation.utility.ColorHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
|
|
||||||
|
public class AdjustableRepeaterInstance extends TileEntityInstance<AdjustableRepeaterTileEntity> implements ITickableInstance {
|
||||||
|
|
||||||
|
protected InstanceKey<ModelData> indicator;
|
||||||
|
|
||||||
|
protected int previousState;
|
||||||
|
|
||||||
|
public AdjustableRepeaterInstance(InstancedTileRenderer<?> modelManager, AdjustableRepeaterTileEntity tile) {
|
||||||
|
super(modelManager, tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void init() {
|
||||||
|
indicator = modelManager.getBasicMaterial().getModel(AllBlockPartials.FLEXPEATER_INDICATOR, blockState).createInstance();
|
||||||
|
|
||||||
|
MatrixStack ms = new MatrixStack();
|
||||||
|
MatrixStacker.of(ms).translate(getFloatingPos());
|
||||||
|
|
||||||
|
indicator.getInstance()
|
||||||
|
.setTransform(ms)
|
||||||
|
.setColor(getColor());
|
||||||
|
|
||||||
|
previousState = tile.state;
|
||||||
|
|
||||||
|
updateLight();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
if (previousState == tile.state) return;
|
||||||
|
|
||||||
|
indicator.getInstance().setColor(getColor());
|
||||||
|
|
||||||
|
previousState = tile.state;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateLight() {
|
||||||
|
relight(pos, indicator.getInstance());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove() {
|
||||||
|
indicator.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int getColor() {
|
||||||
|
return ColorHelper.mixColors(0x2C0300, 0xCD0000, tile.state / (float) tile.maxState.getValue());
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,6 +5,7 @@ import static net.minecraft.block.RedstoneDiodeBlock.POWERED;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.IInstanceRendered;
|
||||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour;
|
import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour;
|
||||||
|
@ -15,7 +16,7 @@ import net.minecraft.nbt.CompoundNBT;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
|
||||||
public class AdjustableRepeaterTileEntity extends SmartTileEntity {
|
public class AdjustableRepeaterTileEntity extends SmartTileEntity implements IInstanceRendered {
|
||||||
|
|
||||||
public int state;
|
public int state;
|
||||||
public boolean charging;
|
public boolean charging;
|
||||||
|
@ -119,5 +120,4 @@ public class AdjustableRepeaterTileEntity extends SmartTileEntity {
|
||||||
|
|
||||||
state += charging ? 1 : -1;
|
state += charging ? 1 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,15 +5,12 @@ import com.simibubi.create.content.contraptions.base.KineticRenderMaterials;
|
||||||
import com.simibubi.create.content.logistics.block.FlapData;
|
import com.simibubi.create.content.logistics.block.FlapData;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.*;
|
import com.simibubi.create.foundation.render.backend.instancing.*;
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.world.LightType;
|
import net.minecraft.world.LightType;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class FunnelInstance extends TileEntityInstance<FunnelTileEntity> implements ITickableInstance {
|
public class FunnelInstance extends TileEntityInstance<FunnelTileEntity> implements IDynamicInstance {
|
||||||
|
|
||||||
private ArrayList<InstanceKey<FlapData>> flaps;
|
private ArrayList<InstanceKey<FlapData>> flaps;
|
||||||
|
|
||||||
|
@ -27,15 +24,15 @@ public class FunnelInstance extends TileEntityInstance<FunnelTileEntity> impleme
|
||||||
|
|
||||||
if (!tile.hasFlap()) return;
|
if (!tile.hasFlap()) return;
|
||||||
|
|
||||||
AllBlockPartials flapPartial = (lastState.getBlock() instanceof FunnelBlock ? AllBlockPartials.FUNNEL_FLAP
|
AllBlockPartials flapPartial = (blockState.getBlock() instanceof FunnelBlock ? AllBlockPartials.FUNNEL_FLAP
|
||||||
: AllBlockPartials.BELT_FUNNEL_FLAP);
|
: AllBlockPartials.BELT_FUNNEL_FLAP);
|
||||||
InstancedModel<FlapData> model = modelManager.getMaterial(KineticRenderMaterials.FLAPS)
|
InstancedModel<FlapData> model = modelManager.getMaterial(KineticRenderMaterials.FLAPS)
|
||||||
.getModel(flapPartial, lastState);
|
.getModel(flapPartial, blockState);
|
||||||
|
|
||||||
int blockLight = world.getLightLevel(LightType.BLOCK, pos);
|
int blockLight = world.getLightLevel(LightType.BLOCK, pos);
|
||||||
int skyLight = world.getLightLevel(LightType.SKY, pos);
|
int skyLight = world.getLightLevel(LightType.SKY, pos);
|
||||||
|
|
||||||
Direction direction = FunnelBlock.getFunnelFacing(lastState);
|
Direction direction = FunnelBlock.getFunnelFacing(blockState);
|
||||||
|
|
||||||
float flapness = tile.flap.get(AnimationTickHolder.getPartialTicks());
|
float flapness = tile.flap.get(AnimationTickHolder.getPartialTicks());
|
||||||
float horizontalAngle = direction.getOpposite().getHorizontalAngle();
|
float horizontalAngle = direction.getOpposite().getHorizontalAngle();
|
||||||
|
@ -62,7 +59,7 @@ public class FunnelInstance extends TileEntityInstance<FunnelTileEntity> impleme
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
if (flaps == null) return;
|
if (flaps == null) return;
|
||||||
|
|
||||||
float flapness = tile.flap.get(AnimationTickHolder.getPartialTicks());
|
float flapness = tile.flap.get(AnimationTickHolder.getPartialTicks());
|
||||||
|
|
|
@ -6,7 +6,6 @@ import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.base.RotatingData;
|
import com.simibubi.create.content.contraptions.base.RotatingData;
|
||||||
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
||||||
import com.simibubi.create.foundation.gui.widgets.InterpolatedValue;
|
|
||||||
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.*;
|
import com.simibubi.create.foundation.render.backend.instancing.*;
|
||||||
|
|
||||||
|
@ -19,16 +18,11 @@ import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.ItemRenderer;
|
import net.minecraft.client.renderer.ItemRenderer;
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.world.LightType;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
public class ArmInstance extends SingleRotatingInstance implements ITickableInstance {
|
public class ArmInstance extends SingleRotatingInstance implements IDynamicInstance {
|
||||||
|
|
||||||
private InstanceKey<ModelData> base;
|
private InstanceKey<ModelData> base;
|
||||||
private InstanceKey<ModelData> lowerBody;
|
private InstanceKey<ModelData> lowerBody;
|
||||||
|
@ -51,13 +45,13 @@ public class ArmInstance extends SingleRotatingInstance implements ITickableInst
|
||||||
|
|
||||||
RenderMaterial<?, InstancedModel<ModelData>> mat = modelManager.getMaterial(RenderMaterials.MODELS);
|
RenderMaterial<?, InstancedModel<ModelData>> mat = modelManager.getMaterial(RenderMaterials.MODELS);
|
||||||
|
|
||||||
base = mat.getModel(AllBlockPartials.ARM_BASE, lastState).createInstance();
|
base = mat.getModel(AllBlockPartials.ARM_BASE, blockState).createInstance();
|
||||||
lowerBody = mat.getModel(AllBlockPartials.ARM_LOWER_BODY, lastState).createInstance();
|
lowerBody = mat.getModel(AllBlockPartials.ARM_LOWER_BODY, blockState).createInstance();
|
||||||
upperBody = mat.getModel(AllBlockPartials.ARM_UPPER_BODY, lastState).createInstance();
|
upperBody = mat.getModel(AllBlockPartials.ARM_UPPER_BODY, blockState).createInstance();
|
||||||
head = mat.getModel(AllBlockPartials.ARM_HEAD, lastState).createInstance();
|
head = mat.getModel(AllBlockPartials.ARM_HEAD, blockState).createInstance();
|
||||||
claw = mat.getModel(AllBlockPartials.ARM_CLAW_BASE, lastState).createInstance();
|
claw = mat.getModel(AllBlockPartials.ARM_CLAW_BASE, blockState).createInstance();
|
||||||
|
|
||||||
InstancedModel<ModelData> clawHalfModel = mat.getModel(AllBlockPartials.ARM_CLAW_GRIP, lastState);
|
InstancedModel<ModelData> clawHalfModel = mat.getModel(AllBlockPartials.ARM_CLAW_GRIP, blockState);
|
||||||
InstanceKey<ModelData> clawGrip1 = clawHalfModel.createInstance();
|
InstanceKey<ModelData> clawGrip1 = clawHalfModel.createInstance();
|
||||||
InstanceKey<ModelData> clawGrip2 = clawHalfModel.createInstance();
|
InstanceKey<ModelData> clawGrip2 = clawHalfModel.createInstance();
|
||||||
|
|
||||||
|
@ -65,12 +59,12 @@ public class ArmInstance extends SingleRotatingInstance implements ITickableInst
|
||||||
models = Lists.newArrayList(base, lowerBody, upperBody, head, claw, clawGrip1, clawGrip2);
|
models = Lists.newArrayList(base, lowerBody, upperBody, head, claw, clawGrip1, clawGrip2);
|
||||||
|
|
||||||
firstTick = true;
|
firstTick = true;
|
||||||
tick();
|
beginFrame();
|
||||||
updateLight();
|
updateLight();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
ArmTileEntity arm = (ArmTileEntity) tile;
|
ArmTileEntity arm = (ArmTileEntity) tile;
|
||||||
|
|
||||||
boolean settled = arm.baseAngle.settled() && arm.lowerArmAngle.settled() && arm.upperArmAngle.settled() && arm.headAngle.settled();
|
boolean settled = arm.baseAngle.settled() && arm.lowerArmAngle.settled() && arm.upperArmAngle.settled() && arm.headAngle.settled();
|
||||||
|
@ -107,7 +101,7 @@ public class ArmInstance extends SingleRotatingInstance implements ITickableInst
|
||||||
msr.translate(getFloatingPos());
|
msr.translate(getFloatingPos());
|
||||||
msr.centre();
|
msr.centre();
|
||||||
|
|
||||||
if (lastState.get(ArmBlock.CEILING))
|
if (blockState.get(ArmBlock.CEILING))
|
||||||
msr.rotateX(180);
|
msr.rotateX(180);
|
||||||
|
|
||||||
ArmRenderer.transformBase(msr, baseAngle);
|
ArmRenderer.transformBase(msr, baseAngle);
|
||||||
|
|
|
@ -2,8 +2,6 @@ package com.simibubi.create.content.logistics.block.redstone;
|
||||||
|
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.simibubi.create.AllBlockPartials;
|
import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.content.contraptions.components.flywheel.FlyWheelInstance;
|
|
||||||
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelTileEntity;
|
|
||||||
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.*;
|
import com.simibubi.create.foundation.render.backend.instancing.*;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
||||||
|
@ -12,12 +10,9 @@ import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
import com.simibubi.create.foundation.utility.ColorHelper;
|
import com.simibubi.create.foundation.utility.ColorHelper;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
import net.minecraft.state.properties.AttachFace;
|
import net.minecraft.state.properties.AttachFace;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class AnalogLeverInstance extends TileEntityInstance<AnalogLeverTileEntity> implements ITickableInstance {
|
public class AnalogLeverInstance extends TileEntityInstance<AnalogLeverTileEntity> implements IDynamicInstance {
|
||||||
|
|
||||||
protected InstanceKey<ModelData> handle;
|
protected InstanceKey<ModelData> handle;
|
||||||
protected InstanceKey<ModelData> indicator;
|
protected InstanceKey<ModelData> indicator;
|
||||||
|
@ -33,19 +28,19 @@ public class AnalogLeverInstance extends TileEntityInstance<AnalogLeverTileEntit
|
||||||
protected void init() {
|
protected void init() {
|
||||||
RenderMaterial<?, InstancedModel<ModelData>> mat = modelManager.getMaterial(RenderMaterials.MODELS);
|
RenderMaterial<?, InstancedModel<ModelData>> mat = modelManager.getMaterial(RenderMaterials.MODELS);
|
||||||
|
|
||||||
handle = mat.getModel(AllBlockPartials.ANALOG_LEVER_HANDLE, lastState).createInstance();
|
handle = mat.getModel(AllBlockPartials.ANALOG_LEVER_HANDLE, blockState).createInstance();
|
||||||
indicator = mat.getModel(AllBlockPartials.ANALOG_LEVER_INDICATOR, lastState).createInstance();
|
indicator = mat.getModel(AllBlockPartials.ANALOG_LEVER_INDICATOR, blockState).createInstance();
|
||||||
|
|
||||||
AttachFace face = lastState.get(AnalogLeverBlock.FACE);
|
AttachFace face = blockState.get(AnalogLeverBlock.FACE);
|
||||||
rX = face == AttachFace.FLOOR ? 0 : face == AttachFace.WALL ? 90 : 180;
|
rX = face == AttachFace.FLOOR ? 0 : face == AttachFace.WALL ? 90 : 180;
|
||||||
rY = AngleHelper.horizontalAngle(lastState.get(AnalogLeverBlock.HORIZONTAL_FACING));
|
rY = AngleHelper.horizontalAngle(blockState.get(AnalogLeverBlock.HORIZONTAL_FACING));
|
||||||
|
|
||||||
setupModel();
|
setupModel();
|
||||||
updateLight();
|
updateLight();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
if (!tile.clientState.settled())
|
if (!tile.clientState.settled())
|
||||||
setupModel();
|
setupModel();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,27 +1,15 @@
|
||||||
package com.simibubi.create.content.schematics.block;
|
package com.simibubi.create.content.schematics.block;
|
||||||
|
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.mojang.blaze3d.vertex.IVertexBuilder;
|
|
||||||
import com.simibubi.create.AllBlockPartials;
|
import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelInstance;
|
|
||||||
import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelTileEntity;
|
|
||||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
|
||||||
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.*;
|
import com.simibubi.create.foundation.render.backend.instancing.*;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
import net.minecraft.block.BlockState;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.WorldRenderer;
|
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.world.LightType;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
public class SchematicannonInstance extends TileEntityInstance<SchematicannonTileEntity> implements ITickableInstance {
|
public class SchematicannonInstance extends TileEntityInstance<SchematicannonTileEntity> implements IDynamicInstance {
|
||||||
|
|
||||||
private InstanceKey<ModelData> connector;
|
private InstanceKey<ModelData> connector;
|
||||||
private InstanceKey<ModelData> pipe;
|
private InstanceKey<ModelData> pipe;
|
||||||
|
@ -35,14 +23,14 @@ public class SchematicannonInstance extends TileEntityInstance<SchematicannonTil
|
||||||
|
|
||||||
RenderMaterial<?, InstancedModel<ModelData>> mat = modelManager.getMaterial(RenderMaterials.MODELS);
|
RenderMaterial<?, InstancedModel<ModelData>> mat = modelManager.getMaterial(RenderMaterials.MODELS);
|
||||||
|
|
||||||
connector = mat.getModel(AllBlockPartials.SCHEMATICANNON_CONNECTOR, lastState).createInstance();
|
connector = mat.getModel(AllBlockPartials.SCHEMATICANNON_CONNECTOR, blockState).createInstance();
|
||||||
pipe = mat.getModel(AllBlockPartials.SCHEMATICANNON_PIPE, lastState).createInstance();
|
pipe = mat.getModel(AllBlockPartials.SCHEMATICANNON_PIPE, blockState).createInstance();
|
||||||
|
|
||||||
updateLight();
|
updateLight();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void beginFrame() {
|
||||||
float partialTicks = AnimationTickHolder.getPartialTicks();
|
float partialTicks = AnimationTickHolder.getPartialTicks();
|
||||||
|
|
||||||
double[] cannonAngles = SchematicannonRenderer.getCannonAngles(tile, pos, partialTicks);
|
double[] cannonAngles = SchematicannonRenderer.getCannonAngles(tile, pos, partialTicks);
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.simibubi.create.foundation.render.backend.instancing;
|
||||||
|
|
||||||
|
public interface IDynamicInstance {
|
||||||
|
/**
|
||||||
|
* Called every frame, this can be used to make more dynamic animations.
|
||||||
|
*/
|
||||||
|
void beginFrame();
|
||||||
|
}
|
|
@ -1,8 +1,6 @@
|
||||||
package com.simibubi.create.foundation.render.backend.instancing;
|
package com.simibubi.create.foundation.render.backend.instancing;
|
||||||
|
|
||||||
public interface ITickableInstance {
|
public interface ITickableInstance {
|
||||||
/**
|
|
||||||
* Called every frame, this can be used to make more dynamic animations.
|
|
||||||
*/
|
|
||||||
void tick();
|
void tick();
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ import java.util.*;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.ponder.PonderWorld;
|
|
||||||
import com.simibubi.create.foundation.render.backend.Backend;
|
import com.simibubi.create.foundation.render.backend.Backend;
|
||||||
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
||||||
import com.simibubi.create.foundation.render.backend.gl.BasicProgram;
|
import com.simibubi.create.foundation.render.backend.gl.BasicProgram;
|
||||||
|
@ -26,6 +25,7 @@ public abstract class InstancedTileRenderer<P extends BasicProgram> {
|
||||||
protected Map<TileEntity, TileEntityInstance<?>> instances = new HashMap<>();
|
protected Map<TileEntity, TileEntityInstance<?>> instances = new HashMap<>();
|
||||||
|
|
||||||
protected Map<TileEntity, ITickableInstance> tickableInstances = new HashMap<>();
|
protected Map<TileEntity, ITickableInstance> tickableInstances = new HashMap<>();
|
||||||
|
protected Map<TileEntity, IDynamicInstance> dynamicInstances = new HashMap<>();
|
||||||
|
|
||||||
protected Map<MaterialType<?>, RenderMaterial<P, ?>> materials = new HashMap<>();
|
protected Map<MaterialType<?>, RenderMaterial<P, ?>> materials = new HashMap<>();
|
||||||
|
|
||||||
|
@ -45,12 +45,18 @@ public abstract class InstancedTileRenderer<P extends BasicProgram> {
|
||||||
if (ticks % 10 == 0) {
|
if (ticks % 10 == 0) {
|
||||||
clean();
|
clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tickableInstances.size() > 0)
|
||||||
|
tickableInstances.values().forEach(ITickableInstance::tick);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void beginFrame(double cameraX, double cameraY, double cameraZ) {
|
public void beginFrame(double cameraX, double cameraY, double cameraZ) {
|
||||||
queuedAdditions.forEach(this::add);
|
if (queuedAdditions.size() > 0) {
|
||||||
queuedAdditions.clear();
|
queuedAdditions.forEach(this::add);
|
||||||
tickableInstances.values().forEach(ITickableInstance::tick);
|
queuedAdditions.clear();
|
||||||
|
}
|
||||||
|
if (dynamicInstances.size() > 0)
|
||||||
|
dynamicInstances.values().forEach(IDynamicInstance::beginFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(RenderType layer, Matrix4f viewProjection, double camX, double camY, double camZ) {
|
public void render(RenderType layer, Matrix4f viewProjection, double camX, double camY, double camZ) {
|
||||||
|
@ -93,8 +99,11 @@ public abstract class InstancedTileRenderer<P extends BasicProgram> {
|
||||||
if (renderer != null) {
|
if (renderer != null) {
|
||||||
instances.put(tile, renderer);
|
instances.put(tile, renderer);
|
||||||
|
|
||||||
|
if (renderer instanceof IDynamicInstance)
|
||||||
|
dynamicInstances.put(tile, (IDynamicInstance) renderer);
|
||||||
|
|
||||||
if (renderer instanceof ITickableInstance)
|
if (renderer instanceof ITickableInstance)
|
||||||
tickableInstances.put(tile, (ITickableInstance) renderer);
|
tickableInstances.put(tile, ((ITickableInstance) renderer));
|
||||||
}
|
}
|
||||||
|
|
||||||
return renderer;
|
return renderer;
|
||||||
|
@ -148,6 +157,7 @@ public abstract class InstancedTileRenderer<P extends BasicProgram> {
|
||||||
if (instance != null) {
|
if (instance != null) {
|
||||||
instance.remove();
|
instance.remove();
|
||||||
instances.remove(tile);
|
instances.remove(tile);
|
||||||
|
dynamicInstances.remove(tile);
|
||||||
tickableInstances.remove(tile);
|
tickableInstances.remove(tile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,7 +172,7 @@ public abstract class InstancedTileRenderer<P extends BasicProgram> {
|
||||||
material.delete();
|
material.delete();
|
||||||
}
|
}
|
||||||
instances.clear();
|
instances.clear();
|
||||||
tickableInstances.clear();
|
dynamicInstances.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canCreateInstance(TileEntity tile) {
|
public boolean canCreateInstance(TileEntity tile) {
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package com.simibubi.create.foundation.render.backend.instancing;
|
package com.simibubi.create.foundation.render.backend.instancing;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.impl.IFlatLight;
|
import com.simibubi.create.foundation.render.backend.instancing.impl.IFlatLight;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
@ -17,24 +16,24 @@ public abstract class TileEntityInstance<T extends TileEntity> {
|
||||||
protected final T tile;
|
protected final T tile;
|
||||||
protected final World world;
|
protected final World world;
|
||||||
protected final BlockPos pos;
|
protected final BlockPos pos;
|
||||||
protected BlockState lastState;
|
protected BlockState blockState;
|
||||||
|
|
||||||
public TileEntityInstance(InstancedTileRenderer<?> modelManager, T tile) {
|
public TileEntityInstance(InstancedTileRenderer<?> modelManager, T tile) {
|
||||||
this.modelManager = modelManager;
|
this.modelManager = modelManager;
|
||||||
this.tile = tile;
|
this.tile = tile;
|
||||||
this.world = tile.getWorld();
|
this.world = tile.getWorld();
|
||||||
this.pos = tile.getPos();
|
this.pos = tile.getPos();
|
||||||
this.lastState = tile.getBlockState();
|
this.blockState = tile.getBlockState();
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void update() {
|
public final void update() {
|
||||||
BlockState currentState = tile.getBlockState();
|
BlockState currentState = tile.getBlockState();
|
||||||
if (lastState == currentState) {
|
if (blockState == currentState) {
|
||||||
onUpdate();
|
onUpdate();
|
||||||
} else {
|
} else {
|
||||||
remove();
|
remove();
|
||||||
lastState = currentState;
|
blockState = currentState;
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.simibubi.create.foundation.tileEntity.renderer;
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
@ -21,8 +22,10 @@ public abstract class ColoredOverlayTileEntityRenderer<T extends TileEntity> ext
|
||||||
@Override
|
@Override
|
||||||
protected void renderSafe(T te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
protected void renderSafe(T te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||||
int light, int overlay) {
|
int light, int overlay) {
|
||||||
SuperByteBuffer render = render(te.getWorld(), te.getPos(), te.getBlockState(), getOverlayBuffer(te),
|
|
||||||
getColor(te, partialTicks));
|
if (FastRenderDispatcher.available(te.getWorld())) return;
|
||||||
|
|
||||||
|
SuperByteBuffer render = render(getOverlayBuffer(te), getColor(te, partialTicks), light);
|
||||||
render.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
|
render.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,10 +33,8 @@ public abstract class ColoredOverlayTileEntityRenderer<T extends TileEntity> ext
|
||||||
|
|
||||||
protected abstract SuperByteBuffer getOverlayBuffer(T te);
|
protected abstract SuperByteBuffer getOverlayBuffer(T te);
|
||||||
|
|
||||||
public static SuperByteBuffer render(World world, BlockPos pos, BlockState state, SuperByteBuffer buffer,
|
public static SuperByteBuffer render(SuperByteBuffer buffer, int color, int light) {
|
||||||
int color) {
|
return buffer.color(color).light(light);
|
||||||
int packedLightmapCoords = WorldRenderer.getLightmapCoordinates(world, state, pos);
|
|
||||||
return buffer.color(color).light(packedLightmapCoords);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue