mirror of
https://github.com/architectury/architectury-api.git
synced 2026-03-30 05:05:19 -05:00
Fix ColorHandlers on Forge being on the wrong event bus
This commit is contained in:
@@ -21,15 +21,14 @@ package me.shedaniel.architectury.platform.forge;
|
||||
|
||||
import net.minecraftforge.eventbus.api.IEventBus;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public final class EventBuses {
|
||||
private EventBuses() {}
|
||||
|
||||
private static final Map<String, IEventBus> EVENT_BUS_MAP = new HashMap<>();
|
||||
private static final Map<String, List<Consumer<IEventBus>>> ON_REGISTERED = new HashMap<>();
|
||||
|
||||
public static void registerModEventBus(String modId, IEventBus bus) {
|
||||
IEventBus previous = EVENT_BUS_MAP.put(modId, bus);
|
||||
@@ -37,6 +36,20 @@ public final class EventBuses {
|
||||
EVENT_BUS_MAP.put(modId, previous);
|
||||
throw new IllegalStateException("Can't register event bus for mod '" + modId + "' because it was previously registered!");
|
||||
}
|
||||
|
||||
for (Consumer<IEventBus> runnable : ON_REGISTERED.getOrDefault(modId, Collections.emptyList())) {
|
||||
runnable.accept(bus);
|
||||
}
|
||||
}
|
||||
|
||||
public static void onRegistered(String modId, Consumer<IEventBus> busConsumer) {
|
||||
if (EVENT_BUS_MAP.containsKey(modId)) {
|
||||
busConsumer.accept(EVENT_BUS_MAP.get(modId));
|
||||
} else {
|
||||
synchronized (ON_REGISTERED) {
|
||||
ON_REGISTERED.computeIfAbsent(modId, s -> new ArrayList<>()).add(busConsumer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Optional<IEventBus> getModEventBus(String modId) {
|
||||
|
||||
@@ -20,13 +20,14 @@
|
||||
package me.shedaniel.architectury.registry.forge;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import me.shedaniel.architectury.forge.ArchitecturyForge;
|
||||
import me.shedaniel.architectury.platform.forge.EventBuses;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.color.block.BlockColor;
|
||||
import net.minecraft.client.color.item.ItemColor;
|
||||
import net.minecraft.world.level.ItemLike;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraftforge.client.event.ColorHandlerEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import java.util.List;
|
||||
@@ -37,15 +38,17 @@ public class ColorHandlersImpl {
|
||||
private static final List<Pair<BlockColor, Supplier<Block>[]>> BLOCK_COLORS = Lists.newArrayList();
|
||||
|
||||
static {
|
||||
MinecraftForge.EVENT_BUS.<ColorHandlerEvent.Item>addListener(event -> {
|
||||
for (Pair<ItemColor, Supplier<ItemLike>[]> pair : ITEM_COLORS) {
|
||||
event.getItemColors().register(pair.getLeft(), unpackItems(pair.getRight()));
|
||||
}
|
||||
});
|
||||
MinecraftForge.EVENT_BUS.<ColorHandlerEvent.Block>addListener(event -> {
|
||||
for (Pair<BlockColor, Supplier<Block>[]> pair : BLOCK_COLORS) {
|
||||
event.getBlockColors().register(pair.getLeft(), unpackBlocks(pair.getRight()));
|
||||
}
|
||||
EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> {
|
||||
bus.<ColorHandlerEvent.Item>addListener(event -> {
|
||||
for (Pair<ItemColor, Supplier<ItemLike>[]> pair : ITEM_COLORS) {
|
||||
event.getItemColors().register(pair.getLeft(), unpackItems(pair.getRight()));
|
||||
}
|
||||
});
|
||||
bus.<ColorHandlerEvent.Block>addListener(event -> {
|
||||
for (Pair<BlockColor, Supplier<Block>[]> pair : BLOCK_COLORS) {
|
||||
event.getBlockColors().register(pair.getLeft(), unpackBlocks(pair.getRight()));
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user