diff --git a/build.gradle b/build.gradle index 341b6b0e2..76127e48b 100644 --- a/build.gradle +++ b/build.gradle @@ -34,8 +34,8 @@ java.toolchain.languageVersion = JavaLanguageVersion.of(17) println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) minecraft { - mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}" - +// mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}" + mappings channel: 'official', version: "${minecraft_version}" runs { client { @@ -199,6 +199,6 @@ curseforge { changelog = file('changelog.txt') releaseType = project.curse_type mainArtifact jar - addGameVersion '1.18.2' + addGameVersion '1.19' } } diff --git a/gradle.properties b/gradle.properties index 42e95d776..225f270f2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,9 +3,9 @@ org.gradle.daemon = false # mod version info mod_version = 0.6.4 -mc_update_version = 1.18 -minecraft_version = 1.18.2 -forge_version = 40.1.60 +mc_update_version = 1.19 +minecraft_version = 1.19 +forge_version = 41.0.94 # build dependency versions forgegradle_version = 5.1.+ diff --git a/src/main/java/com/jozufozu/flywheel/Flywheel.java b/src/main/java/com/jozufozu/flywheel/Flywheel.java index be8be85d0..7a186371b 100644 --- a/src/main/java/com/jozufozu/flywheel/Flywheel.java +++ b/src/main/java/com/jozufozu/flywheel/Flywheel.java @@ -17,8 +17,9 @@ import com.jozufozu.flywheel.mixin.PausedPartialTickAccessor; import com.jozufozu.flywheel.vanilla.VanillaInstances; import com.mojang.logging.LogUtils; -import net.minecraft.commands.synchronization.ArgumentTypes; -import net.minecraft.commands.synchronization.EmptyArgumentSerializer; +import net.minecraft.commands.synchronization.ArgumentTypeInfos; +import net.minecraft.commands.synchronization.SingletonArgumentInfo; +import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.MinecraftForge; @@ -28,9 +29,9 @@ import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.IExtensionPoint; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.network.NetworkConstants; +import net.minecraftforge.registries.RegisterEvent; @Mod(Flywheel.ID) public class Flywheel { @@ -50,7 +51,7 @@ public class Flywheel { IEventBus forgeEventBus = MinecraftForge.EVENT_BUS; IEventBus modEventBus = FMLJavaModLoadingContext.get() .getModEventBus(); - modEventBus.addListener(Flywheel::setup); + modEventBus.addListener(Flywheel::registerArgumentTypes); FlwConfig.init(); @@ -87,8 +88,10 @@ public class Flywheel { LOGGER.debug("Successfully loaded {}", PausedPartialTickAccessor.class.getName()); } - private static void setup(final FMLCommonSetupEvent event) { - ArgumentTypes.register(rl("engine").toString(), BackendTypeArgument.class, new EmptyArgumentSerializer<>(BackendTypeArgument::getInstance)); + private static void registerArgumentTypes(RegisterEvent event) { + event.register(Registry.COMMAND_ARGUMENT_TYPE_REGISTRY, rl("engine"), () -> { + return ArgumentTypeInfos.registerByClass(BackendTypeArgument.class, SingletonArgumentInfo.contextFree(BackendTypeArgument::getInstance)); + }); } public static ArtifactVersion getVersion() { diff --git a/src/main/java/com/jozufozu/flywheel/backend/Loader.java b/src/main/java/com/jozufozu/flywheel/backend/Loader.java index 94c3628cf..24a1bf048 100644 --- a/src/main/java/com/jozufozu/flywheel/backend/Loader.java +++ b/src/main/java/com/jozufozu/flywheel/backend/Loader.java @@ -1,6 +1,6 @@ package com.jozufozu.flywheel.backend; -import java.util.Collection; +import java.io.InputStream; import java.util.HashMap; import java.util.Map; @@ -93,13 +93,11 @@ public class Loader implements ResourceManagerReloadListener { private void loadProgramSpecs(ResourceManager manager) { programs.clear(); - Collection programSpecs = manager.listResources(PROGRAM_DIR, s -> s.endsWith(".json")); + Map programSpecs = manager.listResources(PROGRAM_DIR, loc -> loc.getPath().endsWith(".json")); - for (ResourceLocation location : programSpecs) { - try { - Resource file = manager.getResource(location); - - String s = StringUtil.readToString(file.getInputStream()); + programSpecs.forEach((location, resource) -> { + try (InputStream inputStream = resource.open()) { + String s = StringUtil.readToString(inputStream); ResourceLocation specName = ResourceUtil.trim(location, PROGRAM_DIR, ".json"); @@ -119,7 +117,7 @@ public class Loader implements ResourceManagerReloadListener { } catch (Exception e) { Backend.LOGGER.error("Could not load program " + location, e); } - } + }); } } diff --git a/src/main/java/com/jozufozu/flywheel/config/BackendTypeArgument.java b/src/main/java/com/jozufozu/flywheel/config/BackendTypeArgument.java index 7f2545a3a..7187813d8 100644 --- a/src/main/java/com/jozufozu/flywheel/config/BackendTypeArgument.java +++ b/src/main/java/com/jozufozu/flywheel/config/BackendTypeArgument.java @@ -12,14 +12,14 @@ import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; import net.minecraft.commands.SharedSuggestionProvider; -import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.chat.Component; public enum BackendTypeArgument implements ArgumentType { INSTANCE; private static final Dynamic2CommandExceptionType INVALID = new Dynamic2CommandExceptionType((found, constants) -> { // TODO: don't steal lang - return new TranslatableComponent("commands.forge.arguments.enum.invalid", constants, found); + return Component.translatable("commands.forge.arguments.enum.invalid", constants, found); }); @Override diff --git a/src/main/java/com/jozufozu/flywheel/config/FlwCommands.java b/src/main/java/com/jozufozu/flywheel/config/FlwCommands.java index ce0ea95d7..f2e2b9d85 100644 --- a/src/main/java/com/jozufozu/flywheel/config/FlwCommands.java +++ b/src/main/java/com/jozufozu/flywheel/config/FlwCommands.java @@ -16,10 +16,8 @@ import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.network.chat.TextComponent; import net.minecraftforge.client.event.RegisterClientCommandsEvent; import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; -import net.minecraftforge.fml.ModList; public class FlwCommands { public static void registerClientCommands(RegisterClientCommandsEvent event) { @@ -56,14 +54,14 @@ public class FlwCommands { LocalPlayer player = Minecraft.getInstance().player; if (player == null) return; - Component text = new TextComponent("Normal debug mode is currently: ").append(boolToText(bool)); + Component text = Component.literal("Normal debug mode is currently: ").append(boolToText(bool)); player.displayClientMessage(text, false); }, (source, bool) -> { LocalPlayer player = Minecraft.getInstance().player; if (player == null) return; - Component text = boolToText(bool).append(new TextComponent(" normal debug mode").withStyle(ChatFormatting.WHITE)); + Component text = boolToText(bool).append(Component.literal(" normal debug mode").withStyle(ChatFormatting.WHITE)); player.displayClientMessage(text, false); } )); @@ -73,14 +71,14 @@ public class FlwCommands { LocalPlayer player = Minecraft.getInstance().player; if (player == null) return; - Component text = new TextComponent("Update limiting is currently: ").append(boolToText(bool)); + Component text = Component.literal("Update limiting is currently: ").append(boolToText(bool)); player.displayClientMessage(text, false); }, (source, bool) -> { LocalPlayer player = Minecraft.getInstance().player; if (player == null) return; - Component text = boolToText(bool).append(new TextComponent(" update limiting.").withStyle(ChatFormatting.WHITE)); + Component text = boolToText(bool).append(Component.literal(" update limiting.").withStyle(ChatFormatting.WHITE)); player.displayClientMessage(text, false); Backend.reloadWorldRenderers(); @@ -111,14 +109,14 @@ public class FlwCommands { } public static MutableComponent boolToText(boolean b) { - return b ? new TextComponent("enabled").withStyle(ChatFormatting.DARK_GREEN) : new TextComponent("disabled").withStyle(ChatFormatting.RED); + return b ? Component.literal("enabled").withStyle(ChatFormatting.DARK_GREEN) : Component.literal("disabled").withStyle(ChatFormatting.RED); } public static Component getEngineMessage(@NotNull BackendType type) { return switch (type) { - case OFF -> new TextComponent("Disabled Flywheel").withStyle(ChatFormatting.RED); - case INSTANCING -> new TextComponent("Using Instancing Engine").withStyle(ChatFormatting.GREEN); - case BATCHING -> new TextComponent("Using Batching Engine").withStyle(ChatFormatting.GREEN); + case OFF -> Component.literal("Disabled Flywheel").withStyle(ChatFormatting.RED); + case INSTANCING -> Component.literal("Using Instancing Engine").withStyle(ChatFormatting.GREEN); + case BATCHING -> Component.literal("Using Batching Engine").withStyle(ChatFormatting.GREEN); }; } diff --git a/src/main/java/com/jozufozu/flywheel/core/PartialModel.java b/src/main/java/com/jozufozu/flywheel/core/PartialModel.java index 6340e8441..526239b48 100644 --- a/src/main/java/com/jozufozu/flywheel/core/PartialModel.java +++ b/src/main/java/com/jozufozu/flywheel/core/PartialModel.java @@ -6,9 +6,7 @@ import java.util.Map; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.client.event.ModelBakeEvent; -import net.minecraftforge.client.event.ModelRegistryEvent; -import net.minecraftforge.client.model.ForgeModelBakery; +import net.minecraftforge.client.event.ModelEvent; /** * A helper class for loading and accessing json models. @@ -30,23 +28,23 @@ public class PartialModel { protected BakedModel bakedModel; public PartialModel(ResourceLocation modelLocation) { - if (tooLate) throw new RuntimeException("PartialModel '" + modelLocation + "' loaded after ModelRegistryEvent"); + if (tooLate) throw new RuntimeException("PartialModel '" + modelLocation + "' loaded after ModelEvent.RegisterAdditional"); this.modelLocation = modelLocation; ALL.add(this); } - public static void onModelRegistry(ModelRegistryEvent event) { + public static void onModelRegistry(ModelEvent.RegisterAdditional event) { for (PartialModel partial : ALL) - ForgeModelBakery.addSpecialModel(partial.getLocation()); + event.register(partial.getLocation()); tooLate = true; } - public static void onModelBake(ModelBakeEvent event) { - Map modelRegistry = event.getModelRegistry(); + public static void onModelBake(ModelEvent.BakingCompleted event) { + Map models = event.getModels(); for (PartialModel partial : ALL) - partial.set(modelRegistry.get(partial.getLocation())); + partial.set(models.get(partial.getLocation())); } protected void set(BakedModel bakedModel) { diff --git a/src/main/java/com/jozufozu/flywheel/core/model/BakedModelBuilder.java b/src/main/java/com/jozufozu/flywheel/core/model/BakedModelBuilder.java index 70631ebea..404e69b01 100644 --- a/src/main/java/com/jozufozu/flywheel/core/model/BakedModelBuilder.java +++ b/src/main/java/com/jozufozu/flywheel/core/model/BakedModelBuilder.java @@ -1,10 +1,7 @@ package com.jozufozu.flywheel.core.model; -import java.util.Random; - import com.jozufozu.flywheel.core.virtual.VirtualEmptyBlockGetter; -import com.jozufozu.flywheel.core.virtual.VirtualEmptyModelData; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; @@ -12,6 +9,7 @@ import net.minecraft.client.renderer.block.ModelBlockRenderer; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; @@ -42,7 +40,7 @@ public final class BakedModelBuilder implements Bufferable { } @Override - public void bufferInto(ModelBlockRenderer blockRenderer, VertexConsumer consumer, Random random) { - blockRenderer.tesselateBlock(renderWorld, model, referenceState, BlockPos.ZERO, poseStack, consumer, false, random, 42, OverlayTexture.NO_OVERLAY, VirtualEmptyModelData.INSTANCE); + public void bufferInto(ModelBlockRenderer blockRenderer, VertexConsumer consumer, RandomSource random) { + blockRenderer.tesselateBlock(renderWorld, model, referenceState, BlockPos.ZERO, poseStack, consumer, false, random, 42, OverlayTexture.NO_OVERLAY, ModelUtil.VIRTUAL_DATA, null); } } diff --git a/src/main/java/com/jozufozu/flywheel/core/model/Bufferable.java b/src/main/java/com/jozufozu/flywheel/core/model/Bufferable.java index ee78333ad..2c7c74a4a 100644 --- a/src/main/java/com/jozufozu/flywheel/core/model/Bufferable.java +++ b/src/main/java/com/jozufozu/flywheel/core/model/Bufferable.java @@ -1,17 +1,16 @@ package com.jozufozu.flywheel.core.model; -import java.util.Random; - import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.renderer.block.ModelBlockRenderer; +import net.minecraft.util.RandomSource; /** * An interface for objects that can "rendered" into a BufferBuilder. */ public interface Bufferable { - void bufferInto(ModelBlockRenderer renderer, VertexConsumer consumer, Random random); + void bufferInto(ModelBlockRenderer renderer, VertexConsumer consumer, RandomSource random); default ShadeSeparatedBufferBuilder build() { return ModelUtil.getBufferBuilder(this); diff --git a/src/main/java/com/jozufozu/flywheel/core/model/ModelUtil.java b/src/main/java/com/jozufozu/flywheel/core/model/ModelUtil.java index 1cd4f903c..26fc5859a 100644 --- a/src/main/java/com/jozufozu/flywheel/core/model/ModelUtil.java +++ b/src/main/java/com/jozufozu/flywheel/core/model/ModelUtil.java @@ -2,7 +2,6 @@ package com.jozufozu.flywheel.core.model; import java.lang.reflect.Field; import java.util.Collection; -import java.util.Random; import java.util.function.Supplier; import com.jozufozu.flywheel.Flywheel; @@ -18,9 +17,12 @@ import net.minecraft.client.renderer.block.BlockRenderDispatcher; import net.minecraft.client.renderer.block.ModelBlockRenderer; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import net.minecraftforge.client.model.data.ModelData; +import net.minecraftforge.client.model.data.ModelProperty; import net.minecraftforge.fml.util.ObfuscationReflectionHelper; public class ModelUtil { @@ -30,6 +32,9 @@ public class ModelUtil { */ public static final BlockRenderDispatcher VANILLA_RENDERER = createVanillaRenderer(); + public static final ModelProperty VIRTUAL_PROPERTY = new ModelProperty<>(); + public static final ModelData VIRTUAL_DATA = ModelData.builder().with(VIRTUAL_PROPERTY, true).build(); + private static final ThreadLocal THREAD_LOCAL_OBJECTS = ThreadLocal.withInitial(ThreadLocalObjects::new); private static BlockRenderDispatcher createVanillaRenderer() { @@ -99,7 +104,7 @@ public class ModelUtil { } private static class ThreadLocalObjects { - public final Random random = new Random(); + public final RandomSource random = RandomSource.create(); public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer(); public final ShadeSeparatedBufferBuilder separatedBufferBuilder = new ShadeSeparatedBufferBuilder(512); public final BufferBuilder unshadedBuilder = new BufferBuilder(512); diff --git a/src/main/java/com/jozufozu/flywheel/core/model/WorldModelBuilder.java b/src/main/java/com/jozufozu/flywheel/core/model/WorldModelBuilder.java index 38bda7d1c..03a145dfd 100644 --- a/src/main/java/com/jozufozu/flywheel/core/model/WorldModelBuilder.java +++ b/src/main/java/com/jozufozu/flywheel/core/model/WorldModelBuilder.java @@ -3,30 +3,28 @@ package com.jozufozu.flywheel.core.model; import java.util.Collection; import java.util.Collections; import java.util.Map; -import java.util.Random; import com.jozufozu.flywheel.core.virtual.VirtualEmptyBlockGetter; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.block.ModelBlockRenderer; import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; -import net.minecraftforge.client.ForgeHooksClient; -import net.minecraftforge.client.model.data.EmptyModelData; -import net.minecraftforge.client.model.data.IModelData; +import net.minecraftforge.client.model.data.ModelData; public final class WorldModelBuilder implements Bufferable { private final RenderType layer; private PoseStack poseStack = new PoseStack(); - private Map modelData = Collections.emptyMap(); + private Map modelData = Collections.emptyMap(); private BlockAndTintGetter renderWorld = VirtualEmptyBlockGetter.INSTANCE; private Collection blocks = Collections.emptyList(); @@ -35,26 +33,25 @@ public final class WorldModelBuilder implements Bufferable { } @Override - public void bufferInto(ModelBlockRenderer modelRenderer, VertexConsumer consumer, Random random) { - ForgeHooksClient.setRenderType(this.layer); + public void bufferInto(ModelBlockRenderer modelRenderer, VertexConsumer consumer, RandomSource random) { ModelBlockRenderer.enableCaching(); for (StructureTemplate.StructureBlockInfo info : this.blocks) { BlockState state = info.state; - if (state.getRenderShape() != RenderShape.MODEL) continue; - if (!ItemBlockRenderTypes.canRenderInLayer(state, this.layer)) continue; BlockPos pos = info.pos; - - IModelData data = this.modelData.getOrDefault(pos, EmptyModelData.INSTANCE); + long randomSeed = state.getSeed(pos); + BakedModel model = ModelUtil.VANILLA_RENDERER.getBlockModel(state); + ModelData data = this.modelData.getOrDefault(pos, ModelData.EMPTY); + random.setSeed(randomSeed); + if (!model.getRenderTypes(state, random, data).contains(this.layer)) continue; poseStack.pushPose(); poseStack.translate(pos.getX(), pos.getY(), pos.getZ()); - modelRenderer.tesselateBlock(this.renderWorld, ModelUtil.VANILLA_RENDERER.getBlockModel(state), state, pos, poseStack, consumer, true, random, 42, OverlayTexture.NO_OVERLAY, data); + modelRenderer.tesselateBlock(this.renderWorld, model, state, pos, poseStack, consumer, true, random, randomSeed, OverlayTexture.NO_OVERLAY, data, this.layer); poseStack.popPose(); } ModelBlockRenderer.clearCache(); - ForgeHooksClient.setRenderType(null); } /** @@ -70,7 +67,7 @@ public final class WorldModelBuilder implements Bufferable { return this; } - public WorldModelBuilder withModelData(Map modelData) { + public WorldModelBuilder withModelData(Map modelData) { this.modelData = modelData; return this; } diff --git a/src/main/java/com/jozufozu/flywheel/core/source/ShaderSources.java b/src/main/java/com/jozufozu/flywheel/core/source/ShaderSources.java index b7e29c2a4..53e1fe5b5 100644 --- a/src/main/java/com/jozufozu/flywheel/core/source/ShaderSources.java +++ b/src/main/java/com/jozufozu/flywheel/core/source/ShaderSources.java @@ -1,8 +1,8 @@ package com.jozufozu.flywheel.core.source; import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; -import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -28,18 +28,17 @@ public class ShaderSources implements SourceFinder { public final Index index; public ShaderSources(ResourceManager manager) { - Collection allShaders = manager.listResources(SHADER_DIR, s -> { + Map allShaders = manager.listResources(SHADER_DIR, loc -> { + String path = loc.getPath(); for (String ext : EXTENSIONS) { - if (s.endsWith(ext)) return true; + if (path.endsWith(ext)) return true; } return false; }); - for (ResourceLocation location : allShaders) { - try { - Resource resource = manager.getResource(location); - - String source = StringUtil.readToString(resource.getInputStream()); + allShaders.forEach((location, resource) -> { + try (InputStream inputStream = resource.open()) { + String source = StringUtil.readToString(inputStream); ResourceLocation name = ResourceUtil.removePrefixUnchecked(location, SHADER_DIR); @@ -47,7 +46,7 @@ public class ShaderSources implements SourceFinder { } catch (IOException e) { } - } + }); index = new Index(shaderSources); } diff --git a/src/main/java/com/jozufozu/flywheel/core/virtual/VirtualChunk.java b/src/main/java/com/jozufozu/flywheel/core/virtual/VirtualChunk.java index eaed3e59f..32d0d9fad 100644 --- a/src/main/java/com/jozufozu/flywheel/core/virtual/VirtualChunk.java +++ b/src/main/java/com/jozufozu/flywheel/core/virtual/VirtualChunk.java @@ -28,7 +28,7 @@ import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.UpgradeData; import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; +import net.minecraft.world.level.levelgen.structure.Structure; import net.minecraft.world.level.levelgen.structure.StructureStart; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.FluidState; @@ -192,41 +192,78 @@ public class VirtualChunk extends ChunkAccess { return null; } +// @Override +// @Nullable +// public StructureStart getStartForFeature(ConfiguredStructureFeature pStructure) { +// return null; +// } +// +// @Override +// public void setStartForFeature(ConfiguredStructureFeature pStructure, StructureStart pStart) { +// } +// +// @Override +// public Map, StructureStart> getAllStarts() { +// return Collections.emptyMap(); +// } +// +// @Override +// public void setAllStarts(Map, StructureStart> pStructureStarts) { +// } +// +// @Override +// public LongSet getReferencesForFeature(ConfiguredStructureFeature pStructure) { +// return LongSets.emptySet(); +// } +// +// @Override +// public void addReferenceForFeature(ConfiguredStructureFeature pStructure, long pReference) { +// } +// +// @Override +// public Map, LongSet> getAllReferences() { +// return Collections.emptyMap(); +// } +// +// @Override +// public void setAllReferences(Map, LongSet> pStructureReferences) { +// } + @Override @Nullable - public StructureStart getStartForFeature(ConfiguredStructureFeature pStructure) { + public StructureStart getStartForStructure(Structure structure) { return null; } @Override - public void setStartForFeature(ConfiguredStructureFeature pStructure, StructureStart pStart) { + public void setStartForStructure(Structure structure, StructureStart start) { } @Override - public Map, StructureStart> getAllStarts() { + public Map getAllStarts() { return Collections.emptyMap(); } @Override - public void setAllStarts(Map, StructureStart> pStructureStarts) { + public void setAllStarts(Map structureStarts) { } @Override - public LongSet getReferencesForFeature(ConfiguredStructureFeature pStructure) { + public LongSet getReferencesForStructure(Structure structure) { return LongSets.emptySet(); } @Override - public void addReferenceForFeature(ConfiguredStructureFeature pStructure, long pReference) { + public void addReferenceForStructure(Structure structure, long reference) { } @Override - public Map, LongSet> getAllReferences() { + public Map getAllReferences() { return Collections.emptyMap(); } @Override - public void setAllReferences(Map, LongSet> pStructureReferences) { + public void setAllReferences(Map structureReferences) { } @Override diff --git a/src/main/java/com/jozufozu/flywheel/core/virtual/VirtualEmptyModelData.java b/src/main/java/com/jozufozu/flywheel/core/virtual/VirtualEmptyModelData.java deleted file mode 100644 index 4a8195857..000000000 --- a/src/main/java/com/jozufozu/flywheel/core/virtual/VirtualEmptyModelData.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.jozufozu.flywheel.core.virtual; - -import net.minecraftforge.client.model.data.IModelData; -import net.minecraftforge.client.model.data.ModelProperty; - -/** - * This model data instance is passed whenever a model is rendered without - * available in-world context. IBakedModel#getModelData can react accordingly - * and avoid looking for model data itself - **/ -public enum VirtualEmptyModelData implements IModelData { - - INSTANCE; - - public static boolean is(IModelData data) { - return data == INSTANCE; - } - - @Override - public boolean hasProperty(ModelProperty prop) { - return false; - } - - @Override - public T getData(ModelProperty prop) { - return null; - } - - @Override - public T setData(ModelProperty prop, T data) { - return null; - } - -} diff --git a/src/main/java/com/jozufozu/flywheel/core/virtual/VirtualRenderWorld.java b/src/main/java/com/jozufozu/flywheel/core/virtual/VirtualRenderWorld.java index 39574d808..af5e7da6e 100644 --- a/src/main/java/com/jozufozu/flywheel/core/virtual/VirtualRenderWorld.java +++ b/src/main/java/com/jozufozu/flywheel/core/virtual/VirtualRenderWorld.java @@ -36,10 +36,12 @@ import net.minecraft.world.level.chunk.ChunkSource; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.entity.LevelEntityGetter; import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.gameevent.GameEvent.Context; import net.minecraft.world.level.lighting.LevelLightEngine; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import net.minecraft.world.level.storage.WritableLevelData; +import net.minecraft.world.phys.Vec3; import net.minecraft.world.scores.Scoreboard; import net.minecraft.world.ticks.LevelTickAccess; @@ -68,7 +70,7 @@ public class VirtualRenderWorld extends Level implements FlywheelWorld { public VirtualRenderWorld(Level level, Vec3i biomeOffset, int height, int minBuildHeight) { super((WritableLevelData) level.getLevelData(), level.dimension(), level.dimensionTypeRegistration(), level::getProfiler, - true, false, 0); + true, false, 0, 0); this.biomeOffset = biomeOffset; this.level = level; this.height = nextMultipleOf16(height); @@ -294,6 +296,17 @@ public class VirtualRenderWorld extends Level implements FlywheelWorld { @Override public void levelEvent(@Nullable Player player, int type, BlockPos pos, int data) {} + @Override + public void gameEvent(GameEvent p_220404_, Vec3 p_220405_, Context p_220406_) {} + + @Override + public void playSeededSound(Player p_220363_, double p_220364_, double p_220365_, double p_220366_, + SoundEvent p_220367_, SoundSource p_220368_, float p_220369_, float p_220370_, long p_220371_) {} + + @Override + public void playSeededSound(Player p_220372_, Entity p_220373_, SoundEvent p_220374_, SoundSource p_220375_, + float p_220376_, float p_220377_, long p_220378_) {} + @Override public void playSound(@Nullable Player player, double x, double y, double z, SoundEvent soundIn, SoundSource category, float volume, float pitch) {} diff --git a/src/main/java/com/jozufozu/flywheel/event/EntityWorldHandler.java b/src/main/java/com/jozufozu/flywheel/event/EntityWorldHandler.java index c68054208..d6d81ae2b 100644 --- a/src/main/java/com/jozufozu/flywheel/event/EntityWorldHandler.java +++ b/src/main/java/com/jozufozu/flywheel/event/EntityWorldHandler.java @@ -4,8 +4,8 @@ import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; -import net.minecraftforge.event.entity.EntityLeaveWorldEvent; +import net.minecraftforge.event.entity.EntityJoinLevelEvent; +import net.minecraftforge.event.entity.EntityLeaveLevelEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -13,14 +13,14 @@ import net.minecraftforge.fml.common.Mod; public class EntityWorldHandler { @SubscribeEvent - public static void onEntityJoinWorld(EntityJoinWorldEvent event) { - if (event.getWorld().isClientSide && Backend.isOn()) InstancedRenderDispatcher.getEntities(event.getWorld()) + public static void onEntityJoinWorld(EntityJoinLevelEvent event) { + if (event.getLevel().isClientSide && Backend.isOn()) InstancedRenderDispatcher.getEntities(event.getLevel()) .queueAdd(event.getEntity()); } @SubscribeEvent - public static void onEntityLeaveWorld(EntityLeaveWorldEvent event) { - if (event.getWorld().isClientSide && Backend.isOn()) InstancedRenderDispatcher.getEntities(event.getWorld()) + public static void onEntityLeaveWorld(EntityLeaveLevelEvent event) { + if (event.getLevel().isClientSide && Backend.isOn()) InstancedRenderDispatcher.getEntities(event.getLevel()) .remove(event.getEntity()); } } diff --git a/src/main/java/com/jozufozu/flywheel/event/ForgeEvents.java b/src/main/java/com/jozufozu/flywheel/event/ForgeEvents.java index 056966700..c7bd0ffd3 100644 --- a/src/main/java/com/jozufozu/flywheel/event/ForgeEvents.java +++ b/src/main/java/com/jozufozu/flywheel/event/ForgeEvents.java @@ -7,9 +7,9 @@ import com.jozufozu.flywheel.util.WorldAttached; import net.minecraft.client.Minecraft; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.client.event.CustomizeGuiOverlayEvent; import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.event.level.LevelEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -17,17 +17,15 @@ import net.minecraftforge.fml.common.Mod; public class ForgeEvents { @SubscribeEvent - public static void addToDebugScreen(RenderGameOverlayEvent.Text event) { - + public static void addToDebugScreen(CustomizeGuiOverlayEvent.DebugText event) { if (Minecraft.getInstance().options.renderDebug) { - InstancedRenderDispatcher.getDebugString(event.getRight()); } } @SubscribeEvent - public static void unloadWorld(WorldEvent.Unload event) { - WorldAttached.invalidateWorld(event.getWorld()); + public static void unloadWorld(LevelEvent.Unload event) { + WorldAttached.invalidateWorld(event.getLevel()); } @SubscribeEvent diff --git a/src/main/java/com/jozufozu/flywheel/util/RenderMath.java b/src/main/java/com/jozufozu/flywheel/util/RenderMath.java index 9ee9ecddc..56febd8e9 100644 --- a/src/main/java/com/jozufozu/flywheel/util/RenderMath.java +++ b/src/main/java/com/jozufozu/flywheel/util/RenderMath.java @@ -1,6 +1,6 @@ package com.jozufozu.flywheel.util; -import net.minecraftforge.client.model.pipeline.LightUtil; +import net.minecraftforge.client.model.lighting.QuadLighter; public class RenderMath { @@ -74,13 +74,13 @@ public class RenderMath { if (!shaded) { return 1f; } - return LightUtil.diffuseLight(x, y, z); + return QuadLighter.calculateShade(x, y, z, false); } public static float diffuseLightNether(float x, float y, float z, boolean shaded) { if (!shaded) { return 0.9f; } - return Math.min(x * x * 0.6f + y * y * 0.9f + z * z * 0.8f, 1f); + return QuadLighter.calculateShade(x, y, z, true); } }