#how to stop players from clicking there inventory

1 messages · Page 1 of 1 (latest)

ocean dirge
#
public void respawn(PlayerRespawnEvent e){
        Player p = e.getPlayer();
        ItemStack glass = new ItemStack(Material.RED_STAINED_GLASS_PANE);
        for (int i = 9; i < 36; i++) {
            p.getInventory().setItem(i, glass);
        }
    }

when a player respawns glass fills there inventory. but not there hot bar. how do i stop them from clicking the glass?

scenic lotus
#

rathr than interact?

ocean dirge
#

idfk

ocean dirge
#

event?

#

so i need 2 events?

#

ok

#

for the click event

#

how would i do it

#

becasue i cant make a new item stack or it wont work

#

i need to get the curent item stack

zenith nest
#

you may want to make the ItemStack with metadata though. that way you don't cancel glass that has been legitimately crafted.

ocean dirge
#

kk

#

pdc?

zenith nest
#

PersitentDataContaner

ocean dirge
#

what do i put in plugin instance

#

the main class?

#

or the class im in

#
glassmeta.getPersistentDataContainer().set(key, PersistentDataType.DOUBLE, Math.PI);

should i chagne Math.PI to somthing else?

#
 NamespacedKey key = new NamespacedKey(new CyberWolfie(), "our-custom-key");
#

also should i change the key?

#

is there somthing i should change it to?
like what is best for the key? Glass-ItemStack
and what about the key?

#

instead of Math.PI

#

should i set it to the id number of the glass ?

#

so what should i set it to

#

how would one do that

#

cant

#

.

#

sorry im very tiered

#

how

#

private final CyberWoflie name;

#

ok

vernal zenith
#

Hi

ocean dirge
#

hi

#

let me show u my code so far

#

        ItemStack glass = new ItemStack(Material.RED_STAINED_GLASS_PANE);
        ItemMeta glassmeta = glass.getItemMeta();
        List<String> lore = new ArrayList<>();
        lore.add("Only hot bar challenge");
        glassmeta.setLore(lore);
        glassmeta.setDisplayName("Challenge");
        glass.setItemMeta(glassmeta);


        for (int i = 9; i < 36; i++) {
            p.getInventory().setItem(i, glass);
        }

#

when a player joins this is the item that gets made

#

its a only hot bar speedrun plugin

vernal zenith
ocean dirge
#

they can still use armor and offand

#

yes

#

glass with custom name and lore

vernal zenith
#

so it doesn't change at all?

ocean dirge
#

wdym?

#

no

#

its ment to fill and lock there inventory

#

but for death event i did

e.getDrops().removeIf(drop -> drop.getType() == Material.RED_STAINED_GLASS_PANE);
vernal zenith
#

I would need a full project to see...

ocean dirge
#

ok give me a sec

#

can i just give u the InteiJ project file?

vernal zenith
#

If you have intelijj idea

#

You could enable code with me

#

That's the thing representing guy in the top part of the screen

ocean dirge
#

yea

#

imma dm it to u

#

done

vernal zenith
#

client update bruh

ocean dirge
#

me?

vernal zenith
#

nah

#

I got update

ocean dirge
#

oh

#

ok

#

i only have 28 mins left

#

for code share

vernal zenith
#

kinda stupid

ocean dirge
#

yep

#

i thin k i can restart it

#

lol

vernal zenith
#

Alright

#

Can you add me writing abilities?

ocean dirge
#

@vernal zenithuhhh can i trust u?

vernal zenith
#

probably

#

not

ocean dirge
#

why are u opening port forwarding

vernal zenith
#

im looking what this thing does

ocean dirge
#

oh

#

hmm

#

ok

#

dont break anythong

#

let me make a copy

vernal zenith
#

👀

ocean dirge
#

@vernal zenith there

vernal zenith
#

My client have just died

#

It's frozen 🧊

ocean dirge
#

lmao

#

want me to close the thingy then repon

vernal zenith
#

Yep

scenic lotus
scenic lotus
#

i hope that stable is a bit better than PTB, since its good to lock up both every hour

vernal zenith
#

I'm lagging like crazy

ocean dirge
#

my wifi sucks

vernal zenith
#

Eh.

ocean dirge
#

@vernal zenith Want me to add u to the authors list?

vernal zenith
#

It won't help anything

#

I'm frozen again-

#

how trash this thing is

#

let continue here

#

it will be harder

#

but okay

ocean dirge
#

ok

#

so what code do u ned?

vernal zenith
#

I need to first know what do you want

ocean dirge
#

ok

#

this is a speed run challange

#

you only have your hot bar of inventory slots

#

includes armor and off hand

vernal zenith
#

What?

ocean dirge
#

let me show u

#

u cant use any slots with glass

#

if you die the glass dont drop

#

when u click the glass the event it canceled

vernal zenith
#

hmmm

ocean dirge
#

its a speed run challange

#

so it does not matter if red glass dont drop

vernal zenith
#

Alr, give me a few minutes

ocean dirge
#

kk

scenic lotus
#

hmmm if i recall, geyser changes the number of inventory slots...

scenic lotus
#

rather wondering if you can simply disable all but the hotbar - bedrock and java have a different number of slots

ocean dirge
#

hm

#

im lost

#

what does bedrock have to do with this

scenic lotus
#

only the slot inventory manipulation

ocean dirge
#

im confuesed

vernal zenith
#

?pdc

vernal zenith
#

I see...

#
package yo.mama.speedrun;

import org.bukkit.Material;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import yo.mama.speedrun.listeners.EventsListener;

public final class Speedrun extends JavaPlugin {
    private Speedrun speedrun;
    private ItemReceiver itemReceiver;

    @Override
    public void onEnable() {
        speedrun = this;
        itemReceiver = new ItemReceiver(speedrun, Material.RED_STAINED_GLASS_PANE);
        setupListeners();
    }

    private void setupListeners() {
        PluginManager manager = this.getServer().getPluginManager();
        manager.registerEvents(new EventsListener(speedrun), speedrun);
    }

    public Speedrun getInstance() {
        return speedrun;
    }

    public ItemReceiver getItemReceiver() {
        return itemReceiver;
    }
}

#
package yo.mama.speedrun;

import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;

import java.util.Arrays;

public class ItemReceiver {
    private final NamespacedKey key;
    private final ItemStack item;

    public ItemReceiver(Speedrun speedrun, Material material) {
        key = new NamespacedKey(speedrun, "custom-key");
        item = getItem(material);
    }

    public ItemStack getItem(Material material) {
        ItemStack item = new ItemStack(material);
        ItemMeta meta = item.getItemMeta();
        if (meta == null) {
            return null;
        }
        meta.setDisplayName("yo mama");
        meta.setLore(Arrays.asList("lol", "second lol"));
        meta.getPersistentDataContainer().set(key, PersistentDataType.BYTE, Byte.MAX_VALUE);
        item.setItemMeta(meta);
        return item;
    }

    public boolean hasKeyInItem(ItemStack item) {
        ItemMeta meta = item.getItemMeta();
        if (meta == null) {
            return false;
        }
        PersistentDataContainer container = meta.getPersistentDataContainer();
        return container.has(key, PersistentDataType.BYTE);
    }

    public ItemStack getItem() {
        return item;
    }

    public void setupPlayerInventory(Player player) {
        Inventory inventory = player.getInventory();
        for (int i = 0; i < 27; i++) {
            inventory.setItem(i, getItem());
        }
        player.updateInventory();
    }
}

#
package yo.mama.speedrun.listeners;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.inventory.ItemStack;
import yo.mama.speedrun.Speedrun;

public class EventsListener implements Listener {
    private final Speedrun speedrun;

    public EventsListener(Speedrun speedrun) {
        this.speedrun = speedrun;
    }

    @EventHandler
    public void inventoryClick(InventoryClickEvent event) {
        ItemStack item = event.getCurrentItem();
        if (item == null) {
            return;
        }
        boolean cancel = speedrun.getItemReceiver().hasKeyInItem(item);
        event.setCancelled(cancel);
    }

    @EventHandler
    public void playerDies(PlayerDeathEvent event) {
        event.getDrops().removeIf(item -> speedrun.getItemReceiver().hasKeyInItem(item));
    }

    @EventHandler
    public void playerRespawn(PlayerRespawnEvent event) {
        Player player = event.getPlayer();
        speedrun.getItemReceiver().setupPlayerInventory(player);
    }

    @EventHandler
    public void playerJoin(PlayerJoinEvent event) {
        Player player = event.getPlayer();
        speedrun.getItemReceiver().setupPlayerInventory(player);
    }
}

#

@ocean dirge

ocean dirge
#

oooh

#

is this it?

vernal zenith
#

yes

ocean dirge
#

just 2 classes?

vernal zenith
#

three

ocean dirge
#

thanks

#

@vernal zenith thanks so much