mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-13 05:54:17 +01:00
okay you can use it now
fixed a lighting bug (with a hack, again) everything now uses the new api (kinetic components on contraptions are slightly broken)
This commit is contained in:
parent
67d59540cf
commit
e690f2b8ac
@ -5,7 +5,7 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
|||||||
import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes;
|
import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes;
|
||||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
|
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||||
import com.simibubi.create.foundation.render.instancing.*;
|
import com.simibubi.create.foundation.render.instancing.*;
|
||||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
@ -227,7 +227,7 @@ public class AllBlockPartials {
|
|||||||
return ctx.getRotating().getModel(this, referenceState);
|
return ctx.getRotating().getModel(this, referenceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public InstancedModel<RotatingData> renderOnRotating(InstancedTileRenderDispatcher ctx, BlockState referenceState) {
|
public InstancedModel<RotatingData> renderOnRotating(InstancedTileRenderer ctx, BlockState referenceState) {
|
||||||
return ctx.get(KineticRenderMaterials.ROTATING).getModel(this, referenceState);
|
return ctx.get(KineticRenderMaterials.ROTATING).getModel(this, referenceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,7 +236,7 @@ public class AllBlockPartials {
|
|||||||
return ctx.getBelts().getModel(this, referenceState);
|
return ctx.getBelts().getModel(this, referenceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public InstancedModel<BeltData> renderOnBelt(InstancedTileRenderDispatcher ctx, BlockState referenceState) {
|
public InstancedModel<BeltData> renderOnBelt(InstancedTileRenderer ctx, BlockState referenceState) {
|
||||||
return ctx.get(KineticRenderMaterials.BELTS).getModel(this, referenceState);
|
return ctx.get(KineticRenderMaterials.BELTS).getModel(this, referenceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,7 +246,7 @@ public class AllBlockPartials {
|
|||||||
return renderOnDirectionalSouthRotating(ctx, referenceState, facing);
|
return renderOnDirectionalSouthRotating(ctx, referenceState, facing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public InstancedModel<RotatingData> renderOnDirectionalSouthRotating(InstancedTileRenderDispatcher dispatcher, BlockState referenceState) {
|
public InstancedModel<RotatingData> renderOnDirectionalSouthRotating(InstancedTileRenderer dispatcher, BlockState referenceState) {
|
||||||
Direction facing = referenceState.get(FACING);
|
Direction facing = referenceState.get(FACING);
|
||||||
return renderOnDirectionalSouthRotating(dispatcher, referenceState, facing);
|
return renderOnDirectionalSouthRotating(dispatcher, referenceState, facing);
|
||||||
}
|
}
|
||||||
@ -256,7 +256,7 @@ public class AllBlockPartials {
|
|||||||
return renderOnDirectionalSouthRotating(ctx.getKinetics(), referenceState, facing);
|
return renderOnDirectionalSouthRotating(ctx.getKinetics(), referenceState, facing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public InstancedModel<RotatingData> renderOnDirectionalSouthRotating(InstancedTileRenderDispatcher dispatcher, BlockState referenceState, Direction facing) {
|
public InstancedModel<RotatingData> renderOnDirectionalSouthRotating(InstancedTileRenderer dispatcher, BlockState referenceState, Direction facing) {
|
||||||
Supplier<MatrixStack> ms = () -> {
|
Supplier<MatrixStack> ms = () -> {
|
||||||
MatrixStack stack = new MatrixStack();
|
MatrixStack stack = new MatrixStack();
|
||||||
MatrixStacker.of(stack)
|
MatrixStacker.of(stack)
|
||||||
|
@ -4,6 +4,7 @@ import com.simibubi.create.content.contraptions.base.*;
|
|||||||
import com.simibubi.create.content.contraptions.components.actors.*;
|
import com.simibubi.create.content.contraptions.components.actors.*;
|
||||||
import com.simibubi.create.content.contraptions.components.clock.CuckooClockRenderer;
|
import com.simibubi.create.content.contraptions.components.clock.CuckooClockRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.clock.CuckooClockTileEntity;
|
import com.simibubi.create.content.contraptions.components.clock.CuckooClockTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterInstance;
|
||||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterRenderer;
|
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity;
|
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.crank.HandCrankRenderer;
|
import com.simibubi.create.content.contraptions.components.crank.HandCrankRenderer;
|
||||||
@ -14,6 +15,7 @@ import com.simibubi.create.content.contraptions.components.deployer.DeployerRend
|
|||||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity;
|
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.fan.EncasedFanRenderer;
|
import com.simibubi.create.content.contraptions.components.fan.EncasedFanRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.fan.EncasedFanTileEntity;
|
import com.simibubi.create.content.contraptions.components.fan.EncasedFanTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.fan.FanInstance;
|
||||||
import com.simibubi.create.content.contraptions.components.fan.NozzleTileEntity;
|
import com.simibubi.create.content.contraptions.components.fan.NozzleTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelRenderer;
|
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelTileEntity;
|
import com.simibubi.create.content.contraptions.components.flywheel.FlywheelTileEntity;
|
||||||
@ -28,6 +30,7 @@ import com.simibubi.create.content.contraptions.components.motor.CreativeMotorRe
|
|||||||
import com.simibubi.create.content.contraptions.components.motor.CreativeMotorTileEntity;
|
import com.simibubi.create.content.contraptions.components.motor.CreativeMotorTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.press.MechanicalPressRenderer;
|
import com.simibubi.create.content.contraptions.components.press.MechanicalPressRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
|
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.saw.SawInstance;
|
||||||
import com.simibubi.create.content.contraptions.components.saw.SawRenderer;
|
import com.simibubi.create.content.contraptions.components.saw.SawRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
|
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BearingRenderer;
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BearingRenderer;
|
||||||
@ -133,20 +136,21 @@ public class AllTileEntities {
|
|||||||
.tileEntity("encased_shaft", EncasedShaftTileEntity::new)
|
.tileEntity("encased_shaft", EncasedShaftTileEntity::new)
|
||||||
.validBlocks(AllBlocks.ANDESITE_ENCASED_SHAFT, AllBlocks.BRASS_ENCASED_SHAFT, AllBlocks.ENCASED_CHAIN_DRIVE)
|
.validBlocks(AllBlocks.ANDESITE_ENCASED_SHAFT, AllBlocks.BRASS_ENCASED_SHAFT, AllBlocks.ENCASED_CHAIN_DRIVE)
|
||||||
.renderer(() -> EncasedShaftRenderer::new)
|
.renderer(() -> EncasedShaftRenderer::new)
|
||||||
.onRegister(SingleRotatingShaftInstance::register)
|
.onRegister(ShaftInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<AdjustablePulleyTileEntity> ADJUSTABLE_PULLEY = Create.registrate()
|
public static final TileEntityEntry<AdjustablePulleyTileEntity> ADJUSTABLE_PULLEY = Create.registrate()
|
||||||
.tileEntity("adjustable_pulley", AdjustablePulleyTileEntity::new)
|
.tileEntity("adjustable_pulley", AdjustablePulleyTileEntity::new)
|
||||||
.validBlocks(AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT)
|
.validBlocks(AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT)
|
||||||
.renderer(() -> EncasedShaftRenderer::new)
|
.renderer(() -> EncasedShaftRenderer::new)
|
||||||
.onRegister(SingleRotatingShaftInstance::register)
|
.onRegister(ShaftInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<EncasedFanTileEntity> ENCASED_FAN = Create.registrate()
|
public static final TileEntityEntry<EncasedFanTileEntity> ENCASED_FAN = Create.registrate()
|
||||||
.tileEntity("encased_fan", EncasedFanTileEntity::new)
|
.tileEntity("encased_fan", EncasedFanTileEntity::new)
|
||||||
.validBlocks(AllBlocks.ENCASED_FAN)
|
.validBlocks(AllBlocks.ENCASED_FAN)
|
||||||
.renderer(() -> EncasedFanRenderer::new)
|
.renderer(() -> EncasedFanRenderer::new)
|
||||||
|
.onRegister(FanInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<NozzleTileEntity> NOZZLE = Create.registrate()
|
public static final TileEntityEntry<NozzleTileEntity> NOZZLE = Create.registrate()
|
||||||
@ -173,6 +177,7 @@ public class AllTileEntities {
|
|||||||
.tileEntity("turntable", TurntableTileEntity::new)
|
.tileEntity("turntable", TurntableTileEntity::new)
|
||||||
.validBlocks(AllBlocks.TURNTABLE)
|
.validBlocks(AllBlocks.TURNTABLE)
|
||||||
.renderer(() -> KineticTileEntityRenderer::new)
|
.renderer(() -> KineticTileEntityRenderer::new)
|
||||||
|
.onRegister(SingleRotatingInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<HandCrankTileEntity> HAND_CRANK = Create.registrate()
|
public static final TileEntityEntry<HandCrankTileEntity> HAND_CRANK = Create.registrate()
|
||||||
@ -180,7 +185,7 @@ public class AllTileEntities {
|
|||||||
.validBlocks(AllBlocks.HAND_CRANK, AllBlocks.COPPER_VALVE_HANDLE)
|
.validBlocks(AllBlocks.HAND_CRANK, AllBlocks.COPPER_VALVE_HANDLE)
|
||||||
.validBlocks(AllBlocks.DYED_VALVE_HANDLES)
|
.validBlocks(AllBlocks.DYED_VALVE_HANDLES)
|
||||||
.renderer(() -> HandCrankRenderer::new)
|
.renderer(() -> HandCrankRenderer::new)
|
||||||
.onRegister(BackHalfShaftInstance::register)
|
.onRegister(SingleRotatingInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<CuckooClockTileEntity> CUCKOO_CLOCK = Create.registrate()
|
public static final TileEntityEntry<CuckooClockTileEntity> CUCKOO_CLOCK = Create.registrate()
|
||||||
@ -223,7 +228,7 @@ public class AllTileEntities {
|
|||||||
.tileEntity("fluid_valve", FluidValveTileEntity::new)
|
.tileEntity("fluid_valve", FluidValveTileEntity::new)
|
||||||
.validBlocks(AllBlocks.FLUID_VALVE)
|
.validBlocks(AllBlocks.FLUID_VALVE)
|
||||||
.renderer(() -> FluidValveRenderer::new)
|
.renderer(() -> FluidValveRenderer::new)
|
||||||
.onRegister(SingleRotatingShaftInstance::register)
|
.onRegister(ShaftInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<FluidTankTileEntity> FLUID_TANK = Create.registrate()
|
public static final TileEntityEntry<FluidTankTileEntity> FLUID_TANK = Create.registrate()
|
||||||
@ -242,7 +247,7 @@ public class AllTileEntities {
|
|||||||
.tileEntity("hose_pulley", HosePulleyTileEntity::new)
|
.tileEntity("hose_pulley", HosePulleyTileEntity::new)
|
||||||
.validBlocks(AllBlocks.HOSE_PULLEY)
|
.validBlocks(AllBlocks.HOSE_PULLEY)
|
||||||
.renderer(() -> HosePulleyRenderer::new)
|
.renderer(() -> HosePulleyRenderer::new)
|
||||||
.onRegister(SingleRotatingShaftInstance::register)
|
.onRegister(ShaftInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<SpoutTileEntity> SPOUT = Create.registrate()
|
public static final TileEntityEntry<SpoutTileEntity> SPOUT = Create.registrate()
|
||||||
@ -293,7 +298,7 @@ public class AllTileEntities {
|
|||||||
.tileEntity("mechanical_piston", MechanicalPistonTileEntity::new)
|
.tileEntity("mechanical_piston", MechanicalPistonTileEntity::new)
|
||||||
.validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON)
|
.validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON)
|
||||||
.renderer(() -> MechanicalPistonRenderer::new)
|
.renderer(() -> MechanicalPistonRenderer::new)
|
||||||
.onRegister(SingleRotatingShaftInstance::register)
|
.onRegister(ShaftInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<WindmillBearingTileEntity> WINDMILL_BEARING = Create.registrate()
|
public static final TileEntityEntry<WindmillBearingTileEntity> WINDMILL_BEARING = Create.registrate()
|
||||||
@ -321,7 +326,7 @@ public class AllTileEntities {
|
|||||||
.tileEntity("rope_pulley", PulleyTileEntity::new)
|
.tileEntity("rope_pulley", PulleyTileEntity::new)
|
||||||
.validBlocks(AllBlocks.ROPE_PULLEY)
|
.validBlocks(AllBlocks.ROPE_PULLEY)
|
||||||
.renderer(() -> PulleyRenderer::new)
|
.renderer(() -> PulleyRenderer::new)
|
||||||
.onRegister(SingleRotatingShaftInstance::register)
|
.onRegister(ShaftInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<ChassisTileEntity> CHASSIS = Create.registrate()
|
public static final TileEntityEntry<ChassisTileEntity> CHASSIS = Create.registrate()
|
||||||
@ -341,6 +346,7 @@ public class AllTileEntities {
|
|||||||
.tileEntity("saw", SawTileEntity::new)
|
.tileEntity("saw", SawTileEntity::new)
|
||||||
.validBlocks(AllBlocks.MECHANICAL_SAW)
|
.validBlocks(AllBlocks.MECHANICAL_SAW)
|
||||||
.renderer(() -> SawRenderer::new)
|
.renderer(() -> SawRenderer::new)
|
||||||
|
.onRegister(SawInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<HarvesterTileEntity> HARVESTER = Create.registrate()
|
public static final TileEntityEntry<HarvesterTileEntity> HARVESTER = Create.registrate()
|
||||||
@ -407,7 +413,7 @@ public class AllTileEntities {
|
|||||||
.tileEntity("mechanical_press", MechanicalPressTileEntity::new)
|
.tileEntity("mechanical_press", MechanicalPressTileEntity::new)
|
||||||
.validBlocks(AllBlocks.MECHANICAL_PRESS)
|
.validBlocks(AllBlocks.MECHANICAL_PRESS)
|
||||||
.renderer(() -> MechanicalPressRenderer::new)
|
.renderer(() -> MechanicalPressRenderer::new)
|
||||||
.onRegister(SingleRotatingShaftInstance::register)
|
.onRegister(ShaftInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<MechanicalMixerTileEntity> MECHANICAL_MIXER = Create.registrate()
|
public static final TileEntityEntry<MechanicalMixerTileEntity> MECHANICAL_MIXER = Create.registrate()
|
||||||
@ -421,7 +427,7 @@ public class AllTileEntities {
|
|||||||
.tileEntity("deployer", DeployerTileEntity::new)
|
.tileEntity("deployer", DeployerTileEntity::new)
|
||||||
.validBlocks(AllBlocks.DEPLOYER)
|
.validBlocks(AllBlocks.DEPLOYER)
|
||||||
.renderer(() -> DeployerRenderer::new)
|
.renderer(() -> DeployerRenderer::new)
|
||||||
.onRegister(SingleRotatingShaftInstance::register)
|
.onRegister(ShaftInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<BasinTileEntity> BASIN = Create.registrate()
|
public static final TileEntityEntry<BasinTileEntity> BASIN = Create.registrate()
|
||||||
@ -440,7 +446,7 @@ public class AllTileEntities {
|
|||||||
.tileEntity("mechanical_crafter", MechanicalCrafterTileEntity::new)
|
.tileEntity("mechanical_crafter", MechanicalCrafterTileEntity::new)
|
||||||
.validBlocks(AllBlocks.MECHANICAL_CRAFTER)
|
.validBlocks(AllBlocks.MECHANICAL_CRAFTER)
|
||||||
.renderer(() -> MechanicalCrafterRenderer::new)
|
.renderer(() -> MechanicalCrafterRenderer::new)
|
||||||
.onRegister(ShaftlessCogInstance::register)
|
.onRegister(MechanicalCrafterInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<SequencedGearshiftTileEntity> SEQUENCED_GEARSHIFT = Create.registrate()
|
public static final TileEntityEntry<SequencedGearshiftTileEntity> SEQUENCED_GEARSHIFT = Create.registrate()
|
||||||
@ -454,21 +460,21 @@ public class AllTileEntities {
|
|||||||
.tileEntity("rotation_speed_controller", SpeedControllerTileEntity::new)
|
.tileEntity("rotation_speed_controller", SpeedControllerTileEntity::new)
|
||||||
.validBlocks(AllBlocks.ROTATION_SPEED_CONTROLLER)
|
.validBlocks(AllBlocks.ROTATION_SPEED_CONTROLLER)
|
||||||
.renderer(() -> SpeedControllerRenderer::new)
|
.renderer(() -> SpeedControllerRenderer::new)
|
||||||
.onRegister(SingleRotatingShaftInstance::register)
|
.onRegister(ShaftInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<SpeedGaugeTileEntity> SPEEDOMETER = Create.registrate()
|
public static final TileEntityEntry<SpeedGaugeTileEntity> SPEEDOMETER = Create.registrate()
|
||||||
.tileEntity("speedometer", SpeedGaugeTileEntity::new)
|
.tileEntity("speedometer", SpeedGaugeTileEntity::new)
|
||||||
.validBlocks(AllBlocks.SPEEDOMETER)
|
.validBlocks(AllBlocks.SPEEDOMETER)
|
||||||
.renderer(() -> GaugeRenderer::speed)
|
.renderer(() -> GaugeRenderer::speed)
|
||||||
.onRegister(SingleRotatingShaftInstance::register)
|
.onRegister(ShaftInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<StressGaugeTileEntity> STRESSOMETER = Create.registrate()
|
public static final TileEntityEntry<StressGaugeTileEntity> STRESSOMETER = Create.registrate()
|
||||||
.tileEntity("stressometer", StressGaugeTileEntity::new)
|
.tileEntity("stressometer", StressGaugeTileEntity::new)
|
||||||
.validBlocks(AllBlocks.STRESSOMETER)
|
.validBlocks(AllBlocks.STRESSOMETER)
|
||||||
.renderer(() -> GaugeRenderer::stress)
|
.renderer(() -> GaugeRenderer::stress)
|
||||||
.onRegister(SingleRotatingShaftInstance::register)
|
.onRegister(ShaftInstance::register)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<AnalogLeverTileEntity> ANALOG_LEVER = Create.registrate()
|
public static final TileEntityEntry<AnalogLeverTileEntity> ANALOG_LEVER = Create.registrate()
|
||||||
|
@ -11,7 +11,7 @@ import com.simibubi.create.foundation.block.render.CustomBlockModels;
|
|||||||
import com.simibubi.create.foundation.block.render.SpriteShifter;
|
import com.simibubi.create.foundation.block.render.SpriteShifter;
|
||||||
import com.simibubi.create.foundation.item.CustomItemModels;
|
import com.simibubi.create.foundation.item.CustomItemModels;
|
||||||
import com.simibubi.create.foundation.item.CustomRenderedItems;
|
import com.simibubi.create.foundation.item.CustomRenderedItems;
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.SuperByteBufferCache;
|
import com.simibubi.create.foundation.render.SuperByteBufferCache;
|
||||||
import com.simibubi.create.foundation.render.contraption.ContraptionRenderDispatcher;
|
import com.simibubi.create.foundation.render.contraption.ContraptionRenderDispatcher;
|
||||||
import com.simibubi.create.foundation.render.gl.shader.ShaderHelper;
|
import com.simibubi.create.foundation.render.gl.shader.ShaderHelper;
|
||||||
@ -44,7 +44,7 @@ public class CreateClient {
|
|||||||
public static SchematicHandler schematicHandler;
|
public static SchematicHandler schematicHandler;
|
||||||
public static SchematicAndQuillHandler schematicAndQuillHandler;
|
public static SchematicAndQuillHandler schematicAndQuillHandler;
|
||||||
public static SuperByteBufferCache bufferCache;
|
public static SuperByteBufferCache bufferCache;
|
||||||
public static InstancedTileRenderDispatcher kineticRenderer;
|
public static InstancedTileRenderer kineticRenderer;
|
||||||
public static final Outliner outliner = new Outliner();
|
public static final Outliner outliner = new Outliner();
|
||||||
|
|
||||||
private static CustomBlockModels customBlockModels;
|
private static CustomBlockModels customBlockModels;
|
||||||
@ -72,7 +72,7 @@ public class CreateClient {
|
|||||||
bufferCache.registerCompartment(KineticTileEntityRenderer.KINETIC_TILE);
|
bufferCache.registerCompartment(KineticTileEntityRenderer.KINETIC_TILE);
|
||||||
bufferCache.registerCompartment(ContraptionRenderer.CONTRAPTION, 20);
|
bufferCache.registerCompartment(ContraptionRenderer.CONTRAPTION, 20);
|
||||||
|
|
||||||
kineticRenderer = new InstancedTileRenderDispatcher();
|
kineticRenderer = new InstancedTileRenderer();
|
||||||
|
|
||||||
AllKeys.register();
|
AllKeys.register();
|
||||||
AllContainerTypes.registerScreenFactories();
|
AllContainerTypes.registerScreenFactories();
|
||||||
|
@ -1,17 +1,20 @@
|
|||||||
package com.simibubi.create.content.contraptions.base;
|
package com.simibubi.create.content.contraptions.base;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
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 BackHalfShaftInstance extends HalfShaftInstance {
|
public class BackHalfShaftInstance extends HalfShaftInstance {
|
||||||
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
||||||
InstancedTileRenderRegistry.instance.register(type, BackHalfShaftInstance::new);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, BackHalfShaftInstance::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
public BackHalfShaftInstance(InstancedTileRenderDispatcher modelManager, KineticTileEntity tile) {
|
public BackHalfShaftInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.simibubi.create.content.contraptions.base;
|
package com.simibubi.create.content.contraptions.base;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlockPartials;
|
import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
@ -9,13 +9,16 @@ import net.minecraft.block.BlockState;
|
|||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
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 static void register(TileEntityType<? extends KineticTileEntity> type) {
|
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
||||||
InstancedTileRenderRegistry.instance.register(type, HalfShaftInstance::new);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, HalfShaftInstance::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
public HalfShaftInstance(InstancedTileRenderDispatcher modelManager, KineticTileEntity tile) {
|
public HalfShaftInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,17 +1,20 @@
|
|||||||
package com.simibubi.create.content.contraptions.base;
|
package com.simibubi.create.content.contraptions.base;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
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 {
|
||||||
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
||||||
InstancedTileRenderRegistry.instance.register(type, HorizontalHalfShaftInstance::new);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, HorizontalHalfShaftInstance::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
public HorizontalHalfShaftInstance(InstancedTileRenderDispatcher modelManager, KineticTileEntity tile) {
|
public HorizontalHalfShaftInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -472,9 +472,7 @@ public abstract class KineticTileEntity extends SmartTileEntity
|
|||||||
@Override
|
@Override
|
||||||
public void requestModelDataUpdate() {
|
public void requestModelDataUpdate() {
|
||||||
super.requestModelDataUpdate();
|
super.requestModelDataUpdate();
|
||||||
if (this.removed) {
|
if (!this.removed) {
|
||||||
FastRenderDispatcher.enqueueRemove(this);
|
|
||||||
} else {
|
|
||||||
FastRenderDispatcher.enqueueUpdate(this);
|
FastRenderDispatcher.enqueueUpdate(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import com.simibubi.create.content.contraptions.KineticDebugger;
|
|||||||
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
|
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
|
||||||
import com.simibubi.create.foundation.render.Compartment;
|
import com.simibubi.create.foundation.render.Compartment;
|
||||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||||
import com.simibubi.create.foundation.render.instancing.IInstancedTileEntityRenderer;
|
|
||||||
import com.simibubi.create.foundation.render.instancing.InstanceContext;
|
import com.simibubi.create.foundation.render.instancing.InstanceContext;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
@ -26,7 +25,7 @@ import net.minecraftforge.api.distmarker.Dist;
|
|||||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
|
||||||
@EventBusSubscriber(value = Dist.CLIENT)
|
@EventBusSubscriber(value = Dist.CLIENT)
|
||||||
public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTileEntity> implements IInstancedTileEntityRenderer<KineticTileEntity> {
|
public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTileEntity> {
|
||||||
|
|
||||||
public static final Compartment<BlockState> KINETIC_TILE = new Compartment<>();
|
public static final Compartment<BlockState> KINETIC_TILE = new Compartment<>();
|
||||||
public static boolean rainbowMode = false;
|
public static boolean rainbowMode = false;
|
||||||
@ -45,12 +44,10 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
|
|||||||
// addInstanceData(new InstanceContext.World<>(te));
|
// addInstanceData(new InstanceContext.World<>(te));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addInstanceData(InstanceContext<KineticTileEntity> ctx) {
|
public void addInstanceData(InstanceContext<KineticTileEntity> ctx) {
|
||||||
renderRotatingBuffer(ctx, getRotatedModel(ctx));
|
renderRotatingBuffer(ctx, getRotatedModel(ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markForRebuild(InstanceContext<KineticTileEntity> ctx) {
|
public void markForRebuild(InstanceContext<KineticTileEntity> ctx) {
|
||||||
getRotatedModel(ctx).clearInstanceData();
|
getRotatedModel(ctx).clearInstanceData();
|
||||||
}
|
}
|
||||||
|
@ -3,54 +3,46 @@ package com.simibubi.create.content.contraptions.base;
|
|||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
|
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock;
|
import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock;
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.*;
|
import com.simibubi.create.foundation.render.instancing.*;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.world.LightType;
|
import net.minecraft.world.LightType;
|
||||||
import net.minecraft.world.World;
|
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public abstract class KineticTileInstance<T extends KineticTileEntity> extends TileEntityInstance<T> {
|
public abstract class KineticTileInstance<T extends KineticTileEntity> extends TileEntityInstance<T> {
|
||||||
|
|
||||||
public KineticTileInstance(InstancedTileRenderDispatcher modelManager, T tile) {
|
public KineticTileInstance(InstancedTileRenderer modelManager, T tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateRotation(InstanceKey<RotatingData> key, Direction.Axis axis) {
|
protected final void updateRotation(InstanceKey<RotatingData> key, Direction.Axis axis) {
|
||||||
key.modifyInstance(data -> {
|
key.modifyInstance(data -> {
|
||||||
final BlockPos pos = tile.getPos();
|
|
||||||
|
|
||||||
data.setRotationalSpeed(tile.getSpeed())
|
data.setRotationalSpeed(tile.getSpeed())
|
||||||
.setRotationOffset(getRotationOffsetForPosition(tile, pos, axis))
|
.setRotationOffset(getRotationOffset(axis))
|
||||||
.setRotationAxis(axis);
|
.setRotationAxis(axis);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final Consumer<RotatingData> setupFunc(float speed, Direction.Axis axis) {
|
protected final Consumer<RotatingData> setupFunc(float speed, Direction.Axis axis) {
|
||||||
return data -> {
|
return data -> {
|
||||||
final BlockPos pos = tile.getPos();
|
data.setBlockLight(tile.getWorld().getLightLevel(LightType.BLOCK, pos))
|
||||||
|
.setSkyLight(tile.getWorld().getLightLevel(LightType.SKY, pos))
|
||||||
data.setBlockLight(tile.getWorld().getLightLevel(LightType.BLOCK, tile.getPos()))
|
|
||||||
.setSkyLight(tile.getWorld().getLightLevel(LightType.SKY, tile.getPos()))
|
|
||||||
.setTileEntity(tile)
|
.setTileEntity(tile)
|
||||||
.setRotationalSpeed(speed)
|
.setRotationalSpeed(speed)
|
||||||
.setRotationOffset(getRotationOffsetForPosition(tile, pos, axis))
|
.setRotationOffset(getRotationOffset(axis))
|
||||||
.setRotationAxis(axis);
|
.setRotationAxis(axis);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final void relight(KineticData<?> data) {
|
protected final void relight(KineticData<?> data) {
|
||||||
World world = tile.getWorld();
|
data.setBlockLight(world.getLightLevel(LightType.BLOCK, pos))
|
||||||
|
.setSkyLight(world.getLightLevel(LightType.SKY, pos));
|
||||||
data.setBlockLight(world.getLightLevel(LightType.BLOCK, tile.getPos()))
|
|
||||||
.setSkyLight(world.getLightLevel(LightType.SKY, tile.getPos()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static float getRotationOffsetForPosition(KineticTileEntity te, final BlockPos pos, final Direction.Axis axis) {
|
protected float getRotationOffset(final Direction.Axis axis) {
|
||||||
float offset = CogWheelBlock.isLargeCog(te.getBlockState()) ? 11.25f : 0;
|
float offset = CogWheelBlock.isLargeCog(lastState) ? 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) {
|
||||||
@ -64,9 +56,8 @@ public abstract class KineticTileInstance<T extends KineticTileEntity> extends T
|
|||||||
.with(ShaftBlock.AXIS, axis);
|
.with(ShaftBlock.AXIS, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Direction.Axis getRotationAxisOf(KineticTileEntity te) {
|
public Direction.Axis getRotationAxis() {
|
||||||
return ((IRotate) te.getBlockState()
|
return ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
|
||||||
.getBlock()).getRotationAxis(te.getBlockState());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final RenderMaterial<InstancedModel<RotatingData>> rotatingMaterial() {
|
protected final RenderMaterial<InstancedModel<RotatingData>> rotatingMaterial() {
|
||||||
|
@ -1,18 +1,21 @@
|
|||||||
package com.simibubi.create.content.contraptions.base;
|
package com.simibubi.create.content.contraptions.base;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlockPartials;
|
import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
public class ShaftlessCogInstance extends SingleRotatingInstance {
|
public class ShaftlessCogInstance extends SingleRotatingInstance {
|
||||||
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
||||||
InstancedTileRenderRegistry.instance.register(type, ShaftlessCogInstance::new);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, ShaftlessCogInstance::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ShaftlessCogInstance(InstancedTileRenderDispatcher modelManager, KineticTileEntity tile) {
|
public ShaftlessCogInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.simibubi.create.content.contraptions.base;
|
package com.simibubi.create.content.contraptions.base;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstanceKey;
|
import com.simibubi.create.foundation.render.instancing.InstanceKey;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
@ -8,29 +8,32 @@ import com.simibubi.create.foundation.render.instancing.RotatingData;
|
|||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
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;
|
||||||
|
|
||||||
import static com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer.KINETIC_TILE;
|
import static com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer.KINETIC_TILE;
|
||||||
|
|
||||||
public class SingleRotatingInstance extends KineticTileInstance<KineticTileEntity> {
|
public class SingleRotatingInstance extends KineticTileInstance<KineticTileEntity> {
|
||||||
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
||||||
InstancedTileRenderRegistry.instance.register(type, SingleRotatingInstance::new);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, SingleRotatingInstance::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected InstanceKey<RotatingData> rotatingModelKey;
|
protected InstanceKey<RotatingData> rotatingModelKey;
|
||||||
|
|
||||||
public SingleRotatingInstance(InstancedTileRenderDispatcher modelManager, KineticTileEntity tile) {
|
public SingleRotatingInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
Direction.Axis axis = ((IRotate) tile.getBlockState().getBlock()).getRotationAxis(tile.getBlockState());
|
Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
|
||||||
rotatingModelKey = getModel().setupInstance(setupFunc(tile.getSpeed(), axis));
|
rotatingModelKey = getModel().setupInstance(setupFunc(tile.getSpeed(), axis));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdate() {
|
public void onUpdate() {
|
||||||
Direction.Axis axis = ((IRotate) tile.getBlockState().getBlock()).getRotationAxis(tile.getBlockState());
|
Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
|
||||||
updateRotation(rotatingModelKey, axis);
|
updateRotation(rotatingModelKey, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +49,7 @@ public class SingleRotatingInstance extends KineticTileInstance<KineticTileEntit
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected BlockState getRenderedBlockState() {
|
protected BlockState getRenderedBlockState() {
|
||||||
return tile.getBlockState();
|
return lastState;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected InstancedModel<RotatingData> getModel() {
|
protected InstancedModel<RotatingData> getModel() {
|
||||||
|
@ -3,18 +3,20 @@ package com.simibubi.create.content.contraptions.components.actors;
|
|||||||
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.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
public class DrillInstance extends SingleRotatingInstance {
|
public class DrillInstance extends SingleRotatingInstance {
|
||||||
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
||||||
InstancedTileRenderRegistry.instance.register(type, DrillInstance::new);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
}
|
InstancedTileRenderRegistry.instance.register(type, DrillInstance::new)); }
|
||||||
|
|
||||||
public DrillInstance(InstancedTileRenderDispatcher modelManager, KineticTileEntity tile) {
|
public DrillInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
package com.simibubi.create.content.contraptions.components.crafter;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
||||||
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
|
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class MechanicalCrafterInstance extends SingleRotatingInstance {
|
||||||
|
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
||||||
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, MechanicalCrafterInstance::new));
|
||||||
|
}
|
||||||
|
|
||||||
|
public MechanicalCrafterInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
|
||||||
|
super(modelManager, tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected InstancedModel<RotatingData> getModel() {
|
||||||
|
Direction facing = lastState.get(MechanicalCrafterBlock.HORIZONTAL_FACING);
|
||||||
|
|
||||||
|
Supplier<MatrixStack> ms = () -> {
|
||||||
|
MatrixStack stack = new MatrixStack();
|
||||||
|
MatrixStacker.of(stack)
|
||||||
|
.centre()
|
||||||
|
.rotateZ(90)
|
||||||
|
.rotateY(AngleHelper.horizontalAngle(facing))
|
||||||
|
.rotateX(AngleHelper.verticalAngle(facing))
|
||||||
|
.unCentre();
|
||||||
|
return stack;
|
||||||
|
};
|
||||||
|
return rotatingMaterial().getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, lastState, facing, ms);
|
||||||
|
}
|
||||||
|
}
|
@ -9,7 +9,6 @@ import com.simibubi.create.content.contraptions.components.deployer.DeployerTile
|
|||||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.State;
|
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.State;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||||
import com.simibubi.create.foundation.render.instancing.IInstancedTileEntityRenderer;
|
|
||||||
import com.simibubi.create.foundation.render.instancing.InstanceContext;
|
import com.simibubi.create.foundation.render.instancing.InstanceContext;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer;
|
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer;
|
||||||
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
||||||
@ -33,7 +32,7 @@ import net.minecraft.world.World;
|
|||||||
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 DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity> implements IInstancedTileEntityRenderer<DeployerTileEntity> {
|
public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity> {
|
||||||
|
|
||||||
public DeployerRenderer(TileEntityRendererDispatcher dispatcher) {
|
public DeployerRenderer(TileEntityRendererDispatcher dispatcher) {
|
||||||
super(dispatcher);
|
super(dispatcher);
|
||||||
@ -53,12 +52,10 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addInstanceData(InstanceContext<DeployerTileEntity> ctx) {
|
public void addInstanceData(InstanceContext<DeployerTileEntity> ctx) {
|
||||||
KineticTileEntityRenderer.renderRotatingKineticBlock(ctx, getRenderedBlockState(ctx.te));
|
KineticTileEntityRenderer.renderRotatingKineticBlock(ctx, getRenderedBlockState(ctx.te));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markForRebuild(InstanceContext<DeployerTileEntity> ctx) {
|
public void markForRebuild(InstanceContext<DeployerTileEntity> ctx) {
|
||||||
KineticTileEntityRenderer.markForRebuild(ctx, getRenderedBlockState(ctx.te));
|
KineticTileEntityRenderer.markForRebuild(ctx, getRenderedBlockState(ctx.te));
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,117 @@
|
|||||||
|
package com.simibubi.create.content.contraptions.components.fan;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
|
import com.simibubi.create.content.contraptions.base.IRotate;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
||||||
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.InstanceKey;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
import net.minecraft.world.LightType;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
|
import static net.minecraft.state.properties.BlockStateProperties.FACING;
|
||||||
|
|
||||||
|
public class FanInstance extends KineticTileInstance<EncasedFanTileEntity> {
|
||||||
|
public static void register(TileEntityType<? extends EncasedFanTileEntity> type) {
|
||||||
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, FanInstance::new));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected InstanceKey<RotatingData> shaft;
|
||||||
|
protected InstanceKey<RotatingData> fan;
|
||||||
|
|
||||||
|
public FanInstance(InstancedTileRenderer modelManager, EncasedFanTileEntity tile) {
|
||||||
|
super(modelManager, tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void init() {
|
||||||
|
final Direction direction = lastState.get(FACING);
|
||||||
|
final Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
|
||||||
|
|
||||||
|
InstancedModel<RotatingData> shaftHalf =
|
||||||
|
AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState, direction.getOpposite());
|
||||||
|
InstancedModel<RotatingData> fanInner =
|
||||||
|
AllBlockPartials.ENCASED_FAN_INNER.renderOnDirectionalSouthRotating(modelManager, lastState, direction.getOpposite());
|
||||||
|
|
||||||
|
shaft = shaftHalf.setupInstance(data -> {
|
||||||
|
BlockPos behind = pos.offset(direction.getOpposite());
|
||||||
|
int blockLight = world.getLightLevel(LightType.BLOCK, behind);
|
||||||
|
int skyLight = world.getLightLevel(LightType.SKY, behind);
|
||||||
|
|
||||||
|
data.setRotationalSpeed(tile.getSpeed())
|
||||||
|
.setRotationOffset(getRotationOffset(axis))
|
||||||
|
.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector())
|
||||||
|
.setTileEntity(tile)
|
||||||
|
.setBlockLight(blockLight)
|
||||||
|
.setSkyLight(skyLight);
|
||||||
|
});
|
||||||
|
fan = fanInner.setupInstance(data -> {
|
||||||
|
BlockPos inFront = pos.offset(direction);
|
||||||
|
int blockLight = world.getLightLevel(LightType.BLOCK, inFront);
|
||||||
|
int skyLight = world.getLightLevel(LightType.SKY, inFront);
|
||||||
|
|
||||||
|
data.setRotationalSpeed(getFanSpeed())
|
||||||
|
.setRotationOffset(getRotationOffset(axis))
|
||||||
|
.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector())
|
||||||
|
.setTileEntity(tile)
|
||||||
|
.setBlockLight(blockLight)
|
||||||
|
.setSkyLight(skyLight);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private float getFanSpeed() {
|
||||||
|
float speed = tile.getSpeed() * 5;
|
||||||
|
if (speed > 0)
|
||||||
|
speed = MathHelper.clamp(speed, 80, 64 * 20);
|
||||||
|
if (speed < 0)
|
||||||
|
speed = MathHelper.clamp(speed, -64 * 20, -80);
|
||||||
|
return speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onUpdate() {
|
||||||
|
Direction.Axis axis = lastState.get(FACING).getAxis();
|
||||||
|
updateRotation(shaft, axis);
|
||||||
|
|
||||||
|
fan.modifyInstance(data -> {
|
||||||
|
data.setRotationalSpeed(getFanSpeed())
|
||||||
|
.setRotationOffset(getRotationOffset(axis))
|
||||||
|
.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateLight() {
|
||||||
|
final Direction direction = lastState.get(FACING);
|
||||||
|
|
||||||
|
shaft.modifyInstance(data -> {
|
||||||
|
BlockPos behind = pos.offset(direction.getOpposite());
|
||||||
|
int blockLight = world.getLightLevel(LightType.BLOCK, behind);
|
||||||
|
int skyLight = world.getLightLevel(LightType.SKY, behind);
|
||||||
|
data.setBlockLight(blockLight)
|
||||||
|
.setSkyLight(skyLight);
|
||||||
|
});
|
||||||
|
fan.modifyInstance(data -> {
|
||||||
|
BlockPos inFront = pos.offset(direction);
|
||||||
|
int blockLight = world.getLightLevel(LightType.BLOCK, inFront);
|
||||||
|
int skyLight = world.getLightLevel(LightType.SKY, inFront);
|
||||||
|
data.setBlockLight(blockLight)
|
||||||
|
.setSkyLight(skyLight);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove() {
|
||||||
|
shaft.delete();
|
||||||
|
fan.delete();
|
||||||
|
shaft = fan = null;
|
||||||
|
}
|
||||||
|
}
|
@ -3,18 +3,20 @@ package com.simibubi.create.content.contraptions.components.millstone;
|
|||||||
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.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
public class MillStoneCogInstance extends SingleRotatingInstance {
|
public class MillStoneCogInstance extends SingleRotatingInstance {
|
||||||
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
||||||
InstancedTileRenderRegistry.instance.register(type, MillStoneCogInstance::new);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
}
|
InstancedTileRenderRegistry.instance.register(type, MillStoneCogInstance::new)); }
|
||||||
|
|
||||||
public MillStoneCogInstance(InstancedTileRenderDispatcher modelManager, KineticTileEntity tile) {
|
public MillStoneCogInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,11 @@ public class MechanicalPressRenderer extends KineticTileEntityRenderer {
|
|||||||
super(dispatcher);
|
super(dispatcher);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isGlobalRenderer(KineticTileEntity tile) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||||
int light, int overlay) {
|
int light, int overlay) {
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.simibubi.create.content.contraptions.components.saw;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.base.SingleRotatingInstance;
|
||||||
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraft.util.Rotation;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
|
import static net.minecraft.state.properties.BlockStateProperties.FACING;
|
||||||
|
|
||||||
|
public class SawInstance extends SingleRotatingInstance {
|
||||||
|
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
||||||
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, SawInstance::new));
|
||||||
|
}
|
||||||
|
|
||||||
|
public SawInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
|
||||||
|
super(modelManager, tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected InstancedModel<RotatingData> getModel() {
|
||||||
|
if (lastState.get(FACING).getAxis().isHorizontal())
|
||||||
|
return AllBlockPartials.SHAFT_HALF.renderOnDirectionalSouthRotating(modelManager, lastState.rotate(tile.getWorld(), tile.getPos(), Rotation.CLOCKWISE_180));
|
||||||
|
else
|
||||||
|
return rotatingMaterial().getModel(KineticTileEntityRenderer.KINETIC_TILE, shaft(getRotationAxis()));
|
||||||
|
}
|
||||||
|
}
|
@ -6,7 +6,6 @@ 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.components.structureMovement.MovementContext;
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||||
import com.simibubi.create.foundation.render.instancing.IInstancedTileEntityRenderer;
|
|
||||||
import com.simibubi.create.foundation.render.instancing.InstanceContext;
|
import com.simibubi.create.foundation.render.instancing.InstanceContext;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
@ -32,7 +31,7 @@ import net.minecraft.util.math.Vec3d;
|
|||||||
|
|
||||||
import static net.minecraft.state.properties.BlockStateProperties.FACING;
|
import static net.minecraft.state.properties.BlockStateProperties.FACING;
|
||||||
|
|
||||||
public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> implements IInstancedTileEntityRenderer<SawTileEntity> {
|
public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> {
|
||||||
|
|
||||||
public SawRenderer(TileEntityRendererDispatcher dispatcher) {
|
public SawRenderer(TileEntityRendererDispatcher dispatcher) {
|
||||||
super(dispatcher);
|
super(dispatcher);
|
||||||
@ -47,12 +46,10 @@ public class SawRenderer extends SafeTileEntityRenderer<SawTileEntity> implement
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addInstanceData(InstanceContext<SawTileEntity> ctx) {
|
public void addInstanceData(InstanceContext<SawTileEntity> ctx) {
|
||||||
KineticTileEntityRenderer.renderRotatingBuffer(ctx, getRotatedModel(ctx));
|
KineticTileEntityRenderer.renderRotatingBuffer(ctx, getRotatedModel(ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markForRebuild(InstanceContext<SawTileEntity> ctx) {
|
public void markForRebuild(InstanceContext<SawTileEntity> ctx) {
|
||||||
getRotatedModel(ctx).clearInstanceData();
|
getRotatedModel(ctx).clearInstanceData();
|
||||||
}
|
}
|
||||||
|
@ -3,18 +3,21 @@ package com.simibubi.create.content.contraptions.fluids;
|
|||||||
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.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
public class PumpCogInstance extends SingleRotatingInstance {
|
public class PumpCogInstance extends SingleRotatingInstance {
|
||||||
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
||||||
InstancedTileRenderRegistry.instance.register(type, PumpCogInstance::new);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, PumpCogInstance::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
public PumpCogInstance(InstancedTileRenderDispatcher modelManager, KineticTileEntity tile) {
|
public PumpCogInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.relays.advanced;
|
|||||||
|
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.IInstancedTileEntityRenderer;
|
|
||||||
import com.simibubi.create.foundation.render.instancing.InstanceContext;
|
import com.simibubi.create.foundation.render.instancing.InstanceContext;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
@ -10,7 +9,7 @@ import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRendere
|
|||||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||||
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
||||||
|
|
||||||
public class SpeedControllerRenderer extends SmartTileEntityRenderer<SpeedControllerTileEntity> implements IInstancedTileEntityRenderer<SpeedControllerTileEntity> {
|
public class SpeedControllerRenderer extends SmartTileEntityRenderer<SpeedControllerTileEntity> {
|
||||||
|
|
||||||
public SpeedControllerRenderer(TileEntityRendererDispatcher dispatcher) {
|
public SpeedControllerRenderer(TileEntityRendererDispatcher dispatcher) {
|
||||||
super(dispatcher);
|
super(dispatcher);
|
||||||
@ -23,12 +22,10 @@ public class SpeedControllerRenderer extends SmartTileEntityRenderer<SpeedContro
|
|||||||
// addInstanceData(new InstanceContext.World<>(tileEntityIn));
|
// addInstanceData(new InstanceContext.World<>(tileEntityIn));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addInstanceData(InstanceContext<SpeedControllerTileEntity> ctx) {
|
public void addInstanceData(InstanceContext<SpeedControllerTileEntity> ctx) {
|
||||||
KineticTileEntityRenderer.renderRotatingBuffer(ctx, getRotatedModel(ctx));
|
KineticTileEntityRenderer.renderRotatingBuffer(ctx, getRotatedModel(ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markForRebuild(InstanceContext<SpeedControllerTileEntity> ctx) {
|
public void markForRebuild(InstanceContext<SpeedControllerTileEntity> ctx) {
|
||||||
getRotatedModel(ctx).clearInstanceData();
|
getRotatedModel(ctx).clearInstanceData();
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import com.simibubi.create.AllBlockPartials;
|
|||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
||||||
import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
|
import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.*;
|
import com.simibubi.create.foundation.render.instancing.*;
|
||||||
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;
|
||||||
@ -14,6 +14,8 @@ 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;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
@ -21,7 +23,8 @@ import java.util.function.Supplier;
|
|||||||
|
|
||||||
public class BeltInstance extends KineticTileInstance<BeltTileEntity> {
|
public class BeltInstance extends KineticTileInstance<BeltTileEntity> {
|
||||||
public static void register(TileEntityType<? extends BeltTileEntity> type) {
|
public static void register(TileEntityType<? extends BeltTileEntity> type) {
|
||||||
InstancedTileRenderRegistry.instance.register(type, BeltInstance::new);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, BeltInstance::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean upward;
|
private boolean upward;
|
||||||
@ -35,7 +38,7 @@ public class BeltInstance extends KineticTileInstance<BeltTileEntity> {
|
|||||||
protected ArrayList<InstanceKey<BeltData>> keys;
|
protected ArrayList<InstanceKey<BeltData>> keys;
|
||||||
protected InstanceKey<RotatingData> pulleyKey;
|
protected InstanceKey<RotatingData> pulleyKey;
|
||||||
|
|
||||||
public BeltInstance(InstancedTileRenderDispatcher modelManager, BeltTileEntity tile) {
|
public BeltInstance(InstancedTileRenderer modelManager, BeltTileEntity tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,7 +78,7 @@ public class BeltInstance extends KineticTileInstance<BeltTileEntity> {
|
|||||||
if (tile.hasPulley()) {
|
if (tile.hasPulley()) {
|
||||||
InstancedModel<RotatingData> pulleyModel = getPulleyModel(blockState);
|
InstancedModel<RotatingData> pulleyModel = getPulleyModel(blockState);
|
||||||
|
|
||||||
pulleyKey = pulleyModel.setupInstance(setupFunc(tile.getSpeed(), getRotationAxisOf(tile)));
|
pulleyKey = pulleyModel.setupInstance(setupFunc(tile.getSpeed(), getRotationAxis()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +89,7 @@ public class BeltInstance extends KineticTileInstance<BeltTileEntity> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pulleyKey != null) {
|
if (pulleyKey != null) {
|
||||||
updateRotation(pulleyKey, getRotationAxisOf(tile));
|
updateRotation(pulleyKey, getRotationAxis());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,10 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
|||||||
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
|
import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack;
|
||||||
import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
|
import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
|
||||||
import com.simibubi.create.foundation.render.ShadowRenderHelper;
|
import com.simibubi.create.foundation.render.ShadowRenderHelper;
|
||||||
import com.simibubi.create.foundation.render.instancing.*;
|
import com.simibubi.create.foundation.render.instancing.BeltData;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.InstanceContext;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
||||||
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;
|
||||||
@ -31,7 +34,7 @@ import net.minecraft.world.LightType;
|
|||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class BeltRenderer extends SafeTileEntityRenderer<BeltTileEntity> implements IInstancedTileEntityRenderer<BeltTileEntity> {
|
public class BeltRenderer extends SafeTileEntityRenderer<BeltTileEntity> {
|
||||||
|
|
||||||
public BeltRenderer(TileEntityRendererDispatcher dispatcher) {
|
public BeltRenderer(TileEntityRendererDispatcher dispatcher) {
|
||||||
super(dispatcher);
|
super(dispatcher);
|
||||||
@ -54,7 +57,6 @@ public class BeltRenderer extends SafeTileEntityRenderer<BeltTileEntity> impleme
|
|||||||
return te.isController();
|
return te.isController();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addInstanceData(InstanceContext<BeltTileEntity> ctx) {
|
public void addInstanceData(InstanceContext<BeltTileEntity> ctx) {
|
||||||
BeltTileEntity te = ctx.te;
|
BeltTileEntity te = ctx.te;
|
||||||
BlockState blockState = te.getBlockState();
|
BlockState blockState = te.getBlockState();
|
||||||
@ -146,7 +148,6 @@ public class BeltRenderer extends SafeTileEntityRenderer<BeltTileEntity> impleme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markForRebuild(InstanceContext<BeltTileEntity> ctx) {
|
public void markForRebuild(InstanceContext<BeltTileEntity> ctx) {
|
||||||
BeltTileEntity te = ctx.te;
|
BeltTileEntity te = ctx.te;
|
||||||
|
|
||||||
|
@ -2,24 +2,27 @@ package com.simibubi.create.content.contraptions.relays.encased;
|
|||||||
|
|
||||||
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.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
public class SingleRotatingShaftInstance extends SingleRotatingInstance {
|
public class ShaftInstance extends SingleRotatingInstance {
|
||||||
|
|
||||||
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
||||||
InstancedTileRenderRegistry.instance.register(type, SingleRotatingShaftInstance::new);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, ShaftInstance::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
public SingleRotatingShaftInstance(InstancedTileRenderDispatcher dispatcher, KineticTileEntity tile) {
|
public ShaftInstance(InstancedTileRenderer dispatcher, KineticTileEntity tile) {
|
||||||
super(dispatcher, tile);
|
super(dispatcher, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected BlockState getRenderedBlockState() {
|
protected BlockState getRenderedBlockState() {
|
||||||
return shaft(getRotationAxisOf(tile));
|
return shaft(getRotationAxis());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.relays.encased;
|
|||||||
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.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstanceKey;
|
import com.simibubi.create.foundation.render.instancing.InstanceKey;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
@ -14,17 +14,20 @@ import net.minecraft.block.BlockState;
|
|||||||
import net.minecraft.tileentity.TileEntityType;
|
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.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class SplitShaftInstance extends KineticTileInstance<SplitShaftTileEntity> {
|
public class SplitShaftInstance extends KineticTileInstance<SplitShaftTileEntity> {
|
||||||
public static void register(TileEntityType<? extends SplitShaftTileEntity> type) {
|
public static void register(TileEntityType<? extends SplitShaftTileEntity> type) {
|
||||||
InstancedTileRenderRegistry.instance.register(type, SplitShaftInstance::new);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, SplitShaftInstance::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ArrayList<InstanceKey<RotatingData>> keys;
|
protected ArrayList<InstanceKey<RotatingData>> keys;
|
||||||
|
|
||||||
public SplitShaftInstance(InstancedTileRenderDispatcher modelManager, SplitShaftTileEntity tile) {
|
public SplitShaftInstance(InstancedTileRenderer modelManager, SplitShaftTileEntity tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,7 +83,7 @@ public class SplitShaftInstance extends KineticTileInstance<SplitShaftTileEntity
|
|||||||
final BlockPos pos = tile.getPos();
|
final BlockPos pos = tile.getPos();
|
||||||
|
|
||||||
data.setRotationalSpeed(tile.getSpeed() * tile.getRotationSpeedModifier(dir))
|
data.setRotationalSpeed(tile.getSpeed() * tile.getRotationSpeedModifier(dir))
|
||||||
.setRotationOffset(getRotationOffsetForPosition(tile, pos, axis))
|
.setRotationOffset(getRotationOffset(axis))
|
||||||
.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector());
|
.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.relays.gearbox;
|
|||||||
|
|
||||||
import com.simibubi.create.AllBlockPartials;
|
import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
import com.simibubi.create.content.contraptions.base.KineticTileInstance;
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstanceKey;
|
import com.simibubi.create.foundation.render.instancing.InstanceKey;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
@ -14,19 +14,22 @@ 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;
|
||||||
|
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class GearboxInstance extends KineticTileInstance<GearboxTileEntity> {
|
public class GearboxInstance extends KineticTileInstance<GearboxTileEntity> {
|
||||||
public static void register(TileEntityType<? extends GearboxTileEntity> type) {
|
public static void register(TileEntityType<? extends GearboxTileEntity> type) {
|
||||||
InstancedTileRenderRegistry.instance.register(type, GearboxInstance::new);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, GearboxInstance::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected EnumMap<Direction, InstanceKey<RotatingData>> keys;
|
protected EnumMap<Direction, InstanceKey<RotatingData>> keys;
|
||||||
protected Direction sourceFacing;
|
protected Direction sourceFacing;
|
||||||
|
|
||||||
public GearboxInstance(InstancedTileRenderDispatcher modelManager, GearboxTileEntity tile) {
|
public GearboxInstance(InstancedTileRenderer modelManager, GearboxTileEntity tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +57,7 @@ public class GearboxInstance extends KineticTileInstance<GearboxTileEntity> {
|
|||||||
data.setBlockLight(blockLight)
|
data.setBlockLight(blockLight)
|
||||||
.setSkyLight(skyLight)
|
.setSkyLight(skyLight)
|
||||||
.setRotationalSpeed(getSpeed(direction))
|
.setRotationalSpeed(getSpeed(direction))
|
||||||
.setRotationOffset(getRotationOffsetForPosition(tile, pos, axis))
|
.setRotationOffset(getRotationOffset(axis))
|
||||||
.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector())
|
.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector())
|
||||||
.setTileEntity(tile);
|
.setTileEntity(tile);
|
||||||
});
|
});
|
||||||
@ -93,7 +96,7 @@ public class GearboxInstance extends KineticTileInstance<GearboxTileEntity> {
|
|||||||
Direction.Axis axis = direction.getAxis();
|
Direction.Axis axis = direction.getAxis();
|
||||||
|
|
||||||
data.setRotationalSpeed(getSpeed(direction))
|
data.setRotationalSpeed(getSpeed(direction))
|
||||||
.setRotationOffset(getRotationOffsetForPosition(tile, pos, axis))
|
.setRotationOffset(getRotationOffset(axis))
|
||||||
.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector());
|
.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,21 @@ package com.simibubi.create.content.logistics.block.mechanicalArm;
|
|||||||
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.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.InstancedTileRenderRegistry;
|
||||||
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
import com.simibubi.create.foundation.render.instancing.RotatingData;
|
||||||
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
public class ArmInstance extends SingleRotatingInstance {
|
public class ArmInstance extends SingleRotatingInstance {
|
||||||
public ArmInstance(InstancedTileRenderDispatcher modelManager, KineticTileEntity tile) {
|
public static void register(TileEntityType<? extends KineticTileEntity> type) {
|
||||||
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
|
||||||
|
InstancedTileRenderRegistry.instance.register(type, ArmInstance::new));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArmInstance(InstancedTileRenderer modelManager, KineticTileEntity tile) {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +50,7 @@ import net.minecraftforge.client.event.EntityViewRenderEvent;
|
|||||||
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||||
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
|
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
|
||||||
import net.minecraftforge.client.event.RenderWorldLastEvent;
|
import net.minecraftforge.client.event.RenderWorldLastEvent;
|
||||||
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.event.TickEvent.ClientTickEvent;
|
import net.minecraftforge.event.TickEvent.ClientTickEvent;
|
||||||
import net.minecraftforge.event.TickEvent.Phase;
|
import net.minecraftforge.event.TickEvent.Phase;
|
||||||
import net.minecraftforge.event.TickEvent.RenderTickEvent;
|
import net.minecraftforge.event.TickEvent.RenderTickEvent;
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.simibubi.create.foundation.mixin;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.render.FastRenderDispatcher;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
||||||
|
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
@Mixin(World.class)
|
||||||
|
public class OnRemoveTileMixin {
|
||||||
|
|
||||||
|
@Shadow @Final public boolean isRemote;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JUSTIFICATION: This method is called whenever a tile entity is removed due
|
||||||
|
* to a change in block state, even on the client. By hooking into this method,
|
||||||
|
* we gain easy access to the information while having no impact on performance.
|
||||||
|
*/
|
||||||
|
@Inject(at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/World;getTileEntity(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/tileentity/TileEntity;"), method = "removeTileEntity", locals = LocalCapture.CAPTURE_FAILHARD)
|
||||||
|
private void onRemoveTile(BlockPos pos, CallbackInfo ci, TileEntity te) {
|
||||||
|
if (isRemote) FastRenderDispatcher.enqueueRemove(te);
|
||||||
|
}
|
||||||
|
}
|
@ -5,6 +5,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
|
|||||||
import com.simibubi.create.CreateClient;
|
import com.simibubi.create.CreateClient;
|
||||||
import com.simibubi.create.foundation.render.contraption.ContraptionRenderDispatcher;
|
import com.simibubi.create.foundation.render.contraption.ContraptionRenderDispatcher;
|
||||||
import com.simibubi.create.foundation.render.gl.shader.ShaderHelper;
|
import com.simibubi.create.foundation.render.gl.shader.ShaderHelper;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.TileEntityInstance;
|
||||||
import com.simibubi.create.foundation.render.light.ILightListener;
|
import com.simibubi.create.foundation.render.light.ILightListener;
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
import com.simibubi.create.foundation.utility.WorldAttached;
|
import com.simibubi.create.foundation.utility.WorldAttached;
|
||||||
@ -25,13 +26,17 @@ import net.minecraft.world.LightType;
|
|||||||
import net.minecraft.world.chunk.Chunk;
|
import net.minecraft.world.chunk.Chunk;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Queue;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class FastRenderDispatcher {
|
public class FastRenderDispatcher {
|
||||||
|
|
||||||
public static WorldAttached<ConcurrentLinkedQueue<TileEntity>> addedTiles = new WorldAttached<>(ConcurrentLinkedQueue::new);
|
public static WorldAttached<ConcurrentLinkedQueue<TileEntity>> queuedUpdates = new WorldAttached<>(ConcurrentLinkedQueue::new);
|
||||||
public static WorldAttached<ConcurrentLinkedQueue<TileEntity>> removedTiles = new WorldAttached<>(ConcurrentLinkedQueue::new);
|
public static WorldAttached<ConcurrentLinkedQueue<TileEntity>> queuedRemovals = new WorldAttached<>(ConcurrentLinkedQueue::new);
|
||||||
|
public static WorldAttached<ConcurrentLinkedQueue<TileEntityInstance<?>>> addedLastTick = new WorldAttached<>(ConcurrentLinkedQueue::new);
|
||||||
|
|
||||||
private static Matrix4f projectionMatrixThisFrame = null;
|
private static Matrix4f projectionMatrixThisFrame = null;
|
||||||
|
|
||||||
@ -40,34 +45,28 @@ public class FastRenderDispatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void enqueueUpdate(TileEntity te) {
|
public static void enqueueUpdate(TileEntity te) {
|
||||||
addedTiles.get(te.getWorld()).add(te);
|
queuedUpdates.get(te.getWorld()).add(te);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void enqueueRemove(TileEntity te) {
|
public static void enqueueRemove(TileEntity te) {
|
||||||
removedTiles.get(te.getWorld()).add(te);
|
queuedRemovals.get(te.getWorld()).add(te);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void tick() {
|
public static void tick() {
|
||||||
ClientWorld world = Minecraft.getInstance().world;
|
ClientWorld world = Minecraft.getInstance().world;
|
||||||
|
|
||||||
ConcurrentLinkedQueue<TileEntity> added = addedTiles.get(world);
|
runQueue(addedLastTick.get(world), TileEntityInstance::updateLight);
|
||||||
|
runQueue(queuedUpdates.get(world), CreateClient.kineticRenderer::update);
|
||||||
|
runQueue(queuedRemovals.get(world), CreateClient.kineticRenderer::remove);
|
||||||
|
}
|
||||||
|
|
||||||
if (added != null) {
|
private static <T> void runQueue(@Nullable Queue<T> q, Consumer<T> action) {
|
||||||
while (!added.isEmpty()) {
|
if (q == null) return;
|
||||||
TileEntity te = added.poll();
|
|
||||||
|
|
||||||
CreateClient.kineticRenderer.update(te);
|
while (!q.isEmpty()) {
|
||||||
}
|
T t = q.poll();
|
||||||
}
|
|
||||||
|
|
||||||
ConcurrentLinkedQueue<TileEntity> removed = removedTiles.get(world);
|
action.accept(t);
|
||||||
|
|
||||||
if (removed != null) {
|
|
||||||
while (!removed.isEmpty()) {
|
|
||||||
TileEntity te = removed.poll();
|
|
||||||
|
|
||||||
CreateClient.kineticRenderer.remove(te);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.simibubi.create.foundation.render;
|
package com.simibubi.create.foundation.render;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.render.contraption.RenderedContraption;
|
|
||||||
import com.simibubi.create.foundation.render.gl.shader.Shader;
|
import com.simibubi.create.foundation.render.gl.shader.Shader;
|
||||||
import com.simibubi.create.foundation.render.gl.shader.ShaderCallback;
|
import com.simibubi.create.foundation.render.gl.shader.ShaderCallback;
|
||||||
import com.simibubi.create.foundation.render.gl.shader.ShaderHelper;
|
import com.simibubi.create.foundation.render.gl.shader.ShaderHelper;
|
||||||
@ -13,12 +12,12 @@ import javax.annotation.Nullable;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class InstancedTileRenderDispatcher {
|
public class InstancedTileRenderer {
|
||||||
protected Map<TileEntity, TileEntityInstance<?>> renderers = new HashMap<>();
|
protected Map<TileEntity, TileEntityInstance<?>> renderers = new HashMap<>();
|
||||||
|
|
||||||
protected Map<MaterialType<?>, RenderMaterial<?>> materials = new HashMap<>();
|
protected Map<MaterialType<?>, RenderMaterial<?>> materials = new HashMap<>();
|
||||||
|
|
||||||
public InstancedTileRenderDispatcher() {
|
public InstancedTileRenderer() {
|
||||||
registerMaterials();
|
registerMaterials();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,7 +39,10 @@ public class InstancedTileRenderDispatcher {
|
|||||||
} else {
|
} else {
|
||||||
TileEntityInstance<? super T> renderer = InstancedTileRenderRegistry.instance.create(this, tile);
|
TileEntityInstance<? super T> renderer = InstancedTileRenderRegistry.instance.create(this, tile);
|
||||||
|
|
||||||
renderers.put(tile, renderer);
|
if (renderer != null) {
|
||||||
|
FastRenderDispatcher.addedLastTick.get(tile.getWorld()).add(renderer);
|
||||||
|
renderers.put(tile, renderer);
|
||||||
|
}
|
||||||
|
|
||||||
return renderer;
|
return renderer;
|
||||||
}
|
}
|
||||||
@ -75,25 +77,11 @@ public class InstancedTileRenderDispatcher {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T extends TileEntity> void addInstancedData(RenderedContraption c, T te, IInstancedTileEntityRenderer<T> renderer) {
|
|
||||||
renderer.addInstanceData(new InstanceContext.Contraption<>(te, c));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function should be called after building instances.
|
|
||||||
* It must be called either on the render thread before committing to rendering, or in a place where there are
|
|
||||||
* guaranteed to be no race conditions with the render thread, i.e. when constructing a FastContraptionRenderer.
|
|
||||||
*/
|
|
||||||
public void markAllDirty() {
|
|
||||||
for (RenderMaterial<?> material : materials.values()) {
|
|
||||||
material.runOnAll(InstancedModel::markDirty);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void invalidate() {
|
public void invalidate() {
|
||||||
for (RenderMaterial<?> material : materials.values()) {
|
for (RenderMaterial<?> material : materials.values()) {
|
||||||
material.delete();
|
material.delete();
|
||||||
}
|
}
|
||||||
|
renderers.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(RenderType layer, Matrix4f projection, Matrix4f view) {
|
public void render(RenderType layer, Matrix4f projection, Matrix4f view) {
|
@ -1,6 +1,6 @@
|
|||||||
package com.simibubi.create.foundation.render.contraption;
|
package com.simibubi.create.foundation.render.contraption;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.gl.shader.Shader;
|
import com.simibubi.create.foundation.render.gl.shader.Shader;
|
||||||
import com.simibubi.create.foundation.render.instancing.BeltModel;
|
import com.simibubi.create.foundation.render.instancing.BeltModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.KineticRenderMaterials;
|
import com.simibubi.create.foundation.render.instancing.KineticRenderMaterials;
|
||||||
@ -8,7 +8,7 @@ import com.simibubi.create.foundation.render.instancing.RenderMaterial;
|
|||||||
import com.simibubi.create.foundation.render.instancing.RotatingModel;
|
import com.simibubi.create.foundation.render.instancing.RotatingModel;
|
||||||
import com.simibubi.create.foundation.render.instancing.actors.RotatingActorModel;
|
import com.simibubi.create.foundation.render.instancing.actors.RotatingActorModel;
|
||||||
|
|
||||||
public class ContraptionKineticRenderer extends InstancedTileRenderDispatcher {
|
public class ContraptionKineticRenderer extends InstancedTileRenderer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerMaterials() {
|
public void registerMaterials() {
|
||||||
|
@ -7,14 +7,15 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Con
|
|||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||||
import com.simibubi.create.foundation.render.gl.shader.ShaderHelper;
|
import com.simibubi.create.foundation.render.gl.shader.ShaderHelper;
|
||||||
import com.simibubi.create.foundation.render.instancing.*;
|
import com.simibubi.create.foundation.render.instancing.IInstanceRendered;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.InstancedModel;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.KineticRenderMaterials;
|
||||||
|
import com.simibubi.create.foundation.render.instancing.RenderMaterial;
|
||||||
import com.simibubi.create.foundation.render.instancing.actors.StaticRotatingActorData;
|
import com.simibubi.create.foundation.render.instancing.actors.StaticRotatingActorData;
|
||||||
import com.simibubi.create.foundation.render.light.ContraptionLighter;
|
import com.simibubi.create.foundation.render.light.ContraptionLighter;
|
||||||
import net.minecraft.client.renderer.BufferBuilder;
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
import net.minecraft.client.renderer.Matrix4f;
|
import net.minecraft.client.renderer.Matrix4f;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
|
|
||||||
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.gen.feature.template.Template;
|
import net.minecraft.world.gen.feature.template.Template;
|
||||||
@ -44,7 +45,6 @@ public class RenderedContraption {
|
|||||||
buildLayers(contraption);
|
buildLayers(contraption);
|
||||||
buildInstancedTiles(contraption);
|
buildInstancedTiles(contraption);
|
||||||
buildActors(contraption);
|
buildActors(contraption);
|
||||||
kinetics.markAllDirty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getEntityId() {
|
public int getEntityId() {
|
||||||
@ -91,11 +91,7 @@ public class RenderedContraption {
|
|||||||
if (!tileEntities.isEmpty()) {
|
if (!tileEntities.isEmpty()) {
|
||||||
for (TileEntity te : tileEntities) {
|
for (TileEntity te : tileEntities) {
|
||||||
if (te instanceof IInstanceRendered) {
|
if (te instanceof IInstanceRendered) {
|
||||||
TileEntityRenderer<TileEntity> renderer = TileEntityRendererDispatcher.instance.getRenderer(te);
|
kinetics.getRenderer(te); // this is enough to instantiate the model instance
|
||||||
|
|
||||||
if (renderer instanceof IInstancedTileEntityRenderer) {
|
|
||||||
kinetics.addInstancedData(this, te, (IInstancedTileEntityRenderer<? super TileEntity>) renderer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
package com.simibubi.create.foundation.render.instancing;
|
|
||||||
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
|
|
||||||
public interface IInstancedTileEntityRenderer<T extends TileEntity> {
|
|
||||||
|
|
||||||
void addInstanceData(InstanceContext<T> ctx);
|
|
||||||
|
|
||||||
void markForRebuild(InstanceContext<T> ctx);
|
|
||||||
}
|
|
@ -1,9 +1,9 @@
|
|||||||
package com.simibubi.create.foundation.render.instancing;
|
package com.simibubi.create.foundation.render.instancing;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
public interface IRendererFactory<T extends TileEntity> {
|
public interface IRendererFactory<T extends TileEntity> {
|
||||||
TileEntityInstance<? super T> create(InstancedTileRenderDispatcher manager, T te);
|
TileEntityInstance<? super T> create(InstancedTileRenderer manager, T te);
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
package com.simibubi.create.foundation.render.instancing;
|
package com.simibubi.create.foundation.render.instancing;
|
||||||
|
|
||||||
import com.simibubi.create.CreateClient;
|
import com.simibubi.create.CreateClient;
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import com.simibubi.create.foundation.render.contraption.RenderedContraption;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@ -22,30 +21,10 @@ public abstract class InstanceContext<T extends TileEntity> {
|
|||||||
return getKinetics().get(KineticRenderMaterials.BELTS);
|
return getKinetics().get(KineticRenderMaterials.BELTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract InstancedTileRenderDispatcher getKinetics();
|
public abstract InstancedTileRenderer getKinetics();
|
||||||
|
|
||||||
public abstract boolean checkWorldLight();
|
public abstract boolean checkWorldLight();
|
||||||
|
|
||||||
public static class Contraption<T extends TileEntity> extends InstanceContext<T> {
|
|
||||||
|
|
||||||
public final RenderedContraption c;
|
|
||||||
|
|
||||||
public Contraption(T te, RenderedContraption c) {
|
|
||||||
super(te);
|
|
||||||
this.c = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InstancedTileRenderDispatcher getKinetics() {
|
|
||||||
return c.kinetics;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean checkWorldLight() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class World<T extends TileEntity> extends InstanceContext<T> {
|
public static class World<T extends TileEntity> extends InstanceContext<T> {
|
||||||
|
|
||||||
public World(T te) {
|
public World(T te) {
|
||||||
@ -53,7 +32,7 @@ public abstract class InstanceContext<T extends TileEntity> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InstancedTileRenderDispatcher getKinetics() {
|
public InstancedTileRenderer getKinetics() {
|
||||||
return CreateClient.kineticRenderer;
|
return CreateClient.kineticRenderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,10 +5,7 @@ import com.simibubi.create.foundation.render.BufferedModel;
|
|||||||
import com.simibubi.create.foundation.render.RenderMath;
|
import com.simibubi.create.foundation.render.RenderMath;
|
||||||
import com.simibubi.create.foundation.render.gl.GlBuffer;
|
import com.simibubi.create.foundation.render.gl.GlBuffer;
|
||||||
import net.minecraft.client.renderer.BufferBuilder;
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.*;
|
||||||
import org.lwjgl.opengl.GL15;
|
|
||||||
import org.lwjgl.opengl.GL31;
|
|
||||||
import org.lwjgl.opengl.GL33;
|
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.simibubi.create.foundation.render.instancing;
|
package com.simibubi.create.foundation.render.instancing;
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ public class InstancedTileRenderRegistry {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Nullable
|
@Nullable
|
||||||
public <T extends TileEntity> TileEntityInstance<? super T> create(InstancedTileRenderDispatcher manager, T tile) {
|
public <T extends TileEntity> TileEntityInstance<? super T> create(InstancedTileRenderer manager, T tile) {
|
||||||
TileEntityType<?> type = tile.getType();
|
TileEntityType<?> type = tile.getType();
|
||||||
IRendererFactory<? super T> factory = (IRendererFactory<? super T>) this.renderers.get(type);
|
IRendererFactory<? super T> factory = (IRendererFactory<? super T>) this.renderers.get(type);
|
||||||
|
|
||||||
|
@ -1,18 +1,24 @@
|
|||||||
package com.simibubi.create.foundation.render.instancing;
|
package com.simibubi.create.foundation.render.instancing;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.render.InstancedTileRenderDispatcher;
|
import com.simibubi.create.foundation.render.InstancedTileRenderer;
|
||||||
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.world.World;
|
||||||
|
|
||||||
public abstract class TileEntityInstance<T extends TileEntity> {
|
public abstract class TileEntityInstance<T extends TileEntity> {
|
||||||
|
|
||||||
protected final InstancedTileRenderDispatcher modelManager;
|
protected final InstancedTileRenderer modelManager;
|
||||||
protected final T tile;
|
protected final T tile;
|
||||||
|
protected final World world;
|
||||||
|
protected final BlockPos pos;
|
||||||
protected BlockState lastState;
|
protected BlockState lastState;
|
||||||
|
|
||||||
public TileEntityInstance(InstancedTileRenderDispatcher 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.pos = tile.getPos();
|
||||||
this.lastState = tile.getBlockState();
|
this.lastState = tile.getBlockState();
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
@ -25,8 +31,8 @@ public abstract class TileEntityInstance<T extends TileEntity> {
|
|||||||
onUpdate();
|
onUpdate();
|
||||||
} else {
|
} else {
|
||||||
remove();
|
remove();
|
||||||
init();
|
|
||||||
lastState = currentState;
|
lastState = currentState;
|
||||||
|
init();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,12 +10,7 @@ import org.lwjgl.opengl.*;
|
|||||||
import org.lwjgl.system.MemoryUtil;
|
import org.lwjgl.system.MemoryUtil;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
|
|
||||||
// TODO: Don't immediately destroy light volumes.
|
|
||||||
// There's a high chance that a contraption will stop and soon after start again.
|
|
||||||
// By caching lightvolumes based on their volumes/locations, we can save having
|
|
||||||
// to reread all the lighting data in those cases.
|
|
||||||
public class LightVolume {
|
public class LightVolume {
|
||||||
|
|
||||||
private GridAlignedBB sampleVolume;
|
private GridAlignedBB sampleVolume;
|
||||||
@ -31,7 +26,7 @@ public class LightVolume {
|
|||||||
setSampleVolume(sampleVolume);
|
setSampleVolume(sampleVolume);
|
||||||
|
|
||||||
this.glTexture = new GlTexture(GL20.GL_TEXTURE_3D);
|
this.glTexture = new GlTexture(GL20.GL_TEXTURE_3D);
|
||||||
this.lightData = MemoryUtil.memAlloc(this.textureVolume.volume() * 2); // TODO: maybe figure out how to pack light coords into a single byte
|
this.lightData = MemoryUtil.memAlloc(this.textureVolume.volume() * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setSampleVolume(GridAlignedBB sampleVolume) {
|
private void setSampleVolume(GridAlignedBB sampleVolume) {
|
||||||
@ -225,10 +220,7 @@ public class LightVolume {
|
|||||||
int sizeX = textureVolume.sizeX();
|
int sizeX = textureVolume.sizeX();
|
||||||
int sizeY = textureVolume.sizeY();
|
int sizeY = textureVolume.sizeY();
|
||||||
int sizeZ = textureVolume.sizeZ();
|
int sizeZ = textureVolume.sizeZ();
|
||||||
if (sizeX * sizeY * sizeZ * 2 > lightData.capacity())
|
|
||||||
throw new IllegalStateException("Volume too big for buffer");
|
|
||||||
|
|
||||||
lightData.rewind();
|
|
||||||
GL12.glTexImage3D(GL12.GL_TEXTURE_3D, 0, GL40.GL_RG8, sizeX, sizeY, sizeZ, 0, GL40.GL_RG, GL40.GL_UNSIGNED_BYTE, lightData);
|
GL12.glTexImage3D(GL12.GL_TEXTURE_3D, 0, GL40.GL_RG8, sizeX, sizeY, sizeZ, 0, GL40.GL_RG, GL40.GL_UNSIGNED_BYTE, lightData);
|
||||||
bufferDirty = false;
|
bufferDirty = false;
|
||||||
}
|
}
|
||||||
|
@ -7,5 +7,5 @@
|
|||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
},
|
},
|
||||||
"minVersion": "0.8"
|
"minVersion": "0.8", "mixins": ["OnRemoveTileMixin"]
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user