mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-08-27 04:37:47 +00:00
d
This commit is contained in:
+48
-4
@@ -27,6 +27,7 @@ import art.arcane.iris.modded.command.ModdedWandService;
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.server.packs.PackType;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.item.ItemEntity;
|
||||
@@ -34,15 +35,18 @@ import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.chunk.ChunkGenerator;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.EventPriority;
|
||||
import net.neoforged.bus.api.IEventBus;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.fml.loading.FMLEnvironment;
|
||||
import net.neoforged.fml.loading.FMLLoader;
|
||||
import net.neoforged.neoforge.common.NeoForge;
|
||||
import net.neoforged.neoforge.common.util.BlockSnapshot;
|
||||
import net.neoforged.neoforge.event.AddPackFindersEvent;
|
||||
import net.neoforged.neoforge.event.RegisterCommandsEvent;
|
||||
import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent;
|
||||
import net.neoforged.neoforge.event.level.BlockDropsEvent;
|
||||
import net.neoforged.neoforge.event.level.BlockEvent;
|
||||
import net.neoforged.neoforge.event.level.LevelEvent;
|
||||
import net.neoforged.neoforge.event.level.block.BreakBlockEvent;
|
||||
import net.neoforged.neoforge.event.server.ServerAboutToStartEvent;
|
||||
@@ -51,6 +55,9 @@ import net.neoforged.neoforge.event.server.ServerStartingEvent;
|
||||
import net.neoforged.neoforge.event.server.ServerStoppingEvent;
|
||||
import net.neoforged.neoforge.event.tick.ServerTickEvent;
|
||||
import net.neoforged.neoforge.registries.DeferredRegister;
|
||||
import net.neoforged.neoforge.server.permission.events.PermissionGatherEvent;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mod("irisworldgen")
|
||||
public final class IrisNeoForgeBootstrap {
|
||||
@@ -82,18 +89,55 @@ public final class IrisNeoForgeBootstrap {
|
||||
ModdedEngineBootstrap.levelLoaded(level);
|
||||
}
|
||||
});
|
||||
NeoForge.EVENT_BUS.addListener((RegisterCommandsEvent event) -> IrisModdedCommands.register(event.getDispatcher()));
|
||||
NeoForge.EVENT_BUS.addListener((BreakBlockEvent event) -> {
|
||||
if (event.getLevel() instanceof ServerLevel level && !event.isCanceled()) {
|
||||
ModdedBlockBreakHandler.prepare(level, event.getPos(), event.getState());
|
||||
NeoForge.EVENT_BUS.addListener((LevelEvent.Unload event) -> {
|
||||
if (event.getLevel() instanceof ServerLevel level) {
|
||||
ModdedEngineBootstrap.levelUnloaded(level);
|
||||
}
|
||||
});
|
||||
NeoForge.EVENT_BUS.addListener((RegisterCommandsEvent event) -> IrisModdedCommands.register(event.getDispatcher()));
|
||||
NeoForge.EVENT_BUS.addListener((PermissionGatherEvent.Nodes event) ->
|
||||
event.addNodes(NeoForgeModdedLoader.TREE_FELLER_PERMISSION));
|
||||
NeoForge.EVENT_BUS.addListener((BreakBlockEvent event) -> {
|
||||
if (event.getLevel() instanceof ServerLevel level
|
||||
&& event.getPlayer() instanceof ServerPlayer player
|
||||
&& !event.isCanceled()) {
|
||||
ModdedBlockBreakHandler.prepare(level, player, event.getPos(), event.getState());
|
||||
}
|
||||
});
|
||||
NeoForge.EVENT_BUS.addListener(
|
||||
EventPriority.LOWEST,
|
||||
false,
|
||||
(BlockEvent.EntityPlaceEvent event) -> {
|
||||
if (!(event instanceof BlockEvent.EntityMultiPlaceEvent)
|
||||
&& event.getLevel() instanceof ServerLevel level) {
|
||||
ModdedBlockBreakHandler.clearPlacedProvenance(level, event.getPos());
|
||||
}
|
||||
}
|
||||
);
|
||||
NeoForge.EVENT_BUS.addListener(
|
||||
EventPriority.LOWEST,
|
||||
false,
|
||||
(BlockEvent.EntityMultiPlaceEvent event) -> {
|
||||
for (BlockSnapshot snapshot : event.getReplacedBlockSnapshots()) {
|
||||
if (snapshot.getLevel() instanceof ServerLevel level) {
|
||||
ModdedBlockBreakHandler.clearPlacedProvenance(level, snapshot.getPos());
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
NeoForge.EVENT_BUS.addListener((BlockDropsEvent event) -> {
|
||||
if (!(event.getBreaker() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
ServerLevel level = event.getLevel();
|
||||
ModdedBlockBreakHandler.Result result = ModdedBlockBreakHandler.complete(level, event.getPos(), event.getState());
|
||||
List<ItemStack> vanillaDrops = event.getDrops().stream()
|
||||
.map(ItemEntity::getItem)
|
||||
.toList();
|
||||
if (result.routeCombinedDrops(vanillaDrops)) {
|
||||
event.getDrops().clear();
|
||||
return;
|
||||
}
|
||||
if (result.replaceVanillaDrops()) {
|
||||
event.getDrops().clear();
|
||||
}
|
||||
|
||||
@@ -19,18 +19,37 @@
|
||||
package art.arcane.iris.neoforge;
|
||||
|
||||
import art.arcane.iris.modded.ModdedLoader;
|
||||
import art.arcane.iris.modded.service.ModdedTreeFellerService;
|
||||
import net.minecraft.commands.Commands;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.neoforged.neoforge.common.NeoForge;
|
||||
import net.neoforged.neoforge.event.level.block.BreakBlockEvent;
|
||||
import net.neoforged.fml.ModList;
|
||||
import net.neoforged.fml.loading.FMLEnvironment;
|
||||
import net.neoforged.fml.loading.FMLLoader;
|
||||
import net.neoforged.fml.loading.FMLPaths;
|
||||
import net.neoforged.neoforge.server.ServerLifecycleHooks;
|
||||
import net.neoforged.neoforge.server.permission.PermissionAPI;
|
||||
import net.neoforged.neoforge.server.permission.nodes.PermissionNode;
|
||||
import net.neoforged.neoforge.server.permission.nodes.PermissionTypes;
|
||||
import net.neoforged.neoforgespi.language.IModFileInfo;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
|
||||
public final class NeoForgeModdedLoader implements ModdedLoader {
|
||||
public static final PermissionNode<Boolean> TREE_FELLER_PERMISSION = new PermissionNode<>(
|
||||
"iris",
|
||||
"treefeller",
|
||||
PermissionTypes.BOOLEAN,
|
||||
(player, playerId, contexts) ->
|
||||
player != null && Commands.LEVEL_GAMEMASTERS.check(player.permissions())
|
||||
);
|
||||
|
||||
@Override
|
||||
public String platformName() {
|
||||
return "neoforge";
|
||||
@@ -73,4 +92,23 @@ public final class NeoForgeModdedLoader implements ModdedLoader {
|
||||
IModFileInfo info = ModList.get().getModFileById("irisworldgen");
|
||||
return info == null ? null : info.getFile().getFilePath().toFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTreeFellerPermission(ServerPlayer player) {
|
||||
return PermissionAPI.getPermission(player, TREE_FELLER_PERMISSION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTreeFellerBreak(
|
||||
ServerLevel level,
|
||||
ServerPlayer player,
|
||||
BlockPos position,
|
||||
BlockState state
|
||||
) {
|
||||
return ModdedTreeFellerService.runBreakProbe(() -> {
|
||||
BreakBlockEvent event = new BreakBlockEvent(level, position, state, player);
|
||||
NeoForge.EVENT_BUS.post(event);
|
||||
return !event.isCanceled();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user