pitch display
This commit is contained in:
1 file changed
+32
-4
@@ -8,9 +8,14 @@ import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
|||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.entity.player.PlayerInventory;
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
import net.minecraft.item.ElytraItem;
|
import net.minecraft.item.ElytraItem;
|
||||||
|
import net.minecraft.network.packet.Packet;
|
||||||
|
import net.minecraft.network.packet.s2c.play.SubtitleS2CPacket;
|
||||||
|
import net.minecraft.network.packet.s2c.play.TitleFadeS2CPacket;
|
||||||
|
import net.minecraft.network.packet.s2c.play.TitleS2CPacket;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.network.ServerPlayNetworkHandler;
|
import net.minecraft.server.network.ServerPlayNetworkHandler;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
import net.minecraft.text.MutableText;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Colors;
|
import net.minecraft.util.Colors;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
@@ -62,32 +67,55 @@ public class ElytraSpeedMeterModule extends ServerModule {
|
|||||||
private void onFlying(PlayerEntity player, long f, boolean b) {
|
private void onFlying(PlayerEntity player, long f, boolean b) {
|
||||||
if (f < THRESHLD_OF_ELYTRA_FLY * 20) {
|
if (f < THRESHLD_OF_ELYTRA_FLY * 20) {
|
||||||
if (f > THRESHLD_OF_ELYTRA_FLY * 15) {
|
if (f > THRESHLD_OF_ELYTRA_FLY * 15) {
|
||||||
player.sendMessage(KEEP_FLYING,true);
|
player.sendMessage(KEEP_FLYING, true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (b) {
|
if (b) {
|
||||||
|
if (!lastMeasuredSpeed.containsKey(player)) {
|
||||||
|
((ServerPlayerEntity) player).networkHandler.sendPacket(new TitleFadeS2CPacket(0, 20, 0));
|
||||||
|
}
|
||||||
var text = Text.literal("");
|
var text = Text.literal("");
|
||||||
text.append(generateYMeter(f, player));
|
text.append(generateYMeter(f, player));
|
||||||
text.append(generateSpeedMeter(f, player));
|
text.append(generateSpeedMeter(f, player));
|
||||||
text.append(generateDurabilityMeter(f, player));
|
text.append(generateDurabilityMeter(f, player));
|
||||||
player.sendMessage(text, true);
|
player.sendMessage(text, true);
|
||||||
|
((ServerPlayerEntity) player).networkHandler.sendPacket(new TitleS2CPacket(Text.empty()));
|
||||||
|
((ServerPlayerEntity) player).networkHandler.sendPacket(buildPitchMeter(player));
|
||||||
} else {
|
} else {
|
||||||
clean((ServerPlayerEntity) player);
|
clean((ServerPlayerEntity) player);
|
||||||
|
((ServerPlayerEntity) player).networkHandler.sendPacket(new TitleFadeS2CPacket(10, 20, 10));
|
||||||
if (f > THRESHLD_OF_ELYTRA_FLY * 20) {
|
if (f > THRESHLD_OF_ELYTRA_FLY * 20) {
|
||||||
player.sendMessage(Text.literal("!! LANDED !!").withColor(Colors.GREEN), true);
|
player.sendMessage(Text.literal("!! LANDED !!").withColor(Colors.GREEN), true);
|
||||||
}else{
|
((ServerPlayerEntity) player).networkHandler.sendPacket(new SubtitleS2CPacket(Text.empty()));
|
||||||
player.sendMessage(Text.empty(),true);
|
} else {
|
||||||
|
player.sendMessage(Text.empty(), true);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Packet<?> buildPitchMeter(PlayerEntity player) {
|
||||||
|
var pitch = player.getPitch();
|
||||||
|
MutableText text;
|
||||||
|
var display = (Math.ceil(Math.abs(pitch) * 100) / 100);
|
||||||
|
if (pitch < 0) { // 朝上
|
||||||
|
text = Text.literal("🡹 " + display + "°");
|
||||||
|
} else {
|
||||||
|
text = Text.literal("🡻 " + display + "°");
|
||||||
|
}
|
||||||
|
if (pitch > 75) {
|
||||||
|
text.withColor(Colors.LIGHT_RED);
|
||||||
|
}
|
||||||
|
return new SubtitleS2CPacket(text);
|
||||||
|
}
|
||||||
|
|
||||||
private Text generateDurabilityMeter(long f, PlayerEntity player) {
|
private Text generateDurabilityMeter(long f, PlayerEntity player) {
|
||||||
var stack = player.getInventory().getArmorStack(PlayerInventory.ARMOR_SLOTS[2]);
|
var stack = player.getInventory().getArmorStack(PlayerInventory.ARMOR_SLOTS[2]);
|
||||||
if (stack.isDamageable() && stack.isDamaged()) {
|
if (stack.isDamageable() && stack.isDamaged()) {
|
||||||
var remaining = stack.getMaxDamage() - stack.getDamage();
|
var remaining = stack.getMaxDamage() - stack.getDamage();
|
||||||
var percent = (int) Math.ceil(((double) remaining / stack.getMaxDamage()) * 100);
|
var percent = (int) Math.ceil(((double) remaining / stack.getMaxDamage()) * 100);
|
||||||
return ELYTRA_DURABILITY[Math.max(percent-1,0)];
|
return ELYTRA_DURABILITY[Math.max(percent - 1, 0)];
|
||||||
}
|
}
|
||||||
return Text.literal(" ELYTRA: INFINITY").withColor(Colors.BLUE);
|
return Text.literal(" ELYTRA: INFINITY").withColor(Colors.BLUE);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user