CC-Tweaked/projects/forge/src/main/java/dan200/computercraft/shared/ForgeCommonHooks.java

102 lines
3.8 KiB
Java

// SPDX-FileCopyrightText: 2022 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.shared;
import dan200.computercraft.api.ComputerCraftAPI;
import dan200.computercraft.shared.command.CommandComputerCraft;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.chunk.LevelChunk;
import net.neoforged.bus.api.EventPriority;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.event.AddReloadListenerEvent;
import net.neoforged.neoforge.event.LootTableLoadEvent;
import net.neoforged.neoforge.event.RegisterCommandsEvent;
import net.neoforged.neoforge.event.entity.EntityJoinLevelEvent;
import net.neoforged.neoforge.event.entity.living.LivingDropsEvent;
import net.neoforged.neoforge.event.level.ChunkEvent;
import net.neoforged.neoforge.event.level.ChunkTicketLevelUpdatedEvent;
import net.neoforged.neoforge.event.level.ChunkWatchEvent;
import net.neoforged.neoforge.event.server.ServerStartedEvent;
import net.neoforged.neoforge.event.server.ServerStartingEvent;
import net.neoforged.neoforge.event.server.ServerStoppedEvent;
import net.neoforged.neoforge.event.tick.ServerTickEvent;
/**
* Forge-specific dispatch for {@link CommonHooks}.
*/
@EventBusSubscriber(modid = ComputerCraftAPI.MOD_ID)
public class ForgeCommonHooks {
@SubscribeEvent
public static void onServerTick(ServerTickEvent.Pre event) {
CommonHooks.onServerTickStart(event.getServer());
}
@SubscribeEvent
public static void onServerTick(ServerTickEvent.Post event) {
CommonHooks.onServerTickStart(event.getServer());
}
@SubscribeEvent
public static void onServerStarting(ServerStartingEvent event) {
CommonHooks.onServerStarting(event.getServer());
}
@SubscribeEvent
public static void onServerStarted(ServerStartedEvent event) {
CommonHooks.onServerStarted(event.getServer());
}
@SubscribeEvent
public static void onServerStopped(ServerStoppedEvent event) {
CommonHooks.onServerStopped();
}
@SubscribeEvent
public static void onRegisterCommand(RegisterCommandsEvent event) {
CommandComputerCraft.register(event.getDispatcher());
}
@SubscribeEvent
public static void onChunkUnload(ChunkEvent.Unload event) {
if (event.getLevel() instanceof ServerLevel && event.getChunk() instanceof LevelChunk chunk) {
CommonHooks.onServerChunkUnload(chunk);
}
}
@SubscribeEvent
public static void onChunkWatch(ChunkWatchEvent.Sent event) {
CommonHooks.onChunkWatch(event.getChunk(), event.getPlayer());
}
@SubscribeEvent
public static void onChunkTicketLevelChanged(ChunkTicketLevelUpdatedEvent event) {
CommonHooks.onChunkTicketLevelChanged(event.getLevel(), event.getChunkPos(), event.getOldTicketLevel(), event.getNewTicketLevel());
}
@SubscribeEvent
public static void onAddReloadListeners(AddReloadListenerEvent event) {
CommonHooks.onDatapackReload((id, listener) -> event.addListener(listener));
}
@SubscribeEvent
public static void lootLoad(LootTableLoadEvent event) {
var pool = CommonHooks.getExtraLootPool(ResourceKey.create(Registries.LOOT_TABLE, event.getName()));
if (pool != null) event.getTable().addPool(pool.build());
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public static void onEntitySpawn(EntityJoinLevelEvent event) {
if (CommonHooks.onEntitySpawn(event.getEntity())) event.setCanceled(true);
}
@SubscribeEvent(priority = EventPriority.LOW)
public static void onLivingDrops(LivingDropsEvent event) {
event.getDrops().removeIf(itemEntity -> CommonHooks.onLivingDrop(event.getEntity(), itemEntity.getItem()));
}
}