mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2025-02-05 17:54:59 +01:00
Port to 1.19 (mostly)
- BufferBuilder manipulation code has not been ported
This commit is contained in:
parent
0a671b8f43
commit
b5ea5f561e
18 changed files with 144 additions and 135 deletions
|
@ -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'
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.+
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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<ResourceLocation> programSpecs = manager.listResources(PROGRAM_DIR, s -> s.endsWith(".json"));
|
||||
Map<ResourceLocation, Resource> 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);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<BackendType> {
|
||||
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
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -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<ResourceLocation, BakedModel> modelRegistry = event.getModelRegistry();
|
||||
public static void onModelBake(ModelEvent.BakingCompleted event) {
|
||||
Map<ResourceLocation, BakedModel> models = event.getModels();
|
||||
for (PartialModel partial : ALL)
|
||||
partial.set(modelRegistry.get(partial.getLocation()));
|
||||
partial.set(models.get(partial.getLocation()));
|
||||
}
|
||||
|
||||
protected void set(BakedModel bakedModel) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<Boolean> VIRTUAL_PROPERTY = new ModelProperty<>();
|
||||
public static final ModelData VIRTUAL_DATA = ModelData.builder().with(VIRTUAL_PROPERTY, true).build();
|
||||
|
||||
private static final ThreadLocal<ThreadLocalObjects> 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);
|
||||
|
|
|
@ -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<BlockPos, IModelData> modelData = Collections.emptyMap();
|
||||
private Map<BlockPos, ModelData> modelData = Collections.emptyMap();
|
||||
private BlockAndTintGetter renderWorld = VirtualEmptyBlockGetter.INSTANCE;
|
||||
private Collection<StructureTemplate.StructureBlockInfo> 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<BlockPos, IModelData> modelData) {
|
||||
public WorldModelBuilder withModelData(Map<BlockPos, ModelData> modelData) {
|
||||
this.modelData = modelData;
|
||||
return this;
|
||||
}
|
||||
|
|
|
@ -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<ResourceLocation> allShaders = manager.listResources(SHADER_DIR, s -> {
|
||||
Map<ResourceLocation, Resource> 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);
|
||||
}
|
||||
|
|
|
@ -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<ConfiguredStructureFeature<?, ?>, StructureStart> getAllStarts() {
|
||||
// return Collections.emptyMap();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void setAllStarts(Map<ConfiguredStructureFeature<?, ?>, StructureStart> pStructureStarts) {
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public LongSet getReferencesForFeature(ConfiguredStructureFeature<?, ?> pStructure) {
|
||||
// return LongSets.emptySet();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void addReferenceForFeature(ConfiguredStructureFeature<?, ?> pStructure, long pReference) {
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Map<ConfiguredStructureFeature<?, ?>, LongSet> getAllReferences() {
|
||||
// return Collections.emptyMap();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void setAllReferences(Map<ConfiguredStructureFeature<?, ?>, 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<ConfiguredStructureFeature<?, ?>, StructureStart> getAllStarts() {
|
||||
public Map<Structure, StructureStart> getAllStarts() {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAllStarts(Map<ConfiguredStructureFeature<?, ?>, StructureStart> pStructureStarts) {
|
||||
public void setAllStarts(Map<Structure, StructureStart> 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<ConfiguredStructureFeature<?, ?>, LongSet> getAllReferences() {
|
||||
public Map<Structure, LongSet> getAllReferences() {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAllReferences(Map<ConfiguredStructureFeature<?, ?>, LongSet> pStructureReferences) {
|
||||
public void setAllReferences(Map<Structure, LongSet> structureReferences) {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -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> T getData(ModelProperty<T> prop) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T setData(ModelProperty<T> prop, T data) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -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) {}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue