Jump to content

RaphGamingz

Members
  • Posts

    57
  • Joined

  • Last visited

Posts posted by RaphGamingz

  1. Does it save when a player leaves and does it save when the world is closed

    4 minutes ago, diesieben07 said:

    Make a capability and attach it to the player using AttachCapabilitiesEvent<Entity>.

     

    6 minutes ago, diesieben07 said:

    Making an item class extend ICapabilitySerializable does not make much sense. To save data on an item via a capability you make a capability like normal and then attach it by overriding initCapabilities.

    will the capability have read and write, getCapability and what will the capability class extend or implement?

  2. oh 

    33 minutes ago, RaphGamingz said:

    wouldn't it then be transferring the capability which stores the attributes

    because you said to store the attribute in a capability

    Quote

    Probably store them in a capability and re-apply in PlayerRespawnEvent.

    then you say

    Quote

    The clone even is for transferring data from old player to new (like capabilities or in old versions IExtendedEntityProperties).

    and you use the clone event to transfer capabilities

  3. 22 hours ago, diesieben07 said:

    Probably store them in a capability and re-apply in PlayerRespawnEvent.

    wouldn't it then be transferring the capability which stores the attributes

    4 minutes ago, diesieben07 said:

    The clone even is for transferring data from old player to new (like capabilities or in old versions IExtendedEntityProperties). Applying attributes is something else...

  4. public class FloatingChest extends Item {
    	public FloatingChest() {
            super(new Item.Properties().group(RandomAdditions.CUSTOMITEMGROUP));
            setRegistryName(ModRegistries.location("floating_chest"));
    	}
    	@Override
    	public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
    		NetworkHooks.openGui((ServerPlayerEntity) playerIn, new FloatingChestCapability());
    		return super.onItemRightClick(worldIn, playerIn, handIn);
    	}
    }
    public class FloatingChestContainer extends Container {
    
        private IItemHandler playerInventory;
    
        public FloatingChestContainer(int windowId, PlayerInventory playerInventory, PlayerEntity player) {
            super(ModItems.floating_chest_container, windowId);
            this.playerInventory = new InvWrapper(playerInventory);
            addSlotBox(new InvWrapper(player.getInventoryEnderChest()), 0, 8, 18, 9, 18, 3, 18);
            layoutPlayerInventorySlots(8, 86);
        }
    
        @Override
        public boolean canInteractWith(PlayerEntity playerIn) {
            return true;
        }
    
    
        private int addSlotRange(IItemHandler handler, int index, int x, int y, int amount, int dx) {
            for (int i = 0 ; i < amount ; i++) {
                addSlot(new SlotItemHandler(handler, index, x, y));
                x += dx;
                index++;
            }
            return index;
        }
    
        private int addSlotBox(IItemHandler handler, int index, int x, int y, int horAmount, int dx, int verAmount, int dy) {
            for (int j = 0 ; j < verAmount ; j++) {
                index = addSlotRange(handler, index, x, y, horAmount, dx);
                y += dy;
            }
            return index;
        }
    
        private void layoutPlayerInventorySlots(int leftCol, int topRow) {
            // Player inventory
            addSlotBox(playerInventory, 9, leftCol, topRow, 9, 18, 3, 18);
    
            // Hotbar
            topRow += 58;
            addSlotRange(playerInventory, 0, leftCol, topRow, 9, 18);
        }
    
        public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) {
            ItemStack itemstack = ItemStack.EMPTY;
            Slot slot = this.inventorySlots.get(index);
            if (slot != null && slot.getHasStack()) {
               ItemStack itemstack1 = slot.getStack();
               itemstack = itemstack1.copy();
               if (index < 3 * 9) {
                  if (!this.mergeItemStack(itemstack1, 3 * 9, this.inventorySlots.size(), true)) {
                     return ItemStack.EMPTY;
                  }
               } else if (!this.mergeItemStack(itemstack1, 0, 3 * 9, false)) {
                  return ItemStack.EMPTY;
               }
    
               if (itemstack1.isEmpty()) {
                  slot.putStack(ItemStack.EMPTY);
               } else {
                  slot.onSlotChanged();
               }
            }
    
            return itemstack;
         }
    }
    public class FloatingChestScreen extends ContainerScreen<FloatingChestContainer> {
    
    	private ResourceLocation GUI = ModRegistries.location("textures/gui/floating_chest_gui.png");
    	private final int inventoryRows;
    	
    	public FloatingChestScreen(FloatingChestContainer screenContainer, PlayerInventory inv, ITextComponent titleIn) {
    		super(screenContainer, inv, titleIn);
    		this.inventoryRows = 3;
    		this.ySize = 114 + this.inventoryRows * 18;
    	}
    
    	@Override
        public void render(int mouseX, int mouseY, float partialTicks) {
            this.renderBackground();
            super.render(mouseX, mouseY, partialTicks);
            this.renderHoveredToolTip(mouseX, mouseY);
        }
    
        @Override
        protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
        	this.font.drawString("Floating Chest", 8.0F, 6.0F, 4210752);
        	this.font.drawString(this.playerInventory.getDisplayName().getFormattedText(), 8.0F,(float) this.ySize - 96 + 2, 4210752);
        }
    
        @Override
        protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
            GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
            this.minecraft.getTextureManager().bindTexture(GUI);
            int relX = (this.width - this.xSize) / 2;
            int relY = (this.height - this.ySize) / 2;
            this.blit(relX, relY, 0, 0, this.xSize, this.inventoryRows * 18 + 17);
            this.blit(relX, relY + this.inventoryRows * 18 + 17, 0, 126, this.xSize, 96);
        }
    }
    public class FloatingChestCapability implements INamedContainerProvider {
    	
    	@Override
    	public Container createMenu(int i, PlayerInventory playerInventory, PlayerEntity playerEntity) {
    		return new FloatingChestContainer(i, playerInventory, playerEntity);
    	}
    
    	@Override
    	public ITextComponent getDisplayName() {
    		return new StringTextComponent("");
    	}
    	//add capability later
    }

     

  5. java.lang.ClassCastException: net.minecraft.client.entity.player.ClientPlayerEntity cannot be cast to net.minecraft.entity.player.ServerPlayerEntity

            at raph.RandomAdditions.items.floatingChest.FloatingChest.onItemRightClick(FloatingChest.java:21) ~[main/:?] {re:classloading}

    is this a normal errror? 

  6. 26 minutes ago, Animefan8888 said:

    In Item#initCapabilities return an ICapabilitySerializable that exposes an LazyOptional<IItemHandler>.

    wait, would that be a class that implements icapabiltyserializable

     

    Quote

    Your own instance of INamedContainerProvider.

    and the same for the inamedcontainerprovider

  7. 19 hours ago, diesieben07 said:

    Yes, you need a key binding. However note that key bindings are client-side only, so if your GUI has a server-component at all you need to send a custom packet to the server when your key binding is triggered and then open the GUI on the server.

    how do i do that? 

  8. 3 hours ago, Animefan8888 said:

    Override Item#onItemRightClick in your Item class and call NetworkHooks.openGui to open the ContainerScreen and Container for your gui.

    How can I also make a gui open when a key is pressed. And show the same inventory. Do I need a keybind

    And the inventory wouldn't be stored in the item 

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.