diff --git a/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java b/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java index 81b8ca8..49b24a2 100644 --- a/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java +++ b/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java @@ -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; diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java index 0c0855a..72c30d4 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java @@ -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; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java index 6383771..71c5423 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java @@ -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(); + 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; } diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/PowerLevel.java b/src/main/java/nl/requios/effortlessbuilding/systems/PowerLevel.java index 9f88165..c6edb59 100644 --- a/src/main/java/nl/requios/effortlessbuilding/systems/PowerLevel.java +++ b/src/main/java/nl/requios/effortlessbuilding/systems/PowerLevel.java @@ -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(); diff --git a/src/main/resources/assets/effortlessbuilding/lang/en_us.json b/src/main/resources/assets/effortlessbuilding/lang/en_us.json index ffc0fbe..dc8ce65 100644 --- a/src/main/resources/assets/effortlessbuilding/lang/en_us.json +++ b/src/main/resources/assets/effortlessbuilding/lang/en_us.json @@ -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",