mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-19 14:59:32 +00:00
Fix fakeplayer break action * 2
This commit is contained in:
@@ -100,6 +100,105 @@ index fdeca41d40705f28864ce4443d01cd872c9d51b0..5c0e338dc1b0eb5724d10a73d6fc7975
|
|||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
AdvancementProgress orStartProgress = this.getOrStartProgress(advancement);
|
AdvancementProgress orStartProgress = this.getOrStartProgress(advancement);
|
||||||
boolean isDone = orStartProgress.isDone();
|
boolean isDone = orStartProgress.isDone();
|
||||||
|
diff --git a/net/minecraft/server/commands/BanIpCommands.java b/net/minecraft/server/commands/BanIpCommands.java
|
||||||
|
index bb5dbfeb6915a808d6f70e332bf9f0a3f9b7d19a..62f23d47b55eb59956d69153d508b5c9ab544adf 100644
|
||||||
|
--- a/net/minecraft/server/commands/BanIpCommands.java
|
||||||
|
+++ b/net/minecraft/server/commands/BanIpCommands.java
|
||||||
|
@@ -44,6 +44,12 @@ public class BanIpCommands {
|
||||||
|
return banIp(source, username, reason);
|
||||||
|
} else {
|
||||||
|
ServerPlayer playerByName = source.getServer().getPlayerList().getPlayerByName(username);
|
||||||
|
+ // Leaves start - disable ban
|
||||||
|
+ if (playerByName instanceof org.leavesmc.leaves.bot.ServerBot) {
|
||||||
|
+ source.sendFailure(Component.literal("Permission denied"));
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ // Leaves end - disable ban
|
||||||
|
if (playerByName != null) {
|
||||||
|
return banIp(source, playerByName.getIpAddress(), reason);
|
||||||
|
} else {
|
||||||
|
diff --git a/net/minecraft/server/commands/BanPlayerCommands.java b/net/minecraft/server/commands/BanPlayerCommands.java
|
||||||
|
index ac3ba9d0ea344fa189912d359b718fbe05e7aa49..61a4db144f721b47ac1000df72263bceb6e38ec0 100644
|
||||||
|
--- a/net/minecraft/server/commands/BanPlayerCommands.java
|
||||||
|
+++ b/net/minecraft/server/commands/BanPlayerCommands.java
|
||||||
|
@@ -44,8 +44,16 @@ public class BanPlayerCommands {
|
||||||
|
private static int banPlayers(CommandSourceStack source, Collection<GameProfile> gameProfiles, @Nullable Component reason) throws CommandSyntaxException {
|
||||||
|
UserBanList bans = source.getServer().getPlayerList().getBans();
|
||||||
|
int i = 0;
|
||||||
|
-
|
||||||
|
+ boolean hasBot = false; // Leaves - disable kick
|
||||||
|
for (GameProfile gameProfile : gameProfiles) {
|
||||||
|
+ // Leaves start - disable ban
|
||||||
|
+ if (gameProfile instanceof org.leavesmc.leaves.bot.BotList.CustomGameProfile) {
|
||||||
|
+ source.sendFailure(Component.literal("Permission denied"));
|
||||||
|
+ hasBot = true;
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ // Leaves end - disable ban
|
||||||
|
+ ServerPlayer player = source.getServer().getPlayerList().getPlayer(gameProfile.getId());
|
||||||
|
if (!bans.isBanned(gameProfile)) {
|
||||||
|
UserBanListEntry userBanListEntry = new UserBanListEntry(
|
||||||
|
gameProfile, null, source.getTextName(), null, reason == null ? null : reason.getString()
|
||||||
|
@@ -55,7 +63,6 @@ public class BanPlayerCommands {
|
||||||
|
source.sendSuccess(
|
||||||
|
() -> Component.translatable("commands.ban.success", Component.literal(gameProfile.getName()), userBanListEntry.getReason()), true
|
||||||
|
);
|
||||||
|
- ServerPlayer player = source.getServer().getPlayerList().getPlayer(gameProfile.getId());
|
||||||
|
if (player != null) {
|
||||||
|
player.connection.disconnect(Component.translatable("multiplayer.disconnect.banned"), org.bukkit.event.player.PlayerKickEvent.Cause.BANNED); // Paper - kick event cause
|
||||||
|
}
|
||||||
|
@@ -63,7 +70,13 @@ public class BanPlayerCommands {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == 0) {
|
||||||
|
- throw ERROR_ALREADY_BANNED.create();
|
||||||
|
+ // Leaves start - disable kick
|
||||||
|
+ if (hasBot) {
|
||||||
|
+ return i;
|
||||||
|
+ } else {
|
||||||
|
+ throw ERROR_ALREADY_BANNED.create();
|
||||||
|
+ }
|
||||||
|
+ // Leaves end - disable kick
|
||||||
|
} else {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
diff --git a/net/minecraft/server/commands/KickCommand.java b/net/minecraft/server/commands/KickCommand.java
|
||||||
|
index 14e2e0fcf20c8fa875bbefb97a673be4928d099a..8af40a77dc3da1599da2793168488f88686b8785 100644
|
||||||
|
--- a/net/minecraft/server/commands/KickCommand.java
|
||||||
|
+++ b/net/minecraft/server/commands/KickCommand.java
|
||||||
|
@@ -46,9 +46,17 @@ public class KickCommand {
|
||||||
|
if (!source.getServer().isPublished()) {
|
||||||
|
throw ERROR_SINGLEPLAYER.create();
|
||||||
|
} else {
|
||||||
|
+ boolean hasBot = false; // Leaves - disable kick
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for (ServerPlayer serverPlayer : players) {
|
||||||
|
+ // Leaves start - disable kick
|
||||||
|
+ if (serverPlayer instanceof org.leavesmc.leaves.bot.ServerBot) {
|
||||||
|
+ source.sendFailure(Component.literal("Permission denied"));
|
||||||
|
+ hasBot = true;
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ // Leaves end - disable kick
|
||||||
|
if (!source.getServer().isSingleplayerOwner(serverPlayer.getGameProfile())) {
|
||||||
|
serverPlayer.connection.disconnect(reason, org.bukkit.event.player.PlayerKickEvent.Cause.KICK_COMMAND); // Paper - kick event cause
|
||||||
|
source.sendSuccess(() -> Component.translatable("commands.kick.success", serverPlayer.getDisplayName(), reason), true);
|
||||||
|
@@ -57,7 +65,13 @@ public class KickCommand {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == 0) {
|
||||||
|
- throw ERROR_KICKING_OWNER.create();
|
||||||
|
+ // Leaves start - disable kick
|
||||||
|
+ if (hasBot) {
|
||||||
|
+ return i;
|
||||||
|
+ } else {
|
||||||
|
+ throw ERROR_KICKING_OWNER.create();
|
||||||
|
+ }
|
||||||
|
+ // Leaves end - disable kick
|
||||||
|
} else {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java
|
diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java
|
||||||
index 414a8357a7498c69341fa634ada2e664e18ca03a..f85993fc507d699728e058b12bb49dcb7aaea44b 100644
|
index 414a8357a7498c69341fa634ada2e664e18ca03a..f85993fc507d699728e058b12bb49dcb7aaea44b 100644
|
||||||
--- a/net/minecraft/server/dedicated/DedicatedServer.java
|
--- a/net/minecraft/server/dedicated/DedicatedServer.java
|
||||||
@@ -196,7 +295,7 @@ index 364d5e28646ea341034921622354c7b19644b343..c61c0b6d58f96955bfbdad0caaeb56f0
|
|||||||
ServerLevel.this.updateSleepingPlayerList();
|
ServerLevel.this.updateSleepingPlayerList();
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
|
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
|
||||||
index 8f94c963f2c59668d72d162f46f7505d6a6b06a5..e808b8059af035d09c24286b1e5893733906dca4 100644
|
index 8f94c963f2c59668d72d162f46f7505d6a6b06a5..87c8c4c7ca52f7d804ddaff87aaf381552e1aee2 100644
|
||||||
--- a/net/minecraft/server/level/ServerPlayer.java
|
--- a/net/minecraft/server/level/ServerPlayer.java
|
||||||
+++ b/net/minecraft/server/level/ServerPlayer.java
|
+++ b/net/minecraft/server/level/ServerPlayer.java
|
||||||
@@ -219,7 +219,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
@@ -219,7 +219,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||||
@@ -208,6 +307,15 @@ index 8f94c963f2c59668d72d162f46f7505d6a6b06a5..e808b8059af035d09c24286b1e589373
|
|||||||
private final PlayerAdvancements advancements;
|
private final PlayerAdvancements advancements;
|
||||||
private final ServerStatsCounter stats;
|
private final ServerStatsCounter stats;
|
||||||
private float lastRecordedHealthAndAbsorption = Float.MIN_VALUE;
|
private float lastRecordedHealthAndAbsorption = Float.MIN_VALUE;
|
||||||
|
@@ -240,7 +240,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||||
|
private Entity camera;
|
||||||
|
public boolean isChangingDimension;
|
||||||
|
public boolean seenCredits = false;
|
||||||
|
- private final ServerRecipeBook recipeBook;
|
||||||
|
+ protected ServerRecipeBook recipeBook; // Leaves - not final and private -> protected
|
||||||
|
@Nullable
|
||||||
|
private Vec3 levitationStartPos;
|
||||||
|
private int levitationStartTime;
|
||||||
@@ -1454,6 +1454,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
@@ -1454,6 +1454,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||||
this.lastSentHealth = -1.0F;
|
this.lastSentHealth = -1.0F;
|
||||||
this.lastSentFood = -1;
|
this.lastSentFood = -1;
|
||||||
@@ -220,6 +328,23 @@ index 8f94c963f2c59668d72d162f46f7505d6a6b06a5..e808b8059af035d09c24286b1e589373
|
|||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
org.bukkit.event.player.PlayerChangedWorldEvent changeEvent = new org.bukkit.event.player.PlayerChangedWorldEvent(this.getBukkitEntity(), serverLevel.getWorld());
|
org.bukkit.event.player.PlayerChangedWorldEvent changeEvent = new org.bukkit.event.player.PlayerChangedWorldEvent(this.getBukkitEntity(), serverLevel.getWorld());
|
||||||
this.level().getCraftServer().getPluginManager().callEvent(changeEvent);
|
this.level().getCraftServer().getPluginManager().callEvent(changeEvent);
|
||||||
|
diff --git a/net/minecraft/server/players/GameProfileCache.java b/net/minecraft/server/players/GameProfileCache.java
|
||||||
|
index 066f84df5c31242ab542932f1e243369d0e766e2..52706e843923666940e679a83a302db7a243dd11 100644
|
||||||
|
--- a/net/minecraft/server/players/GameProfileCache.java
|
||||||
|
+++ b/net/minecraft/server/players/GameProfileCache.java
|
||||||
|
@@ -125,6 +125,12 @@ public class GameProfileCache {
|
||||||
|
// Paper end
|
||||||
|
|
||||||
|
public Optional<GameProfile> get(String name) {
|
||||||
|
+ // Leaves start - fix bot
|
||||||
|
+ org.leavesmc.leaves.bot.ServerBot bot = org.leavesmc.leaves.bot.BotList.INSTANCE.getBotByName(name);
|
||||||
|
+ if (bot != null) {
|
||||||
|
+ return Optional.of(bot.getGameProfile());
|
||||||
|
+ }
|
||||||
|
+ // Leaves end - fix bot
|
||||||
|
String string = name.toLowerCase(Locale.ROOT);
|
||||||
|
boolean stateLocked = true; try { this.stateLock.lock(); // Paper - Fix GameProfileCache concurrency
|
||||||
|
GameProfileCache.GameProfileInfo gameProfileInfo = this.profilesByName.get(string);
|
||||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||||
index 2dffdc770529e048c4e8df7d70de59c94d3a77be..1135d32f1f275306792b95d10f76ac233e265e0d 100644
|
index 2dffdc770529e048c4e8df7d70de59c94d3a77be..1135d32f1f275306792b95d10f76ac233e265e0d 100644
|
||||||
--- a/net/minecraft/server/players/PlayerList.java
|
--- a/net/minecraft/server/players/PlayerList.java
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package org.leavesmc.leaves.bot;
|
||||||
|
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.stats.ServerRecipeBook;
|
||||||
|
import net.minecraft.world.item.crafting.Recipe;
|
||||||
|
import net.minecraft.world.item.crafting.RecipeHolder;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
public class BotRecipeBook extends ServerRecipeBook {
|
||||||
|
|
||||||
|
public BotRecipeBook() {
|
||||||
|
super(($, $1) -> {
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(@NotNull ResourceKey<Recipe<?>> recipe) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(@NotNull ResourceKey<Recipe<?>> recipe) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean contains(@NotNull ResourceKey<Recipe<?>> recipe) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeHighlight(@NotNull ResourceKey<Recipe<?>> recipe) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int addRecipes(@NotNull Collection<RecipeHolder<?>> recipes, @NotNull ServerPlayer player) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int removeRecipes(@NotNull Collection<RecipeHolder<?>> recipes, @NotNull ServerPlayer player) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadUntrusted(@NotNull Packed recipeBook, @NotNull Predicate<ResourceKey<Recipe<?>>> predicate) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Packed pack() {
|
||||||
|
return new ServerRecipeBook.Packed(this.bookSettings.copy(), List.of(), List.of());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,6 +22,7 @@ import net.minecraft.server.level.ServerLevel;
|
|||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.server.network.ServerPlayerConnection;
|
import net.minecraft.server.network.ServerPlayerConnection;
|
||||||
import net.minecraft.stats.ServerStatsCounter;
|
import net.minecraft.stats.ServerStatsCounter;
|
||||||
|
import net.minecraft.stats.Stat;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
@@ -38,6 +39,7 @@ import net.minecraft.world.entity.projectile.ProjectileUtil;
|
|||||||
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
||||||
import net.minecraft.world.inventory.ChestMenu;
|
import net.minecraft.world.inventory.ChestMenu;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.item.crafting.RecipeHolder;
|
||||||
import net.minecraft.world.level.GameRules;
|
import net.minecraft.world.level.GameRules;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.gameevent.GameEvent;
|
import net.minecraft.world.level.gameevent.GameEvent;
|
||||||
@@ -71,6 +73,7 @@ import org.leavesmc.leaves.plugin.MinecraftInternalPlugin;
|
|||||||
import org.leavesmc.leaves.util.MathUtils;
|
import org.leavesmc.leaves.util.MathUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -110,6 +113,7 @@ public class ServerBot extends ServerPlayer {
|
|||||||
this.configs = configBuilder.build();
|
this.configs = configBuilder.build();
|
||||||
|
|
||||||
this.stats = new BotStatsCounter(server);
|
this.stats = new BotStatsCounter(server);
|
||||||
|
this.recipeBook = new BotRecipeBook();
|
||||||
this.container = new BotInventoryContainer(this.getInventory());
|
this.container = new BotInventoryContainer(this.getInventory());
|
||||||
this.tracingRange = world.spigotConfig.playerTrackingRange * world.spigotConfig.playerTrackingRange;
|
this.tracingRange = world.spigotConfig.playerTrackingRange * world.spigotConfig.playerTrackingRange;
|
||||||
|
|
||||||
@@ -514,7 +518,7 @@ public class ServerBot extends ServerPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean startRiding(Entity vehicle, boolean force) {
|
public boolean startRiding(@NotNull Entity vehicle, boolean force) {
|
||||||
if (super.startRiding(vehicle, force)) {
|
if (super.startRiding(vehicle, force)) {
|
||||||
if (vehicle instanceof AbstractBoat) {
|
if (vehicle instanceof AbstractBoat) {
|
||||||
this.setDeltaMovement(Vec3.ZERO);
|
this.setDeltaMovement(Vec3.ZERO);
|
||||||
@@ -526,6 +530,32 @@ public class ServerBot extends ServerPlayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int awardRecipes(@NotNull Collection<RecipeHolder<?>> recipes) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int resetRecipes(@NotNull Collection<RecipeHolder<?>> recipes) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void triggerRecipeCrafted(@NotNull RecipeHolder<?> recipe, @NotNull List<ItemStack> items) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void awardKillScore(@NotNull Entity entity, @NotNull DamageSource damageSource) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void awardStat(@NotNull Stat<?> stat) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resetStat(@NotNull Stat<?> stat) {
|
||||||
|
}
|
||||||
|
|
||||||
public void removeTab() {
|
public void removeTab() {
|
||||||
this.sendPacket(new ClientboundPlayerInfoRemovePacket(List.of(this.getUUID())));
|
this.sendPacket(new ClientboundPlayerInfoRemovePacket(List.of(this.getUUID())));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package org.leavesmc.leaves.bot;
|
|||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.server.level.ServerPlayerGameMode;
|
import net.minecraft.server.level.ServerPlayerGameMode;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
@@ -12,6 +11,7 @@ import net.minecraft.world.item.context.UseOnContext;
|
|||||||
import net.minecraft.world.level.GameType;
|
import net.minecraft.world.level.GameType;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.minecraft.world.level.block.GameMasterBlock;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.phys.BlockHitResult;
|
import net.minecraft.world.phys.BlockHitResult;
|
||||||
@@ -52,36 +52,32 @@ public class ServerBotGameMode extends ServerPlayerGameMode {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean destroyBlock(@NotNull BlockPos pos) {
|
public boolean destroyBlock(@NotNull BlockPos pos) {
|
||||||
BlockState iblockdata = this.level.getBlockState(pos);
|
BlockState blockState = this.level.getBlockState(pos);
|
||||||
BlockEntity tileentity = this.level.getBlockEntity(pos);
|
if (!this.player.getMainHandItem().canDestroyBlock(blockState, this.level, pos, this.player)) {
|
||||||
Block block = iblockdata.getBlock();
|
|
||||||
|
|
||||||
if (this.player.blockActionRestricted(this.level, pos, this.getGameModeForPlayer())) {
|
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
this.level.captureDrops = null;
|
BlockEntity blockEntity = this.level.getBlockEntity(pos);
|
||||||
BlockState iblockdata1 = org.leavesmc.leaves.command.subcommands.BlockUpdateCommand.isNoBlockUpdate() ? iblockdata : block.playerWillDestroy(this.level, pos, iblockdata, this.player); // Leaves - no block update
|
Block block = blockState.getBlock();
|
||||||
boolean flag = this.level.removeBlock(pos, false);
|
if (block instanceof GameMasterBlock) {
|
||||||
|
this.level.sendBlockUpdated(pos, blockState, blockState, 3);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
BlockState blockState1 = org.leavesmc.leaves.command.subcommands.BlockUpdateCommand.isNoBlockUpdate() ? blockState : block.playerWillDestroy(this.level, pos, blockState, this.player); // Leaves - no block update
|
||||||
|
boolean flag = this.level.removeBlock(pos, false);
|
||||||
|
if (flag) {
|
||||||
|
block.destroy(this.level, pos, blockState1);
|
||||||
|
}
|
||||||
|
|
||||||
if (flag) {
|
ItemStack mainHandItem = this.player.getMainHandItem();
|
||||||
block.destroy(this.level, pos, iblockdata1);
|
ItemStack itemStack = mainHandItem.copy();
|
||||||
|
boolean hasCorrectToolForDrops = this.player.hasCorrectToolForDrops(blockState1);
|
||||||
|
mainHandItem.getItem().mineBlock(mainHandItem, this.level, blockState1, pos, this.player);
|
||||||
|
if (flag && hasCorrectToolForDrops) {
|
||||||
|
block.playerDestroy(this.level, this.player, pos, blockState1, blockEntity, itemStack, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemStack itemstack = this.player.getMainHandItem();
|
|
||||||
ItemStack itemstack1 = itemstack.copy();
|
|
||||||
|
|
||||||
boolean flag1 = this.player.hasCorrectToolForDrops(iblockdata1);
|
|
||||||
|
|
||||||
itemstack.mineBlock(this.level, iblockdata1, pos, this.player);
|
|
||||||
if (flag && flag1) {
|
|
||||||
Block.dropResources(iblockdata1, this.level, pos, tileentity, this.player, itemstack1, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flag) {
|
|
||||||
iblockdata.getBlock().popExperience(this.level, pos, block.getExpDrop(iblockdata, this.level, pos, itemstack, true), this.player);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,11 @@ package org.leavesmc.leaves.bot.agent.actions;
|
|||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
|
import net.minecraft.world.entity.EquipmentSlot;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.craftbukkit.block.CraftBlock;
|
import org.bukkit.craftbukkit.block.CraftBlock;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -15,6 +19,7 @@ public class ServerBreakBlockAction extends ServerTimerBotAction<ServerBreakBloc
|
|||||||
super("break", ServerBreakBlockAction::new);
|
super("break", ServerBreakBlockAction::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ItemStack lastItem = null;
|
||||||
private BlockPos lastPos = null;
|
private BlockPos lastPos = null;
|
||||||
private int destroyProgressTime = 0;
|
private int destroyProgressTime = 0;
|
||||||
private int lastSentState = -1;
|
private int lastSentState = -1;
|
||||||
@@ -25,39 +30,61 @@ public class ServerBreakBlockAction extends ServerTimerBotAction<ServerBreakBloc
|
|||||||
if (block != null) {
|
if (block != null) {
|
||||||
BlockPos pos = ((CraftBlock) block).getPosition();
|
BlockPos pos = ((CraftBlock) block).getPosition();
|
||||||
|
|
||||||
if (lastPos == null || !lastPos.equals(pos)) {
|
BlockState iblockdata = bot.level().getBlockState(pos);
|
||||||
|
if (lastPos == null || !lastPos.equals(pos) || lastItem == null || !lastItem.equals(bot.getMainHandItem())) {
|
||||||
|
if (lastPos != null && destroyProgressTime > 0) {
|
||||||
|
bot.level().destroyBlockProgress(bot.getId(), lastPos, -1);
|
||||||
|
}
|
||||||
|
lastItem = bot.getMainHandItem();
|
||||||
lastPos = pos;
|
lastPos = pos;
|
||||||
destroyProgressTime = 0;
|
destroyProgressTime = 0;
|
||||||
lastSentState = -1;
|
lastSentState = -1;
|
||||||
}
|
|
||||||
|
|
||||||
BlockState iblockdata = bot.level().getBlockState(pos);
|
if (!iblockdata.isAir()) {
|
||||||
if (!iblockdata.isAir()) {
|
bot.swing(InteractionHand.MAIN_HAND);
|
||||||
bot.swing(InteractionHand.MAIN_HAND);
|
EnchantmentHelper.onHitBlock(
|
||||||
|
bot.level(), bot.getMainHandItem(), bot, bot, EquipmentSlot.MAINHAND, Vec3.atCenterOf(pos), iblockdata,
|
||||||
if (iblockdata.getDestroyProgress(bot, bot.level(), pos) >= 1.0F) {
|
item -> bot.onEquippedItemBroken(item, EquipmentSlot.MAINHAND)
|
||||||
bot.gameMode.destroyAndAck(pos, 0, "insta mine");
|
);
|
||||||
bot.level().destroyBlockProgress(bot.getId(), pos, -1);
|
iblockdata.attack(bot.level(), pos, bot);
|
||||||
bot.updateItemInHand(InteractionHand.MAIN_HAND);
|
float f = iblockdata.getDestroyProgress(bot, bot.level(), pos);
|
||||||
finalBreak();
|
if (f >= 1.0F) {
|
||||||
return true;
|
bot.gameMode.destroyAndAck(pos, 0, "insta mine");
|
||||||
|
bot.updateItemInHand(InteractionHand.MAIN_HAND);
|
||||||
|
finalBreak();
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
destroyProgressTime++;
|
||||||
|
int k = (int) (f * 10.0F);
|
||||||
|
bot.level().destroyBlockProgress(bot.getId(), pos, k);
|
||||||
|
lastSentState = k;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
float damage = this.incrementDestroyProgress(bot, iblockdata, pos);
|
if (!iblockdata.isAir()) {
|
||||||
if (damage >= 1.0F) {
|
bot.swing(InteractionHand.MAIN_HAND);
|
||||||
bot.gameMode.destroyAndAck(pos, 0, "destroyed");
|
float damage = this.incrementDestroyProgress(bot, iblockdata, pos);
|
||||||
bot.level().destroyBlockProgress(bot.getId(), pos, -1);
|
if (damage >= 1.0F) {
|
||||||
bot.updateItemInHand(InteractionHand.MAIN_HAND);
|
bot.gameMode.destroyAndAck(pos, 0, "destroyed");
|
||||||
finalBreak();
|
bot.level().destroyBlockProgress(bot.getId(), pos, -1);
|
||||||
return true;
|
bot.updateItemInHand(InteractionHand.MAIN_HAND);
|
||||||
|
finalBreak();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (lastPos != null) {
|
||||||
|
bot.level().destroyBlockProgress(bot.getId(), lastPos, -1);
|
||||||
|
}
|
||||||
|
finalBreak();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void finalBreak() {
|
private void finalBreak() {
|
||||||
lastPos = null;
|
lastPos = null;
|
||||||
|
lastItem = null;
|
||||||
destroyProgressTime = 0;
|
destroyProgressTime = 0;
|
||||||
lastSentState = -1;
|
lastSentState = -1;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user