From 6826ef387ed4344a3697060013c4c7cf9baca5e7 Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 6 Mar 2025 21:37:38 +0000 Subject: [PATCH] 1.21 -> 1.21.4 (part 3) --- .../render/shader/BuiltGemoetryShader.java | 26 +-- .../client/render/shader/LoadedShader.java | 173 +++++++----------- .../client/render/shader/PSShaders.java | 22 +-- .../render/shader/PostEffectPassSupplier.java | 15 ++ .../render/shader/PostEffectRenderer.java | 14 +- .../datagen/providers/BlockModels.java | 50 ++--- .../datagen/providers/ItemModels.java | 34 ++-- .../datagen/providers/ModelOverrides.java | 14 +- .../datagen/providers/PSModelProvider.java | 40 ++-- .../loot/PSBlockLootTableProvider.java | 22 ++- .../entity/DealerTaskListProvider.java | 8 +- 11 files changed, 184 insertions(+), 234 deletions(-) create mode 100644 src/main/java/ivorius/psychedelicraft/client/render/shader/PostEffectPassSupplier.java diff --git a/src/main/java/ivorius/psychedelicraft/client/render/shader/BuiltGemoetryShader.java b/src/main/java/ivorius/psychedelicraft/client/render/shader/BuiltGemoetryShader.java index 19d78d5a..7e5c4f8c 100644 --- a/src/main/java/ivorius/psychedelicraft/client/render/shader/BuiltGemoetryShader.java +++ b/src/main/java/ivorius/psychedelicraft/client/render/shader/BuiltGemoetryShader.java @@ -11,8 +11,6 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gl.GlUniform; -import net.minecraft.client.gl.ShaderProgramSetupView; -import net.minecraft.client.gl.CompiledShader; public class BuiltGemoetryShader { private final int program; @@ -59,7 +57,7 @@ public interface Holder { void attachUniformData(@Nullable BuiltGemoetryShader shader); } - public static class Builder implements ShaderProgramSetupView { + public static class Builder { private final List uniforms = new ArrayList<>(); private final List samplers = new ArrayList<>(); @@ -71,28 +69,6 @@ public Builder(int program, int lastAttributeId, int lastFragmentId) { this.lastFragmentId = lastFragmentId; } - @Override - public int getGlRef() { - return program; - } - - @Override - public void markUniformsDirty() { - } - - @Override - public CompiledShader getVertexShader() { - return null; - } - - @Override - public CompiledShader getFragmentShader() { - return null; - } - - @Override - public void attachReferencedShaders() {} - void addSampler(String name, Supplier supplier) { samplers.add(new Sampler(++lastFragmentId, name, supplier)); } diff --git a/src/main/java/ivorius/psychedelicraft/client/render/shader/LoadedShader.java b/src/main/java/ivorius/psychedelicraft/client/render/shader/LoadedShader.java index c17edbda..d4d5d4dc 100644 --- a/src/main/java/ivorius/psychedelicraft/client/render/shader/LoadedShader.java +++ b/src/main/java/ivorius/psychedelicraft/client/render/shader/LoadedShader.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.util.*; +import java.util.function.Consumer; import org.joml.Vector3f; import org.joml.Vector3fc; @@ -10,165 +11,127 @@ import com.google.gson.JsonSyntaxException; -import it.unimi.dsi.fastutil.floats.FloatConsumer; import ivorius.psychedelicraft.client.render.shader.UniformBinding.UniformSetter; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gl.*; +import net.minecraft.client.render.DefaultFramebufferSet; +import net.minecraft.client.util.Pool; import net.minecraft.util.Identifier; -class LoadedShader extends PostEffectProcessor { +class LoadedShader { private final UniformBinding.Set bindings; - private int width; - private int height; - private float time; - private float lastTickDelta; + private final Identifier id; + private final MinecraftClient client; - private List passes; + private final UpdateTracker updater = new UpdateTracker(); + private final UniformValues uniformValues = new UniformValues(); public LoadedShader(MinecraftClient client, Identifier id, UniformBinding.Set bindings) throws IOException, JsonSyntaxException { - super(client.getTextureManager(), new ModdedResourceManager(client.getResourceManager(), id.getNamespace()), client.getFramebuffer(), id); + this.client = client; + this.id = id; this.bindings = bindings; - if (passes == null) { - passes = new ArrayList<>(); - } - setupDimensions( - client.getWindow().getFramebufferWidth(), - client.getWindow().getFramebufferHeight() - ); } - @Override - public void render(float tickDelta) { - if (tickDelta < lastTickDelta) { - time += 1 - lastTickDelta; - time += tickDelta; - } else { - time += tickDelta - lastTickDelta; - } - this.lastTickDelta = tickDelta; - while (time > 20) { - time -= 20; - } - - boolean rendered = false; - final float passRenderFrame = time / 20F; - for (Pass pass : passes) { - rendered |= pass.render(passRenderFrame, tickDelta, rendered); + public void render(Pool pool, float tickDelta) { + PostEffectProcessor processor = client.getShaderLoader().loadPostEffect(id, DefaultFramebufferSet.MAIN_ONLY); + if (processor == null) { + return; } - } - - @Override - public void setupDimensions(int targetsWidth, int targetsHeight) { - this.width = targetsWidth; - this.height = targetsHeight; - super.setupDimensions(targetsWidth, targetsHeight); - } - @Override - public PostEffectPass addPass(String programName, Framebuffer source, Framebuffer dest, boolean linear) throws IOException { - PostEffectPass pass = super.addPass(programName, source, dest, linear); - if (passes == null) { - passes = new ArrayList<>(); + if (updater.update(processor, tickDelta)) { + var original = ((PostEffectPassSupplier)processor).getPasses(); + try { + ((PostEffectPassSupplier)processor).setPasses(updater.passes); + processor.render(client.getFramebuffer(), pool); + } finally { + ((PostEffectPassSupplier)processor).setPasses(original); + } } - passes.add(new Pass(pass)); - return pass; } - class Pass implements UniformSetter { - private final JsonEffectShaderProgram program; - private final PostEffectPass pass; - - private final List replay = new ArrayList<>(); + class UpdateTracker { private int updateCount; - private boolean rendered; - - public Pass(PostEffectPass pass) { - this.pass = pass; - this.program = pass.getProgram(); - } - - public boolean render(float passRenderTime, float tickDelta, boolean rendered) { - if (pass.getName().equals("blit")) { - return false; - } + private final List passes = new ArrayList<>(); + public boolean update(PostEffectProcessor processor, float tickDelta) { if (updateCount == 0) { - replay.clear(); - var programBindings = bindings.programBindings.getOrDefault(pass.getName(), UniformBinding.EMPTY); - bindings.global.bindUniforms(this, tickDelta, width, height, () -> { - programBindings.bindUniforms(this, tickDelta, width, height, () -> { - replay.add(this::renderPass); - }); - }); + passes.clear(); + uniformValues.update(processor, tickDelta, passes); } updateCount = (updateCount + 1) % 2; - this.rendered = false; - if (replay.isEmpty()) { - return this.rendered; + + if (uniformValues.values.isEmpty()) { + return false; } - try { - for (FloatConsumer action : replay) { - action.accept(passRenderTime); + for (PostEffectPass pass : passes) { + try { + for (var update : uniformValues.values) { + update.accept(pass.getProgram()); + } + } catch (Throwable t) { + throw new RuntimeException("Exception updating uniforms for shader " + id + " pass " + ((PostEffectPassSupplier.Pass)pass).getId(), t); } - } catch (Throwable t) { - throw new RuntimeException("Exception rendering shader " + pass.getName(), t); } - return this.rendered; + return true; } + } + + + class UniformValues implements UniformSetter { + private final List> values = new ArrayList<>(); - private void renderPass(float passRenderTime) { - pass.render(passRenderTime); - passes.get(passes.size() - 1).pass.render(passRenderTime); - rendered = true; + public void update(PostEffectProcessor postEffectProcessor, float tickDelta, List retainedPasses) { + values.clear(); + final int width = client.getWindow().getFramebufferWidth(); + final int height = client.getWindow().getFramebufferHeight(); + + bindings.global.bindUniforms(this, tickDelta, width, height, () -> { + for (PostEffectPass pass : ((PostEffectPassSupplier)postEffectProcessor).getPasses()) { + var programBindings = bindings.programBindings.getOrDefault(((PostEffectPassSupplier.Pass)pass).getId(), UniformBinding.EMPTY); + programBindings.bindUniforms(this, tickDelta, width, height, () -> retainedPasses.add(pass)); + } + }); } @Override public void set(String name, float value) { - var uniform = program.getUniformByName(name); - if (uniform != null) { - replay.add(uniformSetter(name, f -> uniform.set(value))); - } + values.add(uniformSetter(name, uniform -> uniform.set(value))); } @Override public void set(String name, float... values) { - var uniform = program.getUniformByName(name); - if (uniform != null) { - var copy = Arrays.copyOf(values, values.length); - replay.add(uniformSetter(name, f -> uniform.set(copy))); - } + var copy = Arrays.copyOf(values, values.length); + this.values.add(uniformSetter(name, uniform -> uniform.set(copy))); } @Override public void set(String name, Vector3fc values) { - var uniform = program.getUniformByName(name); - if (uniform != null) { - var copy = new Vector3f(values); - replay.add(uniformSetter(name, f -> uniform.set(copy))); - } + var copy = new Vector3f(values); + this.values.add(uniformSetter(name, uniform -> uniform.set(copy))); } @Override public void set(String name, Vector4fc values) { - var uniform = program.getUniformByName(name); - if (uniform != null) { - var copy = new Vector4f(values); - replay.add(uniformSetter(name, f -> uniform.set(copy))); - } + var copy = new Vector4f(values); + this.values.add(uniformSetter(name, uniform -> uniform.set(copy))); } - private static FloatConsumer uniformSetter(String name, FloatConsumer consumer) { - return f -> { + private static Consumer uniformSetter(String name, Consumer consumer) { + return program -> { try { - consumer.accept(f); + var uniform = program.getUniform(name); + if (uniform != null) { + consumer.accept(uniform); + } } catch (Throwable t) { throw new RuntimeException("Exception setting uniform: " + name, t); } }; } } + } \ No newline at end of file diff --git a/src/main/java/ivorius/psychedelicraft/client/render/shader/PSShaders.java b/src/main/java/ivorius/psychedelicraft/client/render/shader/PSShaders.java index 5ebc7fb4..40d544af 100644 --- a/src/main/java/ivorius/psychedelicraft/client/render/shader/PSShaders.java +++ b/src/main/java/ivorius/psychedelicraft/client/render/shader/PSShaders.java @@ -1,26 +1,20 @@ package ivorius.psychedelicraft.client.render.shader; -import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Supplier; - -import org.jetbrains.annotations.Nullable; - import ivorius.psychedelicraft.Psychedelicraft; -import net.minecraft.client.gl.ShaderProgram; +import net.minecraft.client.gl.Defines; +import net.minecraft.client.gl.ShaderProgramKey; +import net.minecraft.client.gl.ShaderProgramKeys; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; public interface PSShaders { - @Nullable - Supplier ZERO_MATTER = register("rendertype_zero_matter", VertexFormats.POSITION_COLOR); + ShaderProgramKey ZERO_MATTER = register("rendertype_zero_matter", VertexFormats.POSITION_COLOR); static void bootstrap() {} - private static Supplier register(String name, VertexFormat format) { - AtomicReference program = new AtomicReference<>(null); - CoreShaderRegistrationCallback.EVENT.register(context -> { - context.register(Psychedelicraft.id(name), format, program::set); - }); - return program::get; + private static ShaderProgramKey register(String name, VertexFormat format) { + ShaderProgramKey key = new ShaderProgramKey(Psychedelicraft.id("core/" + name), format, Defines.EMPTY); + ShaderProgramKeys.getAll().add(key); + return key; } } diff --git a/src/main/java/ivorius/psychedelicraft/client/render/shader/PostEffectPassSupplier.java b/src/main/java/ivorius/psychedelicraft/client/render/shader/PostEffectPassSupplier.java new file mode 100644 index 00000000..27eef070 --- /dev/null +++ b/src/main/java/ivorius/psychedelicraft/client/render/shader/PostEffectPassSupplier.java @@ -0,0 +1,15 @@ +package ivorius.psychedelicraft.client.render.shader; + +import java.util.List; + +import net.minecraft.client.gl.PostEffectPass; + +public interface PostEffectPassSupplier { + List getPasses(); + + void setPasses(List passes); + + interface Pass { + String getId(); + } +} diff --git a/src/main/java/ivorius/psychedelicraft/client/render/shader/PostEffectRenderer.java b/src/main/java/ivorius/psychedelicraft/client/render/shader/PostEffectRenderer.java index 70982eab..fcdd337c 100644 --- a/src/main/java/ivorius/psychedelicraft/client/render/shader/PostEffectRenderer.java +++ b/src/main/java/ivorius/psychedelicraft/client/render/shader/PostEffectRenderer.java @@ -6,34 +6,28 @@ import ivorius.psychedelicraft.client.PsychedelicraftClient; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gl.PostEffectProcessor; +import net.minecraft.client.util.Pool; public class PostEffectRenderer { private List shaders = new ArrayList<>(); - public void render(float tickDelta) { + public void render(Pool pool, float tickDelta) { if (PsychedelicraftClient.getConfig().visual.shader2DEnabled) { RenderSystem.disableBlend(); RenderSystem.disableDepthTest(); RenderSystem.resetTextureMatrix(); if (shaders.size() == 1) { - shaders.get(0).render(tickDelta); + shaders.get(0).render(pool, tickDelta); } else { - shaders.forEach(shader -> shader.render(tickDelta)); + shaders.forEach(shader -> shader.render(pool, tickDelta)); } MinecraftClient.getInstance().getFramebuffer().beginWrite(true); } } - public void setupDimensions(int width, int height) { - shaders.forEach(shader -> shader.setupDimensions(width, height)); - } - public void onShadersLoaded(List shaders) { - List oldShaders = this.shaders; this.shaders = shaders; - oldShaders.forEach(PostEffectProcessor::close); } } diff --git a/src/main/java/ivorius/psychedelicraft/datagen/providers/BlockModels.java b/src/main/java/ivorius/psychedelicraft/datagen/providers/BlockModels.java index a0dd2100..8f07ec4b 100644 --- a/src/main/java/ivorius/psychedelicraft/datagen/providers/BlockModels.java +++ b/src/main/java/ivorius/psychedelicraft/datagen/providers/BlockModels.java @@ -15,22 +15,22 @@ import ivorius.psychedelicraft.fluid.SimpleFluid; import net.minecraft.block.Block; import net.minecraft.block.Blocks; -import net.minecraft.data.client.BlockStateModelGenerator; -import net.minecraft.data.client.BlockStateVariant; -import net.minecraft.data.client.BlockStateVariantMap; -import net.minecraft.data.client.Model; -import net.minecraft.data.client.ModelIds; -import net.minecraft.data.client.Models; -import net.minecraft.data.client.MultipartBlockStateSupplier; -import net.minecraft.data.client.TextureKey; -import net.minecraft.data.client.TextureMap; -import net.minecraft.data.client.TexturedModel; -import net.minecraft.data.client.VariantSettings; -import net.minecraft.data.client.VariantSettings.Rotation; -import net.minecraft.data.client.VariantsBlockStateSupplier; -import net.minecraft.data.client.When; -import net.minecraft.data.client.When.PropertyCondition; -import net.minecraft.data.client.BlockStateModelGenerator.TintType; +import net.minecraft.client.data.BlockStateModelGenerator; +import net.minecraft.client.data.BlockStateModelGenerator.CrossType; +import net.minecraft.client.data.BlockStateVariant; +import net.minecraft.client.data.BlockStateVariantMap; +import net.minecraft.client.data.Model; +import net.minecraft.client.data.ModelIds; +import net.minecraft.client.data.Models; +import net.minecraft.client.data.MultipartBlockStateSupplier; +import net.minecraft.client.data.TextureKey; +import net.minecraft.client.data.TextureMap; +import net.minecraft.client.data.TexturedModel; +import net.minecraft.client.data.VariantSettings; +import net.minecraft.client.data.VariantSettings.Rotation; +import net.minecraft.client.data.VariantsBlockStateSupplier; +import net.minecraft.client.data.When; +import net.minecraft.client.data.When.PropertyCondition; import net.minecraft.data.family.BlockFamily; import net.minecraft.registry.Registries; import net.minecraft.state.property.EnumProperty; @@ -54,6 +54,9 @@ public interface BlockModels { Model DRYING_TABLE_TEMPLATE = block("drying_table_template", TextureKey.BOTTOM, TextureKey.SIDE, TextureKey.TOP); Model BUNSEN_BURNER = block("bunsen_burner", TextureKey.BOTTOM); + TexturedModel.Factory VAT = TexturedModel.makeFactory(TextureMap::all, VAT_TEMPLATE); + TexturedModel.Factory DRYING_TABLE = TexturedModel.makeFactory(block -> TextureMap.sideTopBottom(block), BlockModels.DRYING_TABLE_TEMPLATE); + static Model block(String parent, TextureKey ... requiredTextureKeys) { return new Model(Optional.of(Psychedelicraft.id("block/" + parent)), Optional.empty(), requiredTextureKeys); } @@ -70,15 +73,14 @@ static void generateWoodset(BlockStateModelGenerator generator, BlockFamily fami generator.registerCubeAllModelTexturePool(family.getBaseBlock()).family(family); generator.registerHangingSign(strippedLog, hangingSign, wallHangingSign); generator.registerSingleton(leaves, TexturedModel.LEAVES); - generator.registerFlowerPotPlant(sapling, pottedSapling, TintType.NOT_TINTED); + generator.registerFlowerPotPlant(sapling, pottedSapling, CrossType.NOT_TINTED); } static void registerBarrel(BlockStateModelGenerator generator, Block block) { Identifier planksId = Registries.BLOCK.getId(block).withPath(p -> p.replace("_barrel", "_planks")); - generator.registerBuiltin(block, Registries.BLOCK.getOrEmpty(planksId).or(() -> { - return Registries.BLOCK.getOrEmpty(Identifier.ofVanilla(planksId.getPath())); - }).orElse(Blocks.OAK_PLANKS)).includeWithoutItem(block); - generator.registerItemModel(block.asItem()); + generator.registerBuiltinWithParticle(block, Registries.BLOCK.getOptionalValue(planksId).or(() -> { + return Registries.BLOCK.getOptionalValue(Identifier.ofVanilla(planksId.getPath())); + }).orElse(Blocks.OAK_PLANKS)); } static BiConsumer createFluidCollector(BlockStateModelGenerator generator) { @@ -196,7 +198,7 @@ static MultipartBlockStateSupplier addLatticeStates(MultipartBlockStateSupplier ); } - static void registerCropPot(BlockStateModelGenerator generator, Block plantBlock, Block flowerPotBlock, BlockStateModelGenerator.TintType tintType, String suffix) { + static void registerCropPot(BlockStateModelGenerator generator, Block plantBlock, Block flowerPotBlock, CrossType tintType, String suffix) { TextureMap textureMap = TextureMap.plant(TextureMap.getSubId(plantBlock, suffix)); Identifier identifier = tintType.getFlowerPotCrossModel().upload(flowerPotBlock, textureMap, generator.modelCollector); generator.blockStateCollector.accept(BlockStateModelGenerator.createSingletonBlockState(flowerPotBlock, identifier)); @@ -246,11 +248,11 @@ static void registerDistillery(BlockStateModelGenerator generator, Block block) static void registerVat(BlockStateModelGenerator generator, Block core, Block edge, Block materialBase) { generator.registerBuiltinWithParticle(edge, ModelIds.getBlockModelId(materialBase)); - generator.registerSingleton(core, TextureMap.all(core), BlockModels.VAT_TEMPLATE); + generator.registerSingleton(core, VAT); } static void registerDryingTable(BlockStateModelGenerator generator, Block block) { - generator.registerSingleton(block, TextureMap.sideTopBottom(block), BlockModels.DRYING_TABLE_TEMPLATE); + generator.registerSingleton(block, DRYING_TABLE); generator.registerParentedItemModel(block, ModelIds.getBlockModelId(block)); } diff --git a/src/main/java/ivorius/psychedelicraft/datagen/providers/ItemModels.java b/src/main/java/ivorius/psychedelicraft/datagen/providers/ItemModels.java index 1ba35480..9899574e 100644 --- a/src/main/java/ivorius/psychedelicraft/datagen/providers/ItemModels.java +++ b/src/main/java/ivorius/psychedelicraft/datagen/providers/ItemModels.java @@ -5,12 +5,12 @@ import java.util.Optional; import ivorius.psychedelicraft.Psychedelicraft; import net.minecraft.block.Block; -import net.minecraft.data.client.ItemModelGenerator; -import net.minecraft.data.client.Model; -import net.minecraft.data.client.ModelIds; -import net.minecraft.data.client.Models; -import net.minecraft.data.client.TextureKey; -import net.minecraft.data.client.TextureMap; +import net.minecraft.client.data.ItemModelGenerator; +import net.minecraft.client.data.Model; +import net.minecraft.client.data.ModelIds; +import net.minecraft.client.data.Models; +import net.minecraft.client.data.TextureKey; +import net.minecraft.client.data.TextureMap; import net.minecraft.item.Item; import net.minecraft.item.Items; import net.minecraft.registry.Registries; @@ -44,9 +44,9 @@ static void registerBong(ItemModelGenerator itemModelGenerator, Item item) { var filledTextures = TextureMap.layer0(TextureMap.getSubId(item, "_filled")); ModelOverrides.of(SMOKEABLE_TEMPLATE) .addOverride(Map.of("psychedelicraft:using", 0F, "psychedelicraft:filled", 1F), - g -> SMOKEABLE_TEMPLATE.upload(ModelIds.getItemSubModelId(item, "_filled"), filledTextures, g.writer)) + g -> SMOKEABLE_TEMPLATE.upload(ModelIds.getItemSubModelId(item, "_filled"), filledTextures, g.modelCollector)) .addOverride(Map.of("psychedelicraft:using", 1F, "psychedelicraft:filled", 1F), - g -> SMOKEABLE_USING_TEMPLATE.upload(ModelIds.getItemSubModelId(item, "_filled_using"), filledTextures, g.writer)) + g -> SMOKEABLE_USING_TEMPLATE.upload(ModelIds.getItemSubModelId(item, "_filled_using"), filledTextures, g.modelCollector)) .upload(item, itemModelGenerator); } @@ -55,18 +55,18 @@ static void registerMolotov(ItemModelGenerator itemModelGenerator, Item item) { var overlay = TextureMap.getSubId(item, "_overlay"); ModelOverrides.of(Models.GENERATED_THREE_LAYERS) .addOverride(Map.of("psychedelicraft:flying", 0F, "psychedelicraft:filled", 1F), - g -> Models.GENERATED_THREE_LAYERS.upload(ModelIds.getItemSubModelId(item, "_filled"), TextureMap.layered(base, TextureMap.getSubId(item, "_liquid"), overlay), g.writer)) + g -> Models.GENERATED_THREE_LAYERS.upload(ModelIds.getItemSubModelId(item, "_filled"), TextureMap.layered(base, TextureMap.getSubId(item, "_liquid"), overlay), g.modelCollector)) .addOverride(Map.of("psychedelicraft:flying", 0F, "psychedelicraft:filled_with_lava", 1F), - g -> Models.GENERATED_THREE_LAYERS.upload(ModelIds.getItemSubModelId(item, "_filled_lava"), TextureMap.layered(base, TextureMap.getSubId(item, "_liquid_lava"), overlay), g.writer)) + g -> Models.GENERATED_THREE_LAYERS.upload(ModelIds.getItemSubModelId(item, "_filled_lava"), TextureMap.layered(base, TextureMap.getSubId(item, "_liquid_lava"), overlay), g.modelCollector)) .addOverride(Map.of("psychedelicraft:flying", 1F), - g -> Models.GENERATED.upload(ModelIds.getItemSubModelId(item, "_thrown"), TextureMap.layer0(TextureMap.getSubId(item, "_thrown")), g.writer)) + g -> Models.GENERATED.upload(ModelIds.getItemSubModelId(item, "_thrown"), TextureMap.layer0(TextureMap.getSubId(item, "_thrown")), g.modelCollector)) .upload(ModelIds.getItemModelId(item), TextureMap.layered(base, overlay, overlay), itemModelGenerator); } static void registerSmokeable(ItemModelGenerator itemModelGenerator, Item item) { ModelOverrides.of(SMOKEABLE_TEMPLATE) .addOverride("psychedelicraft:using", 1F, - g -> SMOKEABLE_USING_TEMPLATE.upload(ModelIds.getItemSubModelId(item, "_using"), TextureMap.layer0(TextureMap.getSubId(item, "_using")), g.writer)) + g -> SMOKEABLE_USING_TEMPLATE.upload(ModelIds.getItemSubModelId(item, "_using"), TextureMap.layer0(TextureMap.getSubId(item, "_using")), g.modelCollector)) .upload(item, itemModelGenerator); } @@ -75,7 +75,7 @@ static void registerSniffable(ItemModelGenerator itemModelGenerator, Item item) .addOverride("psychedelicraft:using", 1F, generator -> SMOKEABLE_USING_TEMPLATE.upload( ModelIds.getItemSubModelId(item, "_using"), TextureMap.layer0(TextureMap.getId(item)), - itemModelGenerator.writer) + itemModelGenerator.modelCollector) ).upload(item, itemModelGenerator); } @@ -93,7 +93,7 @@ static void registerCigar(ItemModelGenerator itemModelGenerator, Item item) { ), generator -> (using ? SMOKEABLE_USING_TEMPLATE : SMOKEABLE_TEMPLATE).upload( ModelIds.getItemSubModelId(item, name), TextureMap.layer0(TextureMap.getSubId(item, name)), - itemModelGenerator.writer)); + itemModelGenerator.modelCollector)); } } @@ -106,7 +106,7 @@ static void registerPlantLattice(ItemModelGenerator itemModelGenerator, Block la .addUniform("psychedelicraft:age", 0.1F, 0.3F, 0.1F, (index, value) -> { return CROP_LATTICE_TEMPLATE.upload(ModelIds.getItemSubModelId(item, "_stage" + index), new TextureMap() .put(LATTICE, TextureMap.getId(lattice)) - .put(TextureKey.CROP, TextureMap.getSubId(crop, "_stage" + index)), itemModelGenerator.writer); + .put(TextureKey.CROP, TextureMap.getSubId(crop, "_stage" + index)), itemModelGenerator.modelCollector); }) .upload(ModelIds.getItemModelId(item), new TextureMap() .put(LATTICE, TextureMap.getId(lattice)) @@ -116,13 +116,13 @@ static void registerPlantLattice(ItemModelGenerator itemModelGenerator, Block la static Identifier registerLayered(ItemModelGenerator itemModelGenerator, Item item, String overlay1) { return Models.GENERATED_TWO_LAYERS.upload(ModelIds.getItemModelId(item), TextureMap.layered( TextureMap.getId(item), TextureMap.getSubId(item, overlay1) - ), itemModelGenerator.writer); + ), itemModelGenerator.modelCollector); } static Identifier registerLayered(ItemModelGenerator itemModelGenerator, Item item, String overlay1, String overlay2) { return Models.GENERATED_TWO_LAYERS.upload(ModelIds.getItemModelId(item), TextureMap.layered( TextureMap.getId(item), TextureMap.getSubId(item, overlay1), TextureMap.getSubId(item, overlay2) - ), itemModelGenerator.writer); + ), itemModelGenerator.modelCollector); } static void registerPaperBag(ItemModelGenerator itemModelGenerator, Item item) { diff --git a/src/main/java/ivorius/psychedelicraft/datagen/providers/ModelOverrides.java b/src/main/java/ivorius/psychedelicraft/datagen/providers/ModelOverrides.java index fbd96cda..24984cee 100644 --- a/src/main/java/ivorius/psychedelicraft/datagen/providers/ModelOverrides.java +++ b/src/main/java/ivorius/psychedelicraft/datagen/providers/ModelOverrides.java @@ -7,10 +7,10 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import net.minecraft.data.client.ItemModelGenerator; -import net.minecraft.data.client.Model; -import net.minecraft.data.client.ModelIds; -import net.minecraft.data.client.TextureMap; +import net.minecraft.client.data.ItemModelGenerator; +import net.minecraft.client.data.Model; +import net.minecraft.client.data.ModelIds; +import net.minecraft.client.data.TextureMap; import net.minecraft.item.Item; import net.minecraft.util.Identifier; import net.minecraft.util.Pair; @@ -60,11 +60,11 @@ public ModelOverrides addOverride(Identifier modelId, String key, float value) { } public ModelOverrides addOverride(Identifier modelId, TextureMap textures, String key, float value) { - return addOverride(key, value, generator -> model.upload(modelId, textures, generator.writer)); + return addOverride(key, value, generator -> model.upload(modelId, textures, generator.modelCollector)); } public ModelOverrides addOverride(Identifier modelId, Model model, TextureMap textures, String key, float value) { - return addOverride(key, value, generator -> model.upload(modelId, textures, generator.writer)); + return addOverride(key, value, generator -> model.upload(modelId, textures, generator.modelCollector)); } @@ -91,7 +91,7 @@ public Identifier upload(Identifier id, TextureMap textures, ItemModelGenerator .toList(); return model.upload(id, textures, (a, jsonSupplier) -> { - generator.writer.accept(a, () -> Util.make(jsonSupplier.get(), json -> { + generator.modelCollector.accept(a, () -> Util.make(jsonSupplier.get(), json -> { json.getAsJsonObject().add("overrides", Util.make(new JsonArray(), array -> { overrides.forEach(override -> { array.add(writeOverride(override.getLeft(), override.getRight(), new JsonObject())); diff --git a/src/main/java/ivorius/psychedelicraft/datagen/providers/PSModelProvider.java b/src/main/java/ivorius/psychedelicraft/datagen/providers/PSModelProvider.java index 9d9ac76a..be59546d 100644 --- a/src/main/java/ivorius/psychedelicraft/datagen/providers/PSModelProvider.java +++ b/src/main/java/ivorius/psychedelicraft/datagen/providers/PSModelProvider.java @@ -16,19 +16,19 @@ import ivorius.psychedelicraft.fluid.PSFluids; import ivorius.psychedelicraft.fluid.SimpleFluid; import ivorius.psychedelicraft.item.PSItems; +import net.fabricmc.fabric.api.client.datagen.v1.provider.FabricModelProvider; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; -import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider; import net.minecraft.block.Blocks; -import net.minecraft.data.client.BlockStateModelGenerator; -import net.minecraft.data.client.BlockStateVariant; -import net.minecraft.data.client.BlockStateModelGenerator.TintType; -import net.minecraft.data.client.ItemModelGenerator; -import net.minecraft.data.client.ModelIds; -import net.minecraft.data.client.Models; -import net.minecraft.data.client.TextureMap; -import net.minecraft.data.client.TexturedModel; -import net.minecraft.data.client.VariantSettings; -import net.minecraft.data.client.VariantsBlockStateSupplier; +import net.minecraft.client.data.BlockStateModelGenerator; +import net.minecraft.client.data.BlockStateModelGenerator.CrossType; +import net.minecraft.client.data.BlockStateVariant; +import net.minecraft.client.data.ItemModelGenerator; +import net.minecraft.client.data.ModelIds; +import net.minecraft.client.data.Models; +import net.minecraft.client.data.TextureMap; +import net.minecraft.client.data.TexturedModel; +import net.minecraft.client.data.VariantSettings; +import net.minecraft.client.data.VariantsBlockStateSupplier; import net.minecraft.item.Items; import net.minecraft.util.Identifier; import net.minecraft.util.Util; @@ -71,7 +71,7 @@ public void generateBlockStateModels(BlockStateModelGenerator generator) { BlockModels.registerDistillery(generator, PSBlocks.DISTILLERY); BlockModels.registerTubing(generator, PSBlocks.GLASS_TUBE); - generator.registerBuiltin(PSBlocks.RIFT_JAR, Blocks.GLASS).includeWithoutItem(PSBlocks.RIFT_JAR); + generator.registerBuiltinWithParticle(PSBlocks.RIFT_JAR, Blocks.GLASS); generator.registerBuiltinWithParticle(PSBlocks.PEYOTE, ModelIds.getBlockModelId(PSBlocks.PEYOTE)); generator.registerBuiltinWithParticle(PSBlocks.PLACED_DRINK, ModelIds.getBlockModelId(Blocks.STONE)); @@ -96,12 +96,12 @@ public void generateBlockStateModels(BlockStateModelGenerator generator) { BlockModels.registerLatticeCrop(generator, PSBlocks.LATTICE, PSBlocks.WINE_GRAPE_LATTICE, BurdenedLatticeBlock.AGE, 0, 1, 2, 3); BlockModels.registerLatticeCrop(generator, PSBlocks.LATTICE, PSBlocks.MORNING_GLORY_LATTICE, BurdenedLatticeBlock.AGE, 0, 1, 2, 3); - BlockModels.registerCropPot(generator, PSBlocks.CANNABIS, PSBlocks.POTTED_CANNABIS, TintType.NOT_TINTED, "_stage3"); - BlockModels.registerCropPot(generator, PSBlocks.COCA, PSBlocks.POTTED_COCA, TintType.NOT_TINTED, "_stage3"); - BlockModels.registerCropPot(generator, PSBlocks.COFFEA, PSBlocks.POTTED_COFFEA, TintType.NOT_TINTED, "_top_stage3"); - BlockModels.registerCropPot(generator, PSBlocks.HOP, PSBlocks.POTTED_HOP, TintType.NOT_TINTED, "_stage3"); - BlockModels.registerCropPot(generator, PSBlocks.MORNING_GLORY, PSBlocks.POTTED_MORNING_GLORY, TintType.NOT_TINTED, "_stage3"); - BlockModels.registerCropPot(generator, PSBlocks.TOBACCO, PSBlocks.POTTED_TOBACCO, TintType.NOT_TINTED, "_top_stage3"); + BlockModels.registerCropPot(generator, PSBlocks.CANNABIS, PSBlocks.POTTED_CANNABIS, CrossType.NOT_TINTED, "_stage3"); + BlockModels.registerCropPot(generator, PSBlocks.COCA, PSBlocks.POTTED_COCA, CrossType.NOT_TINTED, "_stage3"); + BlockModels.registerCropPot(generator, PSBlocks.COFFEA, PSBlocks.POTTED_COFFEA, CrossType.NOT_TINTED, "_top_stage3"); + BlockModels.registerCropPot(generator, PSBlocks.HOP, PSBlocks.POTTED_HOP, CrossType.NOT_TINTED, "_stage3"); + BlockModels.registerCropPot(generator, PSBlocks.MORNING_GLORY, PSBlocks.POTTED_MORNING_GLORY, CrossType.NOT_TINTED, "_stage3"); + BlockModels.registerCropPot(generator, PSBlocks.TOBACCO, PSBlocks.POTTED_TOBACCO, CrossType.NOT_TINTED, "_top_stage3"); BlockModels.registerVat(generator, PSBlocks.MASH_TUB, PSBlocks.MASH_TUB_EDGE, Blocks.OAK_PLANKS); @@ -200,11 +200,11 @@ public void generateItemModels(ItemModelGenerator generator) { ItemModels.registerParentedDrinkHolder(generator, PSItems.FILLED_BOWL, Items.BOWL, Models.GENERATED.upload( Psychedelicraft.id("item/lava_bowl"), TextureMap.layer0(Psychedelicraft.id("item/lava_bowl")), - generator.writer)); + generator.modelCollector)); ItemModels.registerParentedDrinkHolder(generator, PSItems.FILLED_GLASS_BOTTLE, Items.POTION, Models.GENERATED.upload( Psychedelicraft.id("item/lava_bottle"), TextureMap.layer0(Psychedelicraft.id("item/lava_bottle")), - generator.writer)); + generator.modelCollector)); List.of(PSItems.WINE_GRAPE_LATTICE, PSItems.MORNING_GLORY_LATTICE).forEach(item -> { ItemModels.registerPlantLattice(generator, PSBlocks.LATTICE, item); diff --git a/src/main/java/ivorius/psychedelicraft/datagen/providers/loot/PSBlockLootTableProvider.java b/src/main/java/ivorius/psychedelicraft/datagen/providers/loot/PSBlockLootTableProvider.java index c09dbc1f..7ee5b1ba 100644 --- a/src/main/java/ivorius/psychedelicraft/datagen/providers/loot/PSBlockLootTableProvider.java +++ b/src/main/java/ivorius/psychedelicraft/datagen/providers/loot/PSBlockLootTableProvider.java @@ -50,8 +50,11 @@ public class PSBlockLootTableProvider extends FabricBlockLootTableProvider { private ConditionalLootFunction.Builder fortuneBonus; + private final CompletableFuture registryLookup; + public PSBlockLootTableProvider(FabricDataOutput dataOutput, CompletableFuture registryLookup) { super(dataOutput, registryLookup); + this.registryLookup = registryLookup; } @Override @@ -136,14 +139,17 @@ public void generate() { // check for missing blocks Registries.BLOCK.forEach(block -> { - var key = block.getLootTableKey(); - if (key.getValue().getNamespace().equalsIgnoreCase("psychedelicraft") && !lootTables.containsKey(key)) { - Psychedelicraft.LOGGER.warn("No loot table provided for " + key); - } - if (block instanceof BurdenedLatticeBlock b) { - if (!lootTables.containsKey(b.getFarmingLootTableKey())) { + block.getLootTableKey().ifPresent(key -> { + if (key.getValue().getNamespace().equalsIgnoreCase("psychedelicraft") && !lootTables.containsKey(key)) { Psychedelicraft.LOGGER.warn("No loot table provided for " + key); } + }); + if (block instanceof BurdenedLatticeBlock b) { + b.getFarmingLootTableKey().ifPresent(key -> { + if (!lootTables.containsKey(key)) { + Psychedelicraft.LOGGER.warn("No loot table provided for " + key); + } + }); } }); } @@ -280,7 +286,7 @@ public LootTable.Builder latticeCropDrops(Block block, Item product, Item seeds) } public void addLatticeShearingDrops(Block block, Item product) { - this.lootTables.put(((BurdenedLatticeBlock)block).getFarmingLootTableKey(), LootTable.builder() + this.lootTables.put(((BurdenedLatticeBlock)block).getFarmingLootTableKey().orElseThrow(), LootTable.builder() .pool(LootPool.builder() .rolls(ConstantLootNumberProvider.create(1.0F)) .with(addSurvivesExplosionCondition(product, ItemEntry.builder(product)) @@ -293,7 +299,7 @@ public void addLatticeShearingDrops(Block block, Item product) { } private RegistryEntry getEnchantment(RegistryKey key) { - return registryLookup.getWrapperOrThrow(RegistryKeys.ENCHANTMENT).getOrThrow(key); + return registryLookup.getNow(null).getOrThrow(RegistryKeys.ENCHANTMENT).getOrThrow(key); } @SuppressWarnings("deprecation") diff --git a/src/main/java/ivorius/psychedelicraft/entity/DealerTaskListProvider.java b/src/main/java/ivorius/psychedelicraft/entity/DealerTaskListProvider.java index dc695283..4f72f0bc 100644 --- a/src/main/java/ivorius/psychedelicraft/entity/DealerTaskListProvider.java +++ b/src/main/java/ivorius/psychedelicraft/entity/DealerTaskListProvider.java @@ -25,8 +25,8 @@ import net.minecraft.entity.ai.brain.WalkTarget; import net.minecraft.entity.ai.brain.task.BoneMealTask; import net.minecraft.entity.ai.brain.task.FindInteractionTargetTask; -import net.minecraft.entity.ai.brain.task.GoToIfNearbyTask; -import net.minecraft.entity.ai.brain.task.GoToNearbyPositionTask; +import net.minecraft.entity.ai.brain.task.GoAroundTask; +import net.minecraft.entity.ai.brain.task.GoToPosTask; import net.minecraft.entity.ai.brain.task.GoToSecondaryPositionTask; import net.minecraft.entity.ai.brain.task.HoldTradeOffersTask; import net.minecraft.entity.ai.brain.task.MultiTickTask; @@ -54,8 +54,8 @@ public class DealerTaskListProvider { busyFollowTasks, Pair.of(5, new RandomTask<>(ImmutableList.of( Pair.of(new DealerWorkTask(), 7), - Pair.of(GoToIfNearbyTask.create(MemoryModuleType.JOB_SITE, 0.4f, 4), 2), - Pair.of(GoToNearbyPositionTask.create(MemoryModuleType.JOB_SITE, 0.4f, 1, 10), 5), + Pair.of(GoAroundTask.create(MemoryModuleType.JOB_SITE, 0.4f, 4), 2), + Pair.of(GoToPosTask.create(MemoryModuleType.JOB_SITE, 0.4f, 1, 10), 5), Pair.of(GoToSecondaryPositionTask.create(MemoryModuleType.SECONDARY_JOB_SITE, speed, 1, 6, MemoryModuleType.JOB_SITE), 5), Pair.of(new DealerVillagerTask(), 2), Pair.of(new BoneMealTask(), 4))