mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 10:12:53 +00:00
Dust mech
This commit is contained in:
parent
d71297a114
commit
b74a00de22
35
src/main/java/com/volmit/iris/manager/BlockSignal.java
Normal file
35
src/main/java/com/volmit/iris/manager/BlockSignal.java
Normal file
@ -0,0 +1,35 @@
|
||||
package com.volmit.iris.manager;
|
||||
|
||||
import com.volmit.iris.util.J;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class BlockSignal {
|
||||
public BlockSignal(Block block, int ticks)
|
||||
{
|
||||
Location tg = block.getLocation().clone().add(0.5, 0, 0.5).clone();
|
||||
FallingBlock e = block.getWorld().spawnFallingBlock(tg.clone(), block.getBlockData());
|
||||
e.setGravity(false);
|
||||
e.setInvulnerable(true);
|
||||
e.setGlowing(true);
|
||||
e.teleport(tg.clone());
|
||||
e.setDropItem(false);
|
||||
e.setHurtEntities(false);
|
||||
e.setSilent(true);
|
||||
e.setTicksLived(1);
|
||||
e.setVelocity(new Vector(0, 0, 0));
|
||||
J.s(() -> {
|
||||
e.remove();
|
||||
BlockData type = block.getBlockData();
|
||||
block.setType(Material.AIR, false);
|
||||
block.setBlockData(type, false);
|
||||
}, ticks);
|
||||
}
|
||||
}
|
101
src/main/java/com/volmit/iris/manager/DustRevealer.java
Normal file
101
src/main/java/com/volmit/iris/manager/DustRevealer.java
Normal file
@ -0,0 +1,101 @@
|
||||
package com.volmit.iris.manager;
|
||||
|
||||
import com.volmit.iris.util.BlockPosition;
|
||||
import com.volmit.iris.util.J;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.v2.scaffold.engine.EngineCompositeGenerator;
|
||||
import com.volmit.iris.v2.scaffold.parallax.ParallaxAccess;
|
||||
import com.volmit.iris.v2.scaffold.parallax.ParallaxWorld;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.checkerframework.checker.units.qual.A;
|
||||
import sun.security.mscapi.PRNG;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
@Data
|
||||
public class DustRevealer {
|
||||
private final ParallaxAccess parallax;
|
||||
private final World world;
|
||||
private final BlockPosition block;
|
||||
private final String key;
|
||||
private final KList<BlockPosition> hits;
|
||||
|
||||
public static void spawn(Block block)
|
||||
{
|
||||
World world = block.getWorld();
|
||||
|
||||
if(world.getGenerator() instanceof EngineCompositeGenerator)
|
||||
{
|
||||
ParallaxAccess a = ((EngineCompositeGenerator)world.getGenerator()).getComposite().getEngineForHeight(block.getY()).getParallax();
|
||||
|
||||
if(a.getObject(block.getX(), block.getY(), block.getZ()) != null)
|
||||
{
|
||||
J.a(() -> {
|
||||
new DustRevealer(a, world, new BlockPosition(block.getX(), block.getY(), block.getZ()), a.getObject(block.getX(), block.getY(), block.getZ()), new KList<>());
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public DustRevealer(ParallaxAccess parallax, World world, BlockPosition block, String key, KList<BlockPosition> hits) {
|
||||
this.parallax = parallax;
|
||||
this.world = world;
|
||||
this.block = block;
|
||||
this.key = key;
|
||||
this.hits = hits;
|
||||
|
||||
J.s(() -> {
|
||||
new BlockSignal(world.getBlockAt(block.getX(), block.getY(), block.getZ()), 100);
|
||||
J.a(() -> {
|
||||
is(new BlockPosition(block.getX() + 1, block.getY(), block.getZ()));
|
||||
is(new BlockPosition(block.getX() - 1, block.getY(), block.getZ()));
|
||||
is(new BlockPosition(block.getX(), block.getY() + 1, block.getZ()));
|
||||
is(new BlockPosition(block.getX(), block.getY() - 1, block.getZ()));
|
||||
is(new BlockPosition(block.getX(), block.getY(), block.getZ() + 1));
|
||||
is(new BlockPosition(block.getX(), block.getY(), block.getZ() - 1));
|
||||
is(new BlockPosition(block.getX() + 1, block.getY(), block.getZ() + 1));
|
||||
is(new BlockPosition(block.getX() + 1, block.getY(), block.getZ() - 1));
|
||||
is(new BlockPosition(block.getX() - 1, block.getY(), block.getZ() + 1));
|
||||
is(new BlockPosition(block.getX() - 1, block.getY(), block.getZ() - 1));
|
||||
is(new BlockPosition(block.getX() + 1, block.getY() + 1, block.getZ()));
|
||||
is(new BlockPosition(block.getX() + 1, block.getY() - 1, block.getZ()));
|
||||
is(new BlockPosition(block.getX() - 1, block.getY() + 1, block.getZ()));
|
||||
is(new BlockPosition(block.getX() - 1, block.getY() - 1, block.getZ()));
|
||||
is(new BlockPosition(block.getX(), block.getY() + 1, block.getZ() - 1));
|
||||
is(new BlockPosition(block.getX(), block.getY() + 1, block.getZ() + 1));
|
||||
is(new BlockPosition(block.getX(), block.getY() - 1, block.getZ() - 1));
|
||||
is(new BlockPosition(block.getX(), block.getY() - 1, block.getZ() + 1));
|
||||
is(new BlockPosition(block.getX()-1, block.getY() + 1, block.getZ() - 1));
|
||||
is(new BlockPosition(block.getX()-1, block.getY() + 1, block.getZ() + 1));
|
||||
is(new BlockPosition(block.getX()-1, block.getY() - 1, block.getZ() - 1));
|
||||
is(new BlockPosition(block.getX()-1, block.getY() - 1, block.getZ() + 1));
|
||||
is(new BlockPosition(block.getX()+1, block.getY() + 1, block.getZ() - 1));
|
||||
is(new BlockPosition(block.getX()+1, block.getY() + 1, block.getZ() + 1));
|
||||
is(new BlockPosition(block.getX()+1, block.getY() - 1, block.getZ() - 1));
|
||||
is(new BlockPosition(block.getX()+1, block.getY() - 1, block.getZ() + 1));
|
||||
});
|
||||
}, RNG.r.i(3,6));
|
||||
}
|
||||
|
||||
private boolean is(BlockPosition a) {
|
||||
if(isValidTry(a) && parallax.getObject(a.getX(), a.getY(), a.getZ()) != null && parallax.getObject(a.getX(), a.getY(), a.getZ()).equals(key))
|
||||
{
|
||||
hits.add(a);
|
||||
new DustRevealer(parallax, world, a, key, hits);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isValidTry(BlockPosition b)
|
||||
{
|
||||
return !hits.contains(b);
|
||||
}
|
||||
}
|
@ -174,6 +174,16 @@ public class WandManager implements Listener
|
||||
e.getPlayer().updateInventory();
|
||||
}
|
||||
}
|
||||
|
||||
if(e.getHand().equals(EquipmentSlot.HAND) && isDust(e.getPlayer().getInventory().getItemInMainHand()))
|
||||
{
|
||||
if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK))
|
||||
{
|
||||
e.setCancelled(true);
|
||||
e.getPlayer().playSound(e.getClickedBlock().getLocation(), Sound.ENTITY_ENDER_EYE_DEATH, 2f, 1.97f);
|
||||
DustRevealer.spawn(e.getClickedBlock());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
catch(Throwable ex)
|
||||
@ -254,6 +264,35 @@ public class WandManager implements Listener
|
||||
return createWand(null, null);
|
||||
}
|
||||
|
||||
public static ItemStack createDust()
|
||||
{
|
||||
ItemStack is = new ItemStack(Material.GLOWSTONE_DUST);
|
||||
is.addUnsafeEnchantment(Enchantment.ARROW_INFINITE, 1);
|
||||
ItemMeta im = is.getItemMeta();
|
||||
im.setDisplayName(C.BOLD + "" + C.YELLOW + "Dust of Revealing");
|
||||
im.setUnbreakable(true);
|
||||
im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_PLACED_ON, ItemFlag.HIDE_POTION_EFFECTS, ItemFlag.HIDE_DESTROYS, ItemFlag.HIDE_ENCHANTS);
|
||||
im.setLore(new KList<String>().qadd("Right click on a block to reveal it's placement structure!"));
|
||||
is.setItemMeta(im);
|
||||
|
||||
return is;
|
||||
}
|
||||
|
||||
public boolean isDust(ItemStack is)
|
||||
{
|
||||
if(is == null || is.getType().equals(Material.AIR))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(is.getType().equals(Material.GLOWSTONE_DUST))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static ItemStack update(boolean left, Location a, ItemStack item)
|
||||
{
|
||||
if(!isWand(item))
|
||||
|
Loading…
x
Reference in New Issue
Block a user