9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2026-01-04 15:41:38 +00:00

improve break speed

This commit is contained in:
XiaoMoMi
2025-04-05 00:41:54 +08:00
parent 7ad97e77c3
commit 92d208ac49
2 changed files with 29 additions and 2 deletions

View File

@@ -3,6 +3,7 @@ package net.momirealms.craftengine.bukkit.plugin.user;
import com.google.common.collect.Lists;
import io.netty.channel.Channel;
import net.kyori.adventure.text.Component;
import net.momirealms.craftengine.bukkit.block.BukkitBlockManager;
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
import net.momirealms.craftengine.bukkit.nms.FastNMS;
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
@@ -13,6 +14,7 @@ import net.momirealms.craftengine.core.block.PackedBlockState;
import net.momirealms.craftengine.core.entity.player.InteractionHand;
import net.momirealms.craftengine.core.entity.player.Player;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemKeys;
import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.plugin.network.ConnectionState;
import net.momirealms.craftengine.core.util.Direction;
@@ -437,16 +439,26 @@ public class BukkitServerPlayer extends Player {
return;
}
}
this.miningProgress = (float) Reflections.method$BlockStateBase$getDestroyProgress.invoke(this.destroyedState, serverPlayer, Reflections.method$Entity$level.invoke(serverPlayer), blockPos) + miningProgress;
float progressToAdd = (float) Reflections.method$BlockStateBase$getDestroyProgress.invoke(this.destroyedState, serverPlayer, Reflections.method$Entity$level.invoke(serverPlayer), blockPos);
int id = BlockStateUtils.blockStateToId(this.destroyedState);
ImmutableBlockState customState = BukkitBlockManager.instance().getImmutableBlockState(id);
if (customState != null && !customState.isEmpty()
&& !customState.settings().isCorrectTool(item == null ? ItemKeys.AIR : item.id())) {
progressToAdd *= customState.settings().incorrectToolSpeed();
}
this.miningProgress = progressToAdd + miningProgress;
int packetStage = (int) (this.miningProgress * 10.0F);
if (packetStage != this.lastSentState) {
this.lastSentState = packetStage;
broadcastDestroyProgress(player, hitPos, blockPos, packetStage);
}
if (this.miningProgress >= 1f) {
//Reflections.method$ServerLevel$levelEvent.invoke(Reflections.field$CraftWorld$ServerLevel.get(player.getWorld()), null, 2001, blockPos, BlockStateUtils.blockStateToId(this.destroyedState));
Reflections.method$ServerPlayerGameMode$destroyBlock.invoke(gameMode, blockPos);
Object levelEventPacket = Reflections.constructor$ClientboundLevelEventPacket.newInstance(2001, blockPos, BlockStateUtils.blockStateToId(this.destroyedState), false);
Object levelEventPacket = Reflections.constructor$ClientboundLevelEventPacket.newInstance(2001, blockPos, id, false);
sendPacket(levelEventPacket, false);
this.stopMiningBlock();
}

View File

@@ -28,6 +28,7 @@ public class BlockSettings {
@Nullable
Key itemId;
Set<Key> tags = Set.of();
float incorrectToolSpeed = 0.3f;
Set<Key> correctTools = Set.of();
String name;
@@ -81,6 +82,7 @@ public class BlockSettings {
newSettings.fluidState = settings.fluidState;
newSettings.blockLight = settings.blockLight;
newSettings.name = settings.name;
newSettings.incorrectToolSpeed = settings.incorrectToolSpeed;
return newSettings;
}
@@ -124,6 +126,10 @@ public class BlockSettings {
return canOcclude;
}
public float incorrectToolSpeed() {
return incorrectToolSpeed;
}
public String name() {
return name;
}
@@ -243,6 +249,11 @@ public class BlockSettings {
return this;
}
public BlockSettings incorrectToolSpeed(float incorrectToolSpeed) {
this.incorrectToolSpeed = incorrectToolSpeed;
return this;
}
public BlockSettings isRandomlyTicking(boolean isRandomlyTicking) {
this.isRandomlyTicking = isRandomlyTicking;
return this;
@@ -381,6 +392,10 @@ public class BlockSettings {
List<String> tools = MiscUtils.getAsStringList(value);
return settings -> settings.correctTools(tools.stream().map(Key::of).collect(Collectors.toSet()));
}));
registerFactory("incorrect-tool-dig-speed", (value -> {
float floatValue = MiscUtils.getAsFloat(value);
return settings -> settings.incorrectToolSpeed(floatValue);
}));
registerFactory("name", (value -> {
String name = value.toString();
return settings -> settings.name(name);