mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-08-28 21:11:16 +00:00
d
This commit is contained in:
@@ -19,18 +19,37 @@
|
||||
package art.arcane.iris.forge;
|
||||
|
||||
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.minecraftforge.common.util.Result;
|
||||
import net.minecraftforge.event.level.BlockEvent;
|
||||
import net.minecraftforge.fml.ModList;
|
||||
import net.minecraftforge.fml.loading.FMLEnvironment;
|
||||
import net.minecraftforge.fml.loading.FMLLoader;
|
||||
import net.minecraftforge.fml.loading.FMLPaths;
|
||||
import net.minecraftforge.forgespi.language.IModFileInfo;
|
||||
import net.minecraftforge.server.ServerLifecycleHooks;
|
||||
import net.minecraftforge.server.permission.PermissionAPI;
|
||||
import net.minecraftforge.server.permission.nodes.PermissionNode;
|
||||
import net.minecraftforge.server.permission.nodes.PermissionTypes;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
|
||||
public final class ForgeModdedLoader 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 "forge";
|
||||
@@ -73,4 +92,29 @@ public final class ForgeModdedLoader implements ModdedLoader {
|
||||
IModFileInfo info = ModList.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(() -> {
|
||||
BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(
|
||||
level,
|
||||
position,
|
||||
state,
|
||||
player,
|
||||
Result.DEFAULT
|
||||
);
|
||||
BlockEvent.BreakEvent.BUS.post(event);
|
||||
return !event.getResult().isDenied();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,6 +65,10 @@ public final class IrisForgeBlockLootModifier extends LootModifier {
|
||||
if (result == null) {
|
||||
return generatedLoot;
|
||||
}
|
||||
if (result.routeCombinedDrops(generatedLoot)) {
|
||||
generatedLoot.clear();
|
||||
return generatedLoot;
|
||||
}
|
||||
if (result.replaceVanillaDrops()) {
|
||||
generatedLoot.clear();
|
||||
}
|
||||
|
||||
@@ -44,12 +44,15 @@ import net.minecraftforge.event.server.ServerStartingEvent;
|
||||
import net.minecraftforge.event.server.ServerStoppingEvent;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.common.loot.IGlobalLootModifier;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
import net.minecraftforge.eventbus.api.listener.Priority;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||
import net.minecraftforge.fml.loading.FMLEnvironment;
|
||||
import net.minecraftforge.fml.loading.FMLLoader;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.server.permission.events.PermissionGatherEvent;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
@@ -80,6 +83,11 @@ public final class IrisForgeBootstrap {
|
||||
ModdedEngineBootstrap.levelLoaded(level);
|
||||
}
|
||||
});
|
||||
LevelEvent.Unload.BUS.addListener((LevelEvent.Unload event) -> {
|
||||
if (event.getLevel() instanceof ServerLevel level) {
|
||||
ModdedEngineBootstrap.levelUnloaded(level);
|
||||
}
|
||||
});
|
||||
PlayerEvent.PlayerLoggedInEvent.BUS.addListener((PlayerEvent.PlayerLoggedInEvent event) -> {
|
||||
if (event.getEntity() instanceof ServerPlayer player) {
|
||||
ModdedProtocolHandler.onPlayerJoin(player);
|
||||
@@ -96,11 +104,32 @@ public final class IrisForgeBootstrap {
|
||||
}
|
||||
});
|
||||
RegisterCommandsEvent.BUS.addListener((RegisterCommandsEvent event) -> IrisModdedCommands.register(event.getDispatcher()));
|
||||
PermissionGatherEvent.Nodes.BUS.addListener((PermissionGatherEvent.Nodes event) ->
|
||||
event.addNodes(ForgeModdedLoader.TREE_FELLER_PERMISSION));
|
||||
BlockEvent.BreakEvent.BUS.addListener((BlockEvent.BreakEvent event) -> {
|
||||
if (event.getLevel() instanceof ServerLevel level && !event.getResult().isDenied()) {
|
||||
ModdedBlockBreakHandler.prepare(level, event.getPos(), event.getState());
|
||||
if (event.getLevel() instanceof ServerLevel level
|
||||
&& event.getPlayer() instanceof ServerPlayer player
|
||||
&& !event.getResult().isDenied()) {
|
||||
ModdedBlockBreakHandler.prepare(level, player, event.getPos(), event.getState());
|
||||
}
|
||||
});
|
||||
BlockEvent.EntityPlaceEvent.BUS.addListener(Priority.MONITOR, false, (BlockEvent.EntityPlaceEvent event) -> {
|
||||
if (!(event instanceof BlockEvent.EntityMultiPlaceEvent)
|
||||
&& event.getLevel() instanceof ServerLevel level) {
|
||||
ModdedBlockBreakHandler.clearPlacedProvenance(level, event.getPos());
|
||||
}
|
||||
});
|
||||
BlockEvent.EntityMultiPlaceEvent.BUS.addListener(
|
||||
Priority.MONITOR,
|
||||
false,
|
||||
(BlockEvent.EntityMultiPlaceEvent event) -> {
|
||||
for (BlockSnapshot snapshot : event.getReplacedBlockSnapshots()) {
|
||||
if (snapshot.getLevel() instanceof ServerLevel level) {
|
||||
ModdedBlockBreakHandler.clearPlacedProvenance(level, snapshot.getPos());
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
PlayerInteractEvent.LeftClickBlock.BUS.addListener((Predicate<PlayerInteractEvent.LeftClickBlock>) (PlayerInteractEvent.LeftClickBlock event) ->
|
||||
ModdedWandService.attackBlock(event.getEntity(), event.getLevel(), event.getHand(), event.getPos()));
|
||||
PlayerInteractEvent.RightClickBlock.BUS.addListener((Predicate<PlayerInteractEvent.RightClickBlock>) (PlayerInteractEvent.RightClickBlock event) ->
|
||||
|
||||
Reference in New Issue
Block a user