GUI fluid identifier

This commit is contained in:
Boblet 2022-05-03 15:45:00 +02:00
parent d3e713f977
commit bd66140b54
12 changed files with 418 additions and 0 deletions

View File

@ -1723,6 +1723,8 @@ public class GUIHandler implements IGuiHandler {
return new GUIScreenBobble((TileEntityBobble) world.getTileEntity(x, y, z));
case ModItems.guiID_item_holo_image:
return new GUIScreenHolotape();
case ModItems.guiID_item_fluid:
return new GUIScreenFluid(player);
}
return null;
}

View File

@ -0,0 +1,174 @@
package com.hbm.inventory.gui;
import java.awt.Color;
import java.util.Arrays;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemFluidIDMulti;
import com.hbm.lib.RefStrings;
import com.hbm.packet.NBTItemControlPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.util.I18nUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
public class GUIScreenFluid extends GuiScreen {
protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/machine/gui_fluid.png");
protected int xSize = 176;
protected int ySize = 178;
protected int guiLeft;
protected int guiTop;
private GuiTextField search;
private final EntityPlayer player;
private FluidType primary = Fluids.NONE;
private FluidType secondary = Fluids.NONE;
private FluidType[] searchArray = new FluidType[9];
public GUIScreenFluid(EntityPlayer player) {
this.player = player;
Keyboard.enableRepeatEvents(true);
this.search = new GuiTextField(this.fontRendererObj, guiLeft + 46, guiTop + 10, 86, 12);
this.search.setTextColor(-1);
this.search.setDisabledTextColour(-1);
this.search.setEnableBackgroundDrawing(false);
}
@Override
public void drawScreen(int mouseX, int mouseY, float f) {
this.drawDefaultBackground();
this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY);
GL11.glDisable(GL11.GL_LIGHTING);
this.drawGuiContainerForegroundLayer(mouseX, mouseY);
GL11.glEnable(GL11.GL_LIGHTING);
}
@Override
public void updateScreen() {
if(player.getHeldItem() == null || player.getHeldItem().getItem() != ModItems.fluid_identifier_multi)
player.closeScreen();
}
@Override
public void initGui() {
super.initGui();
this.guiLeft = (this.width - this.xSize) / 2;
this.guiTop = (this.height - this.ySize) / 2;
if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.fluid_identifier_multi) {
this.primary = ItemFluidIDMulti.getType(player.getHeldItem(), true);
this.secondary = ItemFluidIDMulti.getType(player.getHeldItem(), false);
}
}
@Override
protected void mouseClicked(int i, int j, int button) {
for(int k = 0; k < this.searchArray.length; k++) {
if(this.searchArray[k] == null)
return;
if(7 + k * 18 <= i && 7 + k * 18 + 18 > i && 29 < j && 29 + 18 >= j) {
if(button == 0) {
this.primary = this.searchArray[k];
NBTTagCompound data = new NBTTagCompound();
data.setInteger("primary", this.primary.getID());
PacketDispatcher.wrapper.sendToServer(new NBTItemControlPacket(data));
} else if(button == 1) {
this.secondary = this.searchArray[k];
NBTTagCompound data = new NBTTagCompound();
data.setInteger("secondary", this.secondary.getID());
PacketDispatcher.wrapper.sendToServer(new NBTItemControlPacket(data));
}
}
}
}
protected void drawGuiContainerForegroundLayer(int i, int j) {
this.search.drawTextBox();
for(int k = 0; k < this.searchArray.length; k++) {
if(this.searchArray[k] == null)
return;
if(7 + k * 18 <= i && 7 + k * 18 + 18 > i && 29 < j && 29 + 18 >= j)
func_146283_a(Arrays.asList(new String[] { I18nUtil.resolveKey(this.searchArray[k].getUnlocalizedName()) }), i, j);
}
}
protected void drawGuiContainerBackgroundLayer(float f, int i, int j) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
if(this.search.isFocused())
drawTexturedModalRect(guiLeft + 43, guiTop + 7, 166, 54, 90, 18);
for(int k = 0; k < this.searchArray.length; k++) {
FluidType type = this.searchArray[k];
if(type == null)
return;
Color color = new Color(type.getColor());
GL11.glColor3f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F);
drawTexturedModalRect(guiLeft + 12 + k * 18, guiTop + 30, 12 + k * 18, 56, 8, 14);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
if(type == this.primary && type == this.secondary) {
drawTexturedModalRect(guiLeft + 7 + k * 18, guiTop + 29, 176, 36, 18, 18);
} else if(type == this.primary) {
drawTexturedModalRect(guiLeft + 7 + k * 18, guiTop + 29, 176, 0, 18, 18);
} else if(type == this.secondary) {
drawTexturedModalRect(guiLeft + 7 + k * 18, guiTop + 29, 176, 18, 18, 18);
}
}
}
@Override
protected void keyTyped(char c, int key) {
if(this.search.textboxKeyTyped(c, key)) {
updateSearch();
} else {
super.keyTyped(c, key);
}
if(key == 1 || key == this.mc.gameSettings.keyBindInventory.getKeyCode()) {
this.mc.thePlayer.closeScreen();
}
}
private void updateSearch() {
this.searchArray = new FluidType[9];
int next = 0;
String subs = this.search.getText().toLowerCase();
for(FluidType type : Fluids.getInNiceOrder()) {
String name = I18nUtil.resolveKey(type.getUnlocalizedName()).toLowerCase();
if(name.contains(subs) && !type.hasNoID()) {
this.searchArray[next] = type;
next++;
if(next >= 9)
return;
}
}
}
}

View File

@ -0,0 +1,9 @@
package com.hbm.items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
public interface IItemControlReceiver {
public void receiveControl(ItemStack stack, NBTTagCompound data);
}

View File

@ -1228,6 +1228,7 @@ public class ModItems {
public static Item chemistry_template;
public static Item chemistry_icon;
public static Item fluid_identifier;
public static Item fluid_identifier_multi;
public static Item fluid_icon;
public static Item siren_track;
public static Item fluid_duct;
@ -2540,6 +2541,7 @@ public class ModItems {
public static Item digamma_up_on_top;
public static final int guiID_item_folder = 1099;
public static final int guiID_item_fluid = 1100;
public static final int guiID_item_designator = 10100;
public static final int guiID_item_sat_interface = 10101;
public static final int guiID_item_box = 10102;
@ -4793,6 +4795,7 @@ public class ModItems {
chemistry_template = new ItemChemistryTemplate().setUnlocalizedName("chemistry_template").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":chemistry_template");
chemistry_icon = new ItemChemistryIcon().setUnlocalizedName("chemistry_icon").setMaxStackSize(1).setCreativeTab(null);
fluid_identifier = new ItemFluidIdentifier().setUnlocalizedName("fluid_identifier").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":fluid_identifier");
fluid_identifier_multi = new ItemFluidIDMulti().setUnlocalizedName("fluid_identifier_multi").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":fluid_identifier_multi");
fluid_icon = new ItemFluidIcon().setUnlocalizedName("fluid_icon").setCreativeTab(null).setTextureName(RefStrings.MODID + ":fluid_icon");
fluid_tank_empty = new Item().setUnlocalizedName("fluid_tank_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank");
fluid_tank_full = new ItemFluidTank().setUnlocalizedName("fluid_tank_full").setContainerItem(ModItems.fluid_tank_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank");
@ -6592,6 +6595,7 @@ public class ModItems {
//Machine Templates
GameRegistry.registerItem(siren_track, siren_track.getUnlocalizedName());
GameRegistry.registerItem(fluid_identifier, fluid_identifier.getUnlocalizedName());
GameRegistry.registerItem(fluid_identifier_multi, fluid_identifier_multi.getUnlocalizedName());
GameRegistry.registerItem(fluid_icon, fluid_icon.getUnlocalizedName());
GameRegistry.registerItem(fluid_duct, fluid_duct.getUnlocalizedName());
GameRegistry.registerItem(assembly_template, assembly_template.getUnlocalizedName());

View File

@ -0,0 +1,142 @@
package com.hbm.items.machine;
import java.util.List;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.items.IItemControlReceiver;
import com.hbm.items.ModItems;
import com.hbm.main.MainRegistry;
import com.hbm.util.I18nUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public class ItemFluidIDMulti extends Item implements IItemFluidIdentifier, IItemControlReceiver {
IIcon overlayIcon;
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if(!world.isRemote && !player.isSneaking()) {
FluidType primary = getType(stack, true);
FluidType secondary = getType(stack, false);
setType(stack, secondary, true);
setType(stack, primary, false);
world.playSoundAtEntity(player, "random.orb", 0.25F, 1.25F);
}
if(world.isRemote && player.isSneaking()) {
player.openGui(MainRegistry.instance, ModItems.guiID_item_fluid, world, 0, 0, 0);
}
return stack;
}
@Override
public void receiveControl(ItemStack stack, NBTTagCompound data) {
if(data.hasKey("primary")) {
setType(stack, Fluids.fromID(data.getInteger("primary")), true);
}
if(data.hasKey("secondary")) {
setType(stack, Fluids.fromID(data.getInteger("secondary")), false);
}
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
if(!(stack.getItem() instanceof ItemFluidIdentifier))
return;
list.add(I18nUtil.resolveKey(getUnlocalizedName() + ".info"));
list.add(" " + I18n.format(getType(stack, true).getUnlocalizedName()));
list.add(I18nUtil.resolveKey(getUnlocalizedName() + ".info2"));
list.add(" " + I18n.format(getType(stack, false).getUnlocalizedName()));
}
@Override
public ItemStack getContainerItem(ItemStack stack) {
return stack.copy();
}
@Override
public boolean hasContainerItem() {
return true;
}
@Override
public boolean doesContainerItemLeaveCraftingGrid(ItemStack stack) {
return false;
}
@Override
public FluidType getType(World world, int x, int y, int z, ItemStack stack) {
return getType(stack, true);
}
@Override
public boolean doesSneakBypassUse(World world, int x, int y, int z, EntityPlayer player) {
return true;
}
@Override
@SideOnly(Side.CLIENT)
public boolean requiresMultipleRenderPasses() {
return true;
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister p_94581_1_) {
super.registerIcons(p_94581_1_);
this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_identifier_overlay");
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamageForRenderPass(int pass, int meta) {
return pass == 1 ? this.overlayIcon : super.getIconFromDamageForRenderPass(pass, meta);
}
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int pass) {
if(pass == 0) {
return 16777215;
} else {
int j = getType(stack, true).getColor();
if(j < 0) {
j = 16777215;
}
return j;
}
}
public static void setType(ItemStack stack, FluidType type, boolean primary) {
if(!stack.hasTagCompound())
stack.stackTagCompound = new NBTTagCompound();
stack.stackTagCompound.setInteger("fluid" + (primary ? 1 : 2), type.getID());
}
public static FluidType getType(ItemStack stack, boolean primary) {
if(!stack.hasTagCompound())
return Fluids.NONE;
int type = stack.stackTagCompound.getInteger("fluid" + (primary ? 1 : 2));
return Fluids.fromID(type);
}
}

View File

@ -0,0 +1,79 @@
package com.hbm.packet;
import java.io.IOException;
import com.hbm.items.IItemControlReceiver;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.PacketBuffer;
public class NBTItemControlPacket implements IMessage {
PacketBuffer buffer;
public NBTItemControlPacket() { }
public NBTItemControlPacket(NBTTagCompound nbt) {
this.buffer = new PacketBuffer(Unpooled.buffer());
try {
buffer.writeNBTTagCompoundToBuffer(nbt);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void fromBytes(ByteBuf buf) {
if (buffer == null) {
buffer = new PacketBuffer(Unpooled.buffer());
}
buffer.writeBytes(buf);
}
@Override
public void toBytes(ByteBuf buf) {
if (buffer == null) {
buffer = new PacketBuffer(Unpooled.buffer());
}
buf.writeBytes(buffer);
}
public static class Handler implements IMessageHandler<NBTItemControlPacket, IMessage> {
@Override
public IMessage onMessage(NBTItemControlPacket m, MessageContext ctx) {
EntityPlayer p = ctx.getServerHandler().playerEntity;
try {
NBTTagCompound nbt = m.buffer.readNBTTagCompoundFromBuffer();
if(nbt != null) {
ItemStack held = p.getHeldItem();
if(held != null && held.getItem() instanceof IItemControlReceiver) {
((IItemControlReceiver) held.getItem()).receiveControl(held, nbt);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
}

View File

@ -99,6 +99,8 @@ public class PacketDispatcher {
wrapper.registerMessage(ExplosionKnockbackPacket.Handler.class, ExplosionKnockbackPacket.class, i++, Side.CLIENT);
//just go fuck yourself already
wrapper.registerMessage(ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket.Handler.class, ExplosionVanillaNewTechnologyCompressedAffectedBlockPositionDataForClientEffectsAndParticleHandlingPacket.class, i++, Side.CLIENT);
//Packet to send NBT data from clients to the serverside held item
wrapper.registerMessage(NBTItemControlPacket.Handler.class, NBTItemControlPacket.class, i++, Side.SERVER);
}
}

View File

@ -1352,6 +1352,9 @@ item.fluid_identifier.info=Universelle Flüssigkeits-Kennzeichnung für:
item.fluid_identifier.usage0=Rechtsklicke Rohre, um ihnen die jeweilige Flüssigkeit zuzuweisen.
item.fluid_identifier.usage1=Shift-rechtsklicke Rohre, um angeschlossene Rohre mit
item.fluid_identifier.usage2=einer maximalen Reichweite von 64 Rohren zuzuweisen.
item.fluid_identifier_multi.name=Multi-Flüssigkeits-Kennzeichnung
item.fluid_identifier_multi.info=Universelle Flüssigkeits-Kennzeichnung für:
item.fluid_identifier_multi.info2=Sekundärer Typ:
item.fluid_tank_empty.name=Leere universelle Flüssigkeitszelle
item.fluid_tank_full.name=Universelle Flüssigkeitszelle:
item.fluid_tank_lead_empty.name=Leere Gefahrenstoffzelle

View File

@ -1584,6 +1584,9 @@ item.fluid_identifier.info=Universal fluid identifier for:
item.fluid_identifier.usage0=Right click fluid ducts to designate them for that fluid.
item.fluid_identifier.usage1=Shift right click fluid ducts to designate adjacent ducts
item.fluid_identifier.usage2=up to a maximum range of 64 ducts.
item.fluid_identifier_multi.name=Multi Fluid Identifier
item.fluid_identifier_multi.info=Universal fluid identifier for:
item.fluid_identifier_multi.info2=Secondary type:
item.fluid_tank_empty.name=Empty Universal Fluid Tank
item.fluid_tank_full.name=Universal Fluid Tank:
item.fluid_tank_lead_empty.name=Empty Hazardous Material Tank

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 B