mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-19 15:09:15 +00:00
初步兼容leaves假人
This commit is contained in:
@@ -9,7 +9,7 @@ import io.lumine.mythic.api.skills.SkillCaster;
|
|||||||
import io.lumine.mythic.bukkit.BukkitAdapter;
|
import io.lumine.mythic.bukkit.BukkitAdapter;
|
||||||
import io.lumine.mythic.bukkit.adapters.BukkitItemStack;
|
import io.lumine.mythic.bukkit.adapters.BukkitItemStack;
|
||||||
import io.lumine.mythic.core.drops.droppables.ItemDrop;
|
import io.lumine.mythic.core.drops.droppables.ItemDrop;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
import net.momirealms.craftengine.bukkit.api.BukkitAdaptors;
|
||||||
import net.momirealms.craftengine.core.item.CustomItem;
|
import net.momirealms.craftengine.core.item.CustomItem;
|
||||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
@@ -38,7 +38,7 @@ public class MythicItemDrop extends ItemDrop implements IItemDrop {
|
|||||||
if (caster != null && caster.getEntity() instanceof AbstractPlayer abstractPlayer) {
|
if (caster != null && caster.getEntity() instanceof AbstractPlayer abstractPlayer) {
|
||||||
Entity bukkitEntity = abstractPlayer.getBukkitEntity();
|
Entity bukkitEntity = abstractPlayer.getBukkitEntity();
|
||||||
if (bukkitEntity instanceof Player bukkitPlayer) {
|
if (bukkitEntity instanceof Player bukkitPlayer) {
|
||||||
var player = BukkitCraftEngine.instance().adapt(bukkitPlayer);
|
var player = BukkitAdaptors.adapt(bukkitPlayer);
|
||||||
context = ItemBuildContext.of(player);
|
context = ItemBuildContext.of(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,8 +12,6 @@ import org.bukkit.entity.Entity;
|
|||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.function.Predicate;
|
|
||||||
|
|
||||||
public class CondIsFurniture extends Condition {
|
public class CondIsFurniture extends Condition {
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {
|
||||||
|
|||||||
@@ -10,8 +10,6 @@ import ch.njol.skript.lang.SkriptParser;
|
|||||||
import ch.njol.skript.registrations.EventValues;
|
import ch.njol.skript.registrations.EventValues;
|
||||||
import net.momirealms.craftengine.bukkit.api.event.CustomBlockBreakEvent;
|
import net.momirealms.craftengine.bukkit.api.event.CustomBlockBreakEvent;
|
||||||
import net.momirealms.craftengine.bukkit.api.event.CustomBlockPlaceEvent;
|
import net.momirealms.craftengine.bukkit.api.event.CustomBlockPlaceEvent;
|
||||||
import net.momirealms.craftengine.bukkit.api.event.FurnitureBreakEvent;
|
|
||||||
import net.momirealms.craftengine.bukkit.api.event.FurniturePlaceEvent;
|
|
||||||
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
|
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
|
||||||
import net.momirealms.craftengine.core.block.ImmutableBlockState;
|
import net.momirealms.craftengine.core.block.ImmutableBlockState;
|
||||||
import net.momirealms.craftengine.core.block.UnsafeBlockStateMatcher;
|
import net.momirealms.craftengine.core.block.UnsafeBlockStateMatcher;
|
||||||
@@ -19,7 +17,6 @@ import net.momirealms.craftengine.core.entity.player.InteractionHand;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import ch.njol.skript.lang.SkriptEvent;
|
|||||||
import ch.njol.skript.lang.SkriptParser;
|
import ch.njol.skript.lang.SkriptParser;
|
||||||
import ch.njol.skript.registrations.EventValues;
|
import ch.njol.skript.registrations.EventValues;
|
||||||
import net.momirealms.craftengine.bukkit.api.event.CustomBlockInteractEvent;
|
import net.momirealms.craftengine.bukkit.api.event.CustomBlockInteractEvent;
|
||||||
import net.momirealms.craftengine.bukkit.api.event.FurnitureBreakEvent;
|
|
||||||
import net.momirealms.craftengine.bukkit.api.event.FurnitureInteractEvent;
|
import net.momirealms.craftengine.bukkit.api.event.FurnitureInteractEvent;
|
||||||
import net.momirealms.craftengine.core.block.ImmutableBlockState;
|
import net.momirealms.craftengine.core.block.ImmutableBlockState;
|
||||||
import net.momirealms.craftengine.core.block.UnsafeBlockStateMatcher;
|
import net.momirealms.craftengine.core.block.UnsafeBlockStateMatcher;
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ import ch.njol.skript.lang.Literal;
|
|||||||
import ch.njol.skript.lang.SkriptEvent;
|
import ch.njol.skript.lang.SkriptEvent;
|
||||||
import ch.njol.skript.lang.SkriptParser;
|
import ch.njol.skript.lang.SkriptParser;
|
||||||
import ch.njol.skript.registrations.EventValues;
|
import ch.njol.skript.registrations.EventValues;
|
||||||
import io.papermc.paper.event.player.PlayerTrackEntityEvent;
|
|
||||||
import net.momirealms.craftengine.bukkit.api.event.CustomBlockInteractEvent;
|
|
||||||
import net.momirealms.craftengine.bukkit.api.event.FurnitureBreakEvent;
|
import net.momirealms.craftengine.bukkit.api.event.FurnitureBreakEvent;
|
||||||
import net.momirealms.craftengine.bukkit.api.event.FurniturePlaceEvent;
|
import net.momirealms.craftengine.bukkit.api.event.FurniturePlaceEvent;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package net.momirealms.craftengine.bukkit.block;
|
package net.momirealms.craftengine.bukkit.block;
|
||||||
|
|
||||||
import io.papermc.paper.event.block.BlockBreakBlockEvent;
|
import io.papermc.paper.event.block.BlockBreakBlockEvent;
|
||||||
|
import net.momirealms.craftengine.bukkit.api.BukkitAdaptors;
|
||||||
import net.momirealms.craftengine.bukkit.api.event.CustomBlockBreakEvent;
|
import net.momirealms.craftengine.bukkit.api.event.CustomBlockBreakEvent;
|
||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||||
@@ -56,7 +57,7 @@ public final class BlockEventListener implements Listener {
|
|||||||
public void onPlayerAttack(EntityDamageByEntityEvent event) {
|
public void onPlayerAttack(EntityDamageByEntityEvent event) {
|
||||||
if (!VersionHelper.isOrAbove1_20_5()) {
|
if (!VersionHelper.isOrAbove1_20_5()) {
|
||||||
if (event.getDamager() instanceof Player player) {
|
if (event.getDamager() instanceof Player player) {
|
||||||
BukkitServerPlayer serverPlayer = plugin.adapt(player);
|
BukkitServerPlayer serverPlayer = BukkitAdaptors.adapt(player);
|
||||||
serverPlayer.setClientSideCanBreakBlock(true);
|
serverPlayer.setClientSideCanBreakBlock(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -65,7 +66,7 @@ public final class BlockEventListener implements Listener {
|
|||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler(ignoreCancelled = true)
|
||||||
public void onPlaceBlock(BlockPlaceEvent event) {
|
public void onPlaceBlock(BlockPlaceEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
BukkitServerPlayer serverPlayer = plugin.adapt(player);
|
BukkitServerPlayer serverPlayer = BukkitAdaptors.adapt(player);
|
||||||
// send swing if player is clicking a replaceable block
|
// send swing if player is clicking a replaceable block
|
||||||
if (serverPlayer.shouldResendSwing()) {
|
if (serverPlayer.shouldResendSwing()) {
|
||||||
player.swingHand(event.getHand());
|
player.swingHand(event.getHand());
|
||||||
@@ -112,7 +113,7 @@ public final class BlockEventListener implements Listener {
|
|||||||
int stateId = BlockStateUtils.blockStateToId(blockState);
|
int stateId = BlockStateUtils.blockStateToId(blockState);
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
Location location = block.getLocation();
|
Location location = block.getLocation();
|
||||||
BukkitServerPlayer serverPlayer = this.plugin.adapt(player);
|
BukkitServerPlayer serverPlayer = BukkitAdaptors.adapt(player);
|
||||||
net.momirealms.craftengine.core.world.World world = new BukkitWorld(player.getWorld());
|
net.momirealms.craftengine.core.world.World world = new BukkitWorld(player.getWorld());
|
||||||
WorldPosition position = new WorldPosition(world, location.getBlockX() + 0.5, location.getBlockY() + 0.5, location.getBlockZ() + 0.5);
|
WorldPosition position = new WorldPosition(world, location.getBlockX() + 0.5, location.getBlockY() + 0.5, location.getBlockZ() + 0.5);
|
||||||
Item<ItemStack> itemInHand = serverPlayer.getItemInHand(InteractionHand.MAIN_HAND);
|
Item<ItemStack> itemInHand = serverPlayer.getItemInHand(InteractionHand.MAIN_HAND);
|
||||||
@@ -246,7 +247,7 @@ public final class BlockEventListener implements Listener {
|
|||||||
Location location = player.getLocation();
|
Location location = player.getLocation();
|
||||||
ImmutableBlockState state = optionalCustomState.get();
|
ImmutableBlockState state = optionalCustomState.get();
|
||||||
Cancellable cancellable = Cancellable.of(event::isCancelled, event::setCancelled);
|
Cancellable cancellable = Cancellable.of(event::isCancelled, event::setCancelled);
|
||||||
state.owner().value().execute(PlayerOptionalContext.of(this.plugin.adapt(player), ContextHolder.builder()
|
state.owner().value().execute(PlayerOptionalContext.of(BukkitAdaptors.adapt(player), ContextHolder.builder()
|
||||||
.withParameter(DirectContextParameters.EVENT, cancellable)
|
.withParameter(DirectContextParameters.EVENT, cancellable)
|
||||||
.withParameter(DirectContextParameters.POSITION, new WorldPosition(new BukkitWorld(event.getWorld()), LocationUtils.toVec3d(location)))
|
.withParameter(DirectContextParameters.POSITION, new WorldPosition(new BukkitWorld(event.getWorld()), LocationUtils.toVec3d(location)))
|
||||||
.withParameter(DirectContextParameters.BLOCK, new BukkitBlockInWorld(block))
|
.withParameter(DirectContextParameters.BLOCK, new BukkitBlockInWorld(block))
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
package net.momirealms.craftengine.bukkit.entity.furniture;
|
package net.momirealms.craftengine.bukkit.entity.furniture;
|
||||||
|
|
||||||
|
import net.momirealms.craftengine.bukkit.api.BukkitAdaptors;
|
||||||
import net.momirealms.craftengine.bukkit.entity.furniture.hitbox.InteractionHitBox;
|
import net.momirealms.craftengine.bukkit.entity.furniture.hitbox.InteractionHitBox;
|
||||||
import net.momirealms.craftengine.bukkit.nms.CollisionEntity;
|
import net.momirealms.craftengine.bukkit.nms.CollisionEntity;
|
||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.network.handler.FurniturePacketHandler;
|
import net.momirealms.craftengine.bukkit.plugin.network.handler.FurniturePacketHandler;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MEntityTypes;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MEntityTypes;
|
||||||
|
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
||||||
import net.momirealms.craftengine.bukkit.util.EntityUtils;
|
import net.momirealms.craftengine.bukkit.util.EntityUtils;
|
||||||
import net.momirealms.craftengine.bukkit.util.KeyUtils;
|
import net.momirealms.craftengine.bukkit.util.KeyUtils;
|
||||||
import net.momirealms.craftengine.bukkit.util.LocationUtils;
|
import net.momirealms.craftengine.bukkit.util.LocationUtils;
|
||||||
@@ -207,15 +209,16 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager {
|
|||||||
BukkitFurniture furniture = addNewFurniture(display, customFurniture);
|
BukkitFurniture furniture = addNewFurniture(display, customFurniture);
|
||||||
furniture.initializeColliders();
|
furniture.initializeColliders();
|
||||||
for (Player player : display.getTrackedPlayers()) {
|
for (Player player : display.getTrackedPlayers()) {
|
||||||
this.plugin.adapt(player).entityPacketHandlers().computeIfAbsent(furniture.baseEntityId(), k -> new FurniturePacketHandler(furniture.fakeEntityIds()));
|
BukkitAdaptors.adapt(player).entityPacketHandlers().computeIfAbsent(furniture.baseEntityId(), k -> new FurniturePacketHandler(furniture.fakeEntityIds()));
|
||||||
this.plugin.networkManager().sendPacket(this.plugin.adapt(player), furniture.spawnPacket(player));
|
this.plugin.networkManager().sendPacket(BukkitAdaptors.adapt(player), furniture.spawnPacket(player));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
BukkitFurniture furniture = addNewFurniture(display, customFurniture);
|
BukkitFurniture furniture = addNewFurniture(display, customFurniture);
|
||||||
for (Player player : display.getTrackedPlayers()) {
|
for (Player player : display.getTrackedPlayers()) {
|
||||||
this.plugin.adapt(player).entityPacketHandlers().computeIfAbsent(furniture.baseEntityId(), k -> new FurniturePacketHandler(furniture.fakeEntityIds()));
|
BukkitServerPlayer serverPlayer = BukkitAdaptors.adapt(player);
|
||||||
this.plugin.networkManager().sendPacket(this.plugin.adapt(player), furniture.spawnPacket(player));
|
serverPlayer.entityPacketHandlers().computeIfAbsent(furniture.baseEntityId(), k -> new FurniturePacketHandler(furniture.fakeEntityIds()));
|
||||||
|
this.plugin.networkManager().sendPacket(serverPlayer, furniture.spawnPacket(player));
|
||||||
}
|
}
|
||||||
if (preventChange) {
|
if (preventChange) {
|
||||||
this.plugin.scheduler().sync().runLater(furniture::initializeColliders, 1, location.getWorld(), location.getBlockX() >> 4, location.getBlockZ() >> 4);
|
this.plugin.scheduler().sync().runLater(furniture::initializeColliders, 1, location.getWorld(), location.getBlockX() >> 4, location.getBlockZ() >> 4);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.google.gson.JsonObject;
|
|||||||
import io.papermc.paper.event.player.AsyncChatCommandDecorateEvent;
|
import io.papermc.paper.event.player.AsyncChatCommandDecorateEvent;
|
||||||
import io.papermc.paper.event.player.AsyncChatDecorateEvent;
|
import io.papermc.paper.event.player.AsyncChatDecorateEvent;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.momirealms.craftengine.bukkit.api.BukkitAdaptors;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.paper.PaperReflections;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.paper.PaperReflections;
|
||||||
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
||||||
@@ -143,7 +144,7 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
|
|||||||
|
|
||||||
if (renameText == null || renameText.isEmpty()) return;
|
if (renameText == null || renameText.isEmpty()) return;
|
||||||
Component itemName = Component.text(renameText);
|
Component itemName = Component.text(renameText);
|
||||||
EmojiComponentProcessResult replaceProcessResult = replaceComponentEmoji(itemName, this.plugin.adapt(player), renameText);
|
EmojiComponentProcessResult replaceProcessResult = replaceComponentEmoji(itemName, BukkitAdaptors.adapt(player), renameText);
|
||||||
if (replaceProcessResult.changed()) {
|
if (replaceProcessResult.changed()) {
|
||||||
Item<ItemStack> wrapped = this.plugin.itemManager().wrap(result);
|
Item<ItemStack> wrapped = this.plugin.itemManager().wrap(result);
|
||||||
wrapped.customNameJson(AdventureHelper.componentToJson(replaceProcessResult.newText()));
|
wrapped.customNameJson(AdventureHelper.componentToJson(replaceProcessResult.newText()));
|
||||||
@@ -160,7 +161,7 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
|
|||||||
JsonElement json = ComponentUtils.paperAdventureToJsonElement(lines.get(i));
|
JsonElement json = ComponentUtils.paperAdventureToJsonElement(lines.get(i));
|
||||||
if (json == null) continue;
|
if (json == null) continue;
|
||||||
Component line = AdventureHelper.jsonElementToComponent(json);
|
Component line = AdventureHelper.jsonElementToComponent(json);
|
||||||
EmojiComponentProcessResult result = replaceComponentEmoji(line, plugin.adapt(player));
|
EmojiComponentProcessResult result = replaceComponentEmoji(line, BukkitAdaptors.adapt(player));
|
||||||
if (result.changed()) {
|
if (result.changed()) {
|
||||||
try {
|
try {
|
||||||
PaperReflections.method$SignChangeEvent$line.invoke(event, i, ComponentUtils.jsonElementToPaperAdventure(AdventureHelper.componentToJsonElement(result.newText())));
|
PaperReflections.method$SignChangeEvent$line.invoke(event, i, ComponentUtils.jsonElementToPaperAdventure(AdventureHelper.componentToJsonElement(result.newText())));
|
||||||
@@ -191,7 +192,7 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
|
|||||||
for (int i = 0; i < pages.size(); i++) {
|
for (int i = 0; i < pages.size(); i++) {
|
||||||
JsonElement json = ComponentUtils.paperAdventureToJsonElement(pages.get(i));
|
JsonElement json = ComponentUtils.paperAdventureToJsonElement(pages.get(i));
|
||||||
Component page = AdventureHelper.jsonElementToComponent(json);
|
Component page = AdventureHelper.jsonElementToComponent(json);
|
||||||
EmojiComponentProcessResult result = replaceComponentEmoji(page, plugin.adapt(player));
|
EmojiComponentProcessResult result = replaceComponentEmoji(page, BukkitAdaptors.adapt(player));
|
||||||
if (result.changed()) {
|
if (result.changed()) {
|
||||||
changed = true;
|
changed = true;
|
||||||
try {
|
try {
|
||||||
@@ -214,7 +215,7 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
|
|||||||
Object originalMessage = PaperReflections.field$AsyncChatDecorateEvent$originalMessage.get(event);
|
Object originalMessage = PaperReflections.field$AsyncChatDecorateEvent$originalMessage.get(event);
|
||||||
String rawJsonMessage = ComponentUtils.paperAdventureToJson(originalMessage);
|
String rawJsonMessage = ComponentUtils.paperAdventureToJson(originalMessage);
|
||||||
if (Config.allowEmojiChat()) {
|
if (Config.allowEmojiChat()) {
|
||||||
EmojiTextProcessResult processResult = replaceJsonEmoji(rawJsonMessage, this.plugin.adapt(player));
|
EmojiTextProcessResult processResult = replaceJsonEmoji(rawJsonMessage, BukkitAdaptors.adapt(player));
|
||||||
boolean hasChanged = processResult.replaced();
|
boolean hasChanged = processResult.replaced();
|
||||||
if (!player.hasPermission(FontManager.BYPASS_CHAT)) {
|
if (!player.hasPermission(FontManager.BYPASS_CHAT)) {
|
||||||
IllegalCharacterProcessResult result = processIllegalCharacters(processResult.text());
|
IllegalCharacterProcessResult result = processIllegalCharacters(processResult.text());
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package net.momirealms.craftengine.bukkit.item.listener;
|
package net.momirealms.craftengine.bukkit.item.listener;
|
||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.momirealms.craftengine.bukkit.api.BukkitAdaptors;
|
||||||
import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks;
|
import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks;
|
||||||
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
@@ -49,7 +50,7 @@ public class DebugStickListener implements Listener {
|
|||||||
Material material = itemInHand.getType();
|
Material material = itemInHand.getType();
|
||||||
if (material != Material.DEBUG_STICK) return;
|
if (material != Material.DEBUG_STICK) return;
|
||||||
Player bukkitPlayer = event.getPlayer();
|
Player bukkitPlayer = event.getPlayer();
|
||||||
BukkitServerPlayer player = this.plugin.adapt(bukkitPlayer);
|
BukkitServerPlayer player = BukkitAdaptors.adapt(bukkitPlayer);
|
||||||
if (!(player.canInstabuild() && player.hasPermission("minecraft.debugstick")) && !player.hasPermission("minecraft.debugstick.always")) {
|
if (!(player.canInstabuild() && player.hasPermission("minecraft.debugstick")) && !player.hasPermission("minecraft.debugstick.always")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package net.momirealms.craftengine.bukkit.item.listener;
|
package net.momirealms.craftengine.bukkit.item.listener;
|
||||||
|
|
||||||
import io.papermc.paper.event.block.CompostItemEvent;
|
import io.papermc.paper.event.block.CompostItemEvent;
|
||||||
|
import net.momirealms.craftengine.bukkit.api.BukkitAdaptors;
|
||||||
import net.momirealms.craftengine.bukkit.api.event.CustomBlockInteractEvent;
|
import net.momirealms.craftengine.bukkit.api.event.CustomBlockInteractEvent;
|
||||||
import net.momirealms.craftengine.bukkit.item.BukkitCustomItem;
|
import net.momirealms.craftengine.bukkit.item.BukkitCustomItem;
|
||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
@@ -69,7 +70,7 @@ public class ItemEventListener implements Listener {
|
|||||||
public void onInteractEntity(PlayerInteractEntityEvent event) {
|
public void onInteractEntity(PlayerInteractEntityEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
Entity entity = event.getRightClicked();
|
Entity entity = event.getRightClicked();
|
||||||
BukkitServerPlayer serverPlayer = this.plugin.adapt(player);
|
BukkitServerPlayer serverPlayer = BukkitAdaptors.adapt(player);
|
||||||
if (serverPlayer == null) return;
|
if (serverPlayer == null) return;
|
||||||
|
|
||||||
InteractionHand hand = event.getHand() == EquipmentSlot.HAND ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND;
|
InteractionHand hand = event.getHand() == EquipmentSlot.HAND ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND;
|
||||||
@@ -107,7 +108,7 @@ public class ItemEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BukkitServerPlayer serverPlayer = this.plugin.adapt(player);
|
BukkitServerPlayer serverPlayer = BukkitAdaptors.adapt(player);
|
||||||
if (serverPlayer == null) return;
|
if (serverPlayer == null) return;
|
||||||
InteractionHand hand = event.getHand() == EquipmentSlot.HAND ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND;
|
InteractionHand hand = event.getHand() == EquipmentSlot.HAND ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND;
|
||||||
// 如果本tick内主手已被处理,则不处理副手
|
// 如果本tick内主手已被处理,则不处理副手
|
||||||
@@ -349,7 +350,7 @@ public class ItemEventListener implements Listener {
|
|||||||
if (action != Action.RIGHT_CLICK_AIR && action != Action.LEFT_CLICK_AIR)
|
if (action != Action.RIGHT_CLICK_AIR && action != Action.LEFT_CLICK_AIR)
|
||||||
return;
|
return;
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
BukkitServerPlayer serverPlayer = this.plugin.adapt(player);
|
BukkitServerPlayer serverPlayer = BukkitAdaptors.adapt(player);
|
||||||
if (serverPlayer.isSpectatorMode())
|
if (serverPlayer.isSpectatorMode())
|
||||||
return;
|
return;
|
||||||
// Gets the item in hand
|
// Gets the item in hand
|
||||||
@@ -411,7 +412,7 @@ public class ItemEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
Cancellable cancellable = Cancellable.of(event::isCancelled, event::setCancelled);
|
Cancellable cancellable = Cancellable.of(event::isCancelled, event::setCancelled);
|
||||||
CustomItem<ItemStack> customItem = optionalCustomItem.get();
|
CustomItem<ItemStack> customItem = optionalCustomItem.get();
|
||||||
PlayerOptionalContext context = PlayerOptionalContext.of(this.plugin.adapt(event.getPlayer()), ContextHolder.builder()
|
PlayerOptionalContext context = PlayerOptionalContext.of(BukkitAdaptors.adapt(event.getPlayer()), ContextHolder.builder()
|
||||||
.withParameter(DirectContextParameters.ITEM_IN_HAND, wrapped)
|
.withParameter(DirectContextParameters.ITEM_IN_HAND, wrapped)
|
||||||
.withParameter(DirectContextParameters.EVENT, cancellable)
|
.withParameter(DirectContextParameters.EVENT, cancellable)
|
||||||
.withParameter(DirectContextParameters.HAND, event.getHand() == EquipmentSlot.HAND ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND)
|
.withParameter(DirectContextParameters.HAND, event.getHand() == EquipmentSlot.HAND ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND)
|
||||||
@@ -425,7 +426,7 @@ public class ItemEventListener implements Listener {
|
|||||||
if (replacement == null) {
|
if (replacement == null) {
|
||||||
event.setReplacement(null);
|
event.setReplacement(null);
|
||||||
} else {
|
} else {
|
||||||
ItemStack replacementItem = this.plugin.itemManager().buildItemStack(replacement, this.plugin.adapt(event.getPlayer()));
|
ItemStack replacementItem = this.plugin.itemManager().buildItemStack(replacement, BukkitAdaptors.adapt(event.getPlayer()));
|
||||||
event.setReplacement(replacementItem);
|
event.setReplacement(replacementItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -516,7 +517,7 @@ public class ItemEventListener implements Listener {
|
|||||||
if (optionalCustomItem.isEmpty()) return;
|
if (optionalCustomItem.isEmpty()) return;
|
||||||
BukkitCustomItem customItem = (BukkitCustomItem) optionalCustomItem.get();
|
BukkitCustomItem customItem = (BukkitCustomItem) optionalCustomItem.get();
|
||||||
if (customItem.clientItem() == FastNMS.INSTANCE.method$ItemStack$getItem(wrapped.getLiteralObject())) return;
|
if (customItem.clientItem() == FastNMS.INSTANCE.method$ItemStack$getItem(wrapped.getLiteralObject())) return;
|
||||||
BukkitServerPlayer serverPlayer = this.plugin.adapt(player);
|
BukkitServerPlayer serverPlayer = BukkitAdaptors.adapt(player);
|
||||||
if (serverPlayer == null) return;
|
if (serverPlayer == null) return;
|
||||||
this.plugin.scheduler().sync().runDelayed(() -> {
|
this.plugin.scheduler().sync().runDelayed(() -> {
|
||||||
Object container = FastNMS.INSTANCE.field$Player$containerMenu(serverPlayer.serverPlayer());
|
Object container = FastNMS.INSTANCE.field$Player$containerMenu(serverPlayer.serverPlayer());
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package net.momirealms.craftengine.bukkit.item.recipe;
|
|||||||
|
|
||||||
import com.destroystokyo.paper.event.inventory.PrepareResultEvent;
|
import com.destroystokyo.paper.event.inventory.PrepareResultEvent;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.momirealms.craftengine.bukkit.api.BukkitAdaptors;
|
||||||
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
||||||
import net.momirealms.craftengine.bukkit.item.ComponentTypes;
|
import net.momirealms.craftengine.bukkit.item.ComponentTypes;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||||
@@ -455,7 +456,7 @@ public class RecipeEventListener implements Listener {
|
|||||||
|
|
||||||
Player player = InventoryUtils.getPlayerFromInventoryEvent(event);
|
Player player = InventoryUtils.getPlayerFromInventoryEvent(event);
|
||||||
|
|
||||||
if (finalCost >= maxRepairCost && !plugin.adapt(player).canInstabuild()) {
|
if (finalCost >= maxRepairCost && !BukkitAdaptors.adapt(player).canInstabuild()) {
|
||||||
hasResult = false;
|
hasResult = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -548,7 +549,7 @@ public class RecipeEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = InventoryUtils.getPlayerFromInventoryEvent(event);
|
Player player = InventoryUtils.getPlayerFromInventoryEvent(event);
|
||||||
Item<ItemStack> newItem = customItemOptional.get().buildItem(plugin.adapt(player));
|
Item<ItemStack> newItem = customItemOptional.get().buildItem(BukkitAdaptors.adapt(player));
|
||||||
newItem.maxDamage(max);
|
newItem.maxDamage(max);
|
||||||
newItem.damage(Math.max(max - finalDurability, 0));
|
newItem.damage(Math.max(max - finalDurability, 0));
|
||||||
inventory.setResult(newItem.getItem());
|
inventory.setResult(newItem.getItem());
|
||||||
@@ -597,7 +598,7 @@ public class RecipeEventListener implements Listener {
|
|||||||
CraftingInput<ItemStack> input = getCraftingInput(inventory);
|
CraftingInput<ItemStack> input = getCraftingInput(inventory);
|
||||||
if (input == null) return;
|
if (input == null) return;
|
||||||
Player player = InventoryUtils.getPlayerFromInventoryEvent(event);
|
Player player = InventoryUtils.getPlayerFromInventoryEvent(event);
|
||||||
BukkitServerPlayer serverPlayer = this.plugin.adapt(player);
|
BukkitServerPlayer serverPlayer = BukkitAdaptors.adapt(player);
|
||||||
inventory.setResult(craftingTableRecipe.assemble(input, new ItemBuildContext(serverPlayer, ContextHolder.EMPTY)));
|
inventory.setResult(craftingTableRecipe.assemble(input, new ItemBuildContext(serverPlayer, ContextHolder.EMPTY)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -650,7 +651,7 @@ public class RecipeEventListener implements Listener {
|
|||||||
SmithingInput<ItemStack> input = getSmithingInput(inventory);
|
SmithingInput<ItemStack> input = getSmithingInput(inventory);
|
||||||
if (smithingTrimRecipe.matches(input)) {
|
if (smithingTrimRecipe.matches(input)) {
|
||||||
Player player = InventoryUtils.getPlayerFromInventoryEvent(event);
|
Player player = InventoryUtils.getPlayerFromInventoryEvent(event);
|
||||||
ItemStack result = smithingTrimRecipe.assemble(getSmithingInput(inventory), new ItemBuildContext(this.plugin.adapt(player), ContextHolder.EMPTY));
|
ItemStack result = smithingTrimRecipe.assemble(getSmithingInput(inventory), new ItemBuildContext(BukkitAdaptors.adapt(player), ContextHolder.EMPTY));
|
||||||
event.setResult(result);
|
event.setResult(result);
|
||||||
} else {
|
} else {
|
||||||
event.setResult(null);
|
event.setResult(null);
|
||||||
@@ -674,7 +675,7 @@ public class RecipeEventListener implements Listener {
|
|||||||
SmithingInput<ItemStack> input = getSmithingInput(inventory);
|
SmithingInput<ItemStack> input = getSmithingInput(inventory);
|
||||||
if (smithingTransformRecipe.matches(input)) {
|
if (smithingTransformRecipe.matches(input)) {
|
||||||
Player player = InventoryUtils.getPlayerFromInventoryEvent(event);
|
Player player = InventoryUtils.getPlayerFromInventoryEvent(event);
|
||||||
ItemStack processed = smithingTransformRecipe.assemble(input, new ItemBuildContext(this.plugin.adapt(player), ContextHolder.EMPTY));
|
ItemStack processed = smithingTransformRecipe.assemble(input, new ItemBuildContext(BukkitAdaptors.adapt(player), ContextHolder.EMPTY));
|
||||||
event.setResult(processed);
|
event.setResult(processed);
|
||||||
} else {
|
} else {
|
||||||
event.setResult(null);
|
event.setResult(null);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package net.momirealms.craftengine.bukkit.loot;
|
package net.momirealms.craftengine.bukkit.loot;
|
||||||
|
|
||||||
|
import net.momirealms.craftengine.bukkit.api.BukkitAdaptors;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MBlocks;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MBlocks;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
||||||
@@ -72,7 +73,7 @@ public class BukkitVanillaLootManager extends AbstractVanillaLootManager impleme
|
|||||||
BukkitServerPlayer optionalPlayer = null;
|
BukkitServerPlayer optionalPlayer = null;
|
||||||
if (VersionHelper.isOrAbove1_20_5()) {
|
if (VersionHelper.isOrAbove1_20_5()) {
|
||||||
if (event.getDamageSource().getCausingEntity() instanceof Player player) {
|
if (event.getDamageSource().getCausingEntity() instanceof Player player) {
|
||||||
optionalPlayer = this.plugin.adapt(player);
|
optionalPlayer = BukkitAdaptors.adapt(player);
|
||||||
builder.withParameter(DirectContextParameters.PLAYER, optionalPlayer);
|
builder.withParameter(DirectContextParameters.PLAYER, optionalPlayer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package net.momirealms.craftengine.bukkit.pack;
|
package net.momirealms.craftengine.bukkit.pack;
|
||||||
|
|
||||||
|
import net.momirealms.craftengine.bukkit.api.BukkitAdaptors;
|
||||||
import net.momirealms.craftengine.bukkit.api.event.AsyncResourcePackGenerateEvent;
|
import net.momirealms.craftengine.bukkit.api.event.AsyncResourcePackGenerateEvent;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.command.feature.ReloadCommand;
|
import net.momirealms.craftengine.bukkit.plugin.command.feature.ReloadCommand;
|
||||||
@@ -43,7 +44,7 @@ public class BukkitPackManager extends AbstractPackManager implements Listener {
|
|||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
if (Config.sendPackOnJoin() && !VersionHelper.isOrAbove1_20_2()) {
|
if (Config.sendPackOnJoin() && !VersionHelper.isOrAbove1_20_2()) {
|
||||||
Player player = plugin.adapt(event.getPlayer());
|
Player player = BukkitAdaptors.adapt(event.getPlayer());
|
||||||
this.sendResourcePack(player);
|
this.sendResourcePack(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ import org.bukkit.World;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jspecify.annotations.Nullable;
|
import org.jspecify.annotations.Nullable;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
@@ -58,7 +59,6 @@ import java.net.URLConnection;
|
|||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public class BukkitCraftEngine extends CraftEngine {
|
public class BukkitCraftEngine extends CraftEngine {
|
||||||
@@ -363,11 +363,9 @@ public class BukkitCraftEngine extends CraftEngine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BukkitServerPlayer adapt(org.bukkit.entity.Player player) {
|
public BukkitServerPlayer adapt(@NotNull org.bukkit.entity.Player player) {
|
||||||
if (player == null) return null;
|
Objects.requireNonNull(player, "player cannot be null");
|
||||||
return Optional.ofNullable((BukkitServerPlayer) networkManager().getOnlineUser(player)).orElseGet(
|
return (BukkitServerPlayer) networkManager().getOnlineUser(player);
|
||||||
() -> (BukkitServerPlayer) networkManager().getUser(player)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public AntiGriefLib antiGriefProvider() {
|
public AntiGriefLib antiGriefProvider() {
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import net.kyori.adventure.text.Component;
|
|||||||
import net.momirealms.craftengine.bukkit.api.CraftEngineItems;
|
import net.momirealms.craftengine.bukkit.api.CraftEngineItems;
|
||||||
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature;
|
import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
|
||||||
import net.momirealms.craftengine.bukkit.util.PlayerUtils;
|
import net.momirealms.craftengine.bukkit.util.PlayerUtils;
|
||||||
import net.momirealms.craftengine.core.item.CustomItem;
|
import net.momirealms.craftengine.core.item.CustomItem;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import org.incendo.cloud.suggestion.Suggestion;
|
|||||||
import org.incendo.cloud.suggestion.SuggestionProvider;
|
import org.incendo.cloud.suggestion.SuggestionProvider;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
public class GiveItemCommand extends BukkitCommandFeature<CommandSender> {
|
public class GiveItemCommand extends BukkitCommandFeature<CommandSender> {
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package net.momirealms.craftengine.bukkit.plugin.command.feature;
|
package net.momirealms.craftengine.bukkit.plugin.command.feature;
|
||||||
|
|
||||||
import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature;
|
import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.network.BukkitNetworkManager;
|
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager;
|
import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -19,8 +18,6 @@ public class TestCommand extends BukkitCommandFeature<CommandSender> {
|
|||||||
return builder
|
return builder
|
||||||
.senderType(Player.class)
|
.senderType(Player.class)
|
||||||
.handler(context -> {
|
.handler(context -> {
|
||||||
Player player = context.sender();
|
|
||||||
player.sendMessage("客户端模组状态: " + BukkitNetworkManager.instance().getUser(player).clientModEnabled());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,11 @@ import net.momirealms.craftengine.bukkit.plugin.network.id.PacketIdFinder;
|
|||||||
import net.momirealms.craftengine.bukkit.plugin.network.id.PacketIds1_20;
|
import net.momirealms.craftengine.bukkit.plugin.network.id.PacketIds1_20;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.network.id.PacketIds1_20_5;
|
import net.momirealms.craftengine.bukkit.plugin.network.id.PacketIds1_20_5;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
||||||
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.LeavesReflections;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.LibraryReflections;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.LibraryReflections;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.NetworkReflections;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.NetworkReflections;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
||||||
|
import net.momirealms.craftengine.bukkit.plugin.user.FakeBukkitServerPlayer;
|
||||||
import net.momirealms.craftengine.bukkit.util.KeyUtils;
|
import net.momirealms.craftengine.bukkit.util.KeyUtils;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.context.CooldownData;
|
import net.momirealms.craftengine.core.plugin.context.CooldownData;
|
||||||
@@ -142,6 +144,47 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
} catch (ReflectiveOperationException e) {
|
} catch (ReflectiveOperationException e) {
|
||||||
throw new RuntimeException("Failed to init server connection", e);
|
throw new RuntimeException("Failed to init server connection", e);
|
||||||
}
|
}
|
||||||
|
// Inject Leaves bot list
|
||||||
|
if (VersionHelper.isLeaves()) {
|
||||||
|
this.injectLeavesBotList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BukkitNetworkManager instance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addFakePlayer(Player player) {
|
||||||
|
FakeBukkitServerPlayer fakePlayer = new FakeBukkitServerPlayer(this.plugin);
|
||||||
|
fakePlayer.setPlayer(player);
|
||||||
|
this.onlineUsers.put(player.getUniqueId(), fakePlayer);
|
||||||
|
this.resetUserArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean removeFakePlayer(Player player) {
|
||||||
|
BukkitServerPlayer fakePlayer = this.onlineUsers.get(player.getUniqueId());
|
||||||
|
if (!(fakePlayer instanceof FakeBukkitServerPlayer)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
this.onlineUsers.remove(player.getUniqueId());
|
||||||
|
this.resetUserArray();
|
||||||
|
this.saveCooldown(player, fakePlayer.cooldown());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private void injectLeavesBotList() {
|
||||||
|
try {
|
||||||
|
Object botList = LeavesReflections.field$BotList$INSTANCE.get(null);
|
||||||
|
List<Object> bots = (List<Object>) LeavesReflections.field$BotList$bots.get(botList);
|
||||||
|
ListMonitor<Object> monitor = new ListMonitor<>(bots,
|
||||||
|
(bot) -> addFakePlayer(FastNMS.INSTANCE.method$ServerPlayer$getBukkitEntity(bot)),
|
||||||
|
(bot) -> removeFakePlayer(FastNMS.INSTANCE.method$ServerPlayer$getBukkitEntity(bot))
|
||||||
|
);
|
||||||
|
LeavesReflections.field$BotList$bots.set(botList, monitor);
|
||||||
|
} catch (ReflectiveOperationException e) {
|
||||||
|
this.plugin.logger().severe("Failed to inject leaves bot list");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerPacketHandlers() {
|
private void registerPacketHandlers() {
|
||||||
@@ -203,10 +246,6 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
registerC2SByteBufPacketConsumer(PacketConsumers.INTERACT_ENTITY, this.packetIds.serverboundInteractPacket());
|
registerC2SByteBufPacketConsumer(PacketConsumers.INTERACT_ENTITY, this.packetIds.serverboundInteractPacket());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BukkitNetworkManager instance() {
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
@@ -215,10 +254,10 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
user.setPlayer(player);
|
user.setPlayer(player);
|
||||||
this.onlineUsers.put(player.getUniqueId(), user);
|
this.onlineUsers.put(player.getUniqueId(), user);
|
||||||
this.resetUserArray();
|
this.resetUserArray();
|
||||||
|
// folia在此tick每个玩家
|
||||||
if (VersionHelper.isFolia()) {
|
if (VersionHelper.isFolia()) {
|
||||||
player.getScheduler().runAtFixedRate(plugin.javaPlugin(), (t) -> user.tick(),
|
player.getScheduler().runAtFixedRate(plugin.javaPlugin(), (t) -> user.tick(),
|
||||||
() -> {
|
() -> {}, 1, 1);
|
||||||
}, 1, 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -282,7 +321,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NetWorkUser getUser(Channel channel) {
|
public NetWorkUser getUser(@NotNull Channel channel) {
|
||||||
ChannelPipeline pipeline = channel.pipeline();
|
ChannelPipeline pipeline = channel.pipeline();
|
||||||
return this.users.get(pipeline);
|
return this.users.get(pipeline);
|
||||||
}
|
}
|
||||||
@@ -298,14 +337,18 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
return getChannel((Player) player.platformPlayer());
|
return getChannel((Player) player.platformPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
public NetWorkUser getUser(Player player) {
|
public NetWorkUser getUser(Player player) {
|
||||||
return getUser(getChannel(player));
|
return getUser(getChannel(player));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
public NetWorkUser getOnlineUser(Player player) {
|
public NetWorkUser getOnlineUser(Player player) {
|
||||||
return this.onlineUsers.get(player.getUniqueId());
|
return this.onlineUsers.get(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 当假人的时候channel为null
|
||||||
|
@NotNull
|
||||||
public Channel getChannel(Player player) {
|
public Channel getChannel(Player player) {
|
||||||
return FastNMS.INSTANCE.field$Connection$channel(
|
return FastNMS.INSTANCE.field$Connection$channel(
|
||||||
FastNMS.INSTANCE.field$ServerGamePacketListenerImpl$connection(
|
FastNMS.INSTANCE.field$ServerGamePacketListenerImpl$connection(
|
||||||
@@ -318,6 +361,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendPacket(@NotNull NetWorkUser player, Object packet, boolean immediately, Runnable sendListener) {
|
public void sendPacket(@NotNull NetWorkUser player, Object packet, boolean immediately, Runnable sendListener) {
|
||||||
|
if (player.isFakePlayer()) return;
|
||||||
if (immediately) {
|
if (immediately) {
|
||||||
this.immediatePacketConsumer.accept(player.nettyChannel(), packet, sendListener);
|
this.immediatePacketConsumer.accept(player.nettyChannel(), packet, sendListener);
|
||||||
} else {
|
} else {
|
||||||
@@ -327,6 +371,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendPackets(@NotNull NetWorkUser player, List<Object> packet, boolean immediately, Runnable sendListener) {
|
public void sendPackets(@NotNull NetWorkUser player, List<Object> packet, boolean immediately, Runnable sendListener) {
|
||||||
|
if (player.isFakePlayer()) return;
|
||||||
if (immediately) {
|
if (immediately) {
|
||||||
this.immediatePacketsConsumer.accept(player.nettyChannel(), packet, sendListener);
|
this.immediatePacketsConsumer.accept(player.nettyChannel(), packet, sendListener);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package net.momirealms.craftengine.bukkit.plugin.reflection.minecraft;
|
||||||
|
|
||||||
|
//import net.momirealms.craftengine.core.util.MiscUtils;
|
||||||
|
//import net.momirealms.craftengine.core.util.ReflectionUtils;
|
||||||
|
//import net.momirealms.craftengine.core.util.VersionHelper;
|
||||||
|
//import org.bukkit.event.HandlerList;
|
||||||
|
//
|
||||||
|
//import java.lang.reflect.Field;
|
||||||
|
//import java.util.Optional;
|
||||||
|
|
||||||
|
import net.momirealms.craftengine.core.util.ReflectionUtils;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
// TODO API 太新了需要1.21.8,目前先采用其他方式解决假人问题
|
||||||
|
public final class LeavesReflections {
|
||||||
|
private LeavesReflections() {}
|
||||||
|
|
||||||
|
// public static final Class<?> clazz$BotJoinEvent = MiscUtils.requireNonNullIf(ReflectionUtils.getClazz("org.leavesmc.leaves.event.bot.BotJoinEvent"), VersionHelper.isLeaves());
|
||||||
|
//
|
||||||
|
// public static final Class<?> clazz$BotRemoveEvent = MiscUtils.requireNonNullIf(ReflectionUtils.getClazz("org.leavesmc.leaves.event.bot.BotRemoveEvent"), VersionHelper.isLeaves());
|
||||||
|
//
|
||||||
|
// public static final Class<?> clazz$BotEvent = MiscUtils.requireNonNullIf(ReflectionUtils.getClazz("org.leavesmc.leaves.event.bot.BotEvent"), VersionHelper.isLeaves());
|
||||||
|
//
|
||||||
|
// public static final Class<?> clazz$Bot = MiscUtils.requireNonNullIf(ReflectionUtils.getClazz("org.leavesmc.leaves.entity.bot.Bot"), VersionHelper.isLeaves());
|
||||||
|
//
|
||||||
|
// public static final Field field$BotEvent$bot = Optional.ofNullable(clazz$BotEvent)
|
||||||
|
// .map(it -> ReflectionUtils.getDeclaredField(it, clazz$Bot, 0))
|
||||||
|
// .orElse(null);
|
||||||
|
//
|
||||||
|
// public static final Field field$BotJoinEvent$handlers = Optional.ofNullable(clazz$BotJoinEvent)
|
||||||
|
// .map(it -> ReflectionUtils.getDeclaredField(it, HandlerList.class, 0))
|
||||||
|
// .orElse(null);
|
||||||
|
//
|
||||||
|
// public static final Field field$BotRemoveEvent$handlers = Optional.ofNullable(clazz$BotRemoveEvent)
|
||||||
|
// .map(it -> ReflectionUtils.getDeclaredField(it, HandlerList.class, 0))
|
||||||
|
// .orElse(null);
|
||||||
|
|
||||||
|
|
||||||
|
public static final Class<?> clazz$ServerBot = ReflectionUtils.getClazz("org.leavesmc.leaves.bot.ServerBot");
|
||||||
|
|
||||||
|
// 注入BotList来实现全版本的监听
|
||||||
|
public static final Class<?> clazz$BotList = ReflectionUtils.getClazz("org.leavesmc.leaves.bot.BotList");
|
||||||
|
|
||||||
|
public static final Field field$BotList$INSTANCE = ReflectionUtils.getDeclaredField(clazz$BotList, clazz$BotList, 0);
|
||||||
|
|
||||||
|
public static final Field field$BotList$bots = ReflectionUtils.getDeclaredField(clazz$BotList, List.class, 0);
|
||||||
|
}
|
||||||
@@ -112,14 +112,16 @@ public class BukkitServerPlayer extends Player {
|
|||||||
|
|
||||||
private final Map<Integer, EntityPacketHandler> entityTypeView = new ConcurrentHashMap<>();
|
private final Map<Integer, EntityPacketHandler> entityTypeView = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
public BukkitServerPlayer(BukkitCraftEngine plugin, Channel channel) {
|
public BukkitServerPlayer(BukkitCraftEngine plugin, @Nullable Channel channel) {
|
||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
for (String name : channel.pipeline().names()) {
|
if (channel != null) {
|
||||||
ChannelHandler handler = channel.pipeline().get(name);
|
for (String name : channel.pipeline().names()) {
|
||||||
if (NetworkReflections.clazz$Connection.isInstance(handler)) {
|
ChannelHandler handler = channel.pipeline().get(name);
|
||||||
this.connection = handler;
|
if (NetworkReflections.clazz$Connection.isInstance(handler)) {
|
||||||
break;
|
this.connection = handler;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -328,22 +330,37 @@ public class BukkitServerPlayer extends Player {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendCustomPayload(Key channel, byte[] data) {
|
public void sendPackets(List<Object> packet, boolean immediately) {
|
||||||
|
this.plugin.networkManager().sendPackets(this, packet, immediately);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendPackets(List<Object> packet, boolean immediately, Runnable sendListener) {
|
||||||
|
this.plugin.networkManager().sendPackets(this, packet, immediately, sendListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void simulatePacket(Object packet) {
|
||||||
|
this.plugin.networkManager().simulatePacket(this, packet);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendCustomPayload(Key channelId, byte[] data) {
|
||||||
try {
|
try {
|
||||||
Object channelKey = KeyUtils.toResourceLocation(channel);
|
Object channelResourceLocation = KeyUtils.toResourceLocation(channelId);
|
||||||
Object responsePacket;
|
Object responsePacket;
|
||||||
if (VersionHelper.isOrAbove1_20_2()) {
|
if (VersionHelper.isOrAbove1_20_2()) {
|
||||||
Object dataPayload;
|
Object dataPayload;
|
||||||
if (NetworkReflections.clazz$UnknownPayload != null) {
|
if (NetworkReflections.clazz$UnknownPayload != null) {
|
||||||
dataPayload = NetworkReflections.constructor$UnknownPayload.newInstance(channelKey, Unpooled.wrappedBuffer(data));
|
dataPayload = NetworkReflections.constructor$UnknownPayload.newInstance(channelResourceLocation, Unpooled.wrappedBuffer(data));
|
||||||
} else if (DiscardedPayload.useNewMethod) {
|
} else if (DiscardedPayload.useNewMethod) {
|
||||||
dataPayload = NetworkReflections.constructor$DiscardedPayload.newInstance(channelKey, data);
|
dataPayload = NetworkReflections.constructor$DiscardedPayload.newInstance(channelResourceLocation, data);
|
||||||
} else {
|
} else {
|
||||||
dataPayload = NetworkReflections.constructor$DiscardedPayload.newInstance(channelKey, Unpooled.wrappedBuffer(data));
|
dataPayload = NetworkReflections.constructor$DiscardedPayload.newInstance(channelResourceLocation, Unpooled.wrappedBuffer(data));
|
||||||
}
|
}
|
||||||
responsePacket = NetworkReflections.constructor$ClientboundCustomPayloadPacket.newInstance(dataPayload);
|
responsePacket = NetworkReflections.constructor$ClientboundCustomPayloadPacket.newInstance(dataPayload);
|
||||||
} else {
|
} else {
|
||||||
responsePacket = NetworkReflections.constructor$ClientboundCustomPayloadPacket.newInstance(channelKey, FastNMS.INSTANCE.constructor$FriendlyByteBuf(Unpooled.wrappedBuffer(data)));
|
responsePacket = NetworkReflections.constructor$ClientboundCustomPayloadPacket.newInstance(channelResourceLocation, FastNMS.INSTANCE.constructor$FriendlyByteBuf(Unpooled.wrappedBuffer(data)));
|
||||||
}
|
}
|
||||||
this.sendPacket(responsePacket, true);
|
this.sendPacket(responsePacket, true);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -365,21 +382,6 @@ public class BukkitServerPlayer extends Player {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendPackets(List<Object> packet, boolean immediately) {
|
|
||||||
this.plugin.networkManager().sendPackets(this, packet, immediately);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendPackets(List<Object> packet, boolean immediately, Runnable sendListener) {
|
|
||||||
this.plugin.networkManager().sendPackets(this, packet, immediately, sendListener);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void simulatePacket(Object packet) {
|
|
||||||
this.plugin.networkManager().simulatePacket(this, packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConnectionState decoderState() {
|
public ConnectionState decoderState() {
|
||||||
return decoderState;
|
return decoderState;
|
||||||
@@ -861,6 +863,11 @@ public class BukkitServerPlayer extends Player {
|
|||||||
return this.connection;
|
return this.connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isFakePlayer() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public org.bukkit.entity.Player literalObject() {
|
public org.bukkit.entity.Player literalObject() {
|
||||||
return platformPlayer();
|
return platformPlayer();
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package net.momirealms.craftengine.bukkit.plugin.user;
|
||||||
|
|
||||||
|
import io.netty.channel.Channel;
|
||||||
|
import io.netty.channel.ChannelHandler;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||||
|
|
||||||
|
public class FakeBukkitServerPlayer extends BukkitServerPlayer {
|
||||||
|
|
||||||
|
public FakeBukkitServerPlayer(BukkitCraftEngine plugin) {
|
||||||
|
super(plugin, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Channel nettyChannel() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ChannelHandler connection() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void kick(Component message) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isFakePlayer() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,7 +10,7 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
@SuppressWarnings("DuplicatedCode")
|
@SuppressWarnings("DuplicatedCode")
|
||||||
public class AdventureModeUtils {
|
public final class AdventureModeUtils {
|
||||||
|
|
||||||
private AdventureModeUtils() {}
|
private AdventureModeUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class BlockStateUtils {
|
public final class BlockStateUtils {
|
||||||
public static final IdentityHashMap<Object, Object> CLIENT_SIDE_NOTE_BLOCKS = new IdentityHashMap<>();
|
public static final IdentityHashMap<Object, Object> CLIENT_SIDE_NOTE_BLOCKS = new IdentityHashMap<>();
|
||||||
private static int vanillaStateSize;
|
private static int vanillaStateSize;
|
||||||
private static boolean hasInit;
|
private static boolean hasInit;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import net.momirealms.craftengine.core.util.Key;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class BlockTags {
|
public final class BlockTags {
|
||||||
private static final Map<Key, Object> CACHE = new HashMap<>();
|
private static final Map<Key, Object> CACHE = new HashMap<>();
|
||||||
|
|
||||||
private BlockTags() {}
|
private BlockTags() {}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
|||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.paper.PaperReflections;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.paper.PaperReflections;
|
||||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
import net.momirealms.craftengine.core.util.AdventureHelper;
|
||||||
|
|
||||||
public class ComponentUtils {
|
public final class ComponentUtils {
|
||||||
|
|
||||||
private ComponentUtils() {}
|
private ComponentUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package net.momirealms.craftengine.bukkit.util;
|
|||||||
import net.momirealms.craftengine.core.util.DamageSource;
|
import net.momirealms.craftengine.core.util.DamageSource;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
|
|
||||||
public class DamageCauseUtils {
|
public final class DamageCauseUtils {
|
||||||
|
|
||||||
private DamageCauseUtils() {}
|
private DamageCauseUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflect
|
|||||||
import net.momirealms.craftengine.core.util.Direction;
|
import net.momirealms.craftengine.core.util.Direction;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
|
|
||||||
public class DirectionUtils {
|
public final class DirectionUtils {
|
||||||
|
|
||||||
private DirectionUtils() {}
|
private DirectionUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package net.momirealms.craftengine.bukkit.util;
|
||||||
|
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
public class DummyListener implements Listener {
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@ import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflect
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class EnchantmentUtils {
|
public final class EnchantmentUtils {
|
||||||
|
|
||||||
private EnchantmentUtils() {}
|
private EnchantmentUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package net.momirealms.craftengine.bukkit.util;
|
|||||||
|
|
||||||
import net.momirealms.craftengine.core.util.VersionHelper;
|
import net.momirealms.craftengine.core.util.VersionHelper;
|
||||||
|
|
||||||
public class EntityDataUtils {
|
public final class EntityDataUtils {
|
||||||
|
|
||||||
private EntityDataUtils() {}
|
private EntityDataUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import org.bukkit.event.entity.CreatureSpawnEvent;
|
|||||||
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class EntityUtils {
|
public final class EntityUtils {
|
||||||
|
|
||||||
private EntityUtils() {
|
private EntityUtils() {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import org.bukkit.Bukkit;
|
|||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
|
|
||||||
public class EventUtils {
|
public final class EventUtils {
|
||||||
|
|
||||||
private EventUtils() {}
|
private EventUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import org.bukkit.event.block.BlockExplodeEvent;
|
|||||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
|
|
||||||
@SuppressWarnings("UnstableApiUsage")
|
@SuppressWarnings("UnstableApiUsage")
|
||||||
public class ExplosionUtils {
|
public final class ExplosionUtils {
|
||||||
|
|
||||||
public static boolean isDroppingItems(BlockExplodeEvent event) {
|
public static boolean isDroppingItems(BlockExplodeEvent event) {
|
||||||
return event.getExplosionResult() != ExplosionResult.KEEP && event.getExplosionResult() != ExplosionResult.TRIGGER_BLOCK;
|
return event.getExplosionResult() != ExplosionResult.KEEP && event.getExplosionResult() != ExplosionResult.TRIGGER_BLOCK;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
|||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistries;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistries;
|
||||||
import net.momirealms.craftengine.core.util.Key;
|
import net.momirealms.craftengine.core.util.Key;
|
||||||
|
|
||||||
public class FeatureUtils {
|
public final class FeatureUtils {
|
||||||
|
|
||||||
private FeatureUtils() {}
|
private FeatureUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package net.momirealms.craftengine.bukkit.util;
|
|||||||
import net.momirealms.craftengine.core.world.FluidCollisionRule;
|
import net.momirealms.craftengine.core.world.FluidCollisionRule;
|
||||||
import org.bukkit.FluidCollisionMode;
|
import org.bukkit.FluidCollisionMode;
|
||||||
|
|
||||||
public class FluidUtils {
|
public final class FluidUtils {
|
||||||
|
|
||||||
private FluidUtils() {}
|
private FluidUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class InteractUtils {
|
public final class InteractUtils {
|
||||||
private static final Map<Key, QuadFunction<Player, Item<ItemStack>, BlockData, BlockHitResult, Boolean>> INTERACTIONS = new HashMap<>();
|
private static final Map<Key, QuadFunction<Player, Item<ItemStack>, BlockData, BlockHitResult, Boolean>> INTERACTIONS = new HashMap<>();
|
||||||
private static final Map<Key, QuadFunction<Player, Item<ItemStack>, BlockData, BlockHitResult, Boolean>> WILL_CONSUME = new HashMap<>();
|
private static final Map<Key, QuadFunction<Player, Item<ItemStack>, BlockData, BlockHitResult, Boolean>> WILL_CONSUME = new HashMap<>();
|
||||||
private static final Map<Key, TriFunction<Player, Entity, @Nullable Item<ItemStack>, Boolean>> ENTITY_INTERACTIONS = new HashMap<>();
|
private static final Map<Key, TriFunction<Player, Entity, @Nullable Item<ItemStack>, Boolean>> ENTITY_INTERACTIONS = new HashMap<>();
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import org.bukkit.event.inventory.InventoryEvent;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
|
||||||
public class InventoryUtils {
|
public final class InventoryUtils {
|
||||||
|
|
||||||
private InventoryUtils() {}
|
private InventoryUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import net.momirealms.craftengine.core.util.Key;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class ItemTags {
|
public final class ItemTags {
|
||||||
private static final Map<Key, Object> CACHE = new HashMap<>();
|
private static final Map<Key, Object> CACHE = new HashMap<>();
|
||||||
|
|
||||||
public static final Key AXES = Key.of("minecraft:axes");
|
public static final Key AXES = Key.of("minecraft:axes");
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import java.util.BitSet;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class LightUtils {
|
public final class LightUtils {
|
||||||
|
|
||||||
private LightUtils() {}
|
private LightUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class LocationUtils {
|
public final class LocationUtils {
|
||||||
|
|
||||||
private LocationUtils() {}
|
private LocationUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import java.util.Locale;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class MaterialUtils {
|
public final class MaterialUtils {
|
||||||
|
|
||||||
public static Material MACE;
|
public static Material MACE;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package net.momirealms.craftengine.bukkit.util;
|
|||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
||||||
import net.momirealms.craftengine.core.util.Mirror;
|
import net.momirealms.craftengine.core.util.Mirror;
|
||||||
|
|
||||||
public class MirrorUtils {
|
public final class MirrorUtils {
|
||||||
|
|
||||||
private MirrorUtils() {}
|
private MirrorUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package net.momirealms.craftengine.bukkit.util;
|
|||||||
|
|
||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.NetworkReflections;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.NetworkReflections;
|
||||||
|
|
||||||
public class MobEffectUtils {
|
public final class MobEffectUtils {
|
||||||
|
|
||||||
private MobEffectUtils() {}
|
private MobEffectUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package net.momirealms.craftengine.bukkit.util;
|
|||||||
|
|
||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
|
|
||||||
public class NoteBlockChainUpdateUtils {
|
public final class NoteBlockChainUpdateUtils {
|
||||||
|
|
||||||
private NoteBlockChainUpdateUtils() {}
|
private NoteBlockChainUpdateUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
package net.momirealms.craftengine.bukkit.util;
|
|
||||||
|
|
||||||
public class OptimizedReflections {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
package net.momirealms.craftengine.bukkit.util;
|
|
||||||
|
|
||||||
public class RecipeUtils {
|
|
||||||
|
|
||||||
private RecipeUtils() {}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,7 @@ import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflect
|
|||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MBuiltInRegistries;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MBuiltInRegistries;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistries;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistries;
|
||||||
|
|
||||||
public class RegistryUtils {
|
public final class RegistryUtils {
|
||||||
|
|
||||||
private RegistryUtils() {}
|
private RegistryUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package net.momirealms.craftengine.bukkit.util;
|
|||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
||||||
import net.momirealms.craftengine.core.util.Rotation;
|
import net.momirealms.craftengine.core.util.Rotation;
|
||||||
|
|
||||||
public class RotationUtils {
|
public final class RotationUtils {
|
||||||
|
|
||||||
private RotationUtils() {}
|
private RotationUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import net.momirealms.craftengine.core.sound.SoundSource;
|
|||||||
import net.momirealms.craftengine.core.util.Key;
|
import net.momirealms.craftengine.core.util.Key;
|
||||||
import org.bukkit.SoundCategory;
|
import org.bukkit.SoundCategory;
|
||||||
|
|
||||||
public class SoundUtils {
|
public final class SoundUtils {
|
||||||
|
|
||||||
private SoundUtils() {}
|
private SoundUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package net.momirealms.craftengine.bukkit.util;
|
|||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
||||||
import net.momirealms.craftengine.core.block.state.properties.StairsShape;
|
import net.momirealms.craftengine.core.block.state.properties.StairsShape;
|
||||||
|
|
||||||
public class StairsShapeUtils {
|
public final class StairsShapeUtils {
|
||||||
private StairsShapeUtils() {}
|
private StairsShapeUtils() {}
|
||||||
|
|
||||||
public static StairsShape fromNMSStairsShape(Object shape) {
|
public static StairsShape fromNMSStairsShape(Object shape) {
|
||||||
|
|||||||
@@ -4323,7 +4323,7 @@ minecraft:heavy_weighted_pressure_plate[power=14]: minecraft:heavy_weighted_pres
|
|||||||
minecraft:heavy_weighted_pressure_plate[power=15]: minecraft:heavy_weighted_pressure_plate[power=1]
|
minecraft:heavy_weighted_pressure_plate[power=15]: minecraft:heavy_weighted_pressure_plate[power=1]
|
||||||
|
|
||||||
#### Corals ####
|
#### Corals ####
|
||||||
# # Coral blocks are ideal for creating water blocks or wall-mounted blocks. But you have to sacrifice its dry appearance.
|
# Coral blocks are ideal for creating water blocks or wall-mounted blocks. But you have to sacrifice its dry appearance.
|
||||||
# minecraft:dead_brain_coral[waterlogged=false]: minecraft:brain_coral[waterlogged=false]
|
# minecraft:dead_brain_coral[waterlogged=false]: minecraft:brain_coral[waterlogged=false]
|
||||||
# minecraft:dead_brain_coral[waterlogged=true]: minecraft:brain_coral[waterlogged=true]
|
# minecraft:dead_brain_coral[waterlogged=true]: minecraft:brain_coral[waterlogged=true]
|
||||||
# minecraft:dead_brain_coral_fan[waterlogged=false]: minecraft:brain_coral_fan[waterlogged=false]
|
# minecraft:dead_brain_coral_fan[waterlogged=false]: minecraft:brain_coral_fan[waterlogged=false]
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import net.kyori.adventure.text.Component;
|
|||||||
import net.momirealms.craftengine.core.plugin.Plugin;
|
import net.momirealms.craftengine.core.plugin.Plugin;
|
||||||
import net.momirealms.craftengine.core.util.Key;
|
import net.momirealms.craftengine.core.util.Key;
|
||||||
import org.jetbrains.annotations.ApiStatus;
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -13,8 +14,16 @@ import java.util.UUID;
|
|||||||
public interface NetWorkUser {
|
public interface NetWorkUser {
|
||||||
boolean isOnline();
|
boolean isOnline();
|
||||||
|
|
||||||
|
// 对假人来说会null
|
||||||
|
@Nullable
|
||||||
Channel nettyChannel();
|
Channel nettyChannel();
|
||||||
|
|
||||||
|
// 对假人来说会null
|
||||||
|
@Nullable
|
||||||
|
ChannelHandler connection();
|
||||||
|
|
||||||
|
boolean isFakePlayer();
|
||||||
|
|
||||||
Plugin plugin();
|
Plugin plugin();
|
||||||
|
|
||||||
String name();
|
String name();
|
||||||
@@ -49,8 +58,6 @@ public interface NetWorkUser {
|
|||||||
|
|
||||||
Object platformPlayer();
|
Object platformPlayer();
|
||||||
|
|
||||||
ChannelHandler connection();
|
|
||||||
|
|
||||||
Map<Integer, EntityPacketHandler> entityPacketHandlers();
|
Map<Integer, EntityPacketHandler> entityPacketHandlers();
|
||||||
|
|
||||||
boolean clientModEnabled();
|
boolean clientModEnabled();
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ public class VersionHelper {
|
|||||||
private static final boolean mojmap;
|
private static final boolean mojmap;
|
||||||
private static final boolean folia;
|
private static final boolean folia;
|
||||||
private static final boolean paper;
|
private static final boolean paper;
|
||||||
|
private static final boolean leaves;
|
||||||
private static final boolean v1_20;
|
private static final boolean v1_20;
|
||||||
private static final boolean v1_20_1;
|
private static final boolean v1_20_1;
|
||||||
private static final boolean v1_20_2;
|
private static final boolean v1_20_2;
|
||||||
@@ -77,6 +77,7 @@ public class VersionHelper {
|
|||||||
mojmap = checkMojMap();
|
mojmap = checkMojMap();
|
||||||
folia = checkFolia();
|
folia = checkFolia();
|
||||||
paper = checkPaper();
|
paper = checkPaper();
|
||||||
|
leaves = checkLeaves();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException("Failed to init VersionHelper", e);
|
throw new RuntimeException("Failed to init VersionHelper", e);
|
||||||
}
|
}
|
||||||
@@ -150,6 +151,15 @@ public class VersionHelper {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean checkLeaves() {
|
||||||
|
try {
|
||||||
|
Class.forName("org.leavesmc.leaves.bot.ServerBot");
|
||||||
|
return true;
|
||||||
|
} catch (ClassNotFoundException ignored) {
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isFolia() {
|
public static boolean isFolia() {
|
||||||
return folia;
|
return folia;
|
||||||
}
|
}
|
||||||
@@ -158,6 +168,10 @@ public class VersionHelper {
|
|||||||
return paper;
|
return paper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isLeaves() {
|
||||||
|
return leaves;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isMojmap() {
|
public static boolean isMojmap() {
|
||||||
return mojmap;
|
return mojmap;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G
|
|||||||
|
|
||||||
# Project settings
|
# Project settings
|
||||||
# Rule: [major update].[feature update].[bug fix]
|
# Rule: [major update].[feature update].[bug fix]
|
||||||
project_version=0.0.61.4
|
project_version=0.0.61.5
|
||||||
config_version=43
|
config_version=43
|
||||||
lang_version=23
|
lang_version=23
|
||||||
project_group=net.momirealms
|
project_group=net.momirealms
|
||||||
|
|||||||
Reference in New Issue
Block a user