Coding mit Java | Java-basierten APIs

  • Ersteller Ersteller ij9F_i0FaF-d9lrDSDDpDbfo
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
Weiß Jemand wie ich items spawne die man NICHT einsammeln kann?
 
@DerTechNick danke
Meine nächste frage ist wie kann man kisten so machen das es so aussieht als würde sie jemand öffnen?
 
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.
 
@DerTechNick klappt bei mir nicht was mache ich falsch?
Code:
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);
 
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:
Code:
for (Entity e : world.getEntities())
{
if (e.getType() == EntityType.DROPPED_ITEM)
{
e.remove();
}
}
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.

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:
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);

}

}
Dabei habe ich alle Möglichkeiten des unloads probiert. Also ohne Parameter, zweimal true usw.

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
 
PHP:
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();}
      }
   }
}
Bei mir funktinierts so, egal ob jemand auf dem Sever ist oder nicht.
 
Zuletzt bearbeitet von einem Moderator:
PHP:
 World world = Bukkit.getWorld("world");
        List<Entity> entList = world.getEntities();
        for(Entity current : entList){
            if (current instanceof Item){
            current.remove();
          }
Bei mir funktinierts so, egal ob jemand auf dem Sever ist oder nicht.
Ist das nicht dasselbe, wie das oben geratene? Sicher, dass das auch bei einer ungeladenen Map funktioniert?
 
Was meinst du mit ungeladen?
Probiers halt mal aus
 
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:
Code:
for (Entity e : world.getEntities())
{
if (e.getType() == EntityType.DROPPED_ITEM)
{
e.remove();
}
}
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.

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:
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);

}

}
Dabei habe ich alle Möglichkeiten des unloads probiert. Also ohne Parameter, zweimal true usw.

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
Hey,
da du anscheinend Items entfernen möchtest , empfehle ich dir folgendes:

Code:
for(Entity entity : world.getEntitesByClass(dieEntityKlasse.class)){
entity.remove();
}

Das dürfte sogar die restlichen Probleme lösen, testen kann ich dies derzeit allerdings nicht.

MfG,

Tim
 
  • Like
Reaktionen: SelcanStuhlgang
Hey Leute, ich bräuchte einmal eure Hilfe!

Ich wollte euch fragen, ob es irgendeine Möglichkeit gibt, die MaxPlayer eines Servers über ein Plugin zu ändern.
D.h. : Das Plugin soll von irgendwo einen Wert bekommen und die MaxPlayer des Servers auf diesen Wert setzen.
Ist das möglich?

Vielen Dank schonmal!:D

MfG, Blackagent_007
 
Vllt hilft dir das weiter:
PHP:
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);
    }
 
  • Like
Reaktionen: SelcanStuhlgang
ich wollte einen steuerbare mob jedoch gibt es die rot markierten variablen nicht bzw. dort ist ein fehler. kann mir jemand dabei helfen danke? :D

@Override
public void g(float sideMot, float forMot) {
if(this.passenger != null && this.passenger instanceof EntityHuman) {
this.lastYaw = this.yaw = this.passenger.yaw;
this.pitch = this.passenger.pitch * 0.5F;
this.setYawPitch(this.yaw, this.pitch);//Update the pitch and yaw
this.aI = this.aG = this.yaw;
sideMot = ((EntityLiving)this.passenger).aX * 0.5F;
forMot = ((EntityLiving)this.passenger).aY;
if(forMot <= 0.0F) {
forMot *= 0.25F;// Make backwards slower
}

Field jump = null; //Jumping
try{jump = EntityLiving.class.getDeclaredField("aW");}
catch(NoSuchFieldException ex){ex.printStackTrace();}
catch(SecurityException ex){ex.printStackTrace(); }
jump.setAccessible(true);
if (jump != null && this.onGround) { // Wouldn't want it jumping while on the ground would we?
try {
if (jump.getBoolean(this.passenger)) {
double jumpHeight = 0.5D;//Here you can set the jumpHeight
this.motY = jumpHeight; // Used all the time in NMS for entity jumping
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}

this.S = 1.0F;// The custom entity will now automatically climb up 1 high blocks
this.aK = this.bH() * 0.1F;
if(!this.world.isStatic) {
this.j(0.35F);//Here is the speed the entity will walk.
super.g(sideMot, forMot);
}


this.ay = this.az;//Some extra things
double d0 = this.locX - this.lastX;
double d1 = this.locZ - this.lastZ;
float f4 = MathHelper.sqrt(d0 * d0 + d1 * d1) * 4.0F;
if(f4 > 1.0F) {
f4 = 1.0F;
}

this.az += (f4 - this.az) * 0.4F;
this.aA += this.az;
} else {
this.S = 0.5F;
this.aK = 0.02F;
super.g(sideMot, forMot);
}
}
ich weiß auch nicht wie die variablen nun heißen
 
Status
Für weitere Antworten geschlossen.

Soziale Medien

  • X
  • TikTok

Über uns

  • GommeHD.net ist einer der größten Minecraft-Server der Welt. Dir gefällt unser Server? Dann unterstütze uns durch einen Kauf im Shop!
  • Shop