mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2025-02-10 20:25:03 +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'))
|
println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch'))
|
||||||
minecraft {
|
minecraft {
|
||||||
mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}"
|
// mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}"
|
||||||
|
mappings channel: 'official', version: "${minecraft_version}"
|
||||||
|
|
||||||
runs {
|
runs {
|
||||||
client {
|
client {
|
||||||
|
@ -199,6 +199,6 @@ curseforge {
|
||||||
changelog = file('changelog.txt')
|
changelog = file('changelog.txt')
|
||||||
releaseType = project.curse_type
|
releaseType = project.curse_type
|
||||||
mainArtifact jar
|
mainArtifact jar
|
||||||
addGameVersion '1.18.2'
|
addGameVersion '1.19'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,9 @@ org.gradle.daemon = false
|
||||||
|
|
||||||
# mod version info
|
# mod version info
|
||||||
mod_version = 0.6.4
|
mod_version = 0.6.4
|
||||||
mc_update_version = 1.18
|
mc_update_version = 1.19
|
||||||
minecraft_version = 1.18.2
|
minecraft_version = 1.19
|
||||||
forge_version = 40.1.60
|
forge_version = 41.0.94
|
||||||
|
|
||||||
# build dependency versions
|
# build dependency versions
|
||||||
forgegradle_version = 5.1.+
|
forgegradle_version = 5.1.+
|
||||||
|
|
|
@ -17,8 +17,9 @@ import com.jozufozu.flywheel.mixin.PausedPartialTickAccessor;
|
||||||
import com.jozufozu.flywheel.vanilla.VanillaInstances;
|
import com.jozufozu.flywheel.vanilla.VanillaInstances;
|
||||||
import com.mojang.logging.LogUtils;
|
import com.mojang.logging.LogUtils;
|
||||||
|
|
||||||
import net.minecraft.commands.synchronization.ArgumentTypes;
|
import net.minecraft.commands.synchronization.ArgumentTypeInfos;
|
||||||
import net.minecraft.commands.synchronization.EmptyArgumentSerializer;
|
import net.minecraft.commands.synchronization.SingletonArgumentInfo;
|
||||||
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
@ -28,9 +29,9 @@ import net.minecraftforge.fml.DistExecutor;
|
||||||
import net.minecraftforge.fml.IExtensionPoint;
|
import net.minecraftforge.fml.IExtensionPoint;
|
||||||
import net.minecraftforge.fml.ModLoadingContext;
|
import net.minecraftforge.fml.ModLoadingContext;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
|
||||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||||
import net.minecraftforge.network.NetworkConstants;
|
import net.minecraftforge.network.NetworkConstants;
|
||||||
|
import net.minecraftforge.registries.RegisterEvent;
|
||||||
|
|
||||||
@Mod(Flywheel.ID)
|
@Mod(Flywheel.ID)
|
||||||
public class Flywheel {
|
public class Flywheel {
|
||||||
|
@ -50,7 +51,7 @@ public class Flywheel {
|
||||||
IEventBus forgeEventBus = MinecraftForge.EVENT_BUS;
|
IEventBus forgeEventBus = MinecraftForge.EVENT_BUS;
|
||||||
IEventBus modEventBus = FMLJavaModLoadingContext.get()
|
IEventBus modEventBus = FMLJavaModLoadingContext.get()
|
||||||
.getModEventBus();
|
.getModEventBus();
|
||||||
modEventBus.addListener(Flywheel::setup);
|
modEventBus.addListener(Flywheel::registerArgumentTypes);
|
||||||
|
|
||||||
FlwConfig.init();
|
FlwConfig.init();
|
||||||
|
|
||||||
|
@ -87,8 +88,10 @@ public class Flywheel {
|
||||||
LOGGER.debug("Successfully loaded {}", PausedPartialTickAccessor.class.getName());
|
LOGGER.debug("Successfully loaded {}", PausedPartialTickAccessor.class.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setup(final FMLCommonSetupEvent event) {
|
private static void registerArgumentTypes(RegisterEvent event) {
|
||||||
ArgumentTypes.register(rl("engine").toString(), BackendTypeArgument.class, new EmptyArgumentSerializer<>(BackendTypeArgument::getInstance));
|
event.register(Registry.COMMAND_ARGUMENT_TYPE_REGISTRY, rl("engine"), () -> {
|
||||||
|
return ArgumentTypeInfos.registerByClass(BackendTypeArgument.class, SingletonArgumentInfo.contextFree(BackendTypeArgument::getInstance));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ArtifactVersion getVersion() {
|
public static ArtifactVersion getVersion() {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.jozufozu.flywheel.backend;
|
package com.jozufozu.flywheel.backend;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.io.InputStream;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -93,13 +93,11 @@ public class Loader implements ResourceManagerReloadListener {
|
||||||
private void loadProgramSpecs(ResourceManager manager) {
|
private void loadProgramSpecs(ResourceManager manager) {
|
||||||
programs.clear();
|
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) {
|
programSpecs.forEach((location, resource) -> {
|
||||||
try {
|
try (InputStream inputStream = resource.open()) {
|
||||||
Resource file = manager.getResource(location);
|
String s = StringUtil.readToString(inputStream);
|
||||||
|
|
||||||
String s = StringUtil.readToString(file.getInputStream());
|
|
||||||
|
|
||||||
ResourceLocation specName = ResourceUtil.trim(location, PROGRAM_DIR, ".json");
|
ResourceLocation specName = ResourceUtil.trim(location, PROGRAM_DIR, ".json");
|
||||||
|
|
||||||
|
@ -119,7 +117,7 @@ public class Loader implements ResourceManagerReloadListener {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Backend.LOGGER.error("Could not load program " + location, 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 com.mojang.brigadier.suggestion.SuggestionsBuilder;
|
||||||
|
|
||||||
import net.minecraft.commands.SharedSuggestionProvider;
|
import net.minecraft.commands.SharedSuggestionProvider;
|
||||||
import net.minecraft.network.chat.TranslatableComponent;
|
import net.minecraft.network.chat.Component;
|
||||||
|
|
||||||
public enum BackendTypeArgument implements ArgumentType<BackendType> {
|
public enum BackendTypeArgument implements ArgumentType<BackendType> {
|
||||||
INSTANCE;
|
INSTANCE;
|
||||||
|
|
||||||
private static final Dynamic2CommandExceptionType INVALID = new Dynamic2CommandExceptionType((found, constants) -> {
|
private static final Dynamic2CommandExceptionType INVALID = new Dynamic2CommandExceptionType((found, constants) -> {
|
||||||
// TODO: don't steal lang
|
// 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
|
@Override
|
||||||
|
|
|
@ -16,10 +16,8 @@ import net.minecraft.commands.CommandSourceStack;
|
||||||
import net.minecraft.commands.Commands;
|
import net.minecraft.commands.Commands;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.network.chat.MutableComponent;
|
import net.minecraft.network.chat.MutableComponent;
|
||||||
import net.minecraft.network.chat.TextComponent;
|
|
||||||
import net.minecraftforge.client.event.RegisterClientCommandsEvent;
|
import net.minecraftforge.client.event.RegisterClientCommandsEvent;
|
||||||
import net.minecraftforge.common.ForgeConfigSpec.ConfigValue;
|
import net.minecraftforge.common.ForgeConfigSpec.ConfigValue;
|
||||||
import net.minecraftforge.fml.ModList;
|
|
||||||
|
|
||||||
public class FlwCommands {
|
public class FlwCommands {
|
||||||
public static void registerClientCommands(RegisterClientCommandsEvent event) {
|
public static void registerClientCommands(RegisterClientCommandsEvent event) {
|
||||||
|
@ -56,14 +54,14 @@ public class FlwCommands {
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
if (player == null) return;
|
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);
|
player.displayClientMessage(text, false);
|
||||||
},
|
},
|
||||||
(source, bool) -> {
|
(source, bool) -> {
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
if (player == null) return;
|
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);
|
player.displayClientMessage(text, false);
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
|
@ -73,14 +71,14 @@ public class FlwCommands {
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
if (player == null) return;
|
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);
|
player.displayClientMessage(text, false);
|
||||||
},
|
},
|
||||||
(source, bool) -> {
|
(source, bool) -> {
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
if (player == null) return;
|
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);
|
player.displayClientMessage(text, false);
|
||||||
|
|
||||||
Backend.reloadWorldRenderers();
|
Backend.reloadWorldRenderers();
|
||||||
|
@ -111,14 +109,14 @@ public class FlwCommands {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MutableComponent boolToText(boolean b) {
|
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) {
|
public static Component getEngineMessage(@NotNull BackendType type) {
|
||||||
return switch (type) {
|
return switch (type) {
|
||||||
case OFF -> new TextComponent("Disabled Flywheel").withStyle(ChatFormatting.RED);
|
case OFF -> Component.literal("Disabled Flywheel").withStyle(ChatFormatting.RED);
|
||||||
case INSTANCING -> new TextComponent("Using Instancing Engine").withStyle(ChatFormatting.GREEN);
|
case INSTANCING -> Component.literal("Using Instancing Engine").withStyle(ChatFormatting.GREEN);
|
||||||
case BATCHING -> new TextComponent("Using Batching 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.client.resources.model.BakedModel;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraftforge.client.event.ModelBakeEvent;
|
import net.minecraftforge.client.event.ModelEvent;
|
||||||
import net.minecraftforge.client.event.ModelRegistryEvent;
|
|
||||||
import net.minecraftforge.client.model.ForgeModelBakery;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A helper class for loading and accessing json models.
|
* A helper class for loading and accessing json models.
|
||||||
|
@ -30,23 +28,23 @@ public class PartialModel {
|
||||||
protected BakedModel bakedModel;
|
protected BakedModel bakedModel;
|
||||||
|
|
||||||
public PartialModel(ResourceLocation modelLocation) {
|
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;
|
this.modelLocation = modelLocation;
|
||||||
ALL.add(this);
|
ALL.add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void onModelRegistry(ModelRegistryEvent event) {
|
public static void onModelRegistry(ModelEvent.RegisterAdditional event) {
|
||||||
for (PartialModel partial : ALL)
|
for (PartialModel partial : ALL)
|
||||||
ForgeModelBakery.addSpecialModel(partial.getLocation());
|
event.register(partial.getLocation());
|
||||||
|
|
||||||
tooLate = true;
|
tooLate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void onModelBake(ModelBakeEvent event) {
|
public static void onModelBake(ModelEvent.BakingCompleted event) {
|
||||||
Map<ResourceLocation, BakedModel> modelRegistry = event.getModelRegistry();
|
Map<ResourceLocation, BakedModel> models = event.getModels();
|
||||||
for (PartialModel partial : ALL)
|
for (PartialModel partial : ALL)
|
||||||
partial.set(modelRegistry.get(partial.getLocation()));
|
partial.set(models.get(partial.getLocation()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void set(BakedModel bakedModel) {
|
protected void set(BakedModel bakedModel) {
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
|
|
||||||
package com.jozufozu.flywheel.core.model;
|
package com.jozufozu.flywheel.core.model;
|
||||||
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import com.jozufozu.flywheel.core.virtual.VirtualEmptyBlockGetter;
|
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.PoseStack;
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
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.renderer.texture.OverlayTexture;
|
||||||
import net.minecraft.client.resources.model.BakedModel;
|
import net.minecraft.client.resources.model.BakedModel;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.util.RandomSource;
|
||||||
import net.minecraft.world.level.BlockAndTintGetter;
|
import net.minecraft.world.level.BlockAndTintGetter;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
@ -42,7 +40,7 @@ public final class BakedModelBuilder implements Bufferable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void bufferInto(ModelBlockRenderer blockRenderer, VertexConsumer consumer, Random random) {
|
public void bufferInto(ModelBlockRenderer blockRenderer, VertexConsumer consumer, RandomSource random) {
|
||||||
blockRenderer.tesselateBlock(renderWorld, model, referenceState, BlockPos.ZERO, poseStack, consumer, false, random, 42, OverlayTexture.NO_OVERLAY, VirtualEmptyModelData.INSTANCE);
|
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;
|
package com.jozufozu.flywheel.core.model;
|
||||||
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.block.ModelBlockRenderer;
|
import net.minecraft.client.renderer.block.ModelBlockRenderer;
|
||||||
|
import net.minecraft.util.RandomSource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An interface for objects that can "rendered" into a BufferBuilder.
|
* An interface for objects that can "rendered" into a BufferBuilder.
|
||||||
*/
|
*/
|
||||||
public interface Bufferable {
|
public interface Bufferable {
|
||||||
void bufferInto(ModelBlockRenderer renderer, VertexConsumer consumer, Random random);
|
void bufferInto(ModelBlockRenderer renderer, VertexConsumer consumer, RandomSource random);
|
||||||
|
|
||||||
default ShadeSeparatedBufferBuilder build() {
|
default ShadeSeparatedBufferBuilder build() {
|
||||||
return ModelUtil.getBufferBuilder(this);
|
return ModelUtil.getBufferBuilder(this);
|
||||||
|
|
|
@ -2,7 +2,6 @@ package com.jozufozu.flywheel.core.model;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Random;
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.jozufozu.flywheel.Flywheel;
|
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.renderer.block.ModelBlockRenderer;
|
||||||
import net.minecraft.client.resources.model.BakedModel;
|
import net.minecraft.client.resources.model.BakedModel;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
|
import net.minecraft.util.RandomSource;
|
||||||
import net.minecraft.world.level.BlockAndTintGetter;
|
import net.minecraft.world.level.BlockAndTintGetter;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
|
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;
|
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
||||||
|
|
||||||
public class ModelUtil {
|
public class ModelUtil {
|
||||||
|
@ -30,6 +32,9 @@ public class ModelUtil {
|
||||||
*/
|
*/
|
||||||
public static final BlockRenderDispatcher VANILLA_RENDERER = createVanillaRenderer();
|
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 final ThreadLocal<ThreadLocalObjects> THREAD_LOCAL_OBJECTS = ThreadLocal.withInitial(ThreadLocalObjects::new);
|
||||||
|
|
||||||
private static BlockRenderDispatcher createVanillaRenderer() {
|
private static BlockRenderDispatcher createVanillaRenderer() {
|
||||||
|
@ -99,7 +104,7 @@ public class ModelUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ThreadLocalObjects {
|
private static class ThreadLocalObjects {
|
||||||
public final Random random = new Random();
|
public final RandomSource random = RandomSource.create();
|
||||||
public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer();
|
public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer();
|
||||||
public final ShadeSeparatedBufferBuilder separatedBufferBuilder = new ShadeSeparatedBufferBuilder(512);
|
public final ShadeSeparatedBufferBuilder separatedBufferBuilder = new ShadeSeparatedBufferBuilder(512);
|
||||||
public final BufferBuilder unshadedBuilder = new BufferBuilder(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.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import com.jozufozu.flywheel.core.virtual.VirtualEmptyBlockGetter;
|
import com.jozufozu.flywheel.core.virtual.VirtualEmptyBlockGetter;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.ItemBlockRenderTypes;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.client.renderer.block.ModelBlockRenderer;
|
import net.minecraft.client.renderer.block.ModelBlockRenderer;
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||||
|
import net.minecraft.client.resources.model.BakedModel;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.util.RandomSource;
|
||||||
import net.minecraft.world.level.BlockAndTintGetter;
|
import net.minecraft.world.level.BlockAndTintGetter;
|
||||||
import net.minecraft.world.level.block.RenderShape;
|
import net.minecraft.world.level.block.RenderShape;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
|
||||||
import net.minecraftforge.client.ForgeHooksClient;
|
import net.minecraftforge.client.model.data.ModelData;
|
||||||
import net.minecraftforge.client.model.data.EmptyModelData;
|
|
||||||
import net.minecraftforge.client.model.data.IModelData;
|
|
||||||
|
|
||||||
public final class WorldModelBuilder implements Bufferable {
|
public final class WorldModelBuilder implements Bufferable {
|
||||||
private final RenderType layer;
|
private final RenderType layer;
|
||||||
|
|
||||||
private PoseStack poseStack = new PoseStack();
|
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 BlockAndTintGetter renderWorld = VirtualEmptyBlockGetter.INSTANCE;
|
||||||
private Collection<StructureTemplate.StructureBlockInfo> blocks = Collections.emptyList();
|
private Collection<StructureTemplate.StructureBlockInfo> blocks = Collections.emptyList();
|
||||||
|
|
||||||
|
@ -35,26 +33,25 @@ public final class WorldModelBuilder implements Bufferable {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void bufferInto(ModelBlockRenderer modelRenderer, VertexConsumer consumer, Random random) {
|
public void bufferInto(ModelBlockRenderer modelRenderer, VertexConsumer consumer, RandomSource random) {
|
||||||
ForgeHooksClient.setRenderType(this.layer);
|
|
||||||
ModelBlockRenderer.enableCaching();
|
ModelBlockRenderer.enableCaching();
|
||||||
for (StructureTemplate.StructureBlockInfo info : this.blocks) {
|
for (StructureTemplate.StructureBlockInfo info : this.blocks) {
|
||||||
BlockState state = info.state;
|
BlockState state = info.state;
|
||||||
|
|
||||||
if (state.getRenderShape() != RenderShape.MODEL) continue;
|
if (state.getRenderShape() != RenderShape.MODEL) continue;
|
||||||
if (!ItemBlockRenderTypes.canRenderInLayer(state, this.layer)) continue;
|
|
||||||
|
|
||||||
BlockPos pos = info.pos;
|
BlockPos pos = info.pos;
|
||||||
|
long randomSeed = state.getSeed(pos);
|
||||||
IModelData data = this.modelData.getOrDefault(pos, EmptyModelData.INSTANCE);
|
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.pushPose();
|
||||||
poseStack.translate(pos.getX(), pos.getY(), pos.getZ());
|
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();
|
poseStack.popPose();
|
||||||
}
|
}
|
||||||
ModelBlockRenderer.clearCache();
|
ModelBlockRenderer.clearCache();
|
||||||
ForgeHooksClient.setRenderType(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -70,7 +67,7 @@ public final class WorldModelBuilder implements Bufferable {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WorldModelBuilder withModelData(Map<BlockPos, IModelData> modelData) {
|
public WorldModelBuilder withModelData(Map<BlockPos, ModelData> modelData) {
|
||||||
this.modelData = modelData;
|
this.modelData = modelData;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package com.jozufozu.flywheel.core.source;
|
package com.jozufozu.flywheel.core.source;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -28,18 +28,17 @@ public class ShaderSources implements SourceFinder {
|
||||||
public final Index index;
|
public final Index index;
|
||||||
|
|
||||||
public ShaderSources(ResourceManager manager) {
|
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) {
|
for (String ext : EXTENSIONS) {
|
||||||
if (s.endsWith(ext)) return true;
|
if (path.endsWith(ext)) return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
for (ResourceLocation location : allShaders) {
|
allShaders.forEach((location, resource) -> {
|
||||||
try {
|
try (InputStream inputStream = resource.open()) {
|
||||||
Resource resource = manager.getResource(location);
|
String source = StringUtil.readToString(inputStream);
|
||||||
|
|
||||||
String source = StringUtil.readToString(resource.getInputStream());
|
|
||||||
|
|
||||||
ResourceLocation name = ResourceUtil.removePrefixUnchecked(location, SHADER_DIR);
|
ResourceLocation name = ResourceUtil.removePrefixUnchecked(location, SHADER_DIR);
|
||||||
|
|
||||||
|
@ -47,7 +46,7 @@ public class ShaderSources implements SourceFinder {
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
index = new Index(shaderSources);
|
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.LevelChunkSection;
|
||||||
import net.minecraft.world.level.chunk.UpgradeData;
|
import net.minecraft.world.level.chunk.UpgradeData;
|
||||||
import net.minecraft.world.level.levelgen.Heightmap;
|
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.levelgen.structure.StructureStart;
|
||||||
import net.minecraft.world.level.material.Fluid;
|
import net.minecraft.world.level.material.Fluid;
|
||||||
import net.minecraft.world.level.material.FluidState;
|
import net.minecraft.world.level.material.FluidState;
|
||||||
|
@ -192,41 +192,78 @@ public class VirtualChunk extends ChunkAccess {
|
||||||
return null;
|
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
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public StructureStart getStartForFeature(ConfiguredStructureFeature<?, ?> pStructure) {
|
public StructureStart getStartForStructure(Structure structure) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setStartForFeature(ConfiguredStructureFeature<?, ?> pStructure, StructureStart pStart) {
|
public void setStartForStructure(Structure structure, StructureStart start) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<ConfiguredStructureFeature<?, ?>, StructureStart> getAllStarts() {
|
public Map<Structure, StructureStart> getAllStarts() {
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAllStarts(Map<ConfiguredStructureFeature<?, ?>, StructureStart> pStructureStarts) {
|
public void setAllStarts(Map<Structure, StructureStart> structureStarts) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LongSet getReferencesForFeature(ConfiguredStructureFeature<?, ?> pStructure) {
|
public LongSet getReferencesForStructure(Structure structure) {
|
||||||
return LongSets.emptySet();
|
return LongSets.emptySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addReferenceForFeature(ConfiguredStructureFeature<?, ?> pStructure, long pReference) {
|
public void addReferenceForStructure(Structure structure, long reference) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<ConfiguredStructureFeature<?, ?>, LongSet> getAllReferences() {
|
public Map<Structure, LongSet> getAllReferences() {
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAllReferences(Map<ConfiguredStructureFeature<?, ?>, LongSet> pStructureReferences) {
|
public void setAllReferences(Map<Structure, LongSet> structureReferences) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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.chunk.LevelChunk;
|
||||||
import net.minecraft.world.level.entity.LevelEntityGetter;
|
import net.minecraft.world.level.entity.LevelEntityGetter;
|
||||||
import net.minecraft.world.level.gameevent.GameEvent;
|
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.lighting.LevelLightEngine;
|
||||||
import net.minecraft.world.level.material.Fluid;
|
import net.minecraft.world.level.material.Fluid;
|
||||||
import net.minecraft.world.level.saveddata.maps.MapItemSavedData;
|
import net.minecraft.world.level.saveddata.maps.MapItemSavedData;
|
||||||
import net.minecraft.world.level.storage.WritableLevelData;
|
import net.minecraft.world.level.storage.WritableLevelData;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraft.world.scores.Scoreboard;
|
import net.minecraft.world.scores.Scoreboard;
|
||||||
import net.minecraft.world.ticks.LevelTickAccess;
|
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) {
|
public VirtualRenderWorld(Level level, Vec3i biomeOffset, int height, int minBuildHeight) {
|
||||||
super((WritableLevelData) level.getLevelData(), level.dimension(), level.dimensionTypeRegistration(), level::getProfiler,
|
super((WritableLevelData) level.getLevelData(), level.dimension(), level.dimensionTypeRegistration(), level::getProfiler,
|
||||||
true, false, 0);
|
true, false, 0, 0);
|
||||||
this.biomeOffset = biomeOffset;
|
this.biomeOffset = biomeOffset;
|
||||||
this.level = level;
|
this.level = level;
|
||||||
this.height = nextMultipleOf16(height);
|
this.height = nextMultipleOf16(height);
|
||||||
|
@ -294,6 +296,17 @@ public class VirtualRenderWorld extends Level implements FlywheelWorld {
|
||||||
@Override
|
@Override
|
||||||
public void levelEvent(@Nullable Player player, int type, BlockPos pos, int data) {}
|
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
|
@Override
|
||||||
public void playSound(@Nullable Player player, double x, double y, double z, SoundEvent soundIn,
|
public void playSound(@Nullable Player player, double x, double y, double z, SoundEvent soundIn,
|
||||||
SoundSource category, float volume, float pitch) {}
|
SoundSource category, float volume, float pitch) {}
|
||||||
|
|
|
@ -4,8 +4,8 @@ import com.jozufozu.flywheel.backend.Backend;
|
||||||
import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher;
|
import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher;
|
||||||
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
import net.minecraftforge.event.entity.EntityJoinLevelEvent;
|
||||||
import net.minecraftforge.event.entity.EntityLeaveWorldEvent;
|
import net.minecraftforge.event.entity.EntityLeaveLevelEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
|
||||||
|
@ -13,14 +13,14 @@ import net.minecraftforge.fml.common.Mod;
|
||||||
public class EntityWorldHandler {
|
public class EntityWorldHandler {
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onEntityJoinWorld(EntityJoinWorldEvent event) {
|
public static void onEntityJoinWorld(EntityJoinLevelEvent event) {
|
||||||
if (event.getWorld().isClientSide && Backend.isOn()) InstancedRenderDispatcher.getEntities(event.getWorld())
|
if (event.getLevel().isClientSide && Backend.isOn()) InstancedRenderDispatcher.getEntities(event.getLevel())
|
||||||
.queueAdd(event.getEntity());
|
.queueAdd(event.getEntity());
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onEntityLeaveWorld(EntityLeaveWorldEvent event) {
|
public static void onEntityLeaveWorld(EntityLeaveLevelEvent event) {
|
||||||
if (event.getWorld().isClientSide && Backend.isOn()) InstancedRenderDispatcher.getEntities(event.getWorld())
|
if (event.getLevel().isClientSide && Backend.isOn()) InstancedRenderDispatcher.getEntities(event.getLevel())
|
||||||
.remove(event.getEntity());
|
.remove(event.getEntity());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,9 +7,9 @@ import com.jozufozu.flywheel.util.WorldAttached;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
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.TickEvent;
|
||||||
import net.minecraftforge.event.world.WorldEvent;
|
import net.minecraftforge.event.level.LevelEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
|
||||||
|
@ -17,17 +17,15 @@ import net.minecraftforge.fml.common.Mod;
|
||||||
public class ForgeEvents {
|
public class ForgeEvents {
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void addToDebugScreen(RenderGameOverlayEvent.Text event) {
|
public static void addToDebugScreen(CustomizeGuiOverlayEvent.DebugText event) {
|
||||||
|
|
||||||
if (Minecraft.getInstance().options.renderDebug) {
|
if (Minecraft.getInstance().options.renderDebug) {
|
||||||
|
|
||||||
InstancedRenderDispatcher.getDebugString(event.getRight());
|
InstancedRenderDispatcher.getDebugString(event.getRight());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void unloadWorld(WorldEvent.Unload event) {
|
public static void unloadWorld(LevelEvent.Unload event) {
|
||||||
WorldAttached.invalidateWorld(event.getWorld());
|
WorldAttached.invalidateWorld(event.getLevel());
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.jozufozu.flywheel.util;
|
package com.jozufozu.flywheel.util;
|
||||||
|
|
||||||
import net.minecraftforge.client.model.pipeline.LightUtil;
|
import net.minecraftforge.client.model.lighting.QuadLighter;
|
||||||
|
|
||||||
public class RenderMath {
|
public class RenderMath {
|
||||||
|
|
||||||
|
@ -74,13 +74,13 @@ public class RenderMath {
|
||||||
if (!shaded) {
|
if (!shaded) {
|
||||||
return 1f;
|
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) {
|
public static float diffuseLightNether(float x, float y, float z, boolean shaded) {
|
||||||
if (!shaded) {
|
if (!shaded) {
|
||||||
return 0.9f;
|
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