Prevent loading connected textures on server

- Wrap ConnectedTextureBehaviour and AllSpriteShifts instances in
Suppliers where necessary
- Use client connection's instead of level's RecipeManager when finding
recipes for JEI
- Add missing override annotations in SymmetryEffectPacket
- Organize imports
This commit is contained in:
PepperCode1 2022-01-03 15:23:42 -08:00
parent 1bae455045
commit cf3dac6ad0
26 changed files with 156 additions and 183 deletions

View File

@ -294,20 +294,20 @@ public class AllBlocks {
public static final BlockEntry<EncasedShaftBlock> ANDESITE_ENCASED_SHAFT =
REGISTRATE.block("andesite_encased_shaft", EncasedShaftBlock::andesite)
.transform(BuilderTransformers.encasedShaft("andesite", AllSpriteShifts.ANDESITE_CASING))
.transform(BuilderTransformers.encasedShaft("andesite", () -> AllSpriteShifts.ANDESITE_CASING))
.transform(axeOrPickaxe())
.register();
public static final BlockEntry<EncasedShaftBlock> BRASS_ENCASED_SHAFT =
REGISTRATE.block("brass_encased_shaft", EncasedShaftBlock::brass)
.transform(BuilderTransformers.encasedShaft("brass", AllSpriteShifts.BRASS_CASING))
.transform(BuilderTransformers.encasedShaft("brass", () -> AllSpriteShifts.BRASS_CASING))
.transform(axeOrPickaxe())
.register();
public static final BlockEntry<EncasedCogwheelBlock> ANDESITE_ENCASED_COGWHEEL =
REGISTRATE.block("andesite_encased_cogwheel", p -> EncasedCogwheelBlock.andesite(false, p))
.transform(BuilderTransformers.encasedCogwheel("andesite", AllSpriteShifts.ANDESITE_CASING))
.onRegister(CreateRegistrate.connectedTextures(new EncasedCogCTBehaviour(AllSpriteShifts.ANDESITE_CASING,
.transform(BuilderTransformers.encasedCogwheel("andesite", () -> AllSpriteShifts.ANDESITE_CASING))
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCogCTBehaviour(AllSpriteShifts.ANDESITE_CASING,
Couple.create(AllSpriteShifts.ANDESITE_ENCASED_COGWHEEL_SIDE,
AllSpriteShifts.ANDESITE_ENCASED_COGWHEEL_OTHERSIDE))))
.transform(axeOrPickaxe())
@ -315,8 +315,8 @@ public class AllBlocks {
public static final BlockEntry<EncasedCogwheelBlock> BRASS_ENCASED_COGWHEEL =
REGISTRATE.block("brass_encased_cogwheel", p -> EncasedCogwheelBlock.brass(false, p))
.transform(BuilderTransformers.encasedCogwheel("brass", AllSpriteShifts.BRASS_CASING))
.onRegister(CreateRegistrate.connectedTextures(new EncasedCogCTBehaviour(AllSpriteShifts.BRASS_CASING,
.transform(BuilderTransformers.encasedCogwheel("brass", () -> AllSpriteShifts.BRASS_CASING))
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCogCTBehaviour(AllSpriteShifts.BRASS_CASING,
Couple.create(AllSpriteShifts.BRASS_ENCASED_COGWHEEL_SIDE,
AllSpriteShifts.BRASS_ENCASED_COGWHEEL_OTHERSIDE))))
.transform(axeOrPickaxe())
@ -324,13 +324,13 @@ public class AllBlocks {
public static final BlockEntry<EncasedCogwheelBlock> ANDESITE_ENCASED_LARGE_COGWHEEL =
REGISTRATE.block("andesite_encased_large_cogwheel", p -> EncasedCogwheelBlock.andesite(true, p))
.transform(BuilderTransformers.encasedLargeCogwheel("andesite", AllSpriteShifts.ANDESITE_CASING))
.transform(BuilderTransformers.encasedLargeCogwheel("andesite", () -> AllSpriteShifts.ANDESITE_CASING))
.transform(axeOrPickaxe())
.register();
public static final BlockEntry<EncasedCogwheelBlock> BRASS_ENCASED_LARGE_COGWHEEL =
REGISTRATE.block("brass_encased_large_cogwheel", p -> EncasedCogwheelBlock.brass(true, p))
.transform(BuilderTransformers.encasedLargeCogwheel("brass", AllSpriteShifts.BRASS_CASING))
.transform(BuilderTransformers.encasedLargeCogwheel("brass", () -> AllSpriteShifts.BRASS_CASING))
.transform(axeOrPickaxe())
.register();
@ -339,7 +339,7 @@ public class AllBlocks {
.properties(BlockBehaviour.Properties::noOcclusion)
.transform(BlockStressDefaults.setNoImpact())
.transform(axeOrPickaxe())
.onRegister(CreateRegistrate.connectedTextures(new EncasedCTBehaviour(AllSpriteShifts.ANDESITE_CASING)))
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCTBehaviour(AllSpriteShifts.ANDESITE_CASING)))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.ANDESITE_CASING,
(s, f) -> f.getAxis() == s.getValue(GearboxBlock.AXIS))))
.blockstate((c, p) -> axisBlock(c, p, $ -> AssetLookup.partialBaseModel(c, p), true))
@ -668,7 +668,7 @@ public class AllBlocks {
.properties(BlockBehaviour.Properties::noOcclusion)
.transform(axeOrPickaxe())
.blockstate(BlockStateGen.encasedPipe())
.onRegister(CreateRegistrate.connectedTextures(new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING)))
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING)))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.COPPER_CASING,
(s, f) -> !s.getValue(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(f)))))
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
@ -962,7 +962,7 @@ public class AllBlocks {
.transform(axeOrPickaxe())
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(BlockStateGen.linearChassis())
.onRegister(connectedTextures(new ChassisCTBehaviour()))
.onRegister(connectedTextures(ChassisCTBehaviour::new))
.lang("Linear Chassis")
.simpleItem()
.register();
@ -973,7 +973,7 @@ public class AllBlocks {
.transform(axeOrPickaxe())
.tag(AllBlockTags.SAFE_NBT.tag)
.blockstate(BlockStateGen.linearChassis())
.onRegister(connectedTextures(new ChassisCTBehaviour()))
.onRegister(connectedTextures(ChassisCTBehaviour::new))
.simpleItem()
.register();
@ -1146,27 +1146,27 @@ public class AllBlocks {
});
public static final BlockEntry<CasingBlock> ANDESITE_CASING = REGISTRATE.block("andesite_casing", CasingBlock::new)
.transform(BuilderTransformers.casing(AllSpriteShifts.ANDESITE_CASING))
.transform(BuilderTransformers.casing(() -> AllSpriteShifts.ANDESITE_CASING))
.register();
public static final BlockEntry<CasingBlock> BRASS_CASING = REGISTRATE.block("brass_casing", CasingBlock::new)
.transform(BuilderTransformers.casing(AllSpriteShifts.BRASS_CASING))
.transform(BuilderTransformers.casing(() -> AllSpriteShifts.BRASS_CASING))
.register();
public static final BlockEntry<CasingBlock> COPPER_CASING = REGISTRATE.block("copper_casing", CasingBlock::new)
.transform(BuilderTransformers.casing(AllSpriteShifts.COPPER_CASING))
.transform(BuilderTransformers.casing(() -> AllSpriteShifts.COPPER_CASING))
.properties(p -> p.sound(SoundType.COPPER))
.register();
public static final BlockEntry<CasingBlock> SHADOW_STEEL_CASING =
REGISTRATE.block("shadow_steel_casing", CasingBlock::deprecated)
.transform(BuilderTransformers.casing(AllSpriteShifts.SHADOW_STEEL_CASING))
.transform(BuilderTransformers.casing(() -> AllSpriteShifts.SHADOW_STEEL_CASING))
.lang("Shadow Casing")
.register();
public static final BlockEntry<CasingBlock> REFINED_RADIANCE_CASING =
REGISTRATE.block("refined_radiance_casing", CasingBlock::deprecated)
.transform(BuilderTransformers.casing(AllSpriteShifts.REFINED_RADIANCE_CASING))
.transform(BuilderTransformers.casing(() -> AllSpriteShifts.REFINED_RADIANCE_CASING))
.properties(p -> p.lightLevel($ -> 12))
.lang("Radiant Casing")
.register();
@ -1178,7 +1178,7 @@ public class AllBlocks {
.transform(axeOrPickaxe())
.blockstate(BlockStateGen.horizontalBlockProvider(true))
.transform(BlockStressDefaults.setImpact(2.0))
.onRegister(CreateRegistrate.connectedTextures(new CrafterCTBehaviour()))
.onRegister(CreateRegistrate.connectedTextures(CrafterCTBehaviour::new))
.addLayer(() -> RenderType::cutoutMipped)
.item()
.transform(customItemModel())
@ -1257,7 +1257,7 @@ public class AllBlocks {
.modelFile(AssetLookup.standardModel(c, p))
.rotationY(s.getValue(ItemVaultBlock.HORIZONTAL_AXIS) == Axis.X ? 90 : 0)
.build()))
.onRegister(connectedTextures(new ItemVaultCTBehaviour()))
.onRegister(connectedTextures(ItemVaultCTBehaviour::new))
.item(ItemVaultItem::new)
.build()
.register();
@ -1312,7 +1312,7 @@ public class AllBlocks {
public static final BlockEntry<BrassTunnelBlock> BRASS_TUNNEL =
REGISTRATE.block("brass_tunnel", BrassTunnelBlock::new)
.transform(BuilderTransformers.beltTunnel("brass", Create.asResource("block/brass_block")))
.onRegister(connectedTextures(new BrassTunnelCTBehaviour()))
.onRegister(connectedTextures(BrassTunnelCTBehaviour::new))
.register();
public static final BlockEntry<ContentObserverBlock> CONTENT_OBSERVER =

View File

@ -10,7 +10,6 @@ import java.util.IdentityHashMap;
import java.util.Map;
import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry;
import com.simibubi.create.foundation.block.connected.CTSpriteShifter;
import com.simibubi.create.foundation.block.connected.CTSpriteShifter.CTType;
import com.simibubi.create.foundation.block.render.SpriteShiftEntry;
import com.simibubi.create.foundation.block.render.SpriteShifter;
@ -21,7 +20,7 @@ import net.minecraft.world.level.block.state.properties.WoodType;
public class AllSpriteShifts {
static final Map<WoodType, CTSpriteShiftEntry> WOODEN_WINDOWS = new IdentityHashMap<>();
private static final Map<WoodType, CTSpriteShiftEntry> WOODEN_WINDOWS = new IdentityHashMap<>();
public static final Map<DyeColor, SpriteShiftEntry> DYED_BELTS = new IdentityHashMap<>(),
DYED_OFFSET_BELTS = new IdentityHashMap<>(), DYED_DIAGONAL_BELTS = new IdentityHashMap<>();
@ -33,22 +32,22 @@ public class AllSpriteShifts {
ORNATE_IRON_WINDOW = vertical("palettes/ornate_iron_window");
public static final CTSpriteShiftEntry CRAFTER_FRONT = getCT(CTType.OMNIDIRECTIONAL, "crafter_top", "brass_casing"),
CRAFTER_SIDE = getCT(CTType.VERTICAL, "crafter_side"),
CRAFTER_OTHERSIDE = getCT(CTType.HORIZONTAL, "crafter_side"),
ANDESITE_ENCASED_COGWHEEL_SIDE = getCT(CTType.VERTICAL, "andesite_encased_cogwheel_side"),
ANDESITE_ENCASED_COGWHEEL_OTHERSIDE = getCT(CTType.HORIZONTAL, "andesite_encased_cogwheel_side"),
BRASS_ENCASED_COGWHEEL_SIDE = getCT(CTType.VERTICAL, "brass_encased_cogwheel_side"),
BRASS_ENCASED_COGWHEEL_OTHERSIDE = getCT(CTType.HORIZONTAL, "brass_encased_cogwheel_side");
CRAFTER_SIDE = vertical("crafter_side"),
CRAFTER_OTHERSIDE = horizontal("crafter_side"),
ANDESITE_ENCASED_COGWHEEL_SIDE = vertical("andesite_encased_cogwheel_side"),
ANDESITE_ENCASED_COGWHEEL_OTHERSIDE = horizontal("andesite_encased_cogwheel_side"),
BRASS_ENCASED_COGWHEEL_SIDE = vertical("brass_encased_cogwheel_side"),
BRASS_ENCASED_COGWHEEL_OTHERSIDE = horizontal("brass_encased_cogwheel_side");
public static final CTSpriteShiftEntry ANDESITE_CASING = omni("andesite_casing"),
BRASS_CASING = omni("brass_casing"), COPPER_CASING = omni("copper_casing"),
SHADOW_STEEL_CASING = omni("shadow_steel_casing"), REFINED_RADIANCE_CASING = omni("refined_radiance_casing"),
CREATIVE_CASING = getCT(CTType.CROSS, "creative_casing");
public static final CTSpriteShiftEntry CHASSIS_SIDE = getCT(CTType.OMNIDIRECTIONAL, "linear_chassis_side"),
SECONDARY_CHASSIS_SIDE = getCT(CTType.OMNIDIRECTIONAL, "secondary_linear_chassis_side"),
CHASSIS = getCT(CTType.OMNIDIRECTIONAL, "linear_chassis_end"),
CHASSIS_STICKY = getCT(CTType.OMNIDIRECTIONAL, "linear_chassis_end_sticky");
public static final CTSpriteShiftEntry CHASSIS_SIDE = omni("linear_chassis_side"),
SECONDARY_CHASSIS_SIDE = omni("secondary_linear_chassis_side"),
CHASSIS = omni("linear_chassis_end"),
CHASSIS_STICKY = omni("linear_chassis_end_sticky");
public static final CTSpriteShiftEntry BRASS_TUNNEL_TOP = vertical("brass_tunnel_top"),
FLUID_TANK = getCT(CTType.CROSS, "fluid_tank"),
@ -67,14 +66,6 @@ public class AllSpriteShifts {
populateMaps();
}
//
public static CTSpriteShiftEntry getWoodenWindow(WoodType woodType) {
return WOODEN_WINDOWS.get(woodType);
}
//
private static void populateMaps() {
WoodType[] supportedWoodTypes = new WoodType[] { WoodType.OAK, WoodType.SPRUCE, WoodType.BIRCH, WoodType.ACACIA,
WoodType.JUNGLE, WoodType.DARK_OAK, WoodType.CRIMSON, WoodType.WARPED };
@ -90,24 +81,30 @@ public class AllSpriteShifts {
}
}
static Couple<CTSpriteShiftEntry> vault(String name) {
private static Couple<CTSpriteShiftEntry> vault(String name) {
final String prefixed = "vault_" + name;
return Couple
.createWithContext(b -> getCT(CTSpriteShifter.CTType.CROSS, prefixed, b ? prefixed : prefixed + "_large"));
.createWithContext(b -> getCT(CTType.CROSS, prefixed, b ? prefixed : prefixed + "_large"));
}
//
static CTSpriteShiftEntry omni(String name) {
private static CTSpriteShiftEntry omni(String name) {
return getCT(OMNIDIRECTIONAL, name);
}
static CTSpriteShiftEntry vertical(String name) {
return getCT(VERTICAL, name);
}
static CTSpriteShiftEntry horizontal(String name) {
private static CTSpriteShiftEntry horizontal(String name) {
return getCT(HORIZONTAL, name);
}
private static CTSpriteShiftEntry vertical(String name) {
return getCT(VERTICAL, name);
}
//
public static CTSpriteShiftEntry getWoodenWindow(WoodType woodType) {
return WOODEN_WINDOWS.get(woodType);
}
}

View File

@ -30,7 +30,6 @@ import com.simibubi.create.foundation.data.recipe.ProcessingRecipeGen;
import com.simibubi.create.foundation.data.recipe.SequencedAssemblyRecipeGen;
import com.simibubi.create.foundation.data.recipe.StandardRecipeGen;
import com.simibubi.create.foundation.networking.AllPackets;
import com.simibubi.create.foundation.utility.ShippedResourcePacks;
import com.simibubi.create.foundation.worldgen.AllWorldFeatures;
import com.tterrag.registrate.util.NonNullLazyValue;

View File

@ -369,7 +369,7 @@ public class CreateJEI implements IModPlugin {
}
public static List<Recipe<?>> findRecipes(Predicate<Recipe<?>> predicate) {
return Minecraft.getInstance().level.getRecipeManager()
return Minecraft.getInstance().getConnection().getRecipeManager()
.getRecipes()
.stream()
.filter(predicate)

View File

@ -3,8 +3,8 @@ package com.simibubi.create.content.contraptions.base.flwdata;
import com.jozufozu.flywheel.api.struct.Batched;
import com.jozufozu.flywheel.api.struct.Instanced;
import com.jozufozu.flywheel.api.struct.StructWriter;
import com.jozufozu.flywheel.core.layout.BufferLayout;
import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer;
import com.jozufozu.flywheel.core.layout.BufferLayout;
import com.jozufozu.flywheel.core.model.ModelTransformer;
import com.jozufozu.flywheel.util.RenderMath;
import com.mojang.math.Quaternion;

View File

@ -3,8 +3,8 @@ package com.simibubi.create.content.contraptions.base.flwdata;
import com.jozufozu.flywheel.api.struct.Batched;
import com.jozufozu.flywheel.api.struct.Instanced;
import com.jozufozu.flywheel.api.struct.StructWriter;
import com.jozufozu.flywheel.core.layout.BufferLayout;
import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer;
import com.jozufozu.flywheel.core.layout.BufferLayout;
import com.jozufozu.flywheel.core.model.ModelTransformer;
import com.jozufozu.flywheel.util.RenderMath;
import com.mojang.math.Vector3f;

View File

@ -3,8 +3,8 @@ package com.simibubi.create.content.contraptions.components.actors.flwdata;
import com.jozufozu.flywheel.api.struct.Batched;
import com.jozufozu.flywheel.api.struct.Instanced;
import com.jozufozu.flywheel.api.struct.StructWriter;
import com.jozufozu.flywheel.core.layout.BufferLayout;
import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer;
import com.jozufozu.flywheel.core.layout.BufferLayout;
import com.jozufozu.flywheel.core.model.ModelTransformer;
import com.simibubi.create.foundation.render.AllInstanceFormats;
import com.simibubi.create.foundation.render.AllProgramSpecs;

View File

@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.components.structureMovement;
import java.io.IOException;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

View File

@ -1,12 +1,12 @@
package com.simibubi.create.content.contraptions.components.structureMovement;
import com.jozufozu.flywheel.light.GPULightVolume;
import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.jozufozu.flywheel.util.box.ImmutableBox;
import com.jozufozu.flywheel.light.LightListener;
import com.jozufozu.flywheel.light.LightProvider;
import com.jozufozu.flywheel.light.LightUpdater;
import com.jozufozu.flywheel.light.ListenerStatus;
import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.jozufozu.flywheel.util.box.ImmutableBox;
import net.minecraft.world.level.LightLayer;

View File

@ -1,9 +1,9 @@
package com.simibubi.create.content.contraptions.components.structureMovement;
import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.jozufozu.flywheel.util.box.ImmutableBox;
import com.jozufozu.flywheel.light.LightProvider;
import com.jozufozu.flywheel.light.MovingListener;
import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.jozufozu.flywheel.util.box.ImmutableBox;
import com.simibubi.create.foundation.config.AllConfigs;
public class NonStationaryLighter<C extends Contraption> extends ContraptionLighter<C> implements MovingListener {

View File

@ -1,9 +1,9 @@
package com.simibubi.create.content.contraptions.components.structureMovement.glue;
import com.jozufozu.flywheel.api.vertex.VertexList;
import com.jozufozu.flywheel.core.Formats;
import com.jozufozu.flywheel.core.model.Model;
import com.jozufozu.flywheel.core.vertex.PosTexNormalWriterUnsafe;
import com.jozufozu.flywheel.api.vertex.VertexList;
import com.mojang.blaze3d.platform.MemoryTracker;
import com.simibubi.create.AllStitchedTextures;
import com.simibubi.create.foundation.utility.VecHelper;

View File

@ -7,13 +7,13 @@ import com.jozufozu.flywheel.core.instancing.ConditionalInstance;
import com.jozufozu.flywheel.core.instancing.GroupInstance;
import com.jozufozu.flywheel.core.instancing.SelectInstance;
import com.jozufozu.flywheel.core.materials.oriented.OrientedData;
import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.jozufozu.flywheel.util.box.ImmutableBox;
import com.jozufozu.flywheel.light.LightPacking;
import com.jozufozu.flywheel.light.LightProvider;
import com.jozufozu.flywheel.light.LightUpdater;
import com.jozufozu.flywheel.light.LightVolume;
import com.jozufozu.flywheel.light.MovingListener;
import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.jozufozu.flywheel.util.box.ImmutableBox;
import com.mojang.math.Vector3f;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;

View File

@ -13,12 +13,12 @@ import java.util.Optional;
import java.util.function.Function;
import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher;
import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.jozufozu.flywheel.util.box.ImmutableBox;
import com.jozufozu.flywheel.light.LightListener;
import com.jozufozu.flywheel.light.LightProvider;
import com.jozufozu.flywheel.light.LightUpdater;
import com.jozufozu.flywheel.light.ListenerStatus;
import com.jozufozu.flywheel.util.box.GridAlignedBB;
import com.jozufozu.flywheel.util.box.ImmutableBox;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.base.IRotate;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;

View File

@ -33,6 +33,7 @@ public class SymmetryEffectPacket extends SimplePacketBase {
}
}
@Override
public void write(FriendlyByteBuf buffer) {
buffer.writeBlockPos(mirror);
buffer.writeInt(positions.size());
@ -41,6 +42,7 @@ public class SymmetryEffectPacket extends SimplePacketBase {
}
}
@Override
public void handle(Supplier<Context> ctx) {
ctx.get().enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> {
if (Minecraft.getInstance().player.position().distanceTo(Vec3.atLowerCornerOf(mirror)) > 100)

View File

@ -1,9 +1,7 @@
package com.simibubi.create.content.curiosities.toolbox;
import net.minecraft.world.Container;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.items.wrapper.InvWrapper;
import net.minecraftforge.items.wrapper.PlayerMainInvWrapper;
/**

View File

@ -7,8 +7,6 @@ import java.util.Optional;
import javax.annotation.Nullable;
import net.minecraft.nbt.Tag;
import org.apache.commons.lang3.Validate;
import com.simibubi.create.AllEntityTypes;
@ -28,6 +26,7 @@ import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.core.NonNullList;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.Tag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;

View File

@ -3,8 +3,8 @@ package com.simibubi.create.content.logistics.block.flap;
import com.jozufozu.flywheel.api.struct.Batched;
import com.jozufozu.flywheel.api.struct.Instanced;
import com.jozufozu.flywheel.api.struct.StructWriter;
import com.jozufozu.flywheel.core.layout.BufferLayout;
import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer;
import com.jozufozu.flywheel.core.layout.BufferLayout;
import com.jozufozu.flywheel.core.model.ModelTransformer;
import com.simibubi.create.foundation.render.AllInstanceFormats;
import com.simibubi.create.foundation.render.AllProgramSpecs;

View File

@ -47,22 +47,22 @@ public class AllPaletteBlocks {
.register();
public static final BlockEntry<ConnectedGlassBlock> FRAMED_GLASS =
framedGlass("framed_glass", new StandardCTBehaviour(AllSpriteShifts.FRAMED_GLASS)),
framedGlass("framed_glass", () -> new StandardCTBehaviour(AllSpriteShifts.FRAMED_GLASS)),
HORIZONTAL_FRAMED_GLASS = framedGlass("horizontal_framed_glass",
new HorizontalCTBehaviour(AllSpriteShifts.HORIZONTAL_FRAMED_GLASS, AllSpriteShifts.FRAMED_GLASS)),
() -> new HorizontalCTBehaviour(AllSpriteShifts.HORIZONTAL_FRAMED_GLASS, AllSpriteShifts.FRAMED_GLASS)),
VERTICAL_FRAMED_GLASS =
framedGlass("vertical_framed_glass", new HorizontalCTBehaviour(AllSpriteShifts.VERTICAL_FRAMED_GLASS));
framedGlass("vertical_framed_glass", () -> new HorizontalCTBehaviour(AllSpriteShifts.VERTICAL_FRAMED_GLASS));
public static final BlockEntry<GlassPaneBlock> TILED_GLASS_PANE =
WindowGen.standardGlassPane("tiled_glass", TILED_GLASS, Create.asResource("block/palettes/tiled_glass"),
new ResourceLocation("block/glass_pane_top"), () -> RenderType::cutoutMipped);
public static final BlockEntry<ConnectedGlassPaneBlock> FRAMED_GLASS_PANE =
framedGlassPane("framed_glass", FRAMED_GLASS, AllSpriteShifts.FRAMED_GLASS),
framedGlassPane("framed_glass", FRAMED_GLASS, () -> AllSpriteShifts.FRAMED_GLASS),
HORIZONTAL_FRAMED_GLASS_PANE = framedGlassPane("horizontal_framed_glass", HORIZONTAL_FRAMED_GLASS,
AllSpriteShifts.HORIZONTAL_FRAMED_GLASS),
() -> AllSpriteShifts.HORIZONTAL_FRAMED_GLASS),
VERTICAL_FRAMED_GLASS_PANE =
framedGlassPane("vertical_framed_glass", VERTICAL_FRAMED_GLASS, AllSpriteShifts.VERTICAL_FRAMED_GLASS);
framedGlassPane("vertical_framed_glass", VERTICAL_FRAMED_GLASS, () -> AllSpriteShifts.VERTICAL_FRAMED_GLASS);
public static final BlockEntry<WindowBlock> OAK_WINDOW = woodenWindowBlock(WoodType.OAK, Blocks.OAK_PLANKS),
SPRUCE_WINDOW = woodenWindowBlock(WoodType.SPRUCE, Blocks.SPRUCE_PLANKS),
@ -73,7 +73,7 @@ public class AllPaletteBlocks {
CRIMSON_WINDOW = woodenWindowBlock(WoodType.CRIMSON, Blocks.CRIMSON_PLANKS),
WARPED_WINDOW = woodenWindowBlock(WoodType.WARPED, Blocks.WARPED_PLANKS),
ORNATE_IRON_WINDOW = customWindowBlock("ornate_iron_window", AllItems.ANDESITE_ALLOY,
AllSpriteShifts.ORNATE_IRON_WINDOW, () -> RenderType::cutoutMipped);
() -> AllSpriteShifts.ORNATE_IRON_WINDOW, () -> RenderType::cutoutMipped);
public static final BlockEntry<ConnectedGlassPaneBlock> OAK_WINDOW_PANE =
woodenWindowPane(WoodType.OAK, OAK_WINDOW),
@ -85,7 +85,7 @@ public class AllPaletteBlocks {
CRIMSON_WINDOW_PANE = woodenWindowPane(WoodType.CRIMSON, CRIMSON_WINDOW),
WARPED_WINDOW_PANE = woodenWindowPane(WoodType.WARPED, WARPED_WINDOW),
ORNATE_IRON_WINDOW_PANE = customWindowPane("ornate_iron_window", ORNATE_IRON_WINDOW,
AllSpriteShifts.ORNATE_IRON_WINDOW, () -> RenderType::cutoutMipped);
() -> AllSpriteShifts.ORNATE_IRON_WINDOW, () -> RenderType::cutoutMipped);
static {
AllPaletteStoneTypes.register(REGISTRATE);

View File

@ -1,5 +1,7 @@
package com.simibubi.create.content.palettes;
import static com.simibubi.create.AllTags.pickaxeOnly;
import java.util.Arrays;
import java.util.function.Supplier;
@ -31,8 +33,6 @@ import net.minecraft.world.level.block.WallBlock;
import net.minecraft.world.level.block.state.BlockBehaviour.Properties;
import net.minecraftforge.client.model.generators.ModelFile;
import static com.simibubi.create.AllTags.pickaxeOnly;
public abstract class PaletteBlockPartial<B extends Block> {
public static final PaletteBlockPartial<StairBlock> STAIR = new Stairs();

View File

@ -8,6 +8,7 @@ import static com.simibubi.create.content.palettes.PaletteBlockPattern.PatternNa
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Supplier;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry;
@ -132,8 +133,8 @@ public class PaletteBlockPattern {
.accept(c, p);
}
public Optional<ConnectedTextureBehaviour> createCTBehaviour(String variant) {
return ctFactory.map(d -> d.apply(variant));
public Optional<Supplier<ConnectedTextureBehaviour>> createCTBehaviour(String variant) {
return ctFactory.map(d -> () -> d.apply(variant));
}
// Builder

View File

@ -51,10 +51,10 @@ import net.minecraftforge.client.model.generators.ModelFile;
public class BuilderTransformers {
public static <B extends EncasedShaftBlock, P> NonNullUnaryOperator<BlockBuilder<B, P>> encasedShaft(String casing,
CTSpriteShiftEntry casingShift) {
Supplier<CTSpriteShiftEntry> casingShift) {
return builder -> encasedBase(builder, () -> AllBlocks.SHAFT.get())
.onRegister(CreateRegistrate.connectedTextures(new EncasedCTBehaviour(casingShift)))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, casingShift,
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCTBehaviour(casingShift.get())))
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, casingShift.get(),
(s, f) -> f.getAxis() != s.getValue(EncasedShaftBlock.AXIS))))
.blockstate((c, p) -> axisBlock(c, p, blockState -> p.models()
.getExistingFile(p.modLoc("block/encased_shaft/block_" + casing)), true))
@ -64,24 +64,24 @@ public class BuilderTransformers {
}
public static <B extends EncasedCogwheelBlock, P> NonNullUnaryOperator<BlockBuilder<B, P>> encasedCogwheel(
String casing, CTSpriteShiftEntry casingShift) {
String casing, Supplier<CTSpriteShiftEntry> casingShift) {
return b -> encasedCogwheelBase(b, casing, casingShift, () -> AllBlocks.COGWHEEL.get(), false);
}
public static <B extends EncasedCogwheelBlock, P> NonNullUnaryOperator<BlockBuilder<B, P>> encasedLargeCogwheel(
String casing, CTSpriteShiftEntry casingShift) {
String casing, Supplier<CTSpriteShiftEntry> casingShift) {
return b -> encasedCogwheelBase(b, casing, casingShift, () -> AllBlocks.LARGE_COGWHEEL.get(), true)
.onRegister(CreateRegistrate.connectedTextures(new EncasedCogCTBehaviour(casingShift)));
.onRegister(CreateRegistrate.connectedTextures(() -> new EncasedCogCTBehaviour(casingShift.get())));
}
private static <B extends EncasedCogwheelBlock, P> BlockBuilder<B, P> encasedCogwheelBase(BlockBuilder<B, P> b,
String casing, CTSpriteShiftEntry casingShift, Supplier<ItemLike> drop, boolean large) {
String casing, Supplier<CTSpriteShiftEntry> casingShift, Supplier<ItemLike> drop, boolean large) {
String encasedSuffix = "_encased_cogwheel_side" + (large ? "_connected" : "");
String blockFolder = large ? "encased_large_cogwheel" : "encased_cogwheel";
String wood = casing.equals("brass") ? "dark_oak" : "spruce";
return encasedBase(b, drop)
.addLayer(() -> RenderType::cutoutMipped)
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, casingShift,
.onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, casingShift.get(),
(s, f) -> f.getAxis() == s.getValue(EncasedCogwheelBlock.AXIS)
&& !s.getValue(f.getAxisDirection() == AxisDirection.POSITIVE ? EncasedCogwheelBlock.TOP_SHAFT
: EncasedCogwheelBlock.BOTTOM_SHAFT))))
@ -138,12 +138,12 @@ public class BuilderTransformers {
}
public static <B extends CasingBlock> NonNullUnaryOperator<BlockBuilder<B, CreateRegistrate>> casing(
CTSpriteShiftEntry ct) {
Supplier<CTSpriteShiftEntry> ct) {
return b -> b.initialProperties(SharedProperties::stone)
.transform(axeOrPickaxe())
.blockstate((c, p) -> p.simpleBlock(c.get()))
.onRegister(connectedTextures(new EncasedCTBehaviour(ct)))
.onRegister(casingConnectivity((block, cc) -> cc.makeCasing(block, ct)))
.onRegister(connectedTextures(() -> new EncasedCTBehaviour(ct.get())))
.onRegister(casingConnectivity((block, cc) -> cc.makeCasing(block, ct.get())))
.simpleItem();
}

View File

@ -189,7 +189,7 @@ public class CreateRegistrate extends AbstractRegistrate<CreateRegistrate> {
/* Util */
public static <T extends Block> NonNullConsumer<? super T> connectedTextures(ConnectedTextureBehaviour behavior) {
public static <T extends Block> NonNullConsumer<? super T> connectedTextures(Supplier<ConnectedTextureBehaviour> behavior) {
return entry -> onClient(() -> () -> registerCTBehviour(entry, behavior));
}
@ -217,7 +217,8 @@ public class CreateRegistrate extends AbstractRegistrate<CreateRegistrate> {
}
@OnlyIn(Dist.CLIENT)
private static void registerCTBehviour(Block entry, ConnectedTextureBehaviour behavior) {
private static void registerCTBehviour(Block entry, Supplier<ConnectedTextureBehaviour> behaviorSupplier) {
ConnectedTextureBehaviour behavior = behaviorSupplier.get();
CreateClient.MODEL_SWAPPER.getCustomBlockModels()
.register(entry.delegate, model -> new CTModel(model, behavior));
}

View File

@ -65,7 +65,7 @@ public class WindowGen {
}
public static BlockEntry<WindowBlock> customWindowBlock(String name, Supplier<? extends ItemLike> ingredient,
CTSpriteShiftEntry ct, Supplier<Supplier<RenderType>> renderType) {
Supplier<CTSpriteShiftEntry> ct, Supplier<Supplier<RenderType>> renderType) {
NonNullFunction<String, ResourceLocation> end_texture = n -> Create.asResource(palettesDir() + name + "_end");
NonNullFunction<String, ResourceLocation> side_texture = n -> Create.asResource(palettesDir() + n);
return windowBlock(name, ingredient, ct, renderType, end_texture, side_texture);
@ -78,15 +78,15 @@ public class WindowGen {
NonNullFunction<String, ResourceLocation> end_texture =
$ -> new ResourceLocation("block/" + woodName + "_planks");
NonNullFunction<String, ResourceLocation> side_texture = n -> Create.asResource(palettesDir() + n);
return windowBlock(name, () -> planksBlock, AllSpriteShifts.getWoodenWindow(woodType), renderType, end_texture,
return windowBlock(name, () -> planksBlock, () -> AllSpriteShifts.getWoodenWindow(woodType), renderType, end_texture,
side_texture);
}
public static BlockEntry<WindowBlock> windowBlock(String name, Supplier<? extends ItemLike> ingredient,
CTSpriteShiftEntry ct, Supplier<Supplier<RenderType>> renderType,
Supplier<CTSpriteShiftEntry> ct, Supplier<Supplier<RenderType>> renderType,
NonNullFunction<String, ResourceLocation> endTexture, NonNullFunction<String, ResourceLocation> sideTexture) {
return REGISTRATE.block(name, WindowBlock::new)
.onRegister(connectedTextures(new HorizontalCTBehaviour(ct)))
.onRegister(connectedTextures(() -> new HorizontalCTBehaviour(ct.get())))
.addLayer(renderType)
.recipe((c, p) -> ShapedRecipeBuilder.shaped(c.get(), 2)
.pattern(" # ")
@ -105,7 +105,7 @@ public class WindowGen {
.register();
}
public static BlockEntry<ConnectedGlassBlock> framedGlass(String name, ConnectedTextureBehaviour behaviour) {
public static BlockEntry<ConnectedGlassBlock> framedGlass(String name, Supplier<ConnectedTextureBehaviour> behaviour) {
return REGISTRATE.block(name, ConnectedGlassBlock::new)
.onRegister(connectedTextures(behaviour))
.addLayer(() -> RenderType::translucent)
@ -124,7 +124,7 @@ public class WindowGen {
}
public static BlockEntry<ConnectedGlassPaneBlock> framedGlassPane(String name, Supplier<? extends Block> parent,
CTSpriteShiftEntry ctshift) {
Supplier<CTSpriteShiftEntry> ctshift) {
ResourceLocation sideTexture = Create.asResource(palettesDir() + "framed_glass");
ResourceLocation itemSideTexture = Create.asResource(palettesDir() + name);
ResourceLocation topTexture = Create.asResource(palettesDir() + "framed_glass_pane_top");
@ -133,7 +133,7 @@ public class WindowGen {
}
public static BlockEntry<ConnectedGlassPaneBlock> customWindowPane(String name, Supplier<? extends Block> parent,
CTSpriteShiftEntry ctshift, Supplier<Supplier<RenderType>> renderType) {
Supplier<CTSpriteShiftEntry> ctshift, Supplier<Supplier<RenderType>> renderType) {
ResourceLocation topTexture = Create.asResource(palettesDir() + name + "_pane_top");
ResourceLocation sideTexture = Create.asResource(palettesDir() + name);
return connectedGlassPane(name, parent, ctshift, sideTexture, sideTexture, topTexture, renderType);
@ -150,7 +150,7 @@ public class WindowGen {
String name = woodName + "_window";
ResourceLocation topTexture = new ResourceLocation("block/" + woodName + "_planks");
ResourceLocation sideTexture = Create.asResource(palettesDir() + name);
return connectedGlassPane(name, parent, AllSpriteShifts.getWoodenWindow(woodType), sideTexture, sideTexture,
return connectedGlassPane(name, parent, () -> AllSpriteShifts.getWoodenWindow(woodType), sideTexture, sideTexture,
topTexture, renderType);
}
@ -163,10 +163,10 @@ public class WindowGen {
}
private static BlockEntry<ConnectedGlassPaneBlock> connectedGlassPane(String name, Supplier<? extends Block> parent,
CTSpriteShiftEntry ctshift, ResourceLocation sideTexture, ResourceLocation itemSideTexture,
Supplier<CTSpriteShiftEntry> ctshift, ResourceLocation sideTexture, ResourceLocation itemSideTexture,
ResourceLocation topTexture, Supplier<Supplier<RenderType>> renderType) {
NonNullConsumer<? super ConnectedGlassPaneBlock> connectedTextures =
connectedTextures(new GlassPaneCTBehaviour(ctshift));
connectedTextures(() -> new GlassPaneCTBehaviour(ctshift.get()));
String CGPparents = "block/connected_glass_pane/";
String prefix = name + "_pane_";

View File

@ -1,7 +1,7 @@
package com.simibubi.create.foundation.render;
import com.jozufozu.flywheel.core.layout.CommonItems;
import com.jozufozu.flywheel.core.layout.BufferLayout;
import com.jozufozu.flywheel.core.layout.CommonItems;
public class AllInstanceFormats {

View File

@ -40,7 +40,6 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
// Vertex Coloring
private boolean shouldColor;
private int r, g, b, a;
private boolean disableDiffuseDiv;
private boolean disableDiffuseMult;
// Vertex Texture Coords
@ -69,16 +68,6 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
transforms.pushPose();
}
public static float getUnInterpolatedU(TextureAtlasSprite sprite, float u) {
float f = sprite.getU1() - sprite.getU0();
return (u - sprite.getU0()) / f * 16.0F;
}
public static float getUnInterpolatedV(TextureAtlasSprite sprite, float v) {
float f = sprite.getV1() - sprite.getV0();
return (v - sprite.getV0()) / f * 16.0F;
}
public void renderInto(PoseStack input, VertexConsumer builder) {
if (isEmpty())
return;
@ -113,10 +102,11 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
float x = template.getX(i);
float y = template.getY(i);
float z = template.getZ(i);
byte r = template.getR(i);
byte g = template.getG(i);
byte b = template.getB(i);
byte a = template.getA(i);
pos.set(x, y, z, 1F);
pos.transform(modelMat);
builder.vertex(pos.x(), pos.y(), pos.z());
float normalX = template.getNX(i);
float normalY = template.getNY(i);
float normalZ = template.getNZ(i);
@ -127,39 +117,26 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
float ny = normal.y();
float nz = normal.z();
float instanceDiffuse = LightUtil.diffuseLight(nx, ny, nz);
pos.set(x, y, z, 1F);
pos.transform(modelMat);
builder.vertex(pos.x(), pos.y(), pos.z());
//builder.color(nx, ny, nz, 1f);
byte r, g, b, a;
if (shouldColor) {
if (disableDiffuseMult) {
builder.color(this.r, this.g, this.b, this.a);
} else {
int colorR = transformColor(this.r, instanceDiffuse);
int colorG = transformColor(this.g, instanceDiffuse);
int colorB = transformColor(this.b, instanceDiffuse);
builder.color(colorR, colorG, colorB, this.a);
}
r = (byte) this.r;
g = (byte) this.g;
b = (byte) this.b;
a = (byte) this.a;
} else {
if (disableDiffuseDiv && disableDiffuseMult) {
builder.color(r, g, b, a);
} else {
float diffuseMult;
if (disableDiffuseDiv) {
diffuseMult = instanceDiffuse;
} else if (disableDiffuseMult) {
diffuseMult = 1;
} else {
diffuseMult = instanceDiffuse;
}
int colorR = transformColor(r, diffuseMult);
int colorG = transformColor(g, diffuseMult);
int colorB = transformColor(b, diffuseMult);
builder.color(colorR, colorG, colorB, a);
}
r = template.getR(i);
g = template.getG(i);
b = template.getB(i);
a = template.getA(i);
}
if (disableDiffuseMult) {
builder.color(r, g, b, a);
} else {
float instanceDiffuse = LightUtil.diffuseLight(nx, ny, nz);
int colorR = transformColor(r, instanceDiffuse);
int colorG = transformColor(g, instanceDiffuse);
int colorB = transformColor(b, instanceDiffuse);
builder.color(colorR, colorG, colorB, a);
}
float u = template.getU(i);
@ -216,7 +193,6 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
g = 0;
b = 0;
a = 0;
disableDiffuseDiv = false;
disableDiffuseMult = false;
spriteShiftFunc = null;
hasOverlay = false;
@ -230,6 +206,10 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
return this;
}
public boolean isEmpty() {
return template.isEmpty();
}
@Override
public SuperByteBuffer translate(double x, double y, double z) {
transforms.translate(x, y, z);
@ -242,6 +222,24 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
return this;
}
@Override
public SuperByteBuffer scale(float factorX, float factorY, float factorZ) {
transforms.scale(factorX, factorY, factorZ);
return this;
}
@Override
public SuperByteBuffer pushPose() {
transforms.pushPose();
return this;
}
@Override
public SuperByteBuffer popPose() {
transforms.popPose();
return this;
}
public SuperByteBuffer transform(PoseStack stack) {
transforms.last()
.pose()
@ -288,16 +286,6 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
return color(c.getRGB());
}
/**
* Prevents vertex colors from being divided by the diffuse value calculated from the raw untransformed normal vector.
* Useful when passed vertex colors do not have diffuse baked in.
* Disabled when custom color is used.
*/
public SuperByteBuffer disableDiffuseDiv() {
disableDiffuseDiv = true;
return this;
}
/**
* Prevents vertex colors from being multiplied by the diffuse value calculated from the final transformed normal vector.
* Useful for entity rendering, when diffuse is applied automatically later.
@ -401,10 +389,6 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
return this;
}
public boolean isEmpty() {
return template.isEmpty();
}
public static int transformColor(byte component, float scale) {
return Mth.clamp((int) (Byte.toUnsignedInt(component) * scale), 0, 255);
}
@ -413,6 +397,16 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
return Mth.clamp((int) (component * scale), 0, 255);
}
public static float getUnInterpolatedU(TextureAtlasSprite sprite, float u) {
float f = sprite.getU1() - sprite.getU0();
return (u - sprite.getU0()) / f * 16.0F;
}
public static float getUnInterpolatedV(TextureAtlasSprite sprite, float v) {
float f = sprite.getV1() - sprite.getV0();
return (v - sprite.getV0()) / f * 16.0F;
}
public static int maxLight(int packedLight1, int packedLight2) {
int blockLight1 = LightTexture.block(packedLight1);
int skyLight1 = LightTexture.sky(packedLight1);
@ -426,24 +420,6 @@ public class SuperByteBuffer implements Scale<SuperByteBuffer>, Translate<SuperB
return WORLD_LIGHT_CACHE.computeIfAbsent(pos.asLong(), $ -> LevelRenderer.getLightColor(world, pos));
}
@Override
public SuperByteBuffer scale(float factorX, float factorY, float factorZ) {
transforms.scale(factorX, factorY, factorZ);
return this;
}
@Override
public SuperByteBuffer pushPose() {
transforms.pushPose();
return this;
}
@Override
public SuperByteBuffer popPose() {
transforms.popPose();
return this;
}
@FunctionalInterface
public interface SpriteShiftFunc {
void shift(VertexConsumer builder, float u, float v);

View File

@ -7,6 +7,7 @@ import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import com.jozufozu.flywheel.repack.joml.Vector3i;
import com.simibubi.create.CreateClient;
import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.Pair;