Jump to content

[1.7.10] Changing Player Inventory on Server Side


joecanmakeit

Recommended Posts

So I'm trying to make a very small mod to ban the use of specific items.  The mod just constantly checks each player's inventory and sets any slot with a "restricted" item to null.

 

This works fine when it's loaded on both the client and the server; the moment I move an item from the Creative Inventory to my hotbar, it disappears.  But I really want this mod to be server-side only.  Here's my code:

 

@SubscribeEvent
    public void onPlayerTick(PlayerTickEvent e) {
        EntityPlayer player = e.player;
        if (!e.player.worldObj.isRemote) {
            for (int i = 0; i < player.inventory.mainInventory.length; i++) {
                ItemStack is = player.inventory.mainInventory[i];
                if (is != null) {
                    Item it = is.getItem();
                    // MFYLog.bannedItems is an ArrayList<Item>
                    for (Item compare : MFYLog.bannedItems) {
                        if (it == compare) {
                            player.inventory.setInventorySlotContents(i, null);
} } } } }

 

The Bug: The item isn't usable, which is good, but it is visible.  It sticks around on the hotbar, and can be moved around my inventory.  The item will disappear if I interact with any other block in the game.

 

Reading other posts, my best guess is I need to send a packet of some type, but I don't have much experience with packets, and the tutorials I could find only talked about custom packets.  In this case I just want to send whatever vanilla packet is normally sent with an inventory update.  Any hints?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Solved! Here is my solution: Create my own RenderType.CompositeRenderType that does what i need it to. First you will need to add an access transfomer in your build.gradle (https://docs.minecraftforge.net/en/latest/advanced/accesstransformers/) and paste this there  public net.minecraft.client.renderer.RenderType$CompositeRenderType public net.minecraft.client.renderer.RenderType m_173209_(Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; # create public net.minecraft.client.renderer.RenderStateShard$LineStateShard after that you just create your own CompositeRenderType, here is the code for mine  public static RenderType.CompositeRenderType myOutline = RenderType.CompositeRenderType.create("myLines", DefaultVertexFormat.POSITION_COLOR_NORMAL, VertexFormat.Mode.LINES, 256, RenderType.CompositeState.builder().setShaderState(new RenderStateShard.ShaderStateShard(GameRenderer::getRendertypeLinesShader)).setLineState(new RenderStateShard.LineStateShard(OptionalDouble.empty())).setLayeringState(new RenderStateShard.LayeringStateShard("view_offset_z_layering", () -> { PoseStack $$0 = RenderSystem.getModelViewStack(); $$0.pushPose(); $$0.scale(0.99975586F, 0.99975586F, 0.99975586F); RenderSystem.applyModelViewMatrix(); }, () -> { PoseStack $$0 = RenderSystem.getModelViewStack(); $$0.popPose(); RenderSystem.applyModelViewMatrix(); })).setTransparencyState(new RenderStateShard.TransparencyStateShard("translucent_transparency", () -> { RenderSystem.enableBlend(); RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); RenderSystem.disableDepthTest(); }, () -> { RenderSystem.disableBlend(); RenderSystem.defaultBlendFunc(); RenderSystem.enableDepthTest(); })).setOutputState(new RenderStateShard.OutputStateShard("item_entity_target", () -> { if (Minecraft.useShaderTransparency()) { Minecraft.getInstance().levelRenderer.getItemEntityTarget().bindWrite(false); } }, () -> { if (Minecraft.useShaderTransparency()) { Minecraft.getInstance().getMainRenderTarget().bindWrite(false); } })).setDepthTestState(new RenderStateShard.DepthTestStateShard("always", 519)).setWriteMaskState(new RenderStateShard.WriteMaskStateShard(true, false)).setCullState(new RenderStateShard.CullStateShard(false)).createCompositeState(false)); I hope this helped 🙏 if you have any questions dm me on discord .ducklett
    • Trust in their expertise to handle your situation with precision and discretion.  
    • Me and my friends have a server with our mod pack that we made and we all have the same files. And i was able to play for a while and then all of the sudden when ever i tried to join it kept not responding when it says loading terrain. I dont know what could be the cause of the problem at all. Thank you in advance!
    • I tried with official launchers, the lauchers that you recommended to me and other non-safe launcher, and nothing works, so what's now?  
    • You'd just use this function to register your blocks that you want to be fuels, instead of registerBlock. That's all. 
  • Topics

×
×
  • Create New...

Important Information

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