mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-15 22:13:40 +01:00
Fix Flywheel contraption lighting
- Fix some events being registered to the wrong event bus - Organize some event registration - Fully fix FluidRenderer
This commit is contained in:
parent
2078899ed9
commit
795ef07b38
13 changed files with 104 additions and 94 deletions
|
@ -11,7 +11,6 @@ import com.simibubi.create.api.behaviour.BlockSpoutingBehaviour;
|
||||||
import com.simibubi.create.content.CreateItemGroup;
|
import com.simibubi.create.content.CreateItemGroup;
|
||||||
import com.simibubi.create.content.contraptions.TorquePropagator;
|
import com.simibubi.create.content.contraptions.TorquePropagator;
|
||||||
import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineModifiers;
|
import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineModifiers;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.CapabilityMinecartController;
|
|
||||||
import com.simibubi.create.content.curiosities.weapons.BuiltinPotatoProjectileTypes;
|
import com.simibubi.create.content.curiosities.weapons.BuiltinPotatoProjectileTypes;
|
||||||
import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler;
|
import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler;
|
||||||
import com.simibubi.create.content.palettes.AllPaletteBlocks;
|
import com.simibubi.create.content.palettes.AllPaletteBlocks;
|
||||||
|
@ -45,8 +44,6 @@ import net.minecraft.world.level.levelgen.placement.FeatureDecorator;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.common.ForgeMod;
|
import net.minecraftforge.common.ForgeMod;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent;
|
|
||||||
import net.minecraftforge.event.world.BiomeLoadingEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.EventPriority;
|
import net.minecraftforge.eventbus.api.EventPriority;
|
||||||
import net.minecraftforge.eventbus.api.IEventBus;
|
import net.minecraftforge.eventbus.api.IEventBus;
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
@ -112,16 +109,13 @@ public class Create {
|
||||||
IEventBus forgeEventBus = MinecraftForge.EVENT_BUS;
|
IEventBus forgeEventBus = MinecraftForge.EVENT_BUS;
|
||||||
|
|
||||||
modEventBus.addListener(Create::init);
|
modEventBus.addListener(Create::init);
|
||||||
|
modEventBus.addListener(EventPriority.LOWEST, Create::gatherData);
|
||||||
modEventBus.addGenericListener(Feature.class, AllWorldFeatures::registerOreFeatures);
|
modEventBus.addGenericListener(Feature.class, AllWorldFeatures::registerOreFeatures);
|
||||||
modEventBus.addGenericListener(FeatureDecorator.class, AllWorldFeatures::registerDecoratorFeatures);
|
modEventBus.addGenericListener(FeatureDecorator.class, AllWorldFeatures::registerDecoratorFeatures);
|
||||||
modEventBus.addGenericListener(RecipeSerializer.class, AllRecipeTypes::register);
|
modEventBus.addGenericListener(RecipeSerializer.class, AllRecipeTypes::register);
|
||||||
modEventBus.addGenericListener(ParticleType.class, AllParticleTypes::register);
|
modEventBus.addGenericListener(ParticleType.class, AllParticleTypes::register);
|
||||||
modEventBus.addGenericListener(SoundEvent.class, AllSoundEvents::register);
|
modEventBus.addGenericListener(SoundEvent.class, AllSoundEvents::register);
|
||||||
modEventBus.addListener(AllConfigs::onLoad);
|
|
||||||
modEventBus.addListener(AllConfigs::onReload);
|
|
||||||
modEventBus.addListener(EventPriority.LOWEST, Create::gatherData);
|
|
||||||
|
|
||||||
forgeEventBus.addListener(EventPriority.HIGH, Create::onBiomeLoad);
|
|
||||||
forgeEventBus.register(CHUNK_UTIL);
|
forgeEventBus.register(CHUNK_UTIL);
|
||||||
|
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT,
|
DistExecutor.unsafeRunWhenOn(Dist.CLIENT,
|
||||||
|
@ -153,14 +147,6 @@ public class Create {
|
||||||
ProcessingRecipeGen.registerAll(gen);
|
ProcessingRecipeGen.registerAll(gen);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerCapabilities(RegisterCapabilitiesEvent event) {
|
|
||||||
event.register(CapabilityMinecartController.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void onBiomeLoad(BiomeLoadingEvent event) {
|
|
||||||
AllWorldFeatures.reload(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static CreateRegistrate registrate() {
|
public static CreateRegistrate registrate() {
|
||||||
return REGISTRATE.get();
|
return REGISTRATE.get();
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,9 +10,7 @@ import com.simibubi.create.content.curiosities.zapper.ZapperRenderHandler;
|
||||||
import com.simibubi.create.content.schematics.ClientSchematicLoader;
|
import com.simibubi.create.content.schematics.ClientSchematicLoader;
|
||||||
import com.simibubi.create.content.schematics.client.SchematicAndQuillHandler;
|
import com.simibubi.create.content.schematics.client.SchematicAndQuillHandler;
|
||||||
import com.simibubi.create.content.schematics.client.SchematicHandler;
|
import com.simibubi.create.content.schematics.client.SchematicHandler;
|
||||||
import com.simibubi.create.events.ClientEvents;
|
|
||||||
import com.simibubi.create.foundation.ClientResourceReloadListener;
|
import com.simibubi.create.foundation.ClientResourceReloadListener;
|
||||||
import com.simibubi.create.foundation.block.render.SpriteShifter;
|
|
||||||
import com.simibubi.create.foundation.config.AllConfigs;
|
import com.simibubi.create.foundation.config.AllConfigs;
|
||||||
import com.simibubi.create.foundation.gui.UIRenderHelper;
|
import com.simibubi.create.foundation.gui.UIRenderHelper;
|
||||||
import com.simibubi.create.foundation.ponder.content.PonderIndex;
|
import com.simibubi.create.foundation.ponder.content.PonderIndex;
|
||||||
|
@ -58,9 +56,6 @@ public class CreateClient {
|
||||||
|
|
||||||
public static void onCtorClient(IEventBus modEventBus, IEventBus forgeEventBus) {
|
public static void onCtorClient(IEventBus modEventBus, IEventBus forgeEventBus) {
|
||||||
modEventBus.addListener(CreateClient::clientInit);
|
modEventBus.addListener(CreateClient::clientInit);
|
||||||
modEventBus.addListener(ClientEvents::loadCompleted);
|
|
||||||
modEventBus.addListener(SpriteShifter::onTextureStitchPre);
|
|
||||||
modEventBus.addListener(SpriteShifter::onTextureStitchPost);
|
|
||||||
modEventBus.addListener(AllParticleTypes::registerFactories);
|
modEventBus.addListener(AllParticleTypes::registerFactories);
|
||||||
modEventBus.addListener(CreateContexts::flwInit);
|
modEventBus.addListener(CreateContexts::flwInit);
|
||||||
modEventBus.addListener(AllMaterialSpecs::flwInit);
|
modEventBus.addListener(AllMaterialSpecs::flwInit);
|
||||||
|
|
|
@ -32,6 +32,7 @@ import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.LightLayer;
|
import net.minecraft.world.level.LightLayer;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
@ -110,7 +111,7 @@ public class ContraptionRenderDispatcher {
|
||||||
for (StructureTemplate.StructureBlockInfo info : c.getBlocks()
|
for (StructureTemplate.StructureBlockInfo info : c.getBlocks()
|
||||||
.values())
|
.values())
|
||||||
// Skip individual lighting updates to prevent lag with large contraptions
|
// Skip individual lighting updates to prevent lag with large contraptions
|
||||||
renderWorld.setBlock(info.pos, info.state, 128);
|
renderWorld.setBlock(info.pos, info.state, Block.UPDATE_SUPPRESS_LIGHT);
|
||||||
|
|
||||||
renderWorld.updateLightSources();
|
renderWorld.updateLightSources();
|
||||||
renderWorld.lighter.runUpdates(Integer.MAX_VALUE, false, false);
|
renderWorld.lighter.runUpdates(Integer.MAX_VALUE, false, false);
|
||||||
|
|
|
@ -93,7 +93,7 @@ import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
|
||||||
import net.minecraftforge.fmlclient.ConfigGuiHandler;
|
import net.minecraftforge.fmlclient.ConfigGuiHandler;
|
||||||
|
|
||||||
@EventBusSubscriber(value = Dist.CLIENT)
|
@EventBusSubscriber(Dist.CLIENT)
|
||||||
public class ClientEvents {
|
public class ClientEvents {
|
||||||
|
|
||||||
private static final String ITEM_PREFIX = "item." + Create.ID;
|
private static final String ITEM_PREFIX = "item." + Create.ID;
|
||||||
|
@ -341,23 +341,29 @@ public class ClientEvents {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
|
||||||
public static void registerClientReloadListeners(RegisterClientReloadListenersEvent event) {
|
public static class ModBusEvents {
|
||||||
event.registerReloadListener(CreateClient.RESOURCE_RELOAD_LISTENER);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void addEntityRendererLayers(EntityRenderersEvent.AddLayers event) {
|
public static void registerClientReloadListeners(RegisterClientReloadListenersEvent event) {
|
||||||
EntityRenderDispatcher dispatcher = Minecraft.getInstance().getEntityRenderDispatcher();
|
event.registerReloadListener(CreateClient.RESOURCE_RELOAD_LISTENER);
|
||||||
CopperBacktankArmorLayer.registerOnAll(dispatcher);
|
}
|
||||||
}
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void addEntityRendererLayers(EntityRenderersEvent.AddLayers event) {
|
||||||
|
EntityRenderDispatcher dispatcher = Minecraft.getInstance().getEntityRenderDispatcher();
|
||||||
|
CopperBacktankArmorLayer.registerOnAll(dispatcher);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void loadCompleted(FMLLoadCompleteEvent event) {
|
||||||
|
ModContainer createContainer = ModList.get()
|
||||||
|
.getModContainerById(Create.ID)
|
||||||
|
.orElseThrow(() -> new IllegalStateException("Create Mod Container missing after loadCompleted"));
|
||||||
|
createContainer.registerExtensionPoint(ConfigGuiHandler.ConfigGuiFactory.class,
|
||||||
|
() -> new ConfigGuiHandler.ConfigGuiFactory((mc, previousScreen) -> BaseConfigScreen.forCreate(previousScreen)));
|
||||||
|
}
|
||||||
|
|
||||||
public static void loadCompleted(FMLLoadCompleteEvent event) {
|
|
||||||
ModContainer createContainer = ModList.get()
|
|
||||||
.getModContainerById(Create.ID)
|
|
||||||
.orElseThrow(() -> new IllegalStateException("Create Mod Container missing after loadCompleted"));
|
|
||||||
createContainer.registerExtensionPoint(ConfigGuiHandler.ConfigGuiFactory.class,
|
|
||||||
() -> new ConfigGuiHandler.ConfigGuiFactory((mc, previousScreen) -> BaseConfigScreen.forCreate(previousScreen)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ import com.simibubi.create.foundation.utility.Iterate;
|
||||||
import com.simibubi.create.foundation.utility.ServerSpeedProvider;
|
import com.simibubi.create.foundation.utility.ServerSpeedProvider;
|
||||||
import com.simibubi.create.foundation.utility.WorldAttached;
|
import com.simibubi.create.foundation.utility.WorldAttached;
|
||||||
import com.simibubi.create.foundation.utility.recipe.RecipeFinder;
|
import com.simibubi.create.foundation.utility.recipe.RecipeFinder;
|
||||||
|
import com.simibubi.create.foundation.worldgen.AllWorldFeatures;
|
||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
|
@ -32,6 +33,7 @@ import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.LevelAccessor;
|
import net.minecraft.world.level.LevelAccessor;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.material.FluidState;
|
import net.minecraft.world.level.material.FluidState;
|
||||||
|
import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent;
|
||||||
import net.minecraftforge.event.AddReloadListenerEvent;
|
import net.minecraftforge.event.AddReloadListenerEvent;
|
||||||
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
||||||
import net.minecraftforge.event.RegisterCommandsEvent;
|
import net.minecraftforge.event.RegisterCommandsEvent;
|
||||||
|
@ -44,8 +46,10 @@ import net.minecraftforge.event.entity.player.AttackEntityEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
|
||||||
import net.minecraftforge.event.world.BlockEvent.FluidPlaceBlockEvent;
|
import net.minecraftforge.event.world.BlockEvent.FluidPlaceBlockEvent;
|
||||||
|
import net.minecraftforge.event.world.BiomeLoadingEvent;
|
||||||
import net.minecraftforge.event.world.ChunkEvent;
|
import net.minecraftforge.event.world.ChunkEvent;
|
||||||
import net.minecraftforge.event.world.WorldEvent;
|
import net.minecraftforge.event.world.WorldEvent;
|
||||||
|
import net.minecraftforge.eventbus.api.EventPriority;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
import net.minecraftforge.fmlserverevents.FMLServerStoppingEvent;
|
import net.minecraftforge.fmlserverevents.FMLServerStoppingEvent;
|
||||||
|
@ -172,6 +176,11 @@ public class CommonEvents {
|
||||||
CapabilityMinecartController.startTracking(event);
|
CapabilityMinecartController.startTracking(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent(priority = EventPriority.HIGH)
|
||||||
|
public static void onBiomeLoad(BiomeLoadingEvent event) {
|
||||||
|
AllWorldFeatures.reload(event);
|
||||||
|
}
|
||||||
|
|
||||||
public static void leftClickEmpty(ServerPlayer player) {
|
public static void leftClickEmpty(ServerPlayer player) {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (stack.getItem() instanceof ZapperItem) {
|
if (stack.getItem() instanceof ZapperItem) {
|
||||||
|
@ -179,4 +188,14 @@ public class CommonEvents {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD)
|
||||||
|
public static class ModBusEvents {
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void registerCapabilities(RegisterCapabilitiesEvent event) {
|
||||||
|
event.register(CapabilityMinecartController.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,17 +15,17 @@ import net.minecraftforge.client.event.InputEvent.MouseScrollEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
|
||||||
@EventBusSubscriber(value = Dist.CLIENT)
|
@EventBusSubscriber(Dist.CLIENT)
|
||||||
public class InputEvents {
|
public class InputEvents {
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onKeyInput(KeyInputEvent event) {
|
public static void onKeyInput(KeyInputEvent event) {
|
||||||
int key = event.getKey();
|
|
||||||
boolean pressed = !(event.getAction() == 0);
|
|
||||||
|
|
||||||
if (Minecraft.getInstance().screen != null)
|
if (Minecraft.getInstance().screen != null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
int key = event.getKey();
|
||||||
|
boolean pressed = !(event.getAction() == 0);
|
||||||
|
|
||||||
CreateClient.SCHEMATIC_HANDLER.onKeyInput(key, pressed);
|
CreateClient.SCHEMATIC_HANDLER.onKeyInput(key, pressed);
|
||||||
ToolboxHandlerClient.onKeyInput(key, pressed);
|
ToolboxHandlerClient.onKeyInput(key, pressed);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,8 +10,12 @@ import com.simibubi.create.Create;
|
||||||
import net.minecraft.client.renderer.texture.TextureAtlas;
|
import net.minecraft.client.renderer.texture.TextureAtlas;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.inventory.InventoryMenu;
|
import net.minecraft.world.inventory.InventoryMenu;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.client.event.TextureStitchEvent;
|
import net.minecraftforge.client.event.TextureStitchEvent;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
|
||||||
|
@EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
|
||||||
public class SpriteShifter {
|
public class SpriteShifter {
|
||||||
|
|
||||||
protected static final Map<String, SpriteShiftEntry> ENTRY_CACHE = new HashMap<>();
|
protected static final Map<String, SpriteShiftEntry> ENTRY_CACHE = new HashMap<>();
|
||||||
|
@ -35,6 +39,7 @@ public class SpriteShifter {
|
||||||
return ENTRY_CACHE.values().stream().map(SpriteShiftEntry::getTargetResourceLocation).collect(Collectors.toList());
|
return ENTRY_CACHE.values().stream().map(SpriteShiftEntry::getTargetResourceLocation).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
public static void onTextureStitchPre(TextureStitchEvent.Pre event) {
|
public static void onTextureStitchPre(TextureStitchEvent.Pre event) {
|
||||||
if (!event.getMap()
|
if (!event.getMap()
|
||||||
.location()
|
.location()
|
||||||
|
@ -45,6 +50,7 @@ public class SpriteShifter {
|
||||||
.forEach(event::addSprite);
|
.forEach(event::addSprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
public static void onTextureStitchPost(TextureStitchEvent.Post event) {
|
public static void onTextureStitchPost(TextureStitchEvent.Post event) {
|
||||||
if (!event.getMap()
|
if (!event.getMap()
|
||||||
.location()
|
.location()
|
||||||
|
|
|
@ -10,10 +10,13 @@ import org.apache.commons.lang3.tuple.Pair;
|
||||||
import com.simibubi.create.foundation.block.BlockStressValues;
|
import com.simibubi.create.foundation.block.BlockStressValues;
|
||||||
|
|
||||||
import net.minecraftforge.common.ForgeConfigSpec;
|
import net.minecraftforge.common.ForgeConfigSpec;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.ModLoadingContext;
|
import net.minecraftforge.fml.ModLoadingContext;
|
||||||
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
import net.minecraftforge.fml.config.ModConfig;
|
import net.minecraftforge.fml.config.ModConfig;
|
||||||
import net.minecraftforge.fml.event.config.ModConfigEvent;
|
import net.minecraftforge.fml.event.config.ModConfigEvent;
|
||||||
|
|
||||||
|
@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD)
|
||||||
public class AllConfigs {
|
public class AllConfigs {
|
||||||
|
|
||||||
private static final Map<ModConfig.Type, ConfigBase> CONFIGS = new EnumMap<>(ModConfig.Type.class);
|
private static final Map<ModConfig.Type, ConfigBase> CONFIGS = new EnumMap<>(ModConfig.Type.class);
|
||||||
|
@ -50,6 +53,7 @@ public class AllConfigs {
|
||||||
BlockStressValues.registerProvider(context.getActiveNamespace(), SERVER.kinetics.stressValues);
|
BlockStressValues.registerProvider(context.getActiveNamespace(), SERVER.kinetics.stressValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
public static void onLoad(ModConfigEvent.Loading event) {
|
public static void onLoad(ModConfigEvent.Loading event) {
|
||||||
for (ConfigBase config : CONFIGS.values())
|
for (ConfigBase config : CONFIGS.values())
|
||||||
if (config.specification == event.getConfig()
|
if (config.specification == event.getConfig()
|
||||||
|
@ -57,6 +61,7 @@ public class AllConfigs {
|
||||||
config.onLoad();
|
config.onLoad();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
public static void onReload(ModConfigEvent.Reloading event) {
|
public static void onReload(ModConfigEvent.Reloading event) {
|
||||||
for (ConfigBase config : CONFIGS.values())
|
for (ConfigBase config : CONFIGS.values())
|
||||||
if (config.specification == event.getConfig()
|
if (config.specification == event.getConfig()
|
||||||
|
|
|
@ -30,10 +30,10 @@ import net.minecraftforge.fml.config.ModConfig;
|
||||||
public class BaseConfigScreen extends ConfigScreen {
|
public class BaseConfigScreen extends ConfigScreen {
|
||||||
|
|
||||||
public static final DelegatedStencilElement.ElementRenderer DISABLED_RENDERER = (ms, width, height, alpha) -> UIRenderHelper.angledGradient(ms, 0, 0, height / 2, height, width, Theme.p(Theme.Key.BUTTON_DISABLE));
|
public static final DelegatedStencilElement.ElementRenderer DISABLED_RENDERER = (ms, width, height, alpha) -> UIRenderHelper.angledGradient(ms, 0, 0, height / 2, height, width, Theme.p(Theme.Key.BUTTON_DISABLE));
|
||||||
private static final Map<String, UnaryOperator<BaseConfigScreen>> defaults = new HashMap<>();
|
private static final Map<String, UnaryOperator<BaseConfigScreen>> DEFAULTS = new HashMap<>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
defaults.put("create", (base) -> base
|
DEFAULTS.put(Create.ID, (base) -> base
|
||||||
.withTitles("Client Settings", "World Generation Settings", "Gameplay Settings")
|
.withTitles("Client Settings", "World Generation Settings", "Gameplay Settings")
|
||||||
.withSpecs(AllConfigs.CLIENT.specification, AllConfigs.COMMON.specification, AllConfigs.SERVER.specification)
|
.withSpecs(AllConfigs.CLIENT.specification, AllConfigs.COMMON.specification, AllConfigs.SERVER.specification)
|
||||||
);
|
);
|
||||||
|
@ -52,7 +52,7 @@ public class BaseConfigScreen extends ConfigScreen {
|
||||||
if (modID.equals(Create.ID))
|
if (modID.equals(Create.ID))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
defaults.put(modID, transform);
|
DEFAULTS.put(modID, transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BaseConfigScreen forCreate(Screen parent) {
|
public static BaseConfigScreen forCreate(Screen parent) {
|
||||||
|
@ -79,8 +79,8 @@ public class BaseConfigScreen extends ConfigScreen {
|
||||||
super(parent);
|
super(parent);
|
||||||
this.modID = modID;
|
this.modID = modID;
|
||||||
|
|
||||||
if (defaults.containsKey(modID))
|
if (DEFAULTS.containsKey(modID))
|
||||||
defaults.get(modID).apply(this);
|
DEFAULTS.get(modID).apply(this);
|
||||||
else {
|
else {
|
||||||
this.searchForSpecsInModContainer();
|
this.searchForSpecsInModContainer();
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,7 +106,6 @@ public class FluidRenderer {
|
||||||
light = (light & 0xF00000) | luminosity << 4;
|
light = (light & 0xF00000) | luminosity << 4;
|
||||||
|
|
||||||
Vec3 center = new Vec3(xMin + (xMax - xMin) / 2, yMin + (yMax - yMin) / 2, zMin + (zMax - zMin) / 2);
|
Vec3 center = new Vec3(xMin + (xMax - xMin) / 2, yMin + (yMax - yMin) / 2, zMin + (zMax - zMin) / 2);
|
||||||
MatrixTransformStack msr = MatrixTransformStack.of(ms);
|
|
||||||
ms.pushPose();
|
ms.pushPose();
|
||||||
if (fluidStack.getFluid()
|
if (fluidStack.getFluid()
|
||||||
.getAttributes()
|
.getAttributes()
|
||||||
|
@ -120,27 +119,16 @@ public class FluidRenderer {
|
||||||
if (side == Direction.DOWN && !renderBottom)
|
if (side == Direction.DOWN && !renderBottom)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
boolean positive = side.getAxisDirection() == AxisDirection.POSITIVE;
|
||||||
if (side.getAxis()
|
if (side.getAxis()
|
||||||
.isHorizontal()) {
|
.isHorizontal()) {
|
||||||
ms.pushPose();
|
boolean x = side.getAxis() == Axis.X;
|
||||||
|
renderTiledHorizontalFace(positive ? (x ? xMax : zMax) : (x ? xMin : zMin), side, x ? zMin : xMin, yMin, x ? zMax : xMax, yMax, builder,
|
||||||
if (side.getAxisDirection() == AxisDirection.NEGATIVE) {
|
|
||||||
msr.translate(center)
|
|
||||||
.rotateY(180)
|
|
||||||
.translateBack(center);
|
|
||||||
side = Direction.get(AxisDirection.POSITIVE, side.getAxis());
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean X = side.getAxis() == Axis.X;
|
|
||||||
renderTiledHorizontalFace(X ? xMax : zMax, side, X ? zMin : xMin, yMin, X ? zMax : xMax, yMax, builder,
|
|
||||||
ms, light, color, fluidTexture);
|
ms, light, color, fluidTexture);
|
||||||
|
} else {
|
||||||
ms.popPose();
|
renderTiledVerticalFace(positive ? yMax : yMin, side, xMin, zMin, xMax, zMax, builder, ms,
|
||||||
continue;
|
light, color, fluidTexture);
|
||||||
}
|
}
|
||||||
|
|
||||||
renderTiledVerticalFace(side == Direction.UP ? yMax : yMin, side, xMin, zMin, xMax, zMax, builder, ms,
|
|
||||||
light, color, fluidTexture);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ms.popPose();
|
ms.popPose();
|
||||||
|
@ -149,6 +137,8 @@ public class FluidRenderer {
|
||||||
|
|
||||||
private static void renderTiledVerticalFace(float y, Direction face, float xMin, float zMin, float xMax, float zMax,
|
private static void renderTiledVerticalFace(float y, Direction face, float xMin, float zMin, float xMax, float zMax,
|
||||||
VertexConsumer builder, PoseStack ms, int light, int color, TextureAtlasSprite texture) {
|
VertexConsumer builder, PoseStack ms, int light, int color, TextureAtlasSprite texture) {
|
||||||
|
boolean positive = face.getAxisDirection() == Direction.AxisDirection.POSITIVE;
|
||||||
|
|
||||||
float x2 = 0;
|
float x2 = 0;
|
||||||
float z2 = 0;
|
float z2 = 0;
|
||||||
for (float x1 = xMin; x1 < xMax; x1 = x2) {
|
for (float x1 = xMin; x1 < xMax; x1 = x2) {
|
||||||
|
@ -161,41 +151,40 @@ public class FluidRenderer {
|
||||||
float u2 = texture.getU(x2 == xMax ? local(x2) * 16 : 16);
|
float u2 = texture.getU(x2 == xMax ? local(x2) * 16 : 16);
|
||||||
float v2 = texture.getV(z2 == zMax ? local(z2) * 16 : 16);
|
float v2 = texture.getV(z2 == zMax ? local(z2) * 16 : 16);
|
||||||
|
|
||||||
putVertex(builder, ms, x1, y, z2, color, u1, v2, face, light);
|
putVertex(builder, ms, x1, y, positive ? z1 : z2, color, u1, v1, face, light);
|
||||||
putVertex(builder, ms, x2, y, z2, color, u2, v2, face, light);
|
putVertex(builder, ms, x1, y, positive ? z2 : z1, color, u1, v2, face, light);
|
||||||
putVertex(builder, ms, x2, y, z1, color, u2, v1, face, light);
|
putVertex(builder, ms, x2, y, positive ? z2 : z1, color, u2, v2, face, light);
|
||||||
putVertex(builder, ms, x1, y, z1, color, u1, v1, face, light);
|
putVertex(builder, ms, x2, y, positive ? z1 : z2, color, u2, v1, face, light);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void renderTiledHorizontalFace(float h, Direction face, float hMin, float yMin, float hMax,
|
private static void renderTiledHorizontalFace(float h, Direction face, float hMin, float yMin, float hMax,
|
||||||
float yMax, VertexConsumer builder, PoseStack ms, int light, int color, TextureAtlasSprite texture) {
|
float yMax, VertexConsumer builder, PoseStack ms, int light, int color, TextureAtlasSprite texture) {
|
||||||
boolean X = face.getAxis() == Axis.X;
|
boolean positive = face.getAxisDirection() == Direction.AxisDirection.POSITIVE;
|
||||||
|
boolean x = face.getAxis() == Axis.X;
|
||||||
|
|
||||||
float h2 = 0;
|
float h2 = 0;
|
||||||
float y2 = 0;
|
float y2 = 0;
|
||||||
|
|
||||||
for (float h1 = hMin; h1 < hMax; h1 = h2) {
|
for (float h1 = hMin; h1 < hMax; h1 = h2) {
|
||||||
h2 = Math.min((int) (h1 + 1), hMax);
|
h2 = Math.min((int) (h1 + 1), hMax);
|
||||||
for (float y1 = yMin; y1 < yMax; y1 = y2) {
|
for (float y1 = yMin; y1 < yMax; y1 = y2) {
|
||||||
y2 = Math.min((int) (y1 + 1), yMax);
|
y2 = Math.min((int) (y1 + 1), yMax);
|
||||||
|
|
||||||
int multiplier = texture.getWidth() == 32 ? 8 : 16;
|
float u1 = texture.getU(local(h1) * 16);
|
||||||
float u1 = texture.getU(local(h1) * multiplier);
|
float v1 = texture.getV(local(y1) * 16);
|
||||||
float v1 = texture.getV(local(y1) * multiplier);
|
float u2 = texture.getU(h2 == hMax ? local(h2) * 16 : 16);
|
||||||
float u2 = texture.getU(h2 == hMax ? local(h2) * multiplier : multiplier);
|
float v2 = texture.getV(y2 == yMax ? local(y2) * 16 : 16);
|
||||||
float v2 = texture.getV(y2 == yMax ? local(y2) * multiplier : multiplier);
|
|
||||||
|
|
||||||
float x1 = X ? h : h1;
|
float x1 = x ? h : (positive ? h1 : h2);
|
||||||
float x2 = X ? h : h2;
|
float x2 = x ? h : (positive ? h2 : h1);
|
||||||
float z1 = X ? h1 : h;
|
float z1 = x ? (positive ? h1 : h2) : h;
|
||||||
float z2 = X ? h2 : h;
|
float z2 = x ? (positive ? h2 : h1) : h;
|
||||||
|
|
||||||
putVertex(builder, ms, x2, y2, z1, color, u1, v2, face, light);
|
putVertex(builder, ms, x1, y2, z2, color, u1, v1, face, light);
|
||||||
putVertex(builder, ms, x1, y2, z2, color, u2, v2, face, light);
|
putVertex(builder, ms, x1, y1, z2, color, u1, v2, face, light);
|
||||||
putVertex(builder, ms, x1, y1, z2, color, u2, v1, face, light);
|
putVertex(builder, ms, x2, y1, z1, color, u2, v2, face, light);
|
||||||
putVertex(builder, ms, x2, y1, z1, color, u1, v1, face, light);
|
putVertex(builder, ms, x2, y2, z1, color, u2, v1, face, light);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -209,20 +198,19 @@ public class FluidRenderer {
|
||||||
private static void putVertex(VertexConsumer builder, PoseStack ms, float x, float y, float z, int color, float u,
|
private static void putVertex(VertexConsumer builder, PoseStack ms, float x, float y, float z, int color, float u,
|
||||||
float v, Direction face, int light) {
|
float v, Direction face, int light) {
|
||||||
|
|
||||||
Vec3i n = face.getNormal();
|
Vec3i normal = face.getNormal();
|
||||||
Pose peek = ms.last();
|
Pose peek = ms.last();
|
||||||
int ff = 0xff;
|
int a = color >> 24 & 0xff;
|
||||||
int a = color >> 24 & ff;
|
int r = color >> 16 & 0xff;
|
||||||
int r = color >> 16 & ff;
|
int g = color >> 8 & 0xff;
|
||||||
int g = color >> 8 & ff;
|
int b = color & 0xff;
|
||||||
int b = color & ff;
|
|
||||||
|
|
||||||
builder.vertex(peek.pose(), x, y, z)
|
builder.vertex(peek.pose(), x, y, z)
|
||||||
.color(r, g, b, a)
|
.color(r, g, b, a)
|
||||||
.uv(u, v)
|
.uv(u, v)
|
||||||
.overlayCoords(OverlayTexture.NO_OVERLAY)
|
.overlayCoords(OverlayTexture.NO_OVERLAY)
|
||||||
.uv2(light)
|
.uv2(light)
|
||||||
.normal(peek.normal(), n.getX(), n.getY(), n.getZ())
|
.normal(peek.normal(), normal.getX(), normal.getY(), normal.getZ())
|
||||||
.endVertex();
|
.endVertex();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ import com.jozufozu.flywheel.backend.source.Resolver;
|
||||||
import com.jozufozu.flywheel.core.WorldContext;
|
import com.jozufozu.flywheel.core.WorldContext;
|
||||||
import com.jozufozu.flywheel.event.GatherContextEvent;
|
import com.jozufozu.flywheel.event.GatherContextEvent;
|
||||||
import com.jozufozu.flywheel.util.ResourceUtil;
|
import com.jozufozu.flywheel.util.ResourceUtil;
|
||||||
|
import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionProgram;
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionProgram;
|
||||||
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
@ -21,7 +22,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
public class CreateContexts {
|
public class CreateContexts {
|
||||||
private static final ResourceLocation CONTRAPTION = new ResourceLocation("create", "context/contraption");
|
private static final ResourceLocation CONTRAPTION = Create.asResource("context/contraption");
|
||||||
|
|
||||||
public static WorldContext<ContraptionProgram> CWORLD;
|
public static WorldContext<ContraptionProgram> CWORLD;
|
||||||
public static WorldContext<ContraptionProgram> STRUCTURE;
|
public static WorldContext<ContraptionProgram> STRUCTURE;
|
||||||
|
|
|
@ -12,6 +12,7 @@ import com.jozufozu.flywheel.backend.IFlywheelWorld;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.SectionPos;
|
import net.minecraft.core.SectionPos;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
@ -73,7 +74,7 @@ public class PlacementSimulationWorld extends WrappedWorld implements IFlywheelW
|
||||||
lighter.updateSectionStatus(sectionPos, false);
|
lighter.updateSectionStatus(sectionPos, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((flags & 128) == 0) {
|
if ((flags & Block.UPDATE_SUPPRESS_LIGHT) == 0) {
|
||||||
lighter.checkBlock(pos);
|
lighter.checkBlock(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
#use "flywheel:context/fog.glsl"
|
#use "flywheel:context/fog.glsl"
|
||||||
|
|
||||||
out vec3 BoxCoord;
|
|
||||||
|
|
||||||
uniform sampler3D uLightVolume;
|
uniform sampler3D uLightVolume;
|
||||||
|
|
||||||
uniform sampler2D uBlockAtlas;
|
uniform sampler2D uBlockAtlas;
|
||||||
|
@ -25,6 +23,8 @@ void FLWFinalizeNormal(inout vec3 normal) {
|
||||||
|
|
||||||
#if defined(VERTEX_SHADER)
|
#if defined(VERTEX_SHADER)
|
||||||
|
|
||||||
|
out vec3 BoxCoord;
|
||||||
|
|
||||||
void FLWFinalizeWorldPos(inout vec4 worldPos) {
|
void FLWFinalizeWorldPos(inout vec4 worldPos) {
|
||||||
worldPos = uModel * worldPos;
|
worldPos = uModel * worldPos;
|
||||||
|
|
||||||
|
@ -40,6 +40,8 @@ void FLWFinalizeWorldPos(inout vec4 worldPos) {
|
||||||
#elif defined(FRAGMENT_SHADER)
|
#elif defined(FRAGMENT_SHADER)
|
||||||
#use "flywheel:core/lightutil.glsl"
|
#use "flywheel:core/lightutil.glsl"
|
||||||
|
|
||||||
|
in vec3 BoxCoord;
|
||||||
|
|
||||||
out vec4 FragColor;
|
out vec4 FragColor;
|
||||||
|
|
||||||
vec4 FLWBlockTexture(vec2 texCoords) {
|
vec4 FLWBlockTexture(vec2 texCoords) {
|
||||||
|
|
Loading…
Reference in a new issue