Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tamed turtle #601

Merged
merged 34 commits into from
Jun 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
458854b
add saddle turtle
zyxkad Apr 26, 2024
e104c32
finished saddle turtle
zyxkad Apr 27, 2024
bd5afb3
allows to open the turtle's GUI by press the inventory key
zyxkad Apr 27, 2024
a9c1800
remove unused codes
zyxkad Apr 27, 2024
fe59567
remove more unused code
zyxkad Apr 27, 2024
dea2e60
add saddle.getRider
zyxkad Apr 27, 2024
6d1c2d3
make completeEntityToLua returns effect of the entity
zyxkad Apr 27, 2024
7c930ab
remove unused imports
zyxkad Apr 27, 2024
cd6288c
add detailes flag when marshalling entity
zyxkad Apr 27, 2024
41e84d7
remove rideableJumping interface on turtleSeat
zyxkad Apr 28, 2024
d36726c
add turtle fuel HUD
zyxkad Apr 28, 2024
3c6dd6a
style fix
zyxkad Apr 28, 2024
040373c
remove unused import
zyxkad Apr 28, 2024
38b29ab
use Predicate.and instead of combine manually
zyxkad Apr 28, 2024
5c226c7
add @Override description
zyxkad Apr 28, 2024
8100337
add saddle_turtle to lang
zyxkad Apr 28, 2024
ff1d1ce
execute runData
zyxkad Apr 28, 2024
4a60724
fix EnumColor alternative code
zyxkad Apr 28, 2024
c39a049
add saddle capture cooldown
zyxkad Apr 28, 2024
5ec1d26
fix the turtle fuel bar will not clear when riding turtle broke
zyxkad Apr 28, 2024
cb64bee
fix fuel bar hidden condition
zyxkad Apr 28, 2024
34bac59
add more details to entityToLua
zyxkad Apr 28, 2024
c90407c
record control key when riding turtle
zyxkad Apr 29, 2024
c129b1d
fix type uncommented -> commented
zyxkad Apr 29, 2024
36dd974
run gradlew runData
zyxkad Apr 29, 2024
0473e27
reset en_US & zh_cn
zyxkad Apr 29, 2024
4fc072c
fix styles
zyxkad Apr 29, 2024
f3b1e6c
remove debug print
zyxkad Apr 29, 2024
4b65a39
Merge branch 'dev/0.8' of https://github.com/IntelligenceModding/Adva…
zyxkad Apr 30, 2024
e374a38
return null instead of empty map for fluid stack
zyxkad Apr 30, 2024
170510b
Merge branch 'dev/0.8' into tamed-turtle-patch
zyxkad May 4, 2024
ee85edb
Merge branch 'dev/0.8' of https://github.com/IntelligenceModding/Adva…
zyxkad May 28, 2024
df4a445
uncomment runtimeOnly
zyxkad May 28, 2024
58ff913
remove unuse import
zyxkad May 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ dependencies {
compileOnly fg.deobf("com.ldtteam:multipiston:${multipiston_version}")
compileOnly fg.deobf("com.ldtteam:domum_ornamentum:${domumornamentum_version}:universal")
compileOnly fg.deobf("com.ldtteam:blockui:${blockui_version}")
// IMPORTANT. This should be removed/uncommented when running `runData`
// IMPORTANT. This should be removed/commented when running `runData`
runtimeOnly fg.deobf("com.ldtteam:minecolonies:${minecolonies_version}")
runtimeOnly fg.deobf("com.ldtteam:structurize:${structurize_version}")
runtimeOnly fg.deobf("com.ldtteam:multipiston:${multipiston_version}")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// 1.19.2 2024-05-22T09:06:54.177869995 Tags for minecraft:item
// 1.19.2 2024-05-28T14:53:16.653667 Tags for minecraft:item
72eba3b11f69e16c87488f7c4ba7cfdad42c378e data/advancedperipherals/tags/items/smart_glasses.json
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// 1.19.2 2023-09-25T15:21:21.7663044 AP POI Type Tags
// 1.19.2 2024-05-28T14:53:16.655175 AP POI Type Tags
d3d6b837660a4e213f287ad9d11e12368b90cd8e data/minecraft/tags/point_of_interest_type/acquirable_job_site.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.19.2 2023-09-25T15:21:21.7927076 Turtle Upgrades
// 1.19.2 2024-05-28T14:53:16.655476 Turtle Upgrades
b8f19ae0fb5bb898facc08e3787e0f96c8211881 data/advancedperipherals/computercraft/turtle_upgrades/chatty_turtle.json
fe98c60e7d61139aacf2d0872873e610aac8a37b data/advancedperipherals/computercraft/turtle_upgrades/chunky_turtle.json
ae619da638ad89d7302d832d6c09e2c87401c539 data/advancedperipherals/computercraft/turtle_upgrades/compass_turtle.json
Expand All @@ -10,4 +10,5 @@ c9b2df2d4fed11f60a8e6f8da77b2fa53dd13572 data/advancedperipherals/computercraft/
42fc2b9a2601ef44d617cb18302c2c4fff31d282 data/advancedperipherals/computercraft/turtle_upgrades/overpowered_husbandry_automata.json
fa7743922ef6b4dd3e633f2857e4047d533f13b5 data/advancedperipherals/computercraft/turtle_upgrades/overpowered_weak_automata.json
4054c59ceb099f17c4555fd5f36b2f8b4109f624 data/advancedperipherals/computercraft/turtle_upgrades/player_turtle.json
fa6624d0dab03bd26c2cccecad51848d5071ecd3 data/advancedperipherals/computercraft/turtle_upgrades/saddle_turtle.json
c8059a2717cfac5b02898658c4d2d52fbd5710d4 data/advancedperipherals/computercraft/turtle_upgrades/weak_automata.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.19.2 2023-09-25T15:21:21.7873091 LootTables
// 1.19.2 2024-05-28T14:53:16.656615 LootTables
d865e8ac35302c486faf5c7122569c554186186d data/advancedperipherals/loot_tables/blocks/block_reader.json
a6f896cc3dbd8da12737825ec71e32970f54025c data/advancedperipherals/loot_tables/blocks/chat_box.json
f50f506ae1987537f76be4c05a81689b25798f91 data/advancedperipherals/loot_tables/blocks/colony_integrator.json
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.19.2 2023-09-27T10:45:57.2509102 Recipes
// 1.19.2 2024-05-28T14:53:16.657381 Recipes
045608027e4a5ea2d7dee7f402346b8e69f21675 data/advancedperipherals/advancements/recipes/advancedperipheralstab/armor/smart_glasses_netherite.json
db2dada2fdf42ca1bbf47f1eb075d1f9de89dfa8 data/advancedperipherals/advancements/recipes/advancedperipheralstab/block_reader.json
77c55e8500be4a344ca563a8bf7642257cdc7b8b data/advancedperipherals/advancements/recipes/advancedperipheralstab/chat_box.json
Expand Down Expand Up @@ -27,8 +27,8 @@ f1f468c732f8c802c27776d3fd7aac432bcac8e3 data/advancedperipherals/recipes/comput
55c257e4e8548d1453a7ab96c547d64c22b3e1d6 data/advancedperipherals/recipes/environment_detector.json
2ddf64c122165bcd3a277db8a1c7e96b4d510c67 data/advancedperipherals/recipes/geo_scanner.json
ebe70aa9fe80c5b962c13aa1fbadc32269ba81b9 data/advancedperipherals/recipes/inventory_manager.json
809bc6929cf5eab72648e8f1fb565b58749fec12 data/advancedperipherals/recipes/memory_card.json
82895838af6c6aea0c60e3a3fbf71073ab684167 data/advancedperipherals/recipes/me_bridge.json
809bc6929cf5eab72648e8f1fb565b58749fec12 data/advancedperipherals/recipes/memory_card.json
8a73c4eb66e7a1cdc8e51d33466cf5a30da9270e data/advancedperipherals/recipes/nbt_storage.json
360432f30d61291066aa8c54692629f7a92e178d data/advancedperipherals/recipes/overpowered_end_automata_core.json
4ea6e90d13a61d90ad245539d20020ff9cb843e1 data/advancedperipherals/recipes/overpowered_husbandry_automata_core.json
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.19.2 2023-09-25T15:21:21.7823145 Pocket Computer Upgrades
// 1.19.2 2024-05-28T14:53:16.655934 Pocket Computer Upgrades
b672635324c0df354e587efc81d0b19a581eae2f data/advancedperipherals/computercraft/pocket_upgrades/chatty_pocket.json
30b8f663613c7ce77048fd69631afcc11a682276 data/advancedperipherals/computercraft/pocket_upgrades/colony_pocket.json
d4647159c2f2693a9c5e8d12bf740635751d29a8 data/advancedperipherals/computercraft/pocket_upgrades/environment_pocket.json
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.19.2 2024-05-21T19:34:45.6005706 Block States: advancedperipherals
// 1.19.2 2024-05-28T14:53:16.658228 Block States: advancedperipherals
5e28ce1be9a6996d982641e5df1fa7162090b8cc assets/advancedperipherals/blockstates/block_reader.json
f42bdde60f84fdb312f7cf3b2be461d9c11ebdc8 assets/advancedperipherals/blockstates/chat_box.json
1227aa092fcf1327547ace6ccc9db230e45891b0 assets/advancedperipherals/blockstates/colony_integrator.json
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// 1.19.2 2024-05-21T19:49:29.0042891 Languages: en_us
2503b9953090303ef91a3d7ae64f7a6a6b75bb3b assets/advancedperipherals/lang/en_us.json
// 1.19.2 2024-05-28T14:53:16.658014 Languages: en_us
2580077212426421e05822910bde2edff88e2346 assets/advancedperipherals/lang/en_us.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.19.2 2024-05-01T21:24:42.041223 Block tags
// 1.19.2 2024-05-28T14:53:16.656337 Block tags
e1f71dcb4f9e7e36e29b0ad09d6520dc3adfa4a6 data/forge/tags/blocks/needs_wood_tool.json
ef4684e10e5054e8cfd515dffa4a98169d281078 data/minecraft/tags/blocks/mineable/pickaxe.json
8de9358ffeaa8d5f015774f70244a93b915427b8 data/minecraft/tags/blocks/needs_iron_tool.json
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@
"text.advancedperipherals.added_player": "Added you to the memory card",
"text.advancedperipherals.automata_core_feed_by_player": "You're trying to feed an entity to a soul, but your own body refuses to do this. Maybe something more mechanical can do this?",
"text.advancedperipherals.removed_player": "Cleared the memory card",
"text.advancedperipherals.saddle_turtle_dismount_hint": "Controlling %1$s. Press %2$s and %3$s to dismount.",
"text.advancedperipherals.smart_glasses.modules": "Modules",
"text.advancedperipherals.smart_glasses.peripherals": "Peripherals",
"turtle.advancedperipherals.chatty_turtle": "Chatty",
Expand All @@ -98,5 +99,6 @@
"turtle.advancedperipherals.overpowered_husbandry_automata": "Overpowered husbandry automata",
"turtle.advancedperipherals.overpowered_weak_automata": "Overpowered weak automata",
"turtle.advancedperipherals.player_turtle": "Player Detector",
"turtle.advancedperipherals.saddle_turtle": "Saddle",
"turtle.advancedperipherals.weak_automata": "Weak automata"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"type": "advancedperipherals:saddle_turtle",
"item": "minecraft:saddle"
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public void fillItemList(NonNullList<ItemStack> items) {
items.addAll(turtleUpgrade(CCRegistration.ID.CHATTY_TURTLE));
items.addAll(turtleUpgrade(CCRegistration.ID.CHUNKY_TURTLE));
items.addAll(turtleUpgrade(CCRegistration.ID.COMPASS_TURTLE));
items.addAll(turtleUpgrade(CCRegistration.ID.SADDLE_TURTLE));
items.addAll(turtleUpgrade(CCRegistration.ID.PLAYER_TURTLE));
items.addAll(turtleUpgrade(CCRegistration.ID.ENVIRONMENT_TURTLE));
items.addAll(turtleUpgrade(CCRegistration.ID.GEOSCANNER_TURTLE));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package de.srendi.advancedperipherals.client;

import com.mojang.blaze3d.platform.InputConstants;
import de.srendi.advancedperipherals.AdvancedPeripherals;
import de.srendi.advancedperipherals.common.entity.TurtleSeatEntity;
import de.srendi.advancedperipherals.common.network.PacketHandler;
import de.srendi.advancedperipherals.common.network.toserver.SaddleTurtleControlPacket;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.Input;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.client.event.MovementInputUpdateEvent;
import net.minecraftforge.client.event.RenderGuiOverlayEvent;
import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay;
import net.minecraftforge.event.entity.EntityMountEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;

@Mod.EventBusSubscriber(modid = AdvancedPeripherals.MOD_ID, value = Dist.CLIENT)
public class ClientEventSubscriber {
@SubscribeEvent
public static void renderingHuds(RenderGuiOverlayEvent.Pre event) {
if (ClientRegistry.SADDLE_TURTLE_OVERLAY.shouldRenderFuelBar() && event.getOverlay().id().equals(VanillaGuiOverlay.EXPERIENCE_BAR.id())) {
event.setCanceled(true);
return;
}
}

private static boolean sneaking = false;

@SubscribeEvent
public static void playerTryDismount(InputEvent.Key event) {
Minecraft minecraft = Minecraft.getInstance();
if (!minecraft.options.keyShift.matches(event.getKey(), event.getScanCode())) {
return;
}
switch (event.getAction()) {
case InputConstants.PRESS:
sneaking = true;
if (ClientRegistry.SADDLE_TURTLE_OVERLAY.isPlayerMountedOnTurtle()) {
minecraft.options.keyShift.setDown(false);
}
break;
case InputConstants.RELEASE:
sneaking = false;
break;
}
}

private static Input lastInput = new Input();
private static boolean lastSneak = false;

@SubscribeEvent
public static void playerMounting(EntityMountEvent event) {
if (event.isMounting() && event.getEntityMounting() == Minecraft.getInstance().player && event.getEntityBeingMounted() instanceof TurtleSeatEntity) {
// clear last key records
lastInput.up = false;
lastInput.down = false;
lastInput.left = false;
lastInput.right = false;
lastInput.jumping = false;
lastSneak = false;
}
}

@SubscribeEvent
public static void playerMove(MovementInputUpdateEvent event) {
if (ClientRegistry.SADDLE_TURTLE_OVERLAY.isPlayerMountedOnTurtle()) {
Input input = event.getInput();
if (sneaking == lastSneak && lastInput != null) {
if (lastInput.up == input.up && lastInput.down == input.down && lastInput.left == input.left && lastInput.right == input.right && lastInput.jumping == input.jumping) {
return;
}
}
lastInput.up = input.up;
lastInput.down = input.down;
lastInput.left = input.left;
lastInput.right = input.right;
lastInput.jumping = input.jumping;
lastSneak = sneaking;
PacketHandler.sendToServer(new SaddleTurtleControlPacket(input.up, input.down, input.left, input.right, input.jumping, sneaking));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import de.srendi.advancedperipherals.AdvancedPeripherals;
import de.srendi.advancedperipherals.client.renderer.DistanceDetectorRenderer;
import de.srendi.advancedperipherals.client.screens.InventoryManagerScreen;
import de.srendi.advancedperipherals.client.screens.SaddleTurtleScreen;
import de.srendi.advancedperipherals.client.screens.SmartGlassesScreen;
import de.srendi.advancedperipherals.common.setup.APBlockEntityTypes;
import de.srendi.advancedperipherals.common.setup.APContainerTypes;
Expand All @@ -15,6 +16,7 @@
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.EntityRenderersEvent;
import net.minecraftforge.client.event.ModelEvent;
import net.minecraftforge.client.event.RegisterGuiOverlaysEvent;
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
Expand All @@ -25,6 +27,8 @@ public class ClientRegistry {

private static final String[] TURTLE_MODELS = new String[]{"turtle_chat_box_upgrade_left", "turtle_chat_box_upgrade_right", "turtle_environment_upgrade_left", "turtle_environment_upgrade_right", "turtle_player_upgrade_left", "turtle_player_upgrade_right", "turtle_geoscanner_upgrade_left", "turtle_geoscanner_upgrade_right"};

public static final SaddleTurtleScreen SADDLE_TURTLE_OVERLAY = new SaddleTurtleScreen();

@SubscribeEvent
public static void registerModels(ModelEvent.RegisterAdditional event) {
for (String model : TURTLE_MODELS) {
Expand All @@ -39,6 +43,7 @@ public static void onClientSetup(FMLClientSetupEvent event) {

ComputerCraftAPIClient.registerTurtleUpgradeModeller(CCRegistration.CHUNKY_TURTLE.get(), TurtleUpgradeModeller.flatItem());
ComputerCraftAPIClient.registerTurtleUpgradeModeller(CCRegistration.COMPASS_TURTLE.get(), TurtleUpgradeModeller.flatItem());
ComputerCraftAPIClient.registerTurtleUpgradeModeller(CCRegistration.SADDLE_TURTLE.get(), TurtleUpgradeModeller.flatItem());
ComputerCraftAPIClient.registerTurtleUpgradeModeller(CCRegistration.CHAT_BOX_TURTLE.get(), TurtleUpgradeModeller.sided(new ModelResourceLocation(AdvancedPeripherals.getRL("turtle_chat_box_upgrade_left"), "inventory"), new ModelResourceLocation(AdvancedPeripherals.getRL("turtle_chat_box_upgrade_right"), "inventory")));
ComputerCraftAPIClient.registerTurtleUpgradeModeller(CCRegistration.ENVIRONMENT_TURTLE.get(), TurtleUpgradeModeller.sided(new ModelResourceLocation(AdvancedPeripherals.getRL("turtle_environment_upgrade_left"), "inventory"), new ModelResourceLocation(AdvancedPeripherals.getRL("turtle_environment_upgrade_right"), "inventory")));
ComputerCraftAPIClient.registerTurtleUpgradeModeller(CCRegistration.GEO_SCANNER_TURTLE.get(), TurtleUpgradeModeller.sided(new ModelResourceLocation(AdvancedPeripherals.getRL("turtle_geoscanner_upgrade_left"), "inventory"), new ModelResourceLocation(AdvancedPeripherals.getRL("turtle_geoscanner_upgrade_right"), "inventory")));
Expand All @@ -62,4 +67,9 @@ public static void registeringKeymappings(RegisterKeyMappingsEvent event) {
public static void registeringRenderers(EntityRenderersEvent.RegisterRenderers event) {
event.registerBlockEntityRenderer(APBlockEntityTypes.DISTANCE_DETECTOR.get(), DistanceDetectorRenderer::new);
}

@SubscribeEvent
public static void registeringOverlays(RegisterGuiOverlaysEvent event) {
event.registerAboveAll(SaddleTurtleScreen.ID, SADDLE_TURTLE_OVERLAY);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
package de.srendi.advancedperipherals.client.screens;

import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import de.srendi.advancedperipherals.common.entity.TurtleSeatEntity;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiComponent;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.FormattedText;
import net.minecraft.util.FormattedCharSequence;
import net.minecraftforge.client.gui.overlay.ForgeGui;
import net.minecraftforge.client.gui.overlay.IGuiOverlay;

public class SaddleTurtleScreen extends GuiComponent implements IGuiOverlay {
public static final String ID = "saddle_turtle_overlay";

private static final long ACTIVE_TIMEOUT = 5000;

private ForgeGui gui;
private int screenWidth = 0;
private int screenHeight = 0;

private int fuelLevel = 0;
private int fuelLimit = 0;
private int barColor = 0;
private long lastActived = 0;

public SaddleTurtleScreen() {}

protected Font getFont() {
return this.gui.getMinecraft().font;
}

protected int textWidth(String text) {
return getFont().width(text);
}

protected int textWidth(FormattedText text) {
return getFont().width(text);
}

protected int textWidth(FormattedCharSequence text) {
return getFont().width(text);
}

public static boolean isPlayerMountedOnTurtle() {
LocalPlayer player = Minecraft.getInstance().player;
return player != null && player.getRootVehicle() instanceof TurtleSeatEntity;
}

public boolean shouldRenderFuelBar() {
if (this.lastActived == 0) {
return false;
}
if (!isPlayerMountedOnTurtle()) {
this.hide();
return false;
}
return this.lastActived + ACTIVE_TIMEOUT > System.currentTimeMillis();
}

public void hide() {
this.fuelLevel = 0;
this.fuelLimit = 0;
this.barColor = 0;
this.lastActived = 0;
}

public void keepAlive() {
this.lastActived = System.currentTimeMillis();
}

public void setFuelLevel(int level) {
if (level < 0) {
level = 0;
}
if (this.fuelLevel != level) {
this.fuelLevel = level;
this.keepAlive();
}
}

public void setFuelLimit(int limit) {
if (this.fuelLimit != limit) {
this.fuelLimit = limit;
this.keepAlive();
}
}

public void setBarColor(int color) {
if (this.barColor != color) {
this.barColor = color;
this.keepAlive();
}
}

private void renderFuelBar(PoseStack stack) {
// TODO: use a better looking bar here, and/or find someway to change the bar's color
RenderSystem.setShaderTexture(0, GuiComponent.GUI_ICONS_LOCATION);
int fontColor = 0x80ff20;

int width = 182;
int left = this.screenWidth / 2 - 91;
int top = this.screenHeight - 32 + 3;
this.blit(stack, left, top, 0, 64, width, 5);
if (fuelLevel > 0 && fuelLimit > 0) {
int progWidth = fuelLevel * width / fuelLimit;
this.blit(stack, left, top, 0, 69, progWidth, 5);
}

String text = fuelLimit > 0 ? String.format("%d / %d", fuelLevel, fuelLimit) : "Infinity";
int x = (this.screenWidth - getFont().width(text)) / 2;
int y = this.screenHeight - 31;
getFont().draw(stack, text, (float)(x + 1), (float) y, 0);
getFont().draw(stack, text, (float)(x - 1), (float) y, 0);
getFont().draw(stack, text, (float) x, (float)(y + 1), 0);
getFont().draw(stack, text, (float) x, (float)(y - 1), 0);
getFont().draw(stack, text, (float) x, (float) y, fontColor);
}

private void renderDismountHint(PoseStack stack) {
Minecraft minecraft = Minecraft.getInstance();
Component name = Component.translatable("block.computercraft.turtle_normal.upgraded", Component.translatable("turtle.advancedperipherals.saddle_turtle"));
// TODO: get and render turtle's label if exists
Component text = Component.translatable("text.advancedperipherals.saddle_turtle_dismount_hint",
name, minecraft.options.keyShift.getTranslatedKeyMessage(), minecraft.options.keyInventory.getTranslatedKeyMessage());
float top = 10;
float x = (float)(this.screenWidth / 2 - textWidth(text) / 2);
getFont().drawShadow(stack, text, x, top, 0xffffff);
}

public void render(ForgeGui gui, PoseStack poseStack, float partialTick, int screenWidth, int screenHeight) {
if (!isPlayerMountedOnTurtle()) {
return;
}

this.gui = gui;
this.screenWidth = screenWidth;
this.screenHeight = screenHeight;

if (this.shouldRenderFuelBar()) {
this.renderFuelBar(poseStack);
}
this.renderDismountHint(poseStack);
}
}
Loading
Loading