Gib den items irgend nen Namen, und schau im PickUpItemEvent ob das Item den Namen hat und cancel das.Weiß Jemand wie ich items spawne die man NICHT einsammeln kann?
http://www.spigotmc.org/threads/open-chest-animation.49697/@DerTechNick danke
Meine nächste frage ist wie kann man kisten so machen das es so aussieht als würde sie jemand öffnen?
Scroll einfach ganz nach unten...Ich glaube nicht, dass in diesem Beitrag die Lösung ist. Hab die Frage gegoogelt und bin auch auf das gestoßen, konnte die Lösung nicht finden.
CraftPlayer p = (CraftPlayer) e.getPlayer();
PacketPlayOutBlockAction packet = new PacketPlayOutBlockAction((int)e.getClickedBlock().getLocation().getBlockX(),(int)e.getClickedBlock().getLocation().getBlockY(),(int)e.getClickedBlock().getLocation().getBlockZ(), Blocks.CHEST,1,1);
p.getHandle().playerConnection.sendPacket(packet);
for (Entity e : world.getEntities())
{
if (e.getType() == EntityType.DROPPED_ITEM)
{
e.remove();
}
}
public class MapReset implements Listener {
private static List<Chunk> chunks = new ArrayList<Chunk>();
@EventHandlerpublic void onload(ChunkLoadEvent e)
{
Chunk chunk = e.getChunk();
if(!chunks.contains(chunk)) {
chunks.add(chunk);
}
}
public static void restore()
{
int i = 0;
for(Chunk w : chunks)
{
for (Entity e : w.getEntities())
{
w.load();
if(e.getType() == EntityType.DROPPED_ITEM || e.getType() == EntityType.ARROW)
{
e.remove();
System.out.println(e.getName());
i++;
}
w.unload(true, false);
}
}
private void reset() {
World world = getServer().getWorld("world");
List<Entity> entList = world.getEntities();
for (Entity current : entList) {
if (current instanceof Item || current instanceof Arrow) {
current.remove();}
}
}
}
Ist das nicht dasselbe, wie das oben geratene? Sicher, dass das auch bei einer ungeladenen Map funktioniert?Bei mir funktinierts so, egal ob jemand auf dem Sever ist oder nicht.PHP:World world = Bukkit.getWorld("world"); List<Entity> entList = world.getEntities(); for(Entity current : entList){ if (current instanceof Item){ current.remove(); }
Klappt leider nicht. Wenn ich den Server verlasse unfd ihn stoppe sind die Items nicht weg. Danke trotzdem.. HAt noch jemand ander Vorschläge?Was meinst du mit ungeladen?
Probiers halt mal aus
Hey,Hallo liebe gommunity!
Ich habe ein Problem in einem Minigame und zwar mit dem Map Reset. Nach der Runde, also in der onDisable() Methode des Plugins sollen alle gedroppten Items gelöscht werden die auf der Welt vorhanden sind.
Mir wurde angeboten es so zu machen:
Code:
Aber diese Methode schlägt fehl, wenn keiner auf dem Server ist oder auf irgendeine andere Art und Weise manche Chunks nicht geladen sind, da hierbei nur auf die geladenen Chunks zugegriffen wird.Code:for (Entity e : world.getEntities()) { if (e.getType() == EntityType.DROPPED_ITEM) { e.remove(); } }
Also habe ich das auf eine eigene Art und Weise gemacht. Immer wenn ein Chunk geladen wird (ChunkLoadEvent) wird dieser in eine Liste gespeichert. Und beim Reset wird die Liste durchgegangen und in jedem Chunk werden die Entitys gelöscht.
Hier der Codetext:
Code:
Dabei habe ich alle Möglichkeiten des unloads probiert. Also ohne Parameter, zweimal true usw.Code:public class MapReset implements Listener { private static List<Chunk> chunks = new ArrayList<Chunk>(); @EventHandlerpublic void onload(ChunkLoadEvent e) { Chunk chunk = e.getChunk(); if(!chunks.contains(chunk)) { chunks.add(chunk); } } public static void restore() { int i = 0; for(Chunk w : chunks) { for (Entity e : w.getEntities()) { w.load(); if(e.getType() == EntityType.DROPPED_ITEM || e.getType() == EntityType.ARROW) { e.remove(); System.out.println(e.getName()); i++; } w.unload(true, false); } }
Diese Möglichkeit resettet aber auch nur wenn jemand auf dem Server ist, wenn der Server gestoppt wird. Ich hänge an diesem Problem jetzt schon ungefähr ein Monat und finde keinen Weg.
habt ihr vllt einen Tipp für mich?
mfg
Raaamil
for(Entity entity : world.getEntitesByClass(dieEntityKlasse.class)){
entity.remove();
}
public void setMaxPlayers(int maxPlayers)
throws ReflectiveOperationException {
String bukkitversion = Bukkit.getServer().getClass().getPackage()
.getName().substring(23);
Object playerlist = Class.forName("org.bukkit.craftbukkit." + bukkitversion + ".CraftServer")
.getDeclaredMethod("getHandle", null).invoke(Bukkit.getServer(), null);
Field maxplayers = playerlist.getClass().getSuperclass()
.getDeclaredField("maxPlayers");
maxplayers.setAccessible(true);
maxplayers.set(playerlist, maxplayers);
}