Forcefully shove stuff into other stuff

This commit is contained in:
Daniel Mills
2020-11-10 00:49:28 -05:00
parent 50ffcceaf4
commit 4fc8a5ad0c
364 changed files with 2975 additions and 5303 deletions

View 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);
}

View 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);
}
}

View File

@@ -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);
}
}

View 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);
}
}

View File

@@ -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);
}
}