Merge branch '1.18.2' into 1.19

This commit is contained in:
shedaniel
2022-04-10 18:41:16 +08:00
2 changed files with 22 additions and 12 deletions

View File

@@ -19,8 +19,8 @@
package dev.architectury.event.forge;
import dev.architectury.platform.forge.EventBuses;
import dev.architectury.forge.ArchitecturyForge;
import dev.architectury.platform.forge.EventBuses;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.MinecraftForge;
@@ -29,17 +29,23 @@ public class EventHandlerImpl {
@OnlyIn(Dist.CLIENT)
public static void registerClient() {
MinecraftForge.EVENT_BUS.register(EventHandlerImplClient.class);
EventBuses.getModEventBus(ArchitecturyForge.MOD_ID).orElseThrow(() -> new IllegalStateException("Where is architectury?")).register(EventHandlerImplClient.ModBasedEventHandler.class);
EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> {
bus.register(EventHandlerImplClient.ModBasedEventHandler.class);
});
}
public static void registerCommon() {
MinecraftForge.EVENT_BUS.register(EventHandlerImplCommon.class);
EventBuses.getModEventBus(ArchitecturyForge.MOD_ID).orElseThrow(() -> new IllegalStateException("Where is architectury?")).register(EventHandlerImplCommon.ModBasedEventHandler.class);
EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> {
bus.register(EventHandlerImplCommon.ModBasedEventHandler.class);
});
}
@OnlyIn(Dist.DEDICATED_SERVER)
public static void registerServer() {
MinecraftForge.EVENT_BUS.register(EventHandlerImplServer.class);
EventBuses.getModEventBus(ArchitecturyForge.MOD_ID).orElseThrow(() -> new IllegalStateException("Where is architectury?")).register(EventHandlerImplServer.ModBasedEventHandler.class);
EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> {
bus.register(EventHandlerImplServer.ModBasedEventHandler.class);
});
}
}

View File

@@ -19,25 +19,31 @@
package dev.architectury.platform.forge;
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import net.minecraftforge.eventbus.api.IEventBus;
import java.util.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
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<>();
private static final Map<String, IEventBus> EVENT_BUS_MAP = Collections.synchronizedMap(new HashMap<>());
private static final Multimap<String, Consumer<IEventBus>> ON_REGISTERED = Multimaps.synchronizedMultimap(LinkedListMultimap.create());
public static void registerModEventBus(String modId, IEventBus bus) {
if (EVENT_BUS_MAP.putIfAbsent(modId, bus) != null) {
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);
for (Consumer<IEventBus> consumer : ON_REGISTERED.get(modId)) {
consumer.accept(bus);
}
}
@@ -45,9 +51,7 @@ public final class EventBuses {
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);
}
ON_REGISTERED.put(modId, busConsumer);
}
}