9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-27 11:09:06 +00:00

Commands and objects

This commit is contained in:
Daniel Mills
2020-01-07 01:28:46 -05:00
parent e7baa90792
commit 6f68e8b2c7
53 changed files with 410 additions and 230 deletions

View File

@@ -1,14 +1,53 @@
package ninja.bytecode.iris;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class CommandIris implements CommandExecutor
{
public void msg(CommandSender s, String msg)
{
s.sendMessage(ChatColor.DARK_PURPLE + "[" + ChatColor.GRAY + "Iris" + ChatColor.DARK_PURPLE + "]" + ChatColor.GRAY + ": " + msg);
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
{
if(args.length == 0)
{
msg(sender, "/iris gen - Gen a new Iris World");
msg(sender, "/ish - Iris Schematic Commands");
}
if(args.length > 0)
{
if(args[0].equalsIgnoreCase("gen"))
{
if(sender instanceof Player)
{
World wold = ((Player)sender).getWorld();
World w = Iris.instance.createIrisWorld();
((Player)sender).teleport(new Location(w, 0, 256, 0));
((Player)sender).setFlying(true);
((Player)sender).setGameMode(GameMode.CREATIVE);
wold.setAutoSave(false);
Bukkit.unloadWorld(wold, false);
}
else
{
Iris.instance.createIrisWorld();
}
}
}
return false;
}
}

View File

@@ -0,0 +1,259 @@
package ninja.bytecode.iris;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import ninja.bytecode.iris.schematic.Schematic;
import ninja.bytecode.iris.util.Cuboid;
import ninja.bytecode.iris.util.Cuboid.CuboidDirection;
import ninja.bytecode.iris.util.Direction;
import ninja.bytecode.iris.util.WandUtil;
import ninja.bytecode.shuriken.format.F;
public class CommandIsh implements CommandExecutor
{
public void msg(CommandSender s, String msg)
{
s.sendMessage(ChatColor.DARK_PURPLE + "[" + ChatColor.GRAY + "Iris" + ChatColor.DARK_PURPLE + "]" + ChatColor.GRAY + ": " + msg);
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
{
if(args.length == 0)
{
msg(sender, "/ish wand - Get an Iris Wand");
msg(sender, "/ish save <name> - Save Schematic");
msg(sender, "/ish load <name> [cursor] - Paste Schematic");
msg(sender, "/ish expand <amount> - Expand Cuboid in direction");
msg(sender, "/ish shift <amount> - Shift Cuboid in direction");
msg(sender, "/ish shrinkwrap - Shrink to blocks");
msg(sender, "/ish xup - Shift up, Expand up, Contract in.");
msg(sender, "/ish xvert - Expand up, Expand down, Contract in.");
msg(sender, "/ish id - What id am i looking at");
}
if(args.length > 0)
{
if(sender instanceof Player)
{
Player p = (Player) sender;
if(args[0].equalsIgnoreCase("wand"))
{
p.getInventory().addItem(WandUtil.createWand());
p.playSound(p.getLocation(), Sound.ITEM_ARMOR_EQUIP_DIAMOND, 1f, 1.55f);
}
if(args[0].equalsIgnoreCase("id"))
{
Block b = p.getTargetBlock(null, 64);
msg(p, b.getType().getId() + ":" + b.getData() + " (" + b.getType().toString() + ":" + b.getData() + ")");
}
if(args[0].equalsIgnoreCase("save"))
{
Schematic s = WandUtil.createSchematic(p.getInventory().getItemInMainHand(), p.getLocation());
File f = new File(Iris.instance.getDataFolder(), "schematics/" + args[1] + ".ish");
f.getParentFile().mkdirs();
try
{
FileOutputStream fos = new FileOutputStream(f);
s.write(fos);
msg(p, "Saved " + args[1] + " (" + F.f(s.getSchematic().size()) + " Entries)");
p.playSound(p.getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1f, 0.45f);
}
catch(Throwable e1)
{
e1.printStackTrace();
}
}
if(args[0].equalsIgnoreCase("load"))
{
Schematic s = new Schematic(1, 1, 1);
File f = new File(Iris.instance.getDataFolder(), "schematics/" + args[1] + ".ish");
if(!f.exists())
{
msg(p, "Not Found");
return true;
}
try
{
FileInputStream fin = new FileInputStream(f);
s.read(fin);
boolean cursor = false;
for(String i : args)
{
if(i.equalsIgnoreCase("cursor"))
{
cursor = true;
break;
}
}
Location at = p.getLocation();
if(cursor)
{
at = p.getTargetBlock(null, 64).getLocation();
}
WandUtil.pasteSchematic(s, at);
p.playSound(p.getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1f, 1.25f);
msg(p, "Pasted " + args[1] + " (" + F.f(s.getSchematic().size()) + " Blocks Modified)");
}
catch(Throwable e1)
{
e1.printStackTrace();
}
}
if(args[0].equalsIgnoreCase("xup"))
{
Location[] b = WandUtil.getCuboid(p.getInventory().getItemInMainHand());
b[0].add(new Vector(0, 1, 0));
b[1].add(new Vector(0, 1, 0));
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
while(!cursor.containsOnly(Material.AIR))
{
a1.add(new Vector(0, 1, 0));
a2.add(new Vector(0, 1, 0));
cursor = new Cuboid(a1, a2);
}
a1.add(new Vector(0, -1, 0));
a2.add(new Vector(0, -1, 0));
b[0] = a1;
a2 = b[1];
cursor = new Cuboid(a1, a2);
cursor = cursor.contract(CuboidDirection.North);
cursor = cursor.contract(CuboidDirection.South);
cursor = cursor.contract(CuboidDirection.East);
cursor = cursor.contract(CuboidDirection.West);
b[0] = cursor.getLowerNE();
b[1] = cursor.getUpperSW();
p.getInventory().setItemInMainHand(WandUtil.createWand(b[0], b[1]));
p.updateInventory();
p.playSound(p.getLocation(), Sound.ENTITY_ITEMFRAME_ROTATE_ITEM, 1f, 0.55f);
}
if(args[0].equalsIgnoreCase("shrinkwrap") || args[0].equalsIgnoreCase("shrink"))
{
Location[] b = WandUtil.getCuboid(p.getInventory().getItemInMainHand());
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
cursor = cursor.contract(CuboidDirection.North);
cursor = cursor.contract(CuboidDirection.South);
cursor = cursor.contract(CuboidDirection.East);
cursor = cursor.contract(CuboidDirection.West);
cursor = cursor.contract(CuboidDirection.Up);
cursor = cursor.contract(CuboidDirection.Down);
b[0] = cursor.getLowerNE();
b[1] = cursor.getUpperSW();
p.getInventory().setItemInMainHand(WandUtil.createWand(b[0], b[1]));
p.updateInventory();
p.playSound(p.getLocation(), Sound.ENTITY_ITEMFRAME_ROTATE_ITEM, 1f, 0.55f);
}
if(args[0].equalsIgnoreCase("expand"))
{
int amt = Integer.valueOf(args[1]);
Location[] b = WandUtil.getCuboid(p.getInventory().getItemInMainHand());
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
Direction d = Direction.closest(p.getLocation().getDirection()).reverse();
cursor = cursor.expand(d, amt);
b[0] = cursor.getLowerNE();
b[1] = cursor.getUpperSW();
p.getInventory().setItemInMainHand(WandUtil.createWand(b[0], b[1]));
p.updateInventory();
p.playSound(p.getLocation(), Sound.ENTITY_ITEMFRAME_ROTATE_ITEM, 1f, 0.55f);
}
if(args[0].equalsIgnoreCase("shift"))
{
int amt = Integer.valueOf(args[1]);
Location[] b = WandUtil.getCuboid(p.getInventory().getItemInMainHand());
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Direction d = Direction.closest(p.getLocation().getDirection()).reverse();
a1.add(d.toVector().multiply(amt));
a2.add(d.toVector().multiply(amt));
Cuboid cursor = new Cuboid(a1, a2);
b[0] = cursor.getLowerNE();
b[1] = cursor.getUpperSW();
p.getInventory().setItemInMainHand(WandUtil.createWand(b[0], b[1]));
p.updateInventory();
p.playSound(p.getLocation(), Sound.ENTITY_ITEMFRAME_ROTATE_ITEM, 1f, 0.55f);
}
if(args[0].equalsIgnoreCase("xvert"))
{
Location[] b = WandUtil.getCuboid(p.getInventory().getItemInMainHand());
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Location a1x = b[0].clone();
Location a2x = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
Cuboid cursorx = new Cuboid(a1, a2);
while(!cursor.containsOnly(Material.AIR))
{
a1.add(new Vector(0, 1, 0));
a2.add(new Vector(0, 1, 0));
cursor = new Cuboid(a1, a2);
}
a1.add(new Vector(0, -1, 0));
a2.add(new Vector(0, -1, 0));
while(!cursorx.containsOnly(Material.AIR))
{
a1x.add(new Vector(0, -1, 0));
a2x.add(new Vector(0, -1, 0));
cursorx = new Cuboid(a1x, a2x);
}
a1x.add(new Vector(0, 1, 0));
a2x.add(new Vector(0, 1, 0));
b[0] = a1;
b[1] = a2x;
cursor = new Cuboid(b[0], b[1]);
cursor = cursor.contract(CuboidDirection.North);
cursor = cursor.contract(CuboidDirection.South);
cursor = cursor.contract(CuboidDirection.East);
cursor = cursor.contract(CuboidDirection.West);
b[0] = cursor.getLowerNE();
b[1] = cursor.getUpperSW();
p.getInventory().setItemInMainHand(WandUtil.createWand(b[0], b[1]));
p.updateInventory();
p.playSound(p.getLocation(), Sound.ENTITY_ITEMFRAME_ROTATE_ITEM, 1f, 0.55f);
}
}
}
return false;
}
}

View File

@@ -4,15 +4,14 @@ import java.util.UUID;
import java.util.function.Function;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
@@ -28,6 +27,7 @@ import ninja.bytecode.shuriken.execution.TaskExecutor;
public class Iris extends JavaPlugin implements Listener
{
public static GSet<Chunk> refresh = new GSet<>();
public static Profiler profiler;
public static TaskExecutor genPool;
public static IrisGenerator gen;
@@ -45,6 +45,8 @@ public class Iris extends JavaPlugin implements Listener
gen = new IrisGenerator();
genPool = new TaskExecutor(getTC(), settings.performance.threadPriority, "Iris Generator");
getServer().getPluginManager().registerEvents((Listener) this, this);
getCommand("iris").setExecutor(new CommandIris());
getCommand("ish").setExecutor(new CommandIsh());
new WandManager();
// Debug world regens
@@ -117,23 +119,7 @@ public class Iris extends JavaPlugin implements Listener
return new IrisGenerator();
}
@EventHandler
public void on(PlayerCommandPreprocessEvent e)
{
if(e.getMessage().toLowerCase().equals("/iris gen"))
{
e.setCancelled(true);
World wold = e.getPlayer().getWorld();
World w = createIrisWorld();
e.getPlayer().teleport(new Location(w, 0, 256, 0));
e.getPlayer().setFlying(true);
e.getPlayer().setGameMode(GameMode.CREATIVE);
wold.setAutoSave(false);
Bukkit.unloadWorld(wold, false);
}
}
private World createIrisWorld()
public World createIrisWorld()
{
World ww = Bukkit.createWorld(new WorldCreator("iris-worlds/" + UUID.randomUUID().toString()).generator(new IrisGenerator()).seed(5944323));
ww.setSpawnFlags(false, false);

View File

@@ -1,31 +1,26 @@
package ninja.bytecode.iris;
import java.awt.Color;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.util.Vector;
import ninja.bytecode.iris.schematic.Schematic;
import ninja.bytecode.iris.util.Cuboid;
import ninja.bytecode.iris.util.Cuboid.CuboidDirection;
import ninja.bytecode.iris.util.ParticleEffect;
import ninja.bytecode.iris.util.ParticleRedstone;
import ninja.bytecode.iris.util.WandUtil;
public class WandManager implements Listener
{
@SuppressWarnings("deprecation")
public WandManager()
{
Bukkit.getPluginManager().registerEvents(this, Iris.instance);
@@ -35,219 +30,104 @@ public class WandManager implements Listener
{
tick(i);
}
}, 0, 4);
for(Chunk i : Iris.refresh)
{
i.getWorld().refreshChunk(i.getX(), i.getZ());
}
Iris.refresh.clear();
}, 0, 2);
}
@EventHandler
public void tick(Player p)
{
if(WandUtil.isWand(p.getInventory().getItemInMainHand()))
try
{
Location[] d = WandUtil.getCuboid(p.getInventory().getItemInMainHand());
ParticleEffect.CRIT_MAGIC.display(0.1f, 1, d[0].clone().add(0.5, 0.5, 0.5).clone().add(Vector.getRandom().subtract(Vector.getRandom()).normalize().clone().multiply(0.65)), p);
ParticleEffect.CRIT.display(0.1f, 1, d[1].clone().add(0.5, 0.5, 0.5).clone().add(Vector.getRandom().subtract(Vector.getRandom()).normalize().clone().multiply(0.65)), p);
if(!d[0].getWorld().equals(d[1].getWorld()))
if(WandUtil.isWand(p.getInventory().getItemInMainHand()))
{
return;
}
Location[] d = WandUtil.getCuboid(p.getInventory().getItemInMainHand());
ParticleEffect.CRIT_MAGIC.display(0.1f, 1, d[0].clone().add(0.5, 0.5, 0.5).clone().add(Vector.getRandom().subtract(Vector.getRandom()).normalize().clone().multiply(0.65)), p);
ParticleEffect.CRIT.display(0.1f, 1, d[1].clone().add(0.5, 0.5, 0.5).clone().add(Vector.getRandom().subtract(Vector.getRandom()).normalize().clone().multiply(0.65)), p);
if(d[0].distanceSquared(d[1]) > 64 * 64)
{
return;
}
int minx = Math.min(d[0].getBlockX(), d[1].getBlockX());
int miny = Math.min(d[0].getBlockY(), d[1].getBlockY());
int minz = Math.min(d[0].getBlockZ(), d[1].getBlockZ());
int maxx = Math.max(d[0].getBlockX(), d[1].getBlockX());
int maxy = Math.max(d[0].getBlockY(), d[1].getBlockY());
int maxz = Math.max(d[0].getBlockZ(), d[1].getBlockZ());
for(double j = minx - 1; j < maxx + 1; j += 0.25)
{
for(double k = miny - 1; k < maxy + 1; k += 0.25)
if(!d[0].getWorld().equals(d[1].getWorld()))
{
for(double l = minz - 1; l < maxz + 1; l += 0.25)
return;
}
if(d[0].distanceSquared(d[1]) > 64 * 64)
{
return;
}
int minx = Math.min(d[0].getBlockX(), d[1].getBlockX());
int miny = Math.min(d[0].getBlockY(), d[1].getBlockY());
int minz = Math.min(d[0].getBlockZ(), d[1].getBlockZ());
int maxx = Math.max(d[0].getBlockX(), d[1].getBlockX());
int maxy = Math.max(d[0].getBlockY(), d[1].getBlockY());
int maxz = Math.max(d[0].getBlockZ(), d[1].getBlockZ());
for(double j = minx - 1; j < maxx + 1; j += 0.25)
{
for(double k = miny - 1; k < maxy + 1; k += 0.25)
{
boolean jj = j == minx || j == maxx;
boolean kk = k == miny || k == maxy;
boolean ll = l == minz || l == maxz;
double aa = j;
double bb = k;
double cc = l;
if((jj && kk) || (jj && ll) || (ll && kk))
for(double l = minz - 1; l < maxz + 1; l += 0.25)
{
Vector push = new Vector(0, 0, 0);
boolean jj = j == minx || j == maxx;
boolean kk = k == miny || k == maxy;
boolean ll = l == minz || l == maxz;
double aa = j;
double bb = k;
double cc = l;
if(j == minx)
if((jj && kk) || (jj && ll) || (ll && kk))
{
push.add(new Vector(-0.55, 0, 0));
}
Vector push = new Vector(0, 0, 0);
if(k == miny)
{
push.add(new Vector(0, -0.55, 0));
}
if(j == minx)
{
push.add(new Vector(-0.55, 0, 0));
}
if(l == minz)
{
push.add(new Vector(0, 0, -0.55));
}
if(k == miny)
{
push.add(new Vector(0, -0.55, 0));
}
if(j == maxx)
{
push.add(new Vector(0.55, 0, 0));
}
if(l == minz)
{
push.add(new Vector(0, 0, -0.55));
}
if(k == maxy)
{
push.add(new Vector(0, 0.55, 0));
}
if(j == maxx)
{
push.add(new Vector(0.55, 0, 0));
}
if(l == maxz)
{
push.add(new Vector(0, 0, 0.55));
}
if(k == maxy)
{
push.add(new Vector(0, 0.55, 0));
}
Location lv = new Location(d[0].getWorld(), aa, bb, cc).clone().add(0.5, 0.5, 0.5).clone().add(push);
int color = Color.getHSBColor((float) (0.5f + (Math.sin((aa + bb + cc + (p.getTicksLived() / 2)) / 20f) / 2)), 1, 1).getRGB();
new ParticleRedstone().setColor(new Color(color)).play(lv, p);
if(l == maxz)
{
push.add(new Vector(0, 0, 0.55));
}
Location lv = new Location(d[0].getWorld(), aa, bb, cc).clone().add(0.5, 0.5, 0.5).clone().add(push);
int color = Color.getHSBColor((float) (0.5f + (Math.sin((aa + bb + cc + (p.getTicksLived() / 2)) / 20f) / 2)), 1, 1).getRGB();
new ParticleRedstone().setColor(new Color(color)).play(lv, p);
}
}
}
}
}
}
}
@EventHandler
public void on(PlayerCommandPreprocessEvent e)
{
if(e.getMessage().startsWith("/isave "))
{
e.setCancelled(true);
Schematic s = WandUtil.createSchematic(e.getPlayer().getInventory().getItemInMainHand(), e.getPlayer().getLocation());
File f = new File(Iris.instance.getDataFolder(), "schematics/" + e.getMessage().split("\\Q \\E")[1] + ".ish");
f.getParentFile().mkdirs();
try
{
FileOutputStream fos = new FileOutputStream(f);
s.write(fos);
e.getPlayer().sendMessage("Done!");
}
catch(Throwable e1)
{
e1.printStackTrace();
}
}
if(e.getMessage().startsWith("/iload "))
{
e.setCancelled(true);
Schematic s = new Schematic(1, 1, 1);
File f = new File(Iris.instance.getDataFolder(), "schematics/" + e.getMessage().split("\\Q \\E")[1] + ".ish");
if(!f.exists())
{
e.getPlayer().sendMessage("Not Found");
return;
}
try
{
FileInputStream fin = new FileInputStream(f);
s.read(fin);
WandUtil.pasteSchematic(s, e.getPlayer().getLocation());
e.getPlayer().sendMessage("Done!");
}
catch(Throwable e1)
{
e1.printStackTrace();
}
}
if(e.getMessage().startsWith("/iup"))
catch(Throwable e)
{
e.setCancelled(true);
Location[] b = WandUtil.getCuboid(e.getPlayer().getInventory().getItemInMainHand());
b[0].add(new Vector(0, 1, 0));
b[1].add(new Vector(0, 1, 0));
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
while(!cursor.containsOnly(Material.AIR))
{
a1.add(new Vector(0, 1, 0));
a2.add(new Vector(0, 1, 0));
cursor = new Cuboid(a1, a2);
}
a1.add(new Vector(0, -1, 0));
a2.add(new Vector(0, -1, 0));
b[0] = a1;
a2 = b[1];
cursor = new Cuboid(a1, a2);
cursor = cursor.contract(CuboidDirection.North);
cursor = cursor.contract(CuboidDirection.South);
cursor = cursor.contract(CuboidDirection.East);
cursor = cursor.contract(CuboidDirection.West);
b[0] = cursor.getLowerNE();
b[1] = cursor.getUpperSW();
e.getPlayer().getInventory().setItemInMainHand(WandUtil.createWand(b[0], b[1]));
e.getPlayer().updateInventory();
}
if(e.getMessage().startsWith("/ivert"))
{
e.setCancelled(true);
Location[] b = WandUtil.getCuboid(e.getPlayer().getInventory().getItemInMainHand());
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Location a1x = b[0].clone();
Location a2x = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
Cuboid cursorx = new Cuboid(a1, a2);
while(!cursor.containsOnly(Material.AIR))
{
a1.add(new Vector(0, 1, 0));
a2.add(new Vector(0, 1, 0));
cursor = new Cuboid(a1, a2);
}
a1.add(new Vector(0, -1, 0));
a2.add(new Vector(0, -1, 0));
while(!cursorx.containsOnly(Material.AIR))
{
a1x.add(new Vector(0, -1, 0));
a2x.add(new Vector(0, -1, 0));
cursorx = new Cuboid(a1x, a2x);
}
a1x.add(new Vector(0, 1, 0));
a2x.add(new Vector(0, 1, 0));
b[0] = a1;
b[1] = a2x;
cursor = new Cuboid(b[0], b[1]);
cursor = cursor.contract(CuboidDirection.North);
cursor = cursor.contract(CuboidDirection.South);
cursor = cursor.contract(CuboidDirection.East);
cursor = cursor.contract(CuboidDirection.West);
b[0] = cursor.getLowerNE();
b[1] = cursor.getUpperSW();
e.getPlayer().getInventory().setItemInMainHand(WandUtil.createWand(b[0], b[1]));
e.getPlayer().updateInventory();
}
if(e.getMessage().equals("/iris wand"))
{
e.setCancelled(true);
e.getPlayer().getInventory().addItem(WandUtil.createWand());
}
}
@@ -260,7 +140,7 @@ public class WandManager implements Listener
{
e.setCancelled(true);
e.getPlayer().getInventory().setItemInMainHand(WandUtil.update(true, e.getClickedBlock().getLocation(), e.getPlayer().getInventory().getItemInMainHand()));
e.getPlayer().playSound(e.getClickedBlock().getLocation(), Sound.BLOCK_END_PORTAL_FRAME_FILL, 1f, 0.67f);
e.getPlayer().updateInventory();
}
@@ -268,7 +148,7 @@ public class WandManager implements Listener
{
e.setCancelled(true);
e.getPlayer().getInventory().setItemInMainHand(WandUtil.update(false, e.getClickedBlock().getLocation(), e.getPlayer().getInventory().getItemInMainHand()));
e.getPlayer().playSound(e.getClickedBlock().getLocation(), Sound.BLOCK_END_PORTAL_FRAME_FILL, 1f, 1.17f);
e.getPlayer().updateInventory();
}
}

View File

@@ -233,17 +233,7 @@ public class IrisGenerator extends ParallelChunkGenerator
p.add(new BiomeBiasSchematicPopulator(i.getSchematicGroups().get(j), i, gs.getSchematics().toArray(new Schematic[gs.size()])));
}
}
p.add(new BlockPopulator()
{
@SuppressWarnings("deprecation")
@Override
public void populate(World world, Random random, Chunk source)
{
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () -> world.refreshChunk(source.getX(), source.getZ()), 50);
}
});
L.i("Initialized " + b + " Biomes with " + p.size() + " Populators using " + sch + " Schematics");
}

View File

@@ -14,6 +14,7 @@ import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.util.BlockVector;
import ninja.bytecode.iris.Iris;
import ninja.bytecode.iris.util.Catalyst12;
import ninja.bytecode.iris.util.MB;
import ninja.bytecode.shuriken.collections.GMap;
@@ -137,9 +138,15 @@ public class Schematic
s.put(b);
}
public int sh(int g)
{
int m = (g / 2);
return g % 2 == 0 ? m : m + 1;
}
public void place(World source, int wx, int wy, int wz)
{
Location start = new Location(source, wx, wy, wz).clone().add(w / 2, centeredHeight ? 0 : -(h / 2), d / 2);
Location start = new Location(source, wx, wy, wz).clone().add(sh(w), sh(h) + 1, sh(d));
for(BlockVector i : getSchematic().k())
{
@@ -153,6 +160,7 @@ public class Schematic
try
{
Iris.refresh.add(f.getChunk());
Catalyst12.setBlock(source, f.getBlockX(), f.getBlockY(), f.getBlockZ(), b);
}

View File

@@ -422,6 +422,17 @@ public class Cuboid implements Iterable<Block>, Cloneable, ConfigurationSerializ
}
}
public Cuboid expand(Direction dir, int amount)
{
int ax = dir.toVector().getBlockX() == 1 ? amount : 0;
int sx = dir.toVector().getBlockX() == -1 ? -amount : 0;
int ay = dir.toVector().getBlockY() == 1 ? amount : 0;
int sy = dir.toVector().getBlockY() == -1 ? -amount : 0;
int az = dir.toVector().getBlockZ() == 1 ? amount : 0;
int sz = dir.toVector().getBlockZ() == -1 ? -amount : 0;
return new Cuboid(worldName, x1 + sx, y1 + sy, z1 + sz, x2 + ax, y2 + ay, z2 + az);
}
/**
* Shift the Cuboid in the given direction by the given amount.
*

View File

@@ -62,7 +62,7 @@ public enum Direction
for(Direction i : values())
{
Vector x = i.toVector();
double g = x.distance(v);
double g = x.dot(v);
if(g < m)
{

View File

@@ -15,7 +15,6 @@ import org.bukkit.util.BlockVector;
import ninja.bytecode.iris.schematic.Schematic;
import ninja.bytecode.shuriken.collections.GList;
import ninja.bytecode.shuriken.logging.L;
public class WandUtil
{
@@ -108,6 +107,11 @@ public class WandUtil
Location[] f = getCuboid(item);
Location other = left ? f[1] : f[0];
if(other != null && !other.getWorld().getName().equals(a.getWorld().getName()))
{
other = null;
}
return createWand(left ? a : other, left ? other : a);
}