Преглед изворни кода

Made more things for the upgrade system

____tbvns____ пре 5 месеци
родитељ
комит
f437c5f6bb

+ 1 - 1
build.gradle

@@ -64,7 +64,7 @@ dependencies {
         exclude group: 'com.google.guava', module: 'guava'
         exclude group: 'it.unimi.dsi', module: 'fastutil'
     }
-    annotationProcessor "io.wispforest:owo-lib:${project.owo_version}"
+    modImplementation include("net.kyori:adventure-platform-fabric:5.14.1") // for Minecraft 1.21.2-1.21.3
 
     implementation 'org.reflections:reflections:0.10.2'
     include "io.wispforest:owo-sentinel:${project.owo_version}"

+ 19 - 12
src/client/java/xyz/tbvns/rogue_block/client/Gui/UpgradeComponent.java

@@ -9,30 +9,37 @@ import io.wispforest.owo.ui.core.Positioning;
 import io.wispforest.owo.ui.core.Sizing;
 import io.wispforest.owo.ui.event.MouseEnter;
 import lombok.AllArgsConstructor;
+import net.kyori.adventure.platform.fabric.FabricAudiences;
+import net.kyori.adventure.platform.fabric.FabricServerAudiences;
 import net.minecraft.item.ItemStack;
+import net.minecraft.text.OrderedText;
+import net.minecraft.text.Text;
 import net.minecraft.util.Identifier;
+import xyz.tbvns.rogue_block.Upgrades.Upgrade;
 import xyz.tbvns.rogue_block.Upgrades.UpgradeRarity;
 import xyz.tbvns.rogue_block.Utils;
+import xyz.tbvns.rogue_block.client.Rogue_blockClient;
+
+import java.util.List;
 
 public class UpgradeComponent {
-    ItemStack stack;
-    UpgradeRarity rarity;
-    double x, y;
+    Upgrade upgrade;
     boolean isHovered = false;
+    double x, y;
 
     Component textureComponent;
     Component itemComponent;
 
-    public UpgradeComponent(ItemStack stack, UpgradeRarity rarity, int posX, int posY) {
-        this.stack = stack;
-        this.rarity = rarity;
-        x = posX; y = posY;
+    public UpgradeComponent(Upgrade upgrade) {
+        this.upgrade = upgrade;
+        x = upgrade.getGuiPos()[0];
+        y = upgrade.getGuiPos()[1];
     }
 
     public void add(FlowLayout layout) {
-        Component item = Components.item(stack);
+        Component item = Components.item(upgrade.itemDisplay());
         item.positioning().set(Positioning.absolute((int) x, (int) y));
-        Component component = getTextureComponent(rarity.unobtained, item);
+        Component component = getTextureComponent(upgrade.getRarity().unobtained, item);
 
         layout.child(component);
         layout.child(item);
@@ -57,7 +64,7 @@ public class UpgradeComponent {
             component.sizing(Sizing.fixed(25), Sizing.fixed(25));
             item.sizing(Sizing.fixed(20), Sizing.fixed(20));
             isHovered = true;
-
+            UpgradeScreen.toolTip = Rogue_blockClient.audiences.toNative(upgrade.generateTooltip());
             UpgradeScreen.update();
         });
 
@@ -65,7 +72,7 @@ public class UpgradeComponent {
             component.sizing(Sizing.fixed(21), Sizing.fixed(21));
             item.sizing(Sizing.fixed(16), Sizing.fixed(16));
             isHovered = false;
-
+            UpgradeScreen.toolTip = Text.empty();
             UpgradeScreen.update();
         });
 
@@ -73,7 +80,7 @@ public class UpgradeComponent {
             ParentComponent parentComponent = textureComponent.root();
             textureComponent.remove();
             FlowLayout layout = (FlowLayout) parentComponent;
-            textureComponent = getTextureComponent(rarity.obtained, item);
+            textureComponent = getTextureComponent(upgrade.getRarity().obtained, item);
             layout.child(textureComponent);
             return true;
         });

+ 13 - 1
src/client/java/xyz/tbvns/rogue_block/client/Gui/UpgradeScreen.java

@@ -6,8 +6,11 @@ import io.wispforest.owo.ui.container.FlowLayout;
 import io.wispforest.owo.ui.container.GridLayout;
 import io.wispforest.owo.ui.container.StackLayout;
 import io.wispforest.owo.ui.core.*;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.tooltip.Tooltip;
 import net.minecraft.item.ItemStack;
 import net.minecraft.item.Items;
+import net.minecraft.text.Text;
 import org.jetbrains.annotations.NotNull;
 import xyz.tbvns.rogue_block.Upgrades.Upgrade;
 import xyz.tbvns.rogue_block.Upgrades.UpgradesManager;
@@ -19,6 +22,7 @@ public class UpgradeScreen extends BaseOwoScreen<FlowLayout> {
     double posX = 0;
     double posY = 0;
 
+    public static Text toolTip;
     static List<UpgradeComponent> components = new ArrayList<>();
 
     @Override
@@ -47,6 +51,14 @@ public class UpgradeScreen extends BaseOwoScreen<FlowLayout> {
         generateUpgradeComponent(rootComponent);
     }
 
+    @Override
+    public void render(DrawContext context, int mouseX, int mouseY, float delta) {
+        if (toolTip != null && !toolTip.equals(Text.empty())) {
+            setTooltip(toolTip);
+        }
+        super.render(context, mouseX, mouseY, delta);
+    }
+
     @Override
     public boolean shouldPause() {
         return false;
@@ -54,7 +66,7 @@ public class UpgradeScreen extends BaseOwoScreen<FlowLayout> {
 
     public void generateUpgradeComponent(FlowLayout rootComponent) {
         for (Upgrade upgrade : UpgradesManager.registeredUpgrades) {
-            UpgradeComponent component = new UpgradeComponent(upgrade.itemDisplay(), upgrade.getRarity(), upgrade.getGuiPos()[0], upgrade.getGuiPos()[1]);
+            UpgradeComponent component = new UpgradeComponent(upgrade);
             component.add(rootComponent);
             components.add(component);
         }

+ 5 - 0
src/client/java/xyz/tbvns/rogue_block/client/Rogue_blockClient.java

@@ -5,6 +5,9 @@ import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents;
 import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
 import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents;
 import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents;
+import net.kyori.adventure.audience.Audience;
+import net.kyori.adventure.platform.fabric.FabricAudiences;
+import net.kyori.adventure.platform.fabric.FabricClientAudiences;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.screen.world.CreateWorldScreen;
 import net.minecraft.world.gen.chunk.FlatChunkGenerator;
@@ -13,6 +16,8 @@ import xyz.tbvns.rogue_block.client.Events.ClientTickEvent;
 
 public class Rogue_blockClient implements ClientModInitializer {
 
+    public static final FabricClientAudiences audiences =  FabricClientAudiences.builder().build();
+
     @Override
     public void onInitializeClient() {
         ClientTickEvents.START_WORLD_TICK.register(new ClientTickEvent());

+ 2 - 3
src/main/java/xyz/tbvns/rogue_block/Events/PlayerStartButtonEvent.java

@@ -7,6 +7,7 @@ import net.minecraft.util.Hand;
 import net.minecraft.util.hit.BlockHitResult;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.world.World;
+import xyz.tbvns.rogue_block.Managers.RunManager;
 import xyz.tbvns.rogue_block.Managers.WorldManager;
 
 public class PlayerStartButtonEvent implements UseBlockCallback {
@@ -14,9 +15,7 @@ public class PlayerStartButtonEvent implements UseBlockCallback {
     public ActionResult interact(PlayerEntity playerEntity, World world, Hand hand, BlockHitResult blockHitResult) {
         if (blockHitResult.getBlockPos().equals(new BlockPos(0, 13, 0))) {
             if (!world.isClient) {
-                WorldManager.createNewRunWorld(world.getServer());
-                WorldManager.teleportToRunWorld(world.getServer());
-                WorldManager.clearAchievements(world.getServer());
+                RunManager.launchRun(world.getServer());
             }
         }
         return ActionResult.PASS;

+ 25 - 0
src/main/java/xyz/tbvns/rogue_block/Managers/RunManager.java

@@ -0,0 +1,25 @@
+package xyz.tbvns.rogue_block.Managers;
+
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.server.network.ServerPlayerEntity;
+import xyz.tbvns.rogue_block.Upgrades.PassiveUpgrade;
+import xyz.tbvns.rogue_block.Upgrades.Upgrade;
+import xyz.tbvns.rogue_block.Upgrades.UpgradeType;
+import xyz.tbvns.rogue_block.Upgrades.UpgradesManager;
+
+public class RunManager {
+    public static void launchRun(MinecraftServer server) {
+        WorldManager.createNewRunWorld(server);
+        WorldManager.clearAchievements(server);
+        WorldManager.teleportToRunWorld(server);
+
+        for (ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) {
+            for (Upgrade upgrade : UpgradesManager.registeredUpgrades) {
+                if (upgrade.getType() == UpgradeType.Passive) {
+                    PassiveUpgrade passiveUpgrade = (PassiveUpgrade) upgrade;
+                    passiveUpgrade.executeOnStart(player); //TODO: replace that with a check to verify if the player owns it
+                }
+            }
+        }
+    }
+}

+ 28 - 0
src/main/java/xyz/tbvns/rogue_block/Upgrades/RegisteredUpgrades/RegenUpgrade.java

@@ -2,8 +2,11 @@ package xyz.tbvns.rogue_block.Upgrades.RegisteredUpgrades;
 
 import net.minecraft.entity.effect.StatusEffectInstance;
 import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
 import net.minecraft.server.network.ServerPlayerEntity;
 import xyz.tbvns.rogue_block.Upgrades.PassiveUpgrade;
+import xyz.tbvns.rogue_block.Upgrades.UpgradeRarity;
 
 public class RegenUpgrade implements PassiveUpgrade {
     @Override
@@ -15,4 +18,29 @@ public class RegenUpgrade implements PassiveUpgrade {
     public void executeOnStart(ServerPlayerEntity player) {
         player.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, StatusEffectInstance.INFINITE));
     }
+
+    @Override
+    public String getName() {
+        return "Regeneration";
+    }
+
+    @Override
+    public String getDesc() {
+        return "Provide you with a constant regeneration effect";
+    }
+
+    @Override
+    public int[] getGuiPos() {
+        return new int[]{10, 50};
+    }
+
+    @Override
+    public ItemStack itemDisplay() {
+        return Items.POTION.getDefaultStack();
+    }
+
+    @Override
+    public UpgradeRarity getRarity() {
+        return UpgradeRarity.medium;
+    }
 }

+ 64 - 0
src/main/java/xyz/tbvns/rogue_block/Upgrades/Upgrade.java

@@ -1,13 +1,31 @@
 package xyz.tbvns.rogue_block.Upgrades;
 
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.TextComponent;
+import net.kyori.adventure.text.format.Style;
+import net.kyori.adventure.text.format.TextColor;
+import net.kyori.adventure.text.format.TextDecoration;
 import net.minecraft.item.ItemStack;
 import net.minecraft.item.Items;
+import net.minecraft.text.OrderedText;
+import net.minecraft.text.Text;
+
+import java.util.ArrayList;
+import java.util.List;
 
 public interface Upgrade {
     default Class getParent() {
         return null;
     }
 
+    default String getName() {
+        return "unnamed upgrade";
+    }
+
+    default String getDesc() {
+        return "no description";
+    }
+
     default int getCost() {
         return 0;
     }
@@ -27,4 +45,50 @@ public interface Upgrade {
     default UpgradeRarity getRarity() {
         return UpgradeRarity.common;
     }
+
+    default Component generateTooltip() {
+        Component component;
+
+        switch (getRarity()) {
+            case rare -> component = Component.text(getName(),
+                    TextColor.color(255, 59, 208),
+                    TextDecoration.BOLD);
+            case medium -> component = Component.text(getName(),
+                    TextColor.color(255, 211, 0),
+                    TextDecoration.BOLD);
+            default -> component = Component.text(getName(),
+                    TextColor.color(13, 255, 0),
+                    TextDecoration.BOLD);
+        }
+
+        component =
+            component.appendNewline()
+                .append(Component.text(getDesc())
+                        .color(TextColor.color(136, 133, 136))
+                        .decoration(TextDecoration.UNDERLINED, false)
+                        .decoration(TextDecoration.BOLD, false)
+                )
+                .appendNewline()
+                .append(Component.text("Type: ", TextColor.color(255, 77, 0)))
+                .append(Component.text(
+                        getType().toString(),
+                        TextColor.color(255, 184, 0),
+                        TextDecoration.BOLD,
+                        TextDecoration.UNDERLINED)
+                )
+                .decoration(TextDecoration.UNDERLINED, false)
+                .appendNewline()
+                .append(Component.text("Price: ",
+                        TextColor.color(94, 229, 83),
+                        TextDecoration.BOLD)
+                )
+                .append(Component.text(getCost(),
+                        TextColor.color(0, 238, 255),
+                        TextDecoration.BOLD,
+                        TextDecoration.UNDERLINED
+                )
+            );
+
+        return component;
+    }
 }