Commit e303e736 by Jonathan Thomas

Improved context and chat prompt to include:

- active status effects
- creative mode & hard-core mode
- is Swimming, is on the Ground
- Weather: is raining / thundering
- Moon phases
- World difficulty
parent 9526d44c
Pipeline #11886 passed with stage
in 23 seconds
...@@ -167,7 +167,7 @@ public class ClientInit implements ClientModInitializer { ...@@ -167,7 +167,7 @@ public class ClientInit implements ClientModInitializer {
int fullBright, float xOffset, float yOffset) { int fullBright, float xOffset, float yOffset) {
if (entity.getCustomName() != null) { if (entity.getCustomName() != null) {
TextRenderer fontRenderer = MinecraftClient.getInstance().textRenderer; TextRenderer fontRenderer = MinecraftClient.getInstance().textRenderer;
String lineText = entity.getCustomName().getString(); String lineText = entity.getCustomName().getLiteralString();
fontRenderer.draw(lineText, xOffset, yOffset, 0xffffff, fontRenderer.draw(lineText, xOffset, yOffset, 0xffffff,
false, matrix, immediate, TextLayerType.NORMAL, 0, fullBright); false, matrix, immediate, TextLayerType.NORMAL, 0, fullBright);
} }
......
package com.owlmaddie; package com.owlmaddie;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.owlmaddie.json.QuestJson; import com.owlmaddie.json.QuestJson;
import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.WorldSavePath;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.google.gson.Gson;
import net.minecraft.util.Rarity; import net.minecraft.util.Rarity;
import net.minecraft.util.WorldSavePath;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import net.minecraft.server.MinecraftServer; import java.util.*;
import org.slf4j.Logger; import java.util.regex.Matcher;
import org.slf4j.LoggerFactory; import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class ChatDataManager { public class ChatDataManager {
// Use a static instance to manage our data globally // Use a static instance to manage our data globally
...@@ -115,10 +115,13 @@ public class ChatDataManager { ...@@ -115,10 +115,13 @@ public class ChatDataManager {
// Add PLAYER context information // Add PLAYER context information
Map<String, String> contextData = new HashMap<>(); Map<String, String> contextData = new HashMap<>();
contextData.put("player_name", player.getDisplayName().getString()); contextData.put("player_name", player.getDisplayName().getString());
contextData.put("player_health", String.valueOf(player.getHealth())); contextData.put("player_health", player.getHealth() + "/" + player.getMaxHealth());
contextData.put("player_hunger", String.valueOf(player.getHungerManager().getFoodLevel())); contextData.put("player_hunger", String.valueOf(player.getHungerManager().getFoodLevel()));
contextData.put("player_held_item", String.valueOf(player.getMainHandStack().getItem().toString())); contextData.put("player_held_item", String.valueOf(player.getMainHandStack().getItem().toString()));
contextData.put("player_biome", player.getWorld().getBiome(player.getBlockPos()).getKey().get().getValue().getPath()); contextData.put("player_biome", player.getWorld().getBiome(player.getBlockPos()).getKey().get().getValue().getPath());
contextData.put("player_is_creative", player.isCreative() ? "yes" : "no");
contextData.put("player_is_swimming", player.isSwimming() ? "yes" : "no");
contextData.put("player_is_on_ground", player.isOnGround() ? "yes" : "no");
ItemStack feetArmor = player.getInventory().armor.get(0); ItemStack feetArmor = player.getInventory().armor.get(0);
ItemStack legsArmor = player.getInventory().armor.get(1); ItemStack legsArmor = player.getInventory().armor.get(1);
...@@ -129,19 +132,45 @@ public class ChatDataManager { ...@@ -129,19 +132,45 @@ public class ChatDataManager {
contextData.put("player_armor_legs", legsArmor.getItem().toString()); contextData.put("player_armor_legs", legsArmor.getItem().toString());
contextData.put("player_armor_feet", feetArmor.getItem().toString()); contextData.put("player_armor_feet", feetArmor.getItem().toString());
// Get active player effects
String effectsString = player.getActiveStatusEffects().entrySet().stream()
.map(entry -> entry.getKey().getTranslationKey() + " x" + (entry.getValue().getAmplifier() + 1))
.collect(Collectors.joining(", "));
contextData.put("player_active_effects", effectsString);
// Get World time (as 24 hour value) // Get World time (as 24 hour value)
int hours = (int) ((player.getWorld().getTimeOfDay() / 1000 + 6) % 24); // Minecraft day starts at 6 AM int hours = (int) ((player.getWorld().getTimeOfDay() / 1000 + 6) % 24); // Minecraft day starts at 6 AM
int minutes = (int) (((player.getWorld().getTimeOfDay() % 1000) / 1000.0) * 60); int minutes = (int) (((player.getWorld().getTimeOfDay() % 1000) / 1000.0) * 60);
contextData.put("world_time", String.format("%02d:%02d", hours, minutes)); contextData.put("world_time", String.format("%02d:%02d", hours, minutes));
contextData.put("world_is_raining", player.getWorld().isRaining() ? "yes" : "no");
contextData.put("world_is_thundering", player.getWorld().isThundering() ? "yes" : "no");
contextData.put("world_difficulty", player.getWorld().getDifficulty().getName());
contextData.put("world_is_hardcore", player.getWorld().getLevelProperties().isHardcore() ? "yes" : "no");
// Get moon phase
String moonPhaseDescription = switch (player.getWorld().getMoonPhase()) {
case 0 -> "Full Moon";
case 1 -> "Waning Gibbous";
case 2 -> "Last Quarter";
case 3 -> "Waning Crescent";
case 4 -> "New Moon";
case 5 -> "Waxing Crescent";
case 6 -> "First Quarter";
case 7 -> "Waxing Gibbous";
default -> "Unknown";
};
contextData.put("world_moon_phase", moonPhaseDescription);
// Get Entity details // Get Entity details
Entity entity = ServerEntityFinder.getEntityByUUID(player.getServerWorld(), UUID.fromString(entityId)); LivingEntity entity = (LivingEntity) ServerEntityFinder.getEntityByUUID(player.getServerWorld(), UUID.fromString(entityId));
if (entity.getCustomName() == null) { if (entity.getCustomName() == null) {
contextData.put("entity_name", ""); contextData.put("entity_name", "");
} else { } else {
contextData.put("entity_name", entity.getCustomName().toString()); contextData.put("entity_name", entity.getCustomName().getLiteralString());
} }
contextData.put("entity_type", entity.getType().getName().getString().toString()); contextData.put("entity_type", entity.getType().getName().getString());
contextData.put("entity_health", entity.getHealth() + "/" + entity.getMaxHealth());
contextData.put("entity_character_sheet", characterSheet); contextData.put("entity_character_sheet", characterSheet);
return contextData; return contextData;
......
...@@ -11,7 +11,14 @@ Player Character Sheet: ...@@ -11,7 +11,14 @@ Player Character Sheet:
- Hunger: {{player_hunger}} - Hunger: {{player_hunger}}
- Held Item: {{player_held_item}} - Held Item: {{player_held_item}}
- Armor: Head: {{player_armor_head}}, Chest: {{player_armor_chest}}, Legs: {{player_armor_legs}}, Feet: {{player_armor_feet}} - Armor: Head: {{player_armor_head}}, Chest: {{player_armor_chest}}, Legs: {{player_armor_legs}}, Feet: {{player_armor_feet}}
- Active Status Effects: {{player_active_effects}}
- Creative Mode: {{player_is_creative}}
- Swimming: {{player_is_swimming}}
- On the Ground: {{player_is_on_ground}}
World Info: World Info:
- Biome: {{player_biome}} - Biome: {{player_biome}}
- Current Time: {{world_time}} (24 hour format) - Current Time: {{world_time}} (24 hour format)
- Weather: Raining: {{world_is_raining}}, Thundering: {{world_is_thundering}}
- Moon Phase: {{world_moon_phase}}
- Difficulty: {{world_difficulty}}, Hard Core: {{world_is_hardcore}}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment