Przeglądaj źródła

new stack protocol and rendering, new refresh icons, bugfixes

Kajetan Johannes Hammerle 3 lat temu
rodzic
commit
78827b46f6

+ 0 - 2
src/main/java/me/km/ClassLoaderUtils.java

@@ -1,9 +1,7 @@
 package me.km;
 
 import java.io.File;
-import java.lang.reflect.Field;
 import java.lang.reflect.Method;
-import java.lang.ClassLoader;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;

+ 5 - 2
src/main/java/me/km/Client.java

@@ -3,7 +3,6 @@ package me.km;
 import com.mojang.blaze3d.matrix.MatrixStack;
 import java.awt.Color;
 import java.util.List;
-import java.util.Random;
 import me.km.blocks.ModBlocks;
 import me.km.blocks.cookingpot.TileEntityCookingPot;
 import me.km.items.ItemColoredSoup;
@@ -37,7 +36,6 @@ import net.minecraft.client.renderer.entity.EntityRenderer;
 import net.minecraft.client.renderer.entity.EntityRendererManager;
 import net.minecraft.client.world.ClientWorld;
 import net.minecraft.entity.Entity;
-import net.minecraft.fluid.IFluidState;
 import net.minecraft.item.Item;
 import net.minecraft.item.ArmorItem;
 import net.minecraft.item.BlockItem;
@@ -67,6 +65,7 @@ import net.minecraftforge.eventbus.api.Event;
 
 @OnlyIn(Dist.CLIENT)
 public class Client {
+
     public final static ModelCylinder CYLINDER = new ModelCylinder(1.0f);
     public final static ModelHat STRAW_HAT = new ModelHat(1.0f);
     public static KeyManager keyManager = null;
@@ -211,6 +210,10 @@ public class Client {
 
                 Vector3f up = new Vector3f(0.0f, 9.0f * 1.15f * 0.025f, 0.0f);
                 for(String line : parts) {
+                    if(line.isEmpty()) {
+                        matrix4f.translate(up);
+                        continue;
+                    }
                     float f2 = -0.5f * fontrenderer.getStringWidth(line);
                     fontrenderer.renderString(line, f2, 0.0f, 553648127, false, matrix4f, buffer, flag, j, packedLight);
                     if(flag) {

+ 4 - 0
src/main/java/me/km/items/ModItems.java

@@ -165,6 +165,8 @@ public class ModItems {
     public static Item returnGreen;
     public static Item returnRed;
     public static Item gear;
+    public static Item refreshGreen;
+    public static Item refreshRed;
 
     // herbs
     public static Item herbStrong;
@@ -393,6 +395,8 @@ public class ModItems {
         returnGreen = register(r, newItem(ItemGroup.MISC), "return_green");
         returnRed = register(r, newItem(ItemGroup.MISC), "return_red");
         gear = register(r, newItem(ItemGroup.MISC), "gear");
+        refreshGreen = register(r, newItem(ItemGroup.MISC), "refresh_green");
+        refreshRed = register(r, newItem(ItemGroup.MISC), "refresh_red");
 
         // herbs
         herbStrong = register(r, newHerb(), "herb_strong");

+ 11 - 12
src/main/java/me/km/networking/ItemStackDisplay.java

@@ -1,37 +1,36 @@
 package me.km.networking;
 
+import java.nio.charset.StandardCharsets;
 import java.util.function.Supplier;
 import net.minecraft.network.PacketBuffer;
 import net.minecraftforge.fml.network.NetworkEvent;
 
 public class ItemStackDisplay {
     private byte index;
-    private int iconIndex;
-    private int count;
+    private String name;
 
     public ItemStackDisplay() {
         index = -1;
-        iconIndex = -1;
-        count = -1;
+        name = "";
     }
 
-    public ItemStackDisplay(byte index, int iconIndex, int count) {
+    public ItemStackDisplay(byte index, String name) {
         this.index = index;
-        this.iconIndex = iconIndex;
-        this.count = count;
+        this.name = name;
     }
 
     public static void writeBytes(ItemStackDisplay isd, PacketBuffer buf) {
         buf.writeByte(isd.index);
-        buf.writeInt(isd.iconIndex);
-        buf.writeInt(isd.count);
+        byte[] b = isd.name.getBytes(StandardCharsets.UTF_8);
+        buf.writeInt(b.length);
+        buf.writeBytes(b);
     }
 
     public static ItemStackDisplay fromBytes(PacketBuffer buf) {
         ItemStackDisplay isd = new ItemStackDisplay();
         isd.index = buf.readByte();
-        isd.iconIndex = buf.readInt();
-        isd.count = buf.readInt();
+        int length = buf.readInt();
+        isd.name = buf.readBytes(length).toString(StandardCharsets.UTF_8);
         return isd;
     }
 
@@ -48,7 +47,7 @@ public class ItemStackDisplay {
                     ItemStackDisplayGui.INSTANCE.clear();
                     break;
                 default:
-                    ItemStackDisplayGui.INSTANCE.setIcon(isd.index, isd.iconIndex, isd.count);
+                    ItemStackDisplayGui.INSTANCE.setIcon(isd.index, isd.name);
                     break;
             }
         });

+ 28 - 68
src/main/java/me/km/networking/ItemStackDisplayGui.java

@@ -1,62 +1,33 @@
 package me.km.networking;
 
 import com.mojang.blaze3d.systems.RenderSystem;
-import me.km.KajetansMod;
 import me.km.utils.ClientReflectionUtils;
+import me.km.utils.Mapper;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.gui.AbstractGui;
-import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.renderer.ItemRenderer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
 import net.minecraft.util.ResourceLocation;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
 
 @OnlyIn(Dist.CLIENT)
 public class ItemStackDisplayGui extends AbstractGui {
-    private static final ResourceLocation CUSTOM_ICONS = new ResourceLocation(KajetansMod.MODID, "textures/gui/itemstacks.png");
+    private static final ResourceLocation WIDGETS_TEX_PATH = new ResourceLocation("textures/gui/widgets.png");
 
     public final static ItemStackDisplayGui INSTANCE = new ItemStackDisplayGui(Minecraft.getInstance());
 
-    private static class Stack {
-        private int x = -1;
-        private int y = 0;
-        private int width = 0;
-        private int height = 0;
-        private String text = "";
-
-        public void setIcon(int index, int c) {
-            if(index < 0) {
-                clear();
-            } else if(index >= 0 && index < 104) {
-                x = (index % 52) * 16 + 192;
-                y = (index / 52) * 16;
-                width = 16;
-                height = 16;
-                text = (c == 0) ? "" : String.valueOf(c);
-            } else {
-                index -= 104;
-                x = (index % 16) * 64;
-                y = (index / 16) * 64 + 32;
-                width = 64;
-                height = 64;
-                text = null;
-            }
-        }
-
-        public void clear() {
-            x = -1;
-        }
-    }
-
     private final Minecraft mc;
 
-    private final Stack[] icons = new Stack[9];
+    private final ItemStack[] icons = new ItemStack[9];
     private boolean inactive = true;
 
     public ItemStackDisplayGui(Minecraft mc) {
         this.mc = mc;
 
         for(int i = 0; i < icons.length; i++) {
-            icons[i] = new Stack();
+            icons[i] = ItemStack.EMPTY;
         }
     }
 
@@ -64,15 +35,18 @@ public class ItemStackDisplayGui extends AbstractGui {
         this.inactive = !active;
     }
 
-    public void setIcon(int index, int i, int count) {
+    public void setIcon(int index, String name) {
         if(index >= 0 && index < 9) {
-            icons[index].setIcon(i, count);
+            Item item = Mapper.getItem(name);
+            if(item != null) {
+                icons[index] = new ItemStack(item);
+            }
         }
     }
 
     public final void clear() {
-        for(Stack stack : icons) {
-            stack.clear();
+        for(int i = 0; i < icons.length; i++) {
+            icons[i] = ItemStack.EMPTY;
         }
     }
 
@@ -80,44 +54,30 @@ public class ItemStackDisplayGui extends AbstractGui {
         if(inactive) {
             return;
         }
-
-        RenderSystem.enableBlend();
-        RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
-
-        mc.getTextureManager().bindTexture(CUSTOM_ICONS);
-
+        
         int screenWidth = (mc.getMainWindow().getScaledWidth() >> 1) - 91;
         int y = 3;
-
         if(ClientReflectionUtils.isRenderingBossBar()) {
             y += 20;
         }
-
-        blit(screenWidth, y - 3, 0, 0, 182, 22, 1024, 1024);
-
+        
+        RenderSystem.enableBlend();
+        RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
+        mc.getTextureManager().bindTexture(WIDGETS_TEX_PATH);
+        int oldBlitOffset = this.getBlitOffset();
+        setBlitOffset(-90);
+        blit(screenWidth, y, 0, 0, 182, 22);
+        setBlitOffset(oldBlitOffset);
+        
+        ItemRenderer ir = mc.getItemRenderer();
         int i = 0;
         for(int x = 3; x < 164; x += 20) {
-            Stack s = icons[i];
-            if(s.x != -1) {
-                blit(screenWidth + x, y, 16, 16, s.x, s.y, s.width, s.height, 1024, 1024);
+            if(!icons[i].isEmpty()) {
+                ir.renderItemAndEffectIntoGUI(mc.player, icons[i], screenWidth + x, y);
+                ir.renderItemOverlayIntoGUI(this.mc.fontRenderer, icons[i], screenWidth + x, y, km.getKeyDescription(i));
             }
             i++;
         }
-
         RenderSystem.disableBlend();
-
-        FontRenderer fr = mc.fontRenderer;
-        i = 0;
-        for(int x = 20; x < 181; x += 20) {
-            if(icons[i].x != -1) {
-                if(icons[i].text == null) {
-                    String s = km.getKeyDescription(i);
-                    fr.drawStringWithShadow(s, (float) (screenWidth + x - fr.getStringWidth(s)), y + 9, 16777215);
-                } else if(!icons[i].text.isEmpty()) {
-                    fr.drawStringWithShadow(icons[i].text, (float) (screenWidth + x - fr.getStringWidth(icons[i].text)), y + 9, 16777215);
-                }
-            }
-            i++;
-        }
     }
 }

+ 4 - 4
src/main/java/me/km/networking/ModPacketHandler.java

@@ -73,15 +73,15 @@ public class ModPacketHandler {
         sendToServer(new PlayerLeftClickEmpty());
     }
 
-    public static void setItemStackIndex(ServerPlayerEntity p, byte index, int iconIndex, int count) {
-        sendToPlayer(p, new ItemStackDisplay(index, iconIndex, count));
+    public static void setItemStackIndex(ServerPlayerEntity p, byte index, String name) {
+        sendToPlayer(p, new ItemStackDisplay(index, name));
     }
 
     public static void setItemStackActive(ServerPlayerEntity p, boolean active) {
-        sendToPlayer(p, new ItemStackDisplay(active ? (byte) -1 : (byte) -2, -1, -1));
+        sendToPlayer(p, new ItemStackDisplay(active ? (byte) -1 : (byte) -2, ""));
     }
 
     public static void clearItemStacks(ServerPlayerEntity p) {
-        sendToPlayer(p, new ItemStackDisplay((byte) -3, -1, -1));
+        sendToPlayer(p, new ItemStackDisplay((byte) -3, ""));
     }
 }

+ 3 - 4
src/main/java/me/km/snuviscript/commands/ItemStackDisplayCommands.java

@@ -15,16 +15,15 @@ public class ItemStackDisplayCommands {
             if(index < 0 || index >= 9) {
                 throw new IllegalArgumentException("index must be beetween 0 and 8, given: " + index);
             }
-            int iconIndex = in[2].getInt(sc);
-            int count = in[3].getInt(sc);
-            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.setItemStackIndex((ServerPlayerEntity) p, index, iconIndex, count));
+            String name = in[2].getString(sc);
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.setItemStackIndex((ServerPlayerEntity) p, index, name));
         });
         sm.registerConsumer("stacks.clearindex", (sc, in) -> {
             byte index = in[1].getByte(sc);
             if(index < 0 || index >= 9) {
                 throw new IllegalArgumentException("index must be beetween 0 and 8, given: " + index);
             }
-            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.setItemStackIndex((ServerPlayerEntity) p, index, -1, 0));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.setItemStackIndex((ServerPlayerEntity) p, index, ""));
         });
         sm.registerConsumer("stacks.clear", (sc, in) -> {
             doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ModPacketHandler.clearItemStacks((ServerPlayerEntity) p));

+ 1 - 1
src/main/resources/META-INF/mods.toml

@@ -2,7 +2,7 @@ modLoader="javafml"
 loaderVersion="[31,)"
 [[mods]]
 modId="km"
-version="0.0.45"
+version="0.0.46"
 displayName="Kajetans Mod"
 credits="kajetanjohannes"
 authors="kajetanjohannes"

+ 2 - 0
src/main/resources/assets/km/lang/en_us.json

@@ -185,6 +185,8 @@
     "item.km.plus_red": "Red Plus", 
     "item.km.return_green": "Green Return", 
     "item.km.return_red": "Red Return", 
+    "item.km.refresh_green": "Green Refresh", 
+    "item.km.refresh_red": "Red Refresh", 
     "item.km.gear": "Gear", 
 
     "item.km.herb_strong": "Power Herb", 

+ 6 - 0
src/main/resources/assets/km/models/item/refresh_green.json

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:item/icon/refresh_green"
+    }
+}

+ 6 - 0
src/main/resources/assets/km/models/item/refresh_red.json

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:item/icon/refresh_red"
+    }
+}

BIN
src/main/resources/assets/km/textures/gui/itemstacks.png


BIN
src/main/resources/assets/km/textures/item/icon/refresh_green.png


BIN
src/main/resources/assets/km/textures/item/icon/refresh_red.png