Brackets, models, and reload listeners
- Fix bracket contraption rotation; Fix #1856 - Make sure KineticTileEntityRenderer only renders once - Make use of new ModelUtil method in BakedModelRenderHelper - Clear up BracketedKineticBlockModel and PipeAttachmentModel logic - Replace ISimpleReloadListener usage with ResourceManagerReloadListener
This commit is contained in:
parent
a61739eb1e
commit
7942b570f0
29 changed files with 146 additions and 158 deletions
|
@ -19,7 +19,7 @@ parchment_version = 2021.10.31
|
||||||
|
|
||||||
# dependency versions
|
# dependency versions
|
||||||
registrate_version = MC1.18-1.0.21
|
registrate_version = MC1.18-1.0.21
|
||||||
flywheel_version = 1.18-0.4.2-rc.25
|
flywheel_version = 1.18-0.4.2-rc.26
|
||||||
jei_minecraft_version = 1.18
|
jei_minecraft_version = 1.18
|
||||||
jei_version = 9.0.0.40
|
jei_version = 9.0.0.40
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package com.simibubi.create.content.contraptions.base;
|
package com.simibubi.create.content.contraptions.base;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
|
||||||
import com.jozufozu.flywheel.backend.Backend;
|
import com.jozufozu.flywheel.backend.Backend;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
|
@ -23,15 +25,17 @@ import net.minecraft.core.Direction.Axis;
|
||||||
import net.minecraft.core.Direction.AxisDirection;
|
import net.minecraft.core.Direction.AxisDirection;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
|
||||||
|
|
||||||
@EventBusSubscriber(Dist.CLIENT)
|
|
||||||
public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTileEntity> {
|
public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTileEntity> {
|
||||||
|
|
||||||
public static final SuperByteBufferCache.Compartment<BlockState> KINETIC_TILE = new SuperByteBufferCache.Compartment<>();
|
public static final SuperByteBufferCache.Compartment<BlockState> KINETIC_TILE = new SuperByteBufferCache.Compartment<>();
|
||||||
public static boolean rainbowMode = false;
|
public static boolean rainbowMode = false;
|
||||||
|
|
||||||
|
protected static final RenderType[] REVERSED_CHUNK_BUFFER_LAYERS = RenderType.chunkBufferLayers().toArray(RenderType[]::new);
|
||||||
|
static {
|
||||||
|
ArrayUtils.reverse(REVERSED_CHUNK_BUFFER_LAYERS);
|
||||||
|
}
|
||||||
|
|
||||||
public KineticTileEntityRenderer(BlockEntityRendererProvider.Context context) {
|
public KineticTileEntityRenderer(BlockEntityRendererProvider.Context context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,9 +44,25 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
|
||||||
int light, int overlay) {
|
int light, int overlay) {
|
||||||
if (Backend.getInstance().canUseInstancing(te.getLevel())) return;
|
if (Backend.getInstance().canUseInstancing(te.getLevel())) return;
|
||||||
|
|
||||||
for (RenderType type : RenderType.chunkBufferLayers())
|
BlockState state = getRenderedBlockState(te);
|
||||||
if (ItemBlockRenderTypes.canRenderInLayer(te.getBlockState(), type))
|
RenderType type = getRenderType(te, state);
|
||||||
renderRotatingBuffer(te, getRotatedModel(te), ms, buffer.getBuffer(type), light);
|
if (type != null)
|
||||||
|
renderRotatingBuffer(te, getRotatedModel(te, state), ms, buffer.getBuffer(type), light);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected BlockState getRenderedBlockState(KineticTileEntity te) {
|
||||||
|
return te.getBlockState();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected RenderType getRenderType(KineticTileEntity te, BlockState state) {
|
||||||
|
for (RenderType type : REVERSED_CHUNK_BUFFER_LAYERS)
|
||||||
|
if (ItemBlockRenderTypes.canRenderInLayer(state, type))
|
||||||
|
return type;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||||
|
return CachedBufferer.block(KINETIC_TILE, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void renderRotatingKineticBlock(KineticTileEntity te, BlockState renderedState, PoseStack ms,
|
public static void renderRotatingKineticBlock(KineticTileEntity te, BlockState renderedState, PoseStack ms,
|
||||||
|
@ -112,12 +132,4 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
|
||||||
.getBlock()).getRotationAxis(te.getBlockState());
|
.getBlock()).getRotationAxis(te.getBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected BlockState getRenderedBlockState(KineticTileEntity te) {
|
|
||||||
return te.getBlockState();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
|
||||||
return CachedBufferer.block(KINETIC_TILE, getRenderedBlockState(te));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,8 +26,8 @@ public class DrillRenderer extends KineticTileEntityRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||||
return CachedBufferer.partialFacing(AllBlockPartials.DRILL_HEAD, te.getBlockState());
|
return CachedBufferer.partialFacing(AllBlockPartials.DRILL_HEAD, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld,
|
public static void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld,
|
||||||
|
|
|
@ -90,12 +90,8 @@ public class CuckooClockRenderer extends KineticTileEntityRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||||
return transform(AllBlockPartials.SHAFT_HALF, te);
|
return CachedBufferer.partialFacing(AllBlockPartials.SHAFT_HALF, state, state
|
||||||
}
|
|
||||||
|
|
||||||
private SuperByteBuffer transform(PartialModel partial, KineticTileEntity te) {
|
|
||||||
return CachedBufferer.partialFacing(partial, te.getBlockState(), te.getBlockState()
|
|
||||||
.getValue(CuckooClockBlock.HORIZONTAL_FACING)
|
.getValue(CuckooClockBlock.HORIZONTAL_FACING)
|
||||||
.getOpposite());
|
.getOpposite());
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,8 +85,8 @@ public class FlywheelRenderer extends KineticTileEntityRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||||
return CachedBufferer.partialFacing(AllBlockPartials.SHAFT_HALF, te.getBlockState(), te.getBlockState()
|
return CachedBufferer.partialFacing(AllBlockPartials.SHAFT_HALF, state, state
|
||||||
.getValue(BlockStateProperties.HORIZONTAL_FACING)
|
.getValue(BlockStateProperties.HORIZONTAL_FACING)
|
||||||
.getOpposite());
|
.getOpposite());
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.simibubi.create.foundation.render.CachedBufferer;
|
||||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
|
||||||
public class MillstoneRenderer extends KineticTileEntityRenderer {
|
public class MillstoneRenderer extends KineticTileEntityRenderer {
|
||||||
|
|
||||||
|
@ -15,8 +16,8 @@ public class MillstoneRenderer extends KineticTileEntityRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||||
return CachedBufferer.partial(AllBlockPartials.MILLSTONE_COG, te.getBlockState());
|
return CachedBufferer.partial(AllBlockPartials.MILLSTONE_COG, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.simibubi.create.foundation.render.CachedBufferer;
|
||||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
|
||||||
public class CreativeMotorRenderer extends KineticTileEntityRenderer {
|
public class CreativeMotorRenderer extends KineticTileEntityRenderer {
|
||||||
|
|
||||||
|
@ -15,8 +16,8 @@ public class CreativeMotorRenderer extends KineticTileEntityRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||||
return CachedBufferer.partialFacing(AllBlockPartials.SHAFT_HALF, te.getBlockState());
|
return CachedBufferer.partialFacing(AllBlockPartials.SHAFT_HALF, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||||
|
|
||||||
public class BearingRenderer extends KineticTileEntityRenderer {
|
public class BearingRenderer extends KineticTileEntityRenderer {
|
||||||
|
@ -49,8 +50,8 @@ public class BearingRenderer extends KineticTileEntityRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||||
return CachedBufferer.partialFacing(AllBlockPartials.SHAFT_HALF, te.getBlockState(), te.getBlockState()
|
return CachedBufferer.partialFacing(AllBlockPartials.SHAFT_HALF, state, state
|
||||||
.getValue(BearingBlock.FACING)
|
.getValue(BearingBlock.FACING)
|
||||||
.getOpposite());
|
.getOpposite());
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ import net.minecraft.core.Direction;
|
||||||
import net.minecraft.world.level.BlockAndTintGetter;
|
import net.minecraft.world.level.BlockAndTintGetter;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraftforge.client.model.data.IModelData;
|
import net.minecraftforge.client.model.data.IModelData;
|
||||||
import net.minecraftforge.client.model.data.ModelDataMap;
|
|
||||||
import net.minecraftforge.client.model.data.ModelDataMap.Builder;
|
import net.minecraftforge.client.model.data.ModelDataMap.Builder;
|
||||||
import net.minecraftforge.client.model.data.ModelProperty;
|
import net.minecraftforge.client.model.data.ModelProperty;
|
||||||
|
|
||||||
|
@ -52,12 +51,9 @@ public class PipeAttachmentModel extends BakedModelWrapperWithData {
|
||||||
@Override
|
@Override
|
||||||
public List<BakedQuad> getQuads(BlockState state, Direction side, Random rand, IModelData data) {
|
public List<BakedQuad> getQuads(BlockState state, Direction side, Random rand, IModelData data) {
|
||||||
List<BakedQuad> quads = super.getQuads(state, side, rand, data);
|
List<BakedQuad> quads = super.getQuads(state, side, rand, data);
|
||||||
if (data instanceof ModelDataMap) {
|
if (data.hasProperty(PIPE_PROPERTY)) {
|
||||||
ModelDataMap modelDataMap = (ModelDataMap) data;
|
quads = new ArrayList<>(quads);
|
||||||
if (modelDataMap.hasProperty(PIPE_PROPERTY)) {
|
addQuads(quads, state, side, rand, data, data.getData(PIPE_PROPERTY));
|
||||||
quads = new ArrayList<>(quads);
|
|
||||||
addQuads(quads, state, side, rand, modelDataMap, modelDataMap.getData(PIPE_PROPERTY));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return quads;
|
return quads;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +74,7 @@ public class PipeAttachmentModel extends BakedModelWrapperWithData {
|
||||||
quads.addAll(bracket.getQuads(state, side, rand, data));
|
quads.addAll(bracket.getQuads(state, side, rand, data));
|
||||||
}
|
}
|
||||||
|
|
||||||
private class PipeModelData {
|
private static class PipeModelData {
|
||||||
AttachmentTypes[] rims;
|
AttachmentTypes[] rims;
|
||||||
boolean encased;
|
boolean encased;
|
||||||
BakedModel bracket;
|
BakedModel bracket;
|
||||||
|
|
|
@ -48,8 +48,8 @@ public class PumpRenderer extends KineticTileEntityRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||||
return CachedBufferer.partialFacing(AllBlockPartials.MECHANICAL_PUMP_COG, te.getBlockState());
|
return CachedBufferer.partialFacing(AllBlockPartials.MECHANICAL_PUMP_COG, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ import net.minecraft.core.Direction;
|
||||||
import net.minecraft.core.Direction.Axis;
|
import net.minecraft.core.Direction.Axis;
|
||||||
import net.minecraft.util.StringRepresentable;
|
import net.minecraft.util.StringRepresentable;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.minecraft.world.level.block.Rotation;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.StateDefinition.Builder;
|
import net.minecraft.world.level.block.state.StateDefinition.Builder;
|
||||||
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
||||||
|
@ -41,8 +42,8 @@ public class BracketBlock extends WrenchableDirectionalBlock {
|
||||||
.add(TYPE));
|
.add(TYPE));
|
||||||
}
|
}
|
||||||
|
|
||||||
public BracketBlock(Properties p_i48415_1_) {
|
public BracketBlock(Properties properties) {
|
||||||
super(p_i48415_1_);
|
super(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<BlockState> getSuitableBracket(BlockState blockState, Direction direction) {
|
public Optional<BlockState> getSuitableBracket(BlockState blockState, Direction direction) {
|
||||||
|
@ -63,4 +64,11 @@ public class BracketBlock extends WrenchableDirectionalBlock {
|
||||||
.setValue(AXIS_ALONG_FIRST_COORDINATE, !alongFirst));
|
.setValue(AXIS_ALONG_FIRST_COORDINATE, !alongFirst));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState rotate(BlockState state, Rotation rot) {
|
||||||
|
if (rot.ordinal() % 2 == 1)
|
||||||
|
state = state.cycle(AXIS_ALONG_FIRST_COORDINATE);
|
||||||
|
return super.rotate(state, rot);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ package com.simibubi.create.content.contraptions.fluids.pipes;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.ITransformableTE;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.StructureTransform;
|
||||||
import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour;
|
import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.relays.elementary.BracketedTileEntityBehaviour;
|
import com.simibubi.create.content.contraptions.relays.elementary.BracketedTileEntityBehaviour;
|
||||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||||
|
@ -15,7 +17,7 @@ import net.minecraft.world.level.BlockAndTintGetter;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
|
||||||
public class FluidPipeTileEntity extends SmartTileEntity {
|
public class FluidPipeTileEntity extends SmartTileEntity implements ITransformableTE {
|
||||||
|
|
||||||
public FluidPipeTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
public FluidPipeTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||||
super(type, pos, state);
|
super(type, pos, state);
|
||||||
|
@ -28,6 +30,14 @@ public class FluidPipeTileEntity extends SmartTileEntity {
|
||||||
.withTrigger(state -> AllTriggers.BRACKET_APPLY_TRIGGER.constructTriggerFor(state.getBlock())));
|
.withTrigger(state -> AllTriggers.BRACKET_APPLY_TRIGGER.constructTriggerFor(state.getBlock())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void transform(StructureTransform transform) {
|
||||||
|
BracketedTileEntityBehaviour bracketBehaviour = getBehaviour(BracketedTileEntityBehaviour.TYPE);
|
||||||
|
if (bracketBehaviour != null) {
|
||||||
|
bracketBehaviour.transformBracket(transform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean canHaveBracket(BlockState state) {
|
private boolean canHaveBracket(BlockState state) {
|
||||||
return !(state.getBlock() instanceof EncasedPipeBlock);
|
return !(state.getBlock() instanceof EncasedPipeBlock);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,7 @@ package com.simibubi.create.content.contraptions.fluids.recipe;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.utility.ISimpleReloadListener;
|
import net.minecraft.server.packs.resources.ResourceManagerReloadListener;
|
||||||
|
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
|
||||||
|
@ -13,7 +12,7 @@ public class FluidTransferRecipes {
|
||||||
public static List<ItemStack> POTION_ITEMS = new ArrayList<>();
|
public static List<ItemStack> POTION_ITEMS = new ArrayList<>();
|
||||||
public static List<Item> FILLED_BUCKETS = new ArrayList<>();
|
public static List<Item> FILLED_BUCKETS = new ArrayList<>();
|
||||||
|
|
||||||
public static final ISimpleReloadListener LISTENER = (resourceManager, profiler) -> {
|
public static final ResourceManagerReloadListener LISTENER = resourceManager -> {
|
||||||
POTION_ITEMS.clear();
|
POTION_ITEMS.clear();
|
||||||
FILLED_BUCKETS.clear();
|
FILLED_BUCKETS.clear();
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,8 +15,8 @@ import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler
|
||||||
import com.simibubi.create.content.contraptions.processing.HeatCondition;
|
import com.simibubi.create.content.contraptions.processing.HeatCondition;
|
||||||
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
|
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
|
||||||
import com.simibubi.create.foundation.fluid.FluidIngredient;
|
import com.simibubi.create.foundation.fluid.FluidIngredient;
|
||||||
import com.simibubi.create.foundation.utility.ISimpleReloadListener;
|
|
||||||
|
|
||||||
|
import net.minecraft.server.packs.resources.ResourceManagerReloadListener;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.alchemy.Potion;
|
import net.minecraft.world.item.alchemy.Potion;
|
||||||
|
@ -131,7 +131,7 @@ public class PotionMixingRecipeManager {
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final ISimpleReloadListener LISTENER = (resourceManager, profiler) -> {
|
public static final ResourceManagerReloadListener LISTENER = resourceManager -> {
|
||||||
ALL.clear();
|
ALL.clear();
|
||||||
getAllBrewingRecipes().forEach(recipe -> {
|
getAllBrewingRecipes().forEach(recipe -> {
|
||||||
for (Ingredient ingredient : recipe.getIngredients()) {
|
for (Ingredient ingredient : recipe.getIngredients()) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.simibubi.create.content.contraptions.relays.elementary;
|
package com.simibubi.create.content.contraptions.relays.elementary;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ public class BracketedKineticBlockModel extends BakedModelWrapper<BakedModel> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IModelData getModelData(BlockAndTintGetter world, BlockPos pos, BlockState state, IModelData tileData) {
|
public IModelData getModelData(BlockAndTintGetter world, BlockPos pos, BlockState state, IModelData tileData) {
|
||||||
if (tileData == VirtualEmptyModelData.INSTANCE)
|
if (VirtualEmptyModelData.is(tileData))
|
||||||
return tileData;
|
return tileData;
|
||||||
BracketedModelData data = new BracketedModelData();
|
BracketedModelData data = new BracketedModelData();
|
||||||
BracketedTileEntityBehaviour attachmentBehaviour =
|
BracketedTileEntityBehaviour attachmentBehaviour =
|
||||||
|
@ -42,27 +42,19 @@ public class BracketedKineticBlockModel extends BakedModelWrapper<BakedModel> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BakedQuad> getQuads(BlockState state, Direction side, Random rand, IModelData data) {
|
public List<BakedQuad> getQuads(BlockState state, Direction side, Random rand, IModelData data) {
|
||||||
if (data instanceof ModelDataMap) {
|
if (!VirtualEmptyModelData.is(data)) {
|
||||||
List<BakedQuad> quads = new ArrayList<>();
|
if (data.hasProperty(BRACKET_PROPERTY)) {
|
||||||
ModelDataMap modelDataMap = (ModelDataMap) data;
|
BracketedModelData pipeData = data.getData(BRACKET_PROPERTY);
|
||||||
if (modelDataMap.hasProperty(BRACKET_PROPERTY)) {
|
BakedModel bracket = pipeData.getBracket();
|
||||||
quads = new ArrayList<>(quads);
|
if (bracket != null)
|
||||||
addQuads(quads, state, side, rand, modelDataMap, modelDataMap.getData(BRACKET_PROPERTY));
|
return bracket.getQuads(state, side, rand, data);
|
||||||
}
|
}
|
||||||
return quads;
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return super.getQuads(state, side, rand, data);
|
return super.getQuads(state, side, rand, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addQuads(List<BakedQuad> quads, BlockState state, Direction side, Random rand, IModelData data,
|
private static class BracketedModelData {
|
||||||
BracketedModelData pipeData) {
|
|
||||||
BakedModel bracket = pipeData.getBracket();
|
|
||||||
if (bracket == null)
|
|
||||||
return;
|
|
||||||
quads.addAll(bracket.getQuads(state, side, rand, data));
|
|
||||||
}
|
|
||||||
|
|
||||||
private class BracketedModelData {
|
|
||||||
BakedModel bracket;
|
BakedModel bracket;
|
||||||
|
|
||||||
public void putBracket(BlockState state) {
|
public void putBracket(BlockState state) {
|
||||||
|
|
|
@ -2,6 +2,8 @@ package com.simibubi.create.content.contraptions.relays.elementary;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.ITransformableTE;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.StructureTransform;
|
||||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
|
|
||||||
|
@ -9,7 +11,7 @@ import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
|
||||||
public class BracketedKineticTileEntity extends SimpleKineticTileEntity {
|
public class BracketedKineticTileEntity extends SimpleKineticTileEntity implements ITransformableTE {
|
||||||
|
|
||||||
public BracketedKineticTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
public BracketedKineticTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||||
super(type, pos, state);
|
super(type, pos, state);
|
||||||
|
@ -22,4 +24,12 @@ public class BracketedKineticTileEntity extends SimpleKineticTileEntity {
|
||||||
super.addBehaviours(behaviours);
|
super.addBehaviours(behaviours);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void transform(StructureTransform transform) {
|
||||||
|
BracketedTileEntityBehaviour bracketBehaviour = getBehaviour(BracketedTileEntityBehaviour.TYPE);
|
||||||
|
if (bracketBehaviour != null) {
|
||||||
|
bracketBehaviour.transformBracket(transform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.StructureTransform;
|
||||||
import com.simibubi.create.content.schematics.ItemRequirement;
|
import com.simibubi.create.content.schematics.ItemRequirement;
|
||||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||||
import com.simibubi.create.foundation.advancement.ITriggerable;
|
import com.simibubi.create.foundation.advancement.ITriggerable;
|
||||||
|
@ -56,10 +57,12 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour {
|
||||||
tileEntity.notifyUpdate();
|
tileEntity.notifyUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void triggerAdvancements(Level world, Player player, BlockState state) {
|
public void transformBracket(StructureTransform transform) {
|
||||||
if (trigger == null)
|
if (isBracketPresent()) {
|
||||||
return;
|
BlockState bracket = getBracket();
|
||||||
AllTriggers.triggerFor(trigger.apply(state), player);
|
BlockState transformedBracket = transform.apply(bracket);
|
||||||
|
applyBracket(transformedBracket);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeBracket(boolean inOnReplacedContext) {
|
public void removeBracket(boolean inOnReplacedContext) {
|
||||||
|
@ -75,13 +78,23 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isBracketPresent() {
|
public boolean isBracketPresent() {
|
||||||
return getBracket() != Blocks.AIR.defaultBlockState();
|
return bracket.isPresent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlockState getBracket() {
|
public BlockState getBracket() {
|
||||||
return bracket.orElse(Blocks.AIR.defaultBlockState());
|
return bracket.orElse(Blocks.AIR.defaultBlockState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean canHaveBracket() {
|
||||||
|
return pred.test(tileEntity.getBlockState());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void triggerAdvancements(Level world, Player player, BlockState state) {
|
||||||
|
if (trigger == null)
|
||||||
|
return;
|
||||||
|
AllTriggers.triggerFor(trigger.apply(state), player);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemRequirement getRequiredItems() {
|
public ItemRequirement getRequiredItems() {
|
||||||
return ItemRequirement.of(getBracket(), null);
|
return ItemRequirement.of(getBracket(), null);
|
||||||
|
@ -112,8 +125,4 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour {
|
||||||
super.read(nbt, clientPacket);
|
super.read(nbt, clientPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canHaveBracket() {
|
|
||||||
return pred.test(tileEntity.getBlockState());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,11 +58,10 @@ public class EncasedCogRenderer extends KineticTileEntityRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||||
return CachedBufferer.partialFacingVertical(
|
return CachedBufferer.partialFacingVertical(
|
||||||
large ? AllBlockPartials.SHAFTLESS_LARGE_COGWHEEL : AllBlockPartials.SHAFTLESS_COGWHEEL, te.getBlockState(),
|
large ? AllBlockPartials.SHAFTLESS_LARGE_COGWHEEL : AllBlockPartials.SHAFTLESS_COGWHEEL, state,
|
||||||
Direction.fromAxisAndDirection(te.getBlockState()
|
Direction.fromAxisAndDirection(state.getValue(EncasedCogwheelBlock.AXIS), AxisDirection.POSITIVE));
|
||||||
.getValue(EncasedCogwheelBlock.AXIS), AxisDirection.POSITIVE));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,8 +40,8 @@ public class CopperBacktankRenderer extends KineticTileEntityRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||||
return CachedBufferer.partial(AllBlockPartials.COPPER_BACKTANK_SHAFT, te.getBlockState());
|
return CachedBufferer.partial(AllBlockPartials.COPPER_BACKTANK_SHAFT, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,6 +85,7 @@ public class SymmetryHandler {
|
||||||
public static void render(RenderLevelLastEvent event) {
|
public static void render(RenderLevelLastEvent event) {
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
LocalPlayer player = mc.player;
|
LocalPlayer player = mc.player;
|
||||||
|
Random random = new Random();
|
||||||
|
|
||||||
for (int i = 0; i < Inventory.getSelectionSize(); i++) {
|
for (int i = 0; i < Inventory.getSelectionSize(); i++) {
|
||||||
ItemStack stackInSlot = player.getInventory()
|
ItemStack stackInSlot = player.getInventory()
|
||||||
|
@ -103,8 +104,7 @@ public class SymmetryHandler {
|
||||||
double speed = 1 / 16d;
|
double speed = 1 / 16d;
|
||||||
yShift = Mth.sin((float) (AnimationTickHolder.getRenderTime() * speed)) / 5f;
|
yShift = Mth.sin((float) (AnimationTickHolder.getRenderTime() * speed)) / 5f;
|
||||||
|
|
||||||
MultiBufferSource.BufferSource buffer = Minecraft.getInstance()
|
MultiBufferSource.BufferSource buffer = mc.renderBuffers()
|
||||||
.renderBuffers()
|
|
||||||
.bufferSource();
|
.bufferSource();
|
||||||
Camera info = mc.gameRenderer.getMainCamera();
|
Camera info = mc.gameRenderer.getMainCamera();
|
||||||
Vec3 view = info.getPosition();
|
Vec3 view = info.getPosition();
|
||||||
|
@ -122,7 +122,7 @@ public class SymmetryHandler {
|
||||||
mc.getBlockRenderer()
|
mc.getBlockRenderer()
|
||||||
.getModelRenderer()
|
.getModelRenderer()
|
||||||
.tesselateBlock(player.level, model, Blocks.AIR.defaultBlockState(), pos, ms, builder, true,
|
.tesselateBlock(player.level, model, Blocks.AIR.defaultBlockState(), pos, ms, builder, true,
|
||||||
player.level.getRandom(), Mth.getSeed(pos), OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE);
|
random, Mth.getSeed(pos), OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE);
|
||||||
|
|
||||||
buffer.endBatch();
|
buffer.endBatch();
|
||||||
ms.popPose();
|
ms.popPose();
|
||||||
|
|
|
@ -31,11 +31,6 @@ public class ArmRenderer extends KineticTileEntityRenderer {
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean shouldRenderOffScreen(KineticTileEntity te) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void renderSafe(KineticTileEntity te, float pt, PoseStack ms, MultiBufferSource buffer, int light,
|
protected void renderSafe(KineticTileEntity te, float pt, PoseStack ms, MultiBufferSource buffer, int light,
|
||||||
int overlay) {
|
int overlay) {
|
||||||
|
@ -187,8 +182,13 @@ public class ArmRenderer extends KineticTileEntityRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
public boolean shouldRenderOffScreen(KineticTileEntity te) {
|
||||||
return CachedBufferer.partial(AllBlockPartials.ARM_COG, te.getBlockState());
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SuperByteBuffer getRotatedModel(KineticTileEntity te, BlockState state) {
|
||||||
|
return CachedBufferer.partial(AllBlockPartials.ARM_COG, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -395,8 +395,7 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE
|
||||||
ArmInteractionPoint.transformPos(transform, (CompoundTag) inbt);
|
ArmInteractionPoint.transformPos(transform, (CompoundTag) inbt);
|
||||||
}
|
}
|
||||||
|
|
||||||
sendData();
|
notifyUpdate();
|
||||||
setChanged();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void initInteractionPoints() {
|
protected void initInteractionPoints() {
|
||||||
|
|
|
@ -30,11 +30,6 @@ public class SchematicannonRenderer extends SafeTileEntityRenderer<Schematicanno
|
||||||
|
|
||||||
public SchematicannonRenderer(BlockEntityRendererProvider.Context context) {}
|
public SchematicannonRenderer(BlockEntityRendererProvider.Context context) {}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean shouldRenderOffScreen(SchematicannonTileEntity tileEntity) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void renderSafe(SchematicannonTileEntity tileEntity, float partialTicks, PoseStack ms,
|
protected void renderSafe(SchematicannonTileEntity tileEntity, float partialTicks, PoseStack ms,
|
||||||
MultiBufferSource buffer, int light, int overlay) {
|
MultiBufferSource buffer, int light, int overlay) {
|
||||||
|
@ -212,6 +207,11 @@ public class SchematicannonRenderer extends SafeTileEntityRenderer<Schematicanno
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldRenderOffScreen(SchematicannonTileEntity tileEntity) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getViewDistance() {
|
public int getViewDistance() {
|
||||||
return 128;
|
return 128;
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import com.jozufozu.flywheel.util.transform.TransformStack;
|
import com.jozufozu.flywheel.util.transform.TransformStack;
|
||||||
|
@ -90,6 +91,7 @@ public class SchematicRenderer {
|
||||||
List<BlockState> blockstates = new LinkedList<>();
|
List<BlockState> blockstates = new LinkedList<>();
|
||||||
Map<RenderType, BufferBuilder> buffers = new HashMap<>();
|
Map<RenderType, BufferBuilder> buffers = new HashMap<>();
|
||||||
PoseStack ms = new PoseStack();
|
PoseStack ms = new PoseStack();
|
||||||
|
Random random = new Random();
|
||||||
|
|
||||||
BlockPos.betweenClosedStream(blockAccess.getBounds())
|
BlockPos.betweenClosedStream(blockAccess.getBounds())
|
||||||
.forEach(localPos -> {
|
.forEach(localPos -> {
|
||||||
|
@ -104,7 +106,7 @@ public class SchematicRenderer {
|
||||||
continue;
|
continue;
|
||||||
ForgeHooksClient.setRenderType(blockRenderLayer);
|
ForgeHooksClient.setRenderType(blockRenderLayer);
|
||||||
if (!buffers.containsKey(blockRenderLayer))
|
if (!buffers.containsKey(blockRenderLayer))
|
||||||
buffers.put(blockRenderLayer, new BufferBuilder(DefaultVertexFormat.BLOCK.getIntegerSize()));
|
buffers.put(blockRenderLayer, new BufferBuilder(512));
|
||||||
|
|
||||||
BufferBuilder bufferBuilder = buffers.get(blockRenderLayer);
|
BufferBuilder bufferBuilder = buffers.get(blockRenderLayer);
|
||||||
if (startedBufferBuilders.add(blockRenderLayer))
|
if (startedBufferBuilders.add(blockRenderLayer))
|
||||||
|
@ -113,8 +115,7 @@ public class SchematicRenderer {
|
||||||
BlockEntity tileEntity = blockAccess.getBlockEntity(localPos);
|
BlockEntity tileEntity = blockAccess.getBlockEntity(localPos);
|
||||||
|
|
||||||
if (blockRendererDispatcher.renderBatched(state, pos, blockAccess, ms, bufferBuilder, true,
|
if (blockRendererDispatcher.renderBatched(state, pos, blockAccess, ms, bufferBuilder, true,
|
||||||
minecraft.level.random,
|
random, tileEntity != null ? tileEntity.getModelData() : EmptyModelData.INSTANCE)) {
|
||||||
tileEntity != null ? tileEntity.getModelData() : EmptyModelData.INSTANCE)) {
|
|
||||||
usedBlockRenderLayers.add(blockRenderLayer);
|
usedBlockRenderLayers.add(blockRenderLayer);
|
||||||
}
|
}
|
||||||
blockstates.add(state);
|
blockstates.add(state);
|
||||||
|
|
|
@ -3,15 +3,14 @@ package com.simibubi.create.foundation;
|
||||||
import com.simibubi.create.CreateClient;
|
import com.simibubi.create.CreateClient;
|
||||||
import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation;
|
import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation;
|
||||||
import com.simibubi.create.foundation.sound.SoundScapes;
|
import com.simibubi.create.foundation.sound.SoundScapes;
|
||||||
import com.simibubi.create.foundation.utility.ISimpleReloadListener;
|
|
||||||
|
|
||||||
import net.minecraft.server.packs.resources.ResourceManager;
|
import net.minecraft.server.packs.resources.ResourceManager;
|
||||||
import net.minecraft.util.profiling.ProfilerFiller;
|
import net.minecraft.server.packs.resources.ResourceManagerReloadListener;
|
||||||
|
|
||||||
public class ClientResourceReloadListener implements ISimpleReloadListener {
|
public class ClientResourceReloadListener implements ResourceManagerReloadListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReload(ResourceManager resourceManager, ProfilerFiller profiler) {
|
public void onResourceManagerReload(ResourceManager resourceManager) {
|
||||||
CreateClient.invalidateRenderers();
|
CreateClient.invalidateRenderers();
|
||||||
SoundScapes.invalidateAll();
|
SoundScapes.invalidateAll();
|
||||||
IHaveGoggleInformation.numberFormat.update();
|
IHaveGoggleInformation.numberFormat.update();
|
||||||
|
|
|
@ -14,8 +14,8 @@ import net.minecraft.world.level.block.state.StateDefinition.Builder;
|
||||||
|
|
||||||
public class WrenchableDirectionalBlock extends DirectionalBlock implements IWrenchable {
|
public class WrenchableDirectionalBlock extends DirectionalBlock implements IWrenchable {
|
||||||
|
|
||||||
public WrenchableDirectionalBlock(Properties p_i48415_1_) {
|
public WrenchableDirectionalBlock(Properties properties) {
|
||||||
super(p_i48415_1_);
|
super(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,19 +1,12 @@
|
||||||
package com.simibubi.create.foundation.render;
|
package com.simibubi.create.foundation.render;
|
||||||
|
|
||||||
import java.util.Random;
|
import com.jozufozu.flywheel.core.model.ModelUtil;
|
||||||
|
|
||||||
import com.jozufozu.flywheel.util.VirtualEmptyModelData;
|
|
||||||
import com.mojang.blaze3d.vertex.BufferBuilder;
|
import com.mojang.blaze3d.vertex.BufferBuilder;
|
||||||
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.blaze3d.vertex.VertexFormat;
|
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
|
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
|
||||||
import net.minecraft.client.renderer.block.ModelBlockRenderer;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.client.resources.model.BakedModel;
|
import net.minecraft.client.resources.model.BakedModel;
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
|
||||||
public class BakedModelRenderHelper {
|
public class BakedModelRenderHelper {
|
||||||
|
@ -29,22 +22,8 @@ public class BakedModelRenderHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SuperByteBuffer standardModelRender(BakedModel model, BlockState referenceState, PoseStack ms) {
|
public static SuperByteBuffer standardModelRender(BakedModel model, BlockState referenceState, PoseStack ms) {
|
||||||
BufferBuilder builder = getBufferBuilder(model, referenceState, ms);
|
BufferBuilder builder = ModelUtil.getBufferBuilder(model, referenceState, ms);
|
||||||
|
|
||||||
return new SuperByteBuffer(builder);
|
return new SuperByteBuffer(builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BufferBuilder getBufferBuilder(BakedModel model, BlockState referenceState, PoseStack ms) {
|
|
||||||
Minecraft mc = Minecraft.getInstance();
|
|
||||||
BlockRenderDispatcher dispatcher = mc.getBlockRenderer();
|
|
||||||
ModelBlockRenderer blockRenderer = dispatcher.getModelRenderer();
|
|
||||||
BufferBuilder builder = new BufferBuilder(512);
|
|
||||||
|
|
||||||
builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
|
|
||||||
blockRenderer.tesselateBlock(mc.level, model, referenceState, BlockPos.ZERO.above(255), ms, builder, true,
|
|
||||||
new Random(), 42, OverlayTexture.NO_OVERLAY, VirtualEmptyModelData.INSTANCE);
|
|
||||||
builder.end();
|
|
||||||
return builder;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
package com.simibubi.create.foundation.utility;
|
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
|
|
||||||
import net.minecraft.server.packs.resources.PreparableReloadListener;
|
|
||||||
import net.minecraft.server.packs.resources.ResourceManager;
|
|
||||||
import net.minecraft.util.Unit;
|
|
||||||
import net.minecraft.util.profiling.ProfilerFiller;
|
|
||||||
|
|
||||||
// TODO 1.18: remove and replace all usages with ResourceManagerReloadListener
|
|
||||||
@FunctionalInterface
|
|
||||||
public interface ISimpleReloadListener extends PreparableReloadListener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
default CompletableFuture<Void> reload(PreparableReloadListener.PreparationBarrier stage, ResourceManager resourceManager, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, Executor prepareExecutor, Executor applyExecutor) {
|
|
||||||
return stage.wait(Unit.INSTANCE).thenRunAsync(() -> {
|
|
||||||
onReload(resourceManager, applyProfiler);
|
|
||||||
}, applyExecutor);
|
|
||||||
}
|
|
||||||
|
|
||||||
void onReload(ResourceManager resourceManager, ProfilerFiller profiler);
|
|
||||||
|
|
||||||
}
|
|
|
@ -10,8 +10,8 @@ import javax.annotation.Nullable;
|
||||||
|
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
import com.google.common.cache.CacheBuilder;
|
import com.google.common.cache.CacheBuilder;
|
||||||
import com.simibubi.create.foundation.utility.ISimpleReloadListener;
|
|
||||||
|
|
||||||
|
import net.minecraft.server.packs.resources.ResourceManagerReloadListener;
|
||||||
import net.minecraft.world.item.crafting.Recipe;
|
import net.minecraft.world.item.crafting.Recipe;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ public class RecipeFinder {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final ISimpleReloadListener LISTENER = (resourceManager, profiler) -> {
|
public static final ResourceManagerReloadListener LISTENER = resourceManager -> {
|
||||||
cachedSearches.invalidateAll();
|
cachedSearches.invalidateAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue