mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
I think i actually got it to work lmaooo
This commit is contained in:
parent
f4341b1ee6
commit
c61a564a22
7 changed files with 67 additions and 53 deletions
|
|
@ -27,7 +27,9 @@ package org.geysermc.geyser.api.bedrock.camera;
|
||||||
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
import org.geysermc.geyser.api.bedrock.gui.GuiElement;
|
||||||
import org.geysermc.geyser.api.connection.GeyserConnection;
|
import org.geysermc.geyser.api.connection.GeyserConnection;
|
||||||
|
import org.geysermc.geyser.api.bedrock.gui.GuiData;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -150,7 +152,9 @@ public interface CameraData {
|
||||||
* Hides a {@link GuiElement} on the client's side.
|
* Hides a {@link GuiElement} on the client's side.
|
||||||
*
|
*
|
||||||
* @param element the {@link GuiElement} to hide
|
* @param element the {@link GuiElement} to hide
|
||||||
|
* @deprecated Use {@link GuiData#hideElement(GuiElement...)} instead
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
void hideElement(@NonNull GuiElement... element);
|
void hideElement(@NonNull GuiElement... element);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -161,20 +165,26 @@ public interface CameraData {
|
||||||
* If no elements are specified, this will reset all currently hidden elements
|
* If no elements are specified, this will reset all currently hidden elements
|
||||||
*
|
*
|
||||||
* @param element the {@link GuiElement} to reset
|
* @param element the {@link GuiElement} to reset
|
||||||
|
* @deprecated Use {@link GuiData#resetElement(GuiElement...)} instead
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
void resetElement(@NonNull GuiElement @Nullable... element);
|
void resetElement(@NonNull GuiElement @Nullable... element);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines whether a {@link GuiElement} is currently hidden.
|
* Determines whether a {@link GuiElement} is currently hidden.
|
||||||
*
|
*
|
||||||
* @param element the {@link GuiElement} to check
|
* @param element the {@link GuiElement} to check
|
||||||
|
* @deprecated Use {@link GuiData#isHudElementHidden(GuiElement)} instead
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
boolean isHudElementHidden(@NonNull GuiElement element);
|
boolean isHudElementHidden(@NonNull GuiElement element);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the currently hidden {@link GuiElement}s.
|
* Returns the currently hidden {@link GuiElement}s.
|
||||||
*
|
*
|
||||||
* @return an unmodifiable view of all currently hidden {@link GuiElement}s
|
* @return an unmodifiable view of all currently hidden {@link GuiElement}s
|
||||||
|
* @deprecated Use {@link GuiData#hiddenElements()} instead
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
@NonNull Set<GuiElement> hiddenElements();
|
@NonNull Set<GuiElement> hiddenElements();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,36 +25,31 @@
|
||||||
|
|
||||||
package org.geysermc.geyser.api.bedrock.camera;
|
package org.geysermc.geyser.api.bedrock.camera;
|
||||||
|
|
||||||
|
import org.geysermc.geyser.api.bedrock.gui.GuiData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represent GUI elements on the players HUD display.
|
* Represent GUI elements on the players HUD display.
|
||||||
* These can be hidden using {@link CameraData#hideElement(GuiElement...)},
|
* These can be hidden using {@link GuiData#hideElement(org.geysermc.geyser.api.bedrock.gui.GuiElement...)},
|
||||||
* and one can reset their visibility using {@link CameraData#resetElement(GuiElement...)}.
|
* and one can reset their visibility using {@link GuiData#resetElement(org.geysermc.geyser.api.bedrock.gui.GuiElement...)}.
|
||||||
|
* @deprecated use {@link org.geysermc.geyser.api.bedrock.gui.GuiElement}
|
||||||
*/
|
*/
|
||||||
public class GuiElement {
|
public class GuiElement extends org.geysermc.geyser.api.bedrock.gui.GuiElement {
|
||||||
public static final GuiElement PAPER_DOLL = new GuiElement(0);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement PAPER_DOLL = org.geysermc.geyser.api.bedrock.gui.GuiElement.PAPER_DOLL;
|
||||||
public static final GuiElement ARMOR = new GuiElement(1);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement ARMOR = org.geysermc.geyser.api.bedrock.gui.GuiElement.ARMOR;
|
||||||
public static final GuiElement TOOL_TIPS = new GuiElement(2);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement TOOL_TIPS = org.geysermc.geyser.api.bedrock.gui.GuiElement.TOOL_TIPS;
|
||||||
public static final GuiElement TOUCH_CONTROLS = new GuiElement(3);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement TOUCH_CONTROLS = org.geysermc.geyser.api.bedrock.gui.GuiElement.TOUCH_CONTROLS;
|
||||||
public static final GuiElement CROSSHAIR = new GuiElement(4);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement CROSSHAIR = org.geysermc.geyser.api.bedrock.gui.GuiElement.CROSSHAIR;
|
||||||
public static final GuiElement HOTBAR = new GuiElement(5);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement HOTBAR = org.geysermc.geyser.api.bedrock.gui.GuiElement.HOTBAR;
|
||||||
public static final GuiElement HEALTH = new GuiElement(6);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement HEALTH = org.geysermc.geyser.api.bedrock.gui.GuiElement.HEALTH;
|
||||||
public static final GuiElement PROGRESS_BAR = new GuiElement(7);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement PROGRESS_BAR = org.geysermc.geyser.api.bedrock.gui.GuiElement.PROGRESS_BAR;
|
||||||
public static final GuiElement FOOD_BAR = new GuiElement(8);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement FOOD_BAR = org.geysermc.geyser.api.bedrock.gui.GuiElement.FOOD_BAR;
|
||||||
public static final GuiElement AIR_BUBBLES_BAR = new GuiElement(9);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement AIR_BUBBLES_BAR = org.geysermc.geyser.api.bedrock.gui.GuiElement.AIR_BUBBLES_BAR;
|
||||||
public static final GuiElement VEHICLE_HEALTH = new GuiElement(10);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement VEHICLE_HEALTH = org.geysermc.geyser.api.bedrock.gui.GuiElement.VEHICLE_HEALTH;
|
||||||
public static final GuiElement EFFECTS_BAR = new GuiElement(11);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement EFFECTS_BAR = org.geysermc.geyser.api.bedrock.gui.GuiElement.EFFECTS_BAR;
|
||||||
public static final GuiElement ITEM_TEXT_POPUP = new GuiElement(12);
|
public static final org.geysermc.geyser.api.bedrock.gui.GuiElement ITEM_TEXT_POPUP = org.geysermc.geyser.api.bedrock.gui.GuiElement.ITEM_TEXT_POPUP;
|
||||||
|
|
||||||
private GuiElement(int id) {
|
public GuiElement(int id) {
|
||||||
this.id = id;
|
super(id);
|
||||||
}
|
|
||||||
|
|
||||||
private final int id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Internal use only; don't depend on these values being consistent.
|
|
||||||
*/
|
|
||||||
public int id() {
|
|
||||||
return this.id;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
import org.geysermc.api.connection.Connection;
|
import org.geysermc.api.connection.Connection;
|
||||||
import org.geysermc.geyser.api.bedrock.camera.CameraData;
|
import org.geysermc.geyser.api.bedrock.camera.CameraData;
|
||||||
import org.geysermc.geyser.api.bedrock.camera.CameraShake;
|
import org.geysermc.geyser.api.bedrock.camera.CameraShake;
|
||||||
|
import org.geysermc.geyser.api.bedrock.gui.GuiData;
|
||||||
import org.geysermc.geyser.api.command.CommandSource;
|
import org.geysermc.geyser.api.command.CommandSource;
|
||||||
import org.geysermc.geyser.api.entity.EntityData;
|
import org.geysermc.geyser.api.entity.EntityData;
|
||||||
import org.geysermc.geyser.api.entity.type.GeyserEntity;
|
import org.geysermc.geyser.api.entity.type.GeyserEntity;
|
||||||
|
|
@ -60,6 +61,14 @@ public interface GeyserConnection extends Connection, CommandSource {
|
||||||
*/
|
*/
|
||||||
@NonNull EntityData entities();
|
@NonNull EntityData entities();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exposes the {@link GuiData} for this connection.
|
||||||
|
* It allows you to hide GUI elements, and send notification toasts.
|
||||||
|
*
|
||||||
|
* @return the GuiData for this connection.
|
||||||
|
*/
|
||||||
|
@NonNull GuiData gui();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param javaId the Java entity ID to look up.
|
* @param javaId the Java entity ID to look up.
|
||||||
* @return a {@link GeyserEntity} if present in this connection's entity tracker.
|
* @return a {@link GeyserEntity} if present in this connection's entity tracker.
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ import org.geysermc.geyser.api.bedrock.camera.CameraFade;
|
||||||
import org.geysermc.geyser.api.bedrock.camera.CameraPerspective;
|
import org.geysermc.geyser.api.bedrock.camera.CameraPerspective;
|
||||||
import org.geysermc.geyser.api.bedrock.camera.CameraPosition;
|
import org.geysermc.geyser.api.bedrock.camera.CameraPosition;
|
||||||
import org.geysermc.geyser.api.bedrock.camera.CameraShake;
|
import org.geysermc.geyser.api.bedrock.camera.CameraShake;
|
||||||
import org.geysermc.geyser.api.bedrock.camera.GuiElement;
|
import org.geysermc.geyser.api.bedrock.gui.GuiElement;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode;
|
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode;
|
||||||
|
|
||||||
|
|
@ -302,22 +302,4 @@ public class GeyserCameraData implements CameraData {
|
||||||
public @NonNull Set<GuiElement> hiddenElements() {
|
public @NonNull Set<GuiElement> hiddenElements() {
|
||||||
return Collections.unmodifiableSet(hiddenHudElements);
|
return Collections.unmodifiableSet(hiddenHudElements);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Deals with hiding hud elements while in spectator.
|
|
||||||
*
|
|
||||||
* @param currentlySpectator whether the player is currently in spectator mode
|
|
||||||
* @param newGameMode the new GameMode to switch to
|
|
||||||
*/
|
|
||||||
public void handleGameModeChange(boolean currentlySpectator, GameMode newGameMode) {
|
|
||||||
if (newGameMode == GameMode.SPECTATOR) {
|
|
||||||
if (!currentlySpectator) {
|
|
||||||
hideElement(SPECTATOR_HIDDEN_ELEMENTS);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (currentlySpectator) {
|
|
||||||
resetElement(SPECTATOR_HIDDEN_ELEMENTS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,8 +71,18 @@ public class GeyserGuiData implements GuiData {
|
||||||
private final Set<GuiElement> hiddenHudElements = new HashSet<>();
|
private final Set<GuiElement> hiddenHudElements = new HashSet<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void hideElement(@NotNull @NonNull GuiElement... element) {
|
public void hideElement(@NonNull GuiElement... elements) {
|
||||||
|
Objects.requireNonNull(elements);
|
||||||
|
SetHudPacket packet = new SetHudPacket();
|
||||||
|
packet.setVisibility(HudVisibility.HIDE);
|
||||||
|
Set<HudElement> elementSet = packet.getElements();
|
||||||
|
|
||||||
|
for (GuiElement element : elements) {
|
||||||
|
this.hiddenHudElements.add(element);
|
||||||
|
elementSet.add(HUD_ELEMENT_VALUES[element.id()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
session.sendUpstreamPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,7 @@ import org.geysermc.geyser.Constants;
|
||||||
import org.geysermc.geyser.GeyserImpl;
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
import org.geysermc.geyser.api.bedrock.camera.CameraData;
|
import org.geysermc.geyser.api.bedrock.camera.CameraData;
|
||||||
import org.geysermc.geyser.api.bedrock.camera.CameraShake;
|
import org.geysermc.geyser.api.bedrock.camera.CameraShake;
|
||||||
|
import org.geysermc.geyser.api.bedrock.gui.GuiData;
|
||||||
import org.geysermc.geyser.api.connection.GeyserConnection;
|
import org.geysermc.geyser.api.connection.GeyserConnection;
|
||||||
import org.geysermc.geyser.api.entity.EntityData;
|
import org.geysermc.geyser.api.entity.EntityData;
|
||||||
import org.geysermc.geyser.api.entity.type.GeyserEntity;
|
import org.geysermc.geyser.api.entity.type.GeyserEntity;
|
||||||
|
|
@ -94,6 +95,7 @@ import org.geysermc.geyser.erosion.AbstractGeyserboundPacketHandler;
|
||||||
import org.geysermc.geyser.erosion.GeyserboundHandshakePacketHandler;
|
import org.geysermc.geyser.erosion.GeyserboundHandshakePacketHandler;
|
||||||
import org.geysermc.geyser.impl.camera.CameraDefinitions;
|
import org.geysermc.geyser.impl.camera.CameraDefinitions;
|
||||||
import org.geysermc.geyser.impl.camera.GeyserCameraData;
|
import org.geysermc.geyser.impl.camera.GeyserCameraData;
|
||||||
|
import org.geysermc.geyser.impl.gui.GeyserGuiData;
|
||||||
import org.geysermc.geyser.inventory.Inventory;
|
import org.geysermc.geyser.inventory.Inventory;
|
||||||
import org.geysermc.geyser.inventory.PlayerInventory;
|
import org.geysermc.geyser.inventory.PlayerInventory;
|
||||||
import org.geysermc.geyser.inventory.recipe.GeyserRecipe;
|
import org.geysermc.geyser.inventory.recipe.GeyserRecipe;
|
||||||
|
|
@ -559,6 +561,9 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
||||||
|
|
||||||
private final GeyserEntityData entityData;
|
private final GeyserEntityData entityData;
|
||||||
|
|
||||||
|
private final GeyserGuiData guiData;
|
||||||
|
|
||||||
|
|
||||||
private MinecraftProtocol protocol;
|
private MinecraftProtocol protocol;
|
||||||
|
|
||||||
public GeyserSession(GeyserImpl geyser, BedrockServerSession bedrockServerSession, EventLoop eventLoop) {
|
public GeyserSession(GeyserImpl geyser, BedrockServerSession bedrockServerSession, EventLoop eventLoop) {
|
||||||
|
|
@ -582,8 +587,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
||||||
this.structureBlockCache = new StructureBlockCache();
|
this.structureBlockCache = new StructureBlockCache();
|
||||||
this.tagCache = new TagCache();
|
this.tagCache = new TagCache();
|
||||||
this.worldCache = new WorldCache(this);
|
this.worldCache = new WorldCache(this);
|
||||||
|
|
||||||
this.cameraData = new GeyserCameraData(this);
|
this.cameraData = new GeyserCameraData(this);
|
||||||
this.entityData = new GeyserEntityData(this);
|
this.entityData = new GeyserEntityData(this);
|
||||||
|
this.guiData = new GeyserGuiData(this);
|
||||||
|
|
||||||
this.worldBorder = new WorldBorder(this);
|
this.worldBorder = new WorldBorder(this);
|
||||||
|
|
||||||
|
|
@ -1310,7 +1317,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
||||||
public void setGameMode(GameMode newGamemode) {
|
public void setGameMode(GameMode newGamemode) {
|
||||||
boolean currentlySpectator = this.gameMode == GameMode.SPECTATOR;
|
boolean currentlySpectator = this.gameMode == GameMode.SPECTATOR;
|
||||||
this.gameMode = newGamemode;
|
this.gameMode = newGamemode;
|
||||||
this.cameraData.handleGameModeChange(currentlySpectator, newGamemode);
|
this.guiData.handleGameModeChange(currentlySpectator, newGamemode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -2023,6 +2030,11 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
||||||
return this.entityData;
|
return this.entityData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull GuiData gui() {
|
||||||
|
return this.guiData;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shakeCamera(float intensity, float duration, @NonNull CameraShake type) {
|
public void shakeCamera(float intensity, float duration, @NonNull CameraShake type) {
|
||||||
this.cameraData.shakeCamera(intensity, duration, type);
|
this.cameraData.shakeCamera(intensity, duration, type);
|
||||||
|
|
|
||||||
|
|
@ -84,11 +84,7 @@ public class JavaUpdateAdvancementsTranslator extends PacketTranslator<Clientbou
|
||||||
String frameType = advancement.getDisplayData().getAdvancementType().toString().toLowerCase(Locale.ROOT);
|
String frameType = advancement.getDisplayData().getAdvancementType().toString().toLowerCase(Locale.ROOT);
|
||||||
String frameTitle = advancement.getDisplayColor() + MinecraftLocale.getLocaleString("advancements.toast." + frameType, session.locale());
|
String frameTitle = advancement.getDisplayColor() + MinecraftLocale.getLocaleString("advancements.toast." + frameType, session.locale());
|
||||||
String advancementName = MessageTranslator.convertMessage(advancement.getDisplayData().getTitle(), session.locale());
|
String advancementName = MessageTranslator.convertMessage(advancement.getDisplayData().getTitle(), session.locale());
|
||||||
|
session.gui().sendToast(frameTitle, advancementName);
|
||||||
ToastRequestPacket toastRequestPacket = new ToastRequestPacket();
|
|
||||||
toastRequestPacket.setTitle(frameTitle);
|
|
||||||
toastRequestPacket.setContent(advancementName);
|
|
||||||
session.sendUpstreamPacket(toastRequestPacket);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue