Hallo Community,
da mir grade langweilig war habe ich beschlossen einen sinnlosen Flammenwerfer zu programmieren.
100 Zombies in einem 2x2 Käfig zu grillen wird nie langweilig
Sollten hier irgendwo bösartige Fehler lauern, lasst mich das wissen, ich werde sie ausmerzen!
Den Code könnt ihr gerne übernehmen
EDIT:
Folgendes ist mir bekannt:
- Man kann durch Wände schießen (praktisch
)
- Geht auch unterwasser (gefixt)
- Die Flammeneffekte sind sehr groß, habe aber nichts passenderes gefunden
(mehr oder weniger gefixt)
MfG
_Baum_
da mir grade langweilig war habe ich beschlossen einen sinnlosen Flammenwerfer zu programmieren.
100 Zombies in einem 2x2 Käfig zu grillen wird nie langweilig
Code:
@EventHandler
public void onFlammenwerfer(PlayerInteractEvent e)
{
/**
* @author PlueschBaum
*/
//Technische Daten
/**
* Wie oft wird pro Schuss ein Feuerstoß generiert?
*/
int wiederholungen= 10;
/**
* Welche Distanz ist zwischen den Feuerstößen? reichweite=distanz*wiederholungen
*/
double distanz= 1;
/**
* Wie viel Schaden solle ein Ziel pro Feuerstoß in Reichweite bekommen?
* max_schaden= wiederholungen*damage (Bei kleiner Distanz, da sonst außer Reichweite)
*/
double damage=2;
/**
* Wie lange soll ein Ziel brennen? In Ticks.
*/
int brennen= 100;
Player p= e.getPlayer();
if(e.getAction().equals(Action.RIGHT_CLICK_AIR)||e.getAction().equals(Action.RIGHT_CLICK_BLOCK))
{
ItemStack inHand=p.getItemInHand();
if(inHand.getType().equals(Material.BLAZE_POWDER))
{
Location loc= p.getEyeLocation();
World w= p.getWorld();
Vector v= p.getLocation().getDirection().multiply(distanz);
//Benötigt, da schnell aufeinander folgender Schaden ignoriert wird
HashMap<Damageable,Integer>schaden= new HashMap<Damageable,Integer>();
for(int i=0;i<wiederholungen;i++)
{
loc.add(v);
if(loc.getBlock().getType().equals(Material.WATER)||loc.getBlock().getType().equals(Material.STATIONARY_WATER))
{
w.playEffect(loc, Effect.POTION_SWIRL_TRANSPARENT, 1);
//Unterwasserfeuer wäre unrealistisch....
break;
}
for(int x=0;x<10;x++)
{
w.playEffect(loc, Effect.MOBSPAWNER_FLAMES, 1);
w.playEffect(loc, Effect.FLAME, 1);
w.playEffect(loc, Effect.LAVA_POP, 10);
}
for(Entity en: w.getEntities())
{
Location target= en.getLocation();
if(en instanceof Damageable&&target.distance(loc)<2&&!target.getBlock().getType().equals(Material.WATER)&&!target.getBlock().getType().equals(Material.STATIONARY_WATER))
{
Damageable dmg= (Damageable) en;
if(dmg.equals(p))
{
//Selbstverstümmlung, nein Danke!
break;
}
if(schaden.containsKey(dmg))
{
schaden.put(dmg, schaden.get(dmg)+1);
}
else
{
schaden.put(dmg, 1);
}
}
}
}
for(Damageable d: schaden.keySet())
{
d.setFireTicks(brennen);
d.damage((double)(schaden.get(d)*damage));
}
int amount=inHand.getAmount()-1;
if(amount<=0)
{
p.setItemInHand(null);
return;
}
inHand.setAmount(amount);
}
}
}
Sollten hier irgendwo bösartige Fehler lauern, lasst mich das wissen, ich werde sie ausmerzen!
Den Code könnt ihr gerne übernehmen
EDIT:
Folgendes ist mir bekannt:
- Man kann durch Wände schießen (praktisch
- Geht auch unterwasser (gefixt)
- Die Flammeneffekte sind sehr groß, habe aber nichts passenderes gefunden
MfG
_Baum_
Zuletzt bearbeitet: