mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-30 04:19:30 +00:00
Fix fakeplayer break action * 2
This commit is contained in:
@@ -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.network.ServerPlayerConnection;
|
||||
import net.minecraft.stats.ServerStatsCounter;
|
||||
import net.minecraft.stats.Stat;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
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.inventory.ChestMenu;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.crafting.RecipeHolder;
|
||||
import net.minecraft.world.level.GameRules;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.gameevent.GameEvent;
|
||||
@@ -71,6 +73,7 @@ import org.leavesmc.leaves.plugin.MinecraftInternalPlugin;
|
||||
import org.leavesmc.leaves.util.MathUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -110,6 +113,7 @@ public class ServerBot extends ServerPlayer {
|
||||
this.configs = configBuilder.build();
|
||||
|
||||
this.stats = new BotStatsCounter(server);
|
||||
this.recipeBook = new BotRecipeBook();
|
||||
this.container = new BotInventoryContainer(this.getInventory());
|
||||
this.tracingRange = world.spigotConfig.playerTrackingRange * world.spigotConfig.playerTrackingRange;
|
||||
|
||||
@@ -514,7 +518,7 @@ public class ServerBot extends ServerPlayer {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startRiding(Entity vehicle, boolean force) {
|
||||
public boolean startRiding(@NotNull Entity vehicle, boolean force) {
|
||||
if (super.startRiding(vehicle, force)) {
|
||||
if (vehicle instanceof AbstractBoat) {
|
||||
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() {
|
||||
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.minecraft.core.BlockPos;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.server.level.ServerPlayerGameMode;
|
||||
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.Level;
|
||||
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.state.BlockState;
|
||||
import net.minecraft.world.phys.BlockHitResult;
|
||||
@@ -52,36 +52,32 @@ public class ServerBotGameMode extends ServerPlayerGameMode {
|
||||
|
||||
@Override
|
||||
public boolean destroyBlock(@NotNull BlockPos pos) {
|
||||
BlockState iblockdata = this.level.getBlockState(pos);
|
||||
BlockEntity tileentity = this.level.getBlockEntity(pos);
|
||||
Block block = iblockdata.getBlock();
|
||||
|
||||
if (this.player.blockActionRestricted(this.level, pos, this.getGameModeForPlayer())) {
|
||||
BlockState blockState = this.level.getBlockState(pos);
|
||||
if (!this.player.getMainHandItem().canDestroyBlock(blockState, this.level, pos, this.player)) {
|
||||
return false;
|
||||
} else {
|
||||
this.level.captureDrops = null;
|
||||
BlockState iblockdata1 = org.leavesmc.leaves.command.subcommands.BlockUpdateCommand.isNoBlockUpdate() ? iblockdata : block.playerWillDestroy(this.level, pos, iblockdata, this.player); // Leaves - no block update
|
||||
boolean flag = this.level.removeBlock(pos, false);
|
||||
BlockEntity blockEntity = this.level.getBlockEntity(pos);
|
||||
Block block = blockState.getBlock();
|
||||
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) {
|
||||
block.destroy(this.level, pos, iblockdata1);
|
||||
ItemStack mainHandItem = this.player.getMainHandItem();
|
||||
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.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.phys.Vec3;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.craftbukkit.block.CraftBlock;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -15,6 +19,7 @@ public class ServerBreakBlockAction extends ServerTimerBotAction<ServerBreakBloc
|
||||
super("break", ServerBreakBlockAction::new);
|
||||
}
|
||||
|
||||
private ItemStack lastItem = null;
|
||||
private BlockPos lastPos = null;
|
||||
private int destroyProgressTime = 0;
|
||||
private int lastSentState = -1;
|
||||
@@ -25,39 +30,61 @@ public class ServerBreakBlockAction extends ServerTimerBotAction<ServerBreakBloc
|
||||
if (block != null) {
|
||||
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;
|
||||
destroyProgressTime = 0;
|
||||
lastSentState = -1;
|
||||
}
|
||||
|
||||
BlockState iblockdata = bot.level().getBlockState(pos);
|
||||
if (!iblockdata.isAir()) {
|
||||
bot.swing(InteractionHand.MAIN_HAND);
|
||||
|
||||
if (iblockdata.getDestroyProgress(bot, bot.level(), pos) >= 1.0F) {
|
||||
bot.gameMode.destroyAndAck(pos, 0, "insta mine");
|
||||
bot.level().destroyBlockProgress(bot.getId(), pos, -1);
|
||||
bot.updateItemInHand(InteractionHand.MAIN_HAND);
|
||||
finalBreak();
|
||||
return true;
|
||||
if (!iblockdata.isAir()) {
|
||||
bot.swing(InteractionHand.MAIN_HAND);
|
||||
EnchantmentHelper.onHitBlock(
|
||||
bot.level(), bot.getMainHandItem(), bot, bot, EquipmentSlot.MAINHAND, Vec3.atCenterOf(pos), iblockdata,
|
||||
item -> bot.onEquippedItemBroken(item, EquipmentSlot.MAINHAND)
|
||||
);
|
||||
iblockdata.attack(bot.level(), pos, bot);
|
||||
float f = iblockdata.getDestroyProgress(bot, bot.level(), pos);
|
||||
if (f >= 1.0F) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
float damage = this.incrementDestroyProgress(bot, iblockdata, pos);
|
||||
if (damage >= 1.0F) {
|
||||
bot.gameMode.destroyAndAck(pos, 0, "destroyed");
|
||||
bot.level().destroyBlockProgress(bot.getId(), pos, -1);
|
||||
bot.updateItemInHand(InteractionHand.MAIN_HAND);
|
||||
finalBreak();
|
||||
return true;
|
||||
} else {
|
||||
if (!iblockdata.isAir()) {
|
||||
bot.swing(InteractionHand.MAIN_HAND);
|
||||
float damage = this.incrementDestroyProgress(bot, iblockdata, pos);
|
||||
if (damage >= 1.0F) {
|
||||
bot.gameMode.destroyAndAck(pos, 0, "destroyed");
|
||||
bot.level().destroyBlockProgress(bot.getId(), pos, -1);
|
||||
bot.updateItemInHand(InteractionHand.MAIN_HAND);
|
||||
finalBreak();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (lastPos != null) {
|
||||
bot.level().destroyBlockProgress(bot.getId(), lastPos, -1);
|
||||
}
|
||||
finalBreak();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void finalBreak() {
|
||||
lastPos = null;
|
||||
lastItem = null;
|
||||
destroyProgressTime = 0;
|
||||
lastSentState = -1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user