mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-04-08 00:36:19 +00:00
Forcefully shove stuff into other stuff
This commit is contained in:
26
src/main/java/com/volmit/iris/manager/edit/BlockEditor.java
Normal file
26
src/main/java/com/volmit/iris/manager/edit/BlockEditor.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package com.volmit.iris.manager.edit;
|
||||
|
||||
import java.io.Closeable;
|
||||
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
public interface BlockEditor extends Closeable
|
||||
{
|
||||
public long last();
|
||||
|
||||
public void set(int x, int y, int z, BlockData d);
|
||||
|
||||
public BlockData get(int x, int y, int z);
|
||||
|
||||
public void setBiome(int x, int z, Biome b);
|
||||
|
||||
public void setBiome(int x, int y, int z, Biome b);
|
||||
|
||||
@Override
|
||||
public void close();
|
||||
|
||||
public Biome getBiome(int x, int y, int z);
|
||||
|
||||
public Biome getBiome(int x, int z);
|
||||
}
|
||||
48
src/main/java/com/volmit/iris/manager/edit/BlockSignal.java
Normal file
48
src/main/java/com/volmit/iris/manager/edit/BlockSignal.java
Normal file
@@ -0,0 +1,48 @@
|
||||
package com.volmit.iris.manager.edit;
|
||||
|
||||
import com.volmit.iris.util.J;
|
||||
import com.volmit.iris.scaffold.parallel.MultiBurst;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class BlockSignal {
|
||||
public static void of(Block block, int ticks)
|
||||
{
|
||||
new BlockSignal(block, ticks);
|
||||
}
|
||||
|
||||
public static void of(Block block)
|
||||
{
|
||||
of(block, 100);
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
MultiBurst.burst.lazy(() -> {
|
||||
for(Player i : block.getWorld().getPlayers())
|
||||
{
|
||||
i.sendBlockChange(block.getLocation(), block.getBlockData());
|
||||
}
|
||||
});
|
||||
}, ticks);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package com.volmit.iris.manager.edit;
|
||||
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
import com.volmit.iris.util.M;
|
||||
|
||||
public class BukkitBlockEditor implements BlockEditor
|
||||
{
|
||||
private final World world;
|
||||
|
||||
public BukkitBlockEditor(World world)
|
||||
{
|
||||
this.world = world;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void set(int x, int y, int z, BlockData d)
|
||||
{
|
||||
world.getBlockAt(x, y, z).setBlockData(d, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockData get(int x, int y, int z)
|
||||
{
|
||||
return world.getBlockAt(x, y, z).getBlockData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public long last()
|
||||
{
|
||||
return M.ms();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void setBiome(int x, int z, Biome b)
|
||||
{
|
||||
world.setBiome(x, z, b);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBiome(int x, int y, int z, Biome b)
|
||||
{
|
||||
world.setBiome(x, y, z, b);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Biome getBiome(int x, int y, int z)
|
||||
{
|
||||
return world.getBiome(x, y, z);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public Biome getBiome(int x, int z)
|
||||
{
|
||||
return world.getBiome(x, z);
|
||||
}
|
||||
}
|
||||
92
src/main/java/com/volmit/iris/manager/edit/DustRevealer.java
Normal file
92
src/main/java/com/volmit/iris/manager/edit/DustRevealer.java
Normal file
@@ -0,0 +1,92 @@
|
||||
package com.volmit.iris.manager.edit;
|
||||
|
||||
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.scaffold.engine.EngineCompositeGenerator;
|
||||
import com.volmit.iris.scaffold.parallax.ParallaxAccess;
|
||||
import lombok.Data;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
package com.volmit.iris.manager.edit;
|
||||
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
import com.sk89q.worldedit.EditSession;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||
import com.sk89q.worldedit.math.BlockVector2;
|
||||
import com.sk89q.worldedit.math.BlockVector3;
|
||||
import com.sk89q.worldedit.world.biome.BiomeTypes;
|
||||
import com.volmit.iris.util.M;
|
||||
|
||||
public class WEBlockEditor implements BlockEditor
|
||||
{
|
||||
private final World world;
|
||||
private final EditSession es;
|
||||
private long last;
|
||||
|
||||
public WEBlockEditor(World world)
|
||||
{
|
||||
last = M.ms();
|
||||
this.world = world;
|
||||
es = WorldEdit.getInstance().newEditSessionBuilder().world(BukkitAdapter.adapt(world)).build();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setBiome(int x, int z, Biome b)
|
||||
{
|
||||
es.setBiome(BlockVector2.at(x, z), BiomeTypes.get("minecraft:" + b.name().toLowerCase()));
|
||||
}
|
||||
|
||||
public void setBiome(int x, int y, int z, Biome b)
|
||||
{
|
||||
es.setBiome(BlockVector3.at(x, y, z), BiomeTypes.get("minecraft:" + b.name().toLowerCase()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void set(int x, int y, int z, BlockData d)
|
||||
{
|
||||
es.rawSetBlock(BlockVector3.at(x, y, z), BukkitAdapter.adapt(d));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockData get(int x, int y, int z)
|
||||
{
|
||||
return world.getBlockAt(x, y, z).getBlockData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close()
|
||||
{
|
||||
es.close();
|
||||
return;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long last()
|
||||
{
|
||||
return last;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Biome getBiome(int x, int y, int z)
|
||||
{
|
||||
return world.getBiome(x, y, z);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public Biome getBiome(int x, int z)
|
||||
{
|
||||
return world.getBiome(x, z);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user