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:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user