Added power level indicator with extensive tooltip to radial menu.

This commit is contained in:
Christian Knaapen
2023-06-24 22:40:12 +02:00
parent 8288e5db97
commit 9c9e4d04b7
5 changed files with 68 additions and 12 deletions

View File

@@ -17,7 +17,6 @@ import net.minecraftforge.network.PacketDistributor;
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
import nl.requios.effortlessbuilding.network.ModifierSettingsPacket;
import nl.requios.effortlessbuilding.network.PacketHandler;
import nl.requios.effortlessbuilding.systems.PowerLevel;
import nl.requios.effortlessbuilding.systems.ServerBuildState;
import nl.requios.effortlessbuilding.utilities.PowerLevelCommand;

View File

@@ -7,7 +7,6 @@ import net.minecraft.world.phys.Vec3;
import nl.requios.effortlessbuilding.EffortlessBuildingClient;
import nl.requios.effortlessbuilding.utilities.BlockEntry;
import nl.requios.effortlessbuilding.utilities.BlockSet;
import nl.requios.effortlessbuilding.systems.PowerLevel;
import java.util.ArrayList;
import java.util.List;

View File

@@ -5,7 +5,6 @@ import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.math.Vector4f;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.client.KeyMapping;
@@ -17,6 +16,7 @@ import net.minecraft.network.chat.MutableComponent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.RandomSource;
import net.minecraftforge.server.command.TextComponentHelper;
import nl.requios.effortlessbuilding.ClientEvents;
import nl.requios.effortlessbuilding.EffortlessBuildingClient;
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
@@ -24,10 +24,10 @@ import nl.requios.effortlessbuilding.create.foundation.item.ItemDescription;
import nl.requios.effortlessbuilding.create.foundation.item.TooltipHelper;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import nl.requios.effortlessbuilding.create.foundation.utility.Lang;
import nl.requios.effortlessbuilding.systems.PowerLevel;
import org.lwjgl.opengl.GL11;
import java.util.ArrayList;
import java.util.List;
import static nl.requios.effortlessbuilding.buildmode.ModeOptions.*;
@@ -144,7 +144,7 @@ public class RadialMenu extends Screen {
}
//Add actions
boolean canReplace = Minecraft.getInstance().player != null && EffortlessBuildingClient.POWER_LEVEL.canReplaceBlocks(Minecraft.getInstance().player);
boolean canReplace = minecraft.player != null && EffortlessBuildingClient.POWER_LEVEL.canReplaceBlocks(minecraft.player);
// buttons.add(new MenuButton(ActionEnum.OPEN_PLAYER_SETTINGS, -buttonDistance - 65, -13, Direction.UP));
if (canReplace) {
@@ -328,6 +328,36 @@ public class RadialMenu extends Screen {
String credits = "Effortless Building";
font.drawShadow(ms, credits, width - font.width(credits) - 4, height - 10, watermarkTextColor);
//Draw power level info
String powerLevelValue = minecraft.player.isCreative() ? "Creative" : String.valueOf(EffortlessBuildingClient.POWER_LEVEL.getPowerLevel());
String powerLevelText = I18n.get("key.effortlessbuilding.power_level") + ": " + powerLevelValue;
font.drawShadow(ms, powerLevelText, width - font.width(powerLevelText) - 4, height - 22, minecraft.player.isCreative() ? watermarkTextColor : ChatFormatting.DARK_PURPLE.getColor());
//if hover over power level info, show tooltip
if (mouseX >= width - font.width(powerLevelText) - 14 && mouseX <= width && mouseY >= height - 24 && mouseY <= height) {
var tooltip = new ArrayList<Component>();
tooltip.add(Components.literal(powerLevelText).withStyle(ChatFormatting.DARK_PURPLE));
int placementReach = EffortlessBuildingClient.POWER_LEVEL.getPlacementReach(minecraft.player);
tooltip.add(Components.translatable("key.effortlessbuilding.placement_reach").withStyle(ChatFormatting.GRAY).append(": " + (placementReach == 0 ? "vanilla" : placementReach + " blocks")));
tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_per_axis").withStyle(ChatFormatting.GRAY).append(": " + EffortlessBuildingClient.POWER_LEVEL.getMaxBlocksPerAxis(minecraft.player)));
tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_placed_at_once").withStyle(ChatFormatting.GRAY).append(": " + EffortlessBuildingClient.POWER_LEVEL.getMaxBlocksPlacedAtOnce(minecraft.player)));
tooltip.add(Components.translatable("key.effortlessbuilding.max_mirror_radius").withStyle(ChatFormatting.GRAY).append(": " + EffortlessBuildingClient.POWER_LEVEL.getMaxMirrorRadius(minecraft.player) + " blocks"));
if (EffortlessBuildingClient.POWER_LEVEL.canIncreasePowerLevel() && !minecraft.player.isCreative()) {
tooltip.add(Components.literal(""));
tooltip.add(Components.translatable("key.effortlessbuilding.next_power_level").withStyle(ChatFormatting.DARK_AQUA).append(": " + EffortlessBuildingClient.POWER_LEVEL.getNextPowerLevel()));
tooltip.add(Components.translatable("key.effortlessbuilding.placement_reach").withStyle(ChatFormatting.GRAY).append(": " + EffortlessBuildingClient.POWER_LEVEL.getPlacementReach(minecraft.player, true) + " blocks"));
tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_per_axis").withStyle(ChatFormatting.GRAY).append(": " + EffortlessBuildingClient.POWER_LEVEL.getMaxBlocksPerAxis(minecraft.player, true)));
tooltip.add(Components.translatable("key.effortlessbuilding.max_blocks_placed_at_once").withStyle(ChatFormatting.GRAY).append(": " + EffortlessBuildingClient.POWER_LEVEL.getMaxBlocksPlacedAtOnce(minecraft.player, true)));
tooltip.add(Components.translatable("key.effortlessbuilding.max_mirror_radius").withStyle(ChatFormatting.GRAY).append(": " + EffortlessBuildingClient.POWER_LEVEL.getMaxMirrorRadius(minecraft.player, true) + " blocks"));
tooltip.add(Components.literal(""));
tooltip.addAll(TooltipHelper.cutTextComponent(Components.translatable("key.effortlessbuilding.next_power_level_how"), ChatFormatting.GRAY, ChatFormatting.WHITE));
}
renderComponentTooltip(ms, tooltip, mouseX, mouseY);
}
//Draw buildmode text
for (final MenuRegion menuRegion : modes) {
@@ -363,7 +393,9 @@ public class RadialMenu extends Screen {
//Add description when holding shift
if (!button.description.isEmpty()) {
tooltip.add(TooltipHelper.holdShift(ItemDescription.Palette.Blue, hasShiftDown()));
if (hasShiftDown()) tooltip.add(Component.literal(button.description).withStyle(ChatFormatting.GRAY));
if (hasShiftDown()) {
tooltip.addAll(TooltipHelper.cutStringTextComponent(button.description, ChatFormatting.GRAY, ChatFormatting.WHITE));
}
}
//Add keybind in brackets
@@ -421,7 +453,6 @@ public class RadialMenu extends Screen {
}
private void performAction(boolean fromMouseClick) {
LocalPlayer player = Minecraft.getInstance().player;
if (switchTo != null) {
playRadialMenuSound();
@@ -436,7 +467,7 @@ public class RadialMenu extends Screen {
if (action != null) {
playRadialMenuSound();
ModeOptions.performAction(player, action);
ModeOptions.performAction(minecraft.player, action);
if (fromMouseClick) performedActionUsingMouse = true;
}

View File

@@ -17,6 +17,10 @@ public class PowerLevel {
return powerLevel;
}
public int getNextPowerLevel() {
return Math.min(powerLevel + 1, ServerPowerLevel.MAX_POWER_LEVEL);
}
public void setPowerLevel(int powerLevel) {
this.powerLevel = powerLevel;
EffortlessBuildingClient.BUILD_MODIFIERS.onPowerLevelChanged(powerLevel);
@@ -39,8 +43,12 @@ public class PowerLevel {
}
public int getPlacementReach(Player player) {
return getPlacementReach(player, false);
}
public int getPlacementReach(Player player, boolean nextPowerLevel) {
if (player.isCreative()) return CommonConfig.reach.creative.get();
return switch (getPowerLevel()) {
return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) {
case 1 -> CommonConfig.reach.level1.get();
case 2 -> CommonConfig.reach.level2.get();
case 3 -> CommonConfig.reach.level3.get();
@@ -55,8 +63,12 @@ public class PowerLevel {
}
public int getMaxBlocksPlacedAtOnce(Player player) {
return getMaxBlocksPlacedAtOnce(player, false);
}
public int getMaxBlocksPlacedAtOnce(Player player, boolean nextPowerLevel) {
if (player.isCreative()) return CommonConfig.maxBlocksPlacedAtOnce.creative.get();
return switch (getPowerLevel()) {
return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) {
case 1 -> CommonConfig.maxBlocksPlacedAtOnce.level1.get();
case 2 -> CommonConfig.maxBlocksPlacedAtOnce.level2.get();
case 3 -> CommonConfig.maxBlocksPlacedAtOnce.level3.get();
@@ -65,8 +77,12 @@ public class PowerLevel {
}
public int getMaxBlocksPerAxis(Player player) {
return getMaxBlocksPerAxis(player, false);
}
public int getMaxBlocksPerAxis(Player player, boolean nextPowerLevel) {
if (player.isCreative()) return CommonConfig.maxBlocksPerAxis.creative.get();
return switch (getPowerLevel()) {
return switch (nextPowerLevel ? getNextPowerLevel() : getPowerLevel()) {
case 1 -> CommonConfig.maxBlocksPerAxis.level1.get();
case 2 -> CommonConfig.maxBlocksPerAxis.level2.get();
case 3 -> CommonConfig.maxBlocksPerAxis.level3.get();
@@ -75,8 +91,12 @@ public class PowerLevel {
}
public int getMaxMirrorRadius(Player player) {
return getMaxMirrorRadius(player, false);
}
public int getMaxMirrorRadius(Player player, boolean nextPowerLevel) {
if (player.isCreative()) return CommonConfig.maxMirrorRadius.creative.get();
return switch (getPowerLevel()) {
return switch (getPowerLevel() + (nextPowerLevel ? 1 : 0)) {
case 1 -> CommonConfig.maxMirrorRadius.level1.get();
case 2 -> CommonConfig.maxMirrorRadius.level2.get();
case 3 -> CommonConfig.maxMirrorRadius.level3.get();

View File

@@ -15,6 +15,13 @@
"key.effortlessbuilding.upgrade_power_level": "Right-click to permanently increase your Building Power Level by 1.",
"key.effortlessbuilding.use_reach_upgrade": "Consume to increase your Building Power Level to %s.",
"key.effortlessbuilding.require_previous_reach_upgrades": "Previous upgrades need to be consumed first.",
"key.effortlessbuilding.power_level": "Power Level",
"key.effortlessbuilding.placement_reach": "Placement reach",
"key.effortlessbuilding.max_blocks_per_axis": "Max blocks per axis",
"key.effortlessbuilding.max_blocks_placed_at_once": "Max blocks placed at once",
"key.effortlessbuilding.max_mirror_radius": "Max (radial) mirror radius",
"key.effortlessbuilding.next_power_level": "Next Power Level",
"key.effortlessbuilding.next_power_level_how": "Increase your Power Level by looting power items in dungeons and other structures.",
"item.effortlessbuilding.randomizer_bag": "Leather Randomizer Bag",
"item.effortlessbuilding.golden_randomizer_bag": "Golden Randomizer Bag",