mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-02-16 10:30:42 +00:00
Pass rotation to Item#apply
This commit is contained in:
@@ -3,6 +3,7 @@ package com.dfsek.terra.api.structures.parser.lang;
|
||||
import com.dfsek.terra.api.math.vector.Location;
|
||||
import com.dfsek.terra.api.platform.world.Chunk;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -20,14 +21,14 @@ public class Block implements Item<Void> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Location location) {
|
||||
items.forEach(item -> item.apply(location));
|
||||
public Void apply(Location location, Rotation rotation) {
|
||||
items.forEach(item -> item.apply(location, rotation));
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Location location, Chunk chunk) {
|
||||
items.forEach(item -> item.apply(location, chunk));
|
||||
public Void apply(Location location, Chunk chunk, Rotation rotation) {
|
||||
items.forEach(item -> item.apply(location, chunk, rotation));
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,11 +3,12 @@ package com.dfsek.terra.api.structures.parser.lang;
|
||||
import com.dfsek.terra.api.math.vector.Location;
|
||||
import com.dfsek.terra.api.platform.world.Chunk;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
|
||||
public interface Item<T> {
|
||||
T apply(Location location);
|
||||
T apply(Location location, Rotation rotation);
|
||||
|
||||
T apply(Location location, Chunk chunk);
|
||||
T apply(Location location, Chunk chunk, Rotation rotation);
|
||||
|
||||
Position getPosition();
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.dfsek.terra.api.math.vector.Location;
|
||||
import com.dfsek.terra.api.platform.world.Chunk;
|
||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
|
||||
public abstract class ConstantExpression<T> implements Returnable<T> {
|
||||
private final T constant;
|
||||
@@ -15,13 +16,13 @@ public abstract class ConstantExpression<T> implements Returnable<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public T apply(Location location) {
|
||||
public T apply(Location location, Rotation rotation) {
|
||||
return constant;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public T apply(Location location, Chunk chunk) {
|
||||
public T apply(Location location, Chunk chunk, Rotation rotation) {
|
||||
return constant;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.dfsek.terra.api.structures.parser.lang.Block;
|
||||
import com.dfsek.terra.api.structures.parser.lang.Keyword;
|
||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
|
||||
public class IfKeyword implements Keyword<Void> {
|
||||
private final Block conditional;
|
||||
@@ -19,14 +20,14 @@ public class IfKeyword implements Keyword<Void> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Location location) {
|
||||
if(statement.apply(location)) conditional.apply(location);
|
||||
public Void apply(Location location, Rotation rotation) {
|
||||
if(statement.apply(location, rotation)) conditional.apply(location, rotation);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Location location, Chunk chunk) {
|
||||
if(statement.apply(location, chunk)) conditional.apply(location, chunk);
|
||||
public Void apply(Location location, Chunk chunk, Rotation rotation) {
|
||||
if(statement.apply(location, chunk, rotation)) conditional.apply(location, chunk, rotation);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.dfsek.terra.api.math.vector.Location;
|
||||
import com.dfsek.terra.api.platform.world.Chunk;
|
||||
import com.dfsek.terra.api.structures.parser.lang.Keyword;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
|
||||
public class ReturnKeyword implements Keyword<Void> {
|
||||
private final Position position;
|
||||
@@ -13,12 +14,12 @@ public class ReturnKeyword implements Keyword<Void> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Location location) {
|
||||
public Void apply(Location location, Rotation rotation) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Location location, Chunk chunk) {
|
||||
public Void apply(Location location, Chunk chunk, Rotation rotation) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.dfsek.terra.api.structures.parser.lang.Block;
|
||||
import com.dfsek.terra.api.structures.parser.lang.Keyword;
|
||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
|
||||
public class WhileKeyword implements Keyword<Void> {
|
||||
private final Block conditional;
|
||||
@@ -19,14 +20,14 @@ public class WhileKeyword implements Keyword<Void> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Location location) {
|
||||
while(statement.apply(location)) conditional.apply(location);
|
||||
public Void apply(Location location, Rotation rotation) {
|
||||
while(statement.apply(location, rotation)) conditional.apply(location, rotation);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Location location, Chunk chunk) {
|
||||
while(statement.apply(location, chunk)) conditional.apply(location, chunk);
|
||||
public Void apply(Location location, Chunk chunk, Rotation rotation) {
|
||||
while(statement.apply(location, chunk, rotation)) conditional.apply(location, chunk, rotation);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.dfsek.terra.api.math.vector.Location;
|
||||
import com.dfsek.terra.api.platform.world.Chunk;
|
||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
|
||||
public abstract class BinaryOperation<I, O> implements Returnable<O> {
|
||||
private final Returnable<I> left;
|
||||
@@ -24,12 +25,12 @@ public abstract class BinaryOperation<I, O> implements Returnable<O> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public O apply(Location location) {
|
||||
return apply(left.apply(location), right.apply(location));
|
||||
public O apply(Location location, Rotation rotation) {
|
||||
return apply(left.apply(location, rotation), right.apply(location, rotation));
|
||||
}
|
||||
|
||||
@Override
|
||||
public O apply(Location location, Chunk chunk) {
|
||||
return apply(left.apply(location, chunk), right.apply(location, chunk));
|
||||
public O apply(Location location, Chunk chunk, Rotation rotation) {
|
||||
return apply(left.apply(location, chunk, rotation), right.apply(location, chunk, rotation));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.dfsek.terra.api.math.vector.Location;
|
||||
import com.dfsek.terra.api.platform.world.Chunk;
|
||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
|
||||
public abstract class UnaryOperation<T> implements Returnable<T> {
|
||||
private final Returnable<T> input;
|
||||
@@ -17,13 +18,13 @@ public abstract class UnaryOperation<T> implements Returnable<T> {
|
||||
public abstract T apply(T input);
|
||||
|
||||
@Override
|
||||
public T apply(Location location) {
|
||||
return apply(input.apply(location));
|
||||
public T apply(Location location, Rotation rotation) {
|
||||
return apply(input.apply(location, rotation));
|
||||
}
|
||||
|
||||
@Override
|
||||
public T apply(Location location, Chunk chunk) {
|
||||
return apply(input.apply(location, chunk));
|
||||
public T apply(Location location, Chunk chunk, Rotation rotation) {
|
||||
return apply(input.apply(location, chunk, rotation));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.dfsek.terra.api.platform.world.Chunk;
|
||||
import com.dfsek.terra.api.structures.parser.lang.Item;
|
||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
|
||||
public class Assignment<T> implements Item<T> {
|
||||
private final Variable<T> delegate;
|
||||
@@ -18,15 +19,15 @@ public class Assignment<T> implements Item<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public T apply(Location location) {
|
||||
T val = value.apply(location);
|
||||
public T apply(Location location, Rotation rotation) {
|
||||
T val = value.apply(location, rotation);
|
||||
delegate.setValue(val);
|
||||
return val;
|
||||
}
|
||||
|
||||
@Override
|
||||
public T apply(Location location, Chunk chunk) {
|
||||
T val = value.apply(location, chunk);
|
||||
public T apply(Location location, Chunk chunk, Rotation rotation) {
|
||||
T val = value.apply(location, chunk, rotation);
|
||||
delegate.setValue(val);
|
||||
return val;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.dfsek.terra.api.math.vector.Location;
|
||||
import com.dfsek.terra.api.platform.world.Chunk;
|
||||
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
|
||||
public class Getter implements Returnable<Object> {
|
||||
private final Variable<?> delegate;
|
||||
@@ -18,12 +19,12 @@ public class Getter implements Returnable<Object> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object apply(Location location) {
|
||||
public Object apply(Location location, Rotation rotation) {
|
||||
return delegate.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object apply(Location location, Chunk chunk) {
|
||||
public Object apply(Location location, Chunk chunk, Rotation rotation) {
|
||||
return delegate.getValue();
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||
import com.dfsek.terra.api.structures.parser.lang.constants.ConstantExpression;
|
||||
import com.dfsek.terra.api.structures.parser.lang.functions.Function;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
|
||||
public class BlockFunction implements Function<Void> {
|
||||
private final BlockData data;
|
||||
@@ -31,13 +32,13 @@ public class BlockFunction implements Function<Void> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Location location) {
|
||||
location.clone().add(x.apply(location).intValue(), y.apply(location).intValue(), z.apply(location).intValue()).getBlock().setBlockData(data, false);
|
||||
public Void apply(Location location, Rotation rotation) {
|
||||
location.clone().add(x.apply(location, rotation).intValue(), y.apply(location, rotation).intValue(), z.apply(location, rotation).intValue()).getBlock().setBlockData(data, false);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Location location, Chunk chunk) {
|
||||
public Void apply(Location location, Chunk chunk, Rotation rotation) {
|
||||
//TODO: do
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.dfsek.terra.api.structures.parser.lang.functions.Function;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.api.structures.world.LandCheck;
|
||||
import com.dfsek.terra.api.structures.world.OceanCheck;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
|
||||
public class CheckFunction implements Function<String> {
|
||||
private final TerraPlugin main;
|
||||
@@ -29,14 +30,14 @@ public class CheckFunction implements Function<String> {
|
||||
return "check";
|
||||
}
|
||||
|
||||
private Vector3 getVector(Location location, Chunk chunk) {
|
||||
return location.clone().add(chunk == null ? new Vector3(x.apply(location).intValue(), y.apply(location).intValue(), z.apply(location).intValue())
|
||||
: new Vector3(x.apply(location, chunk).intValue(), y.apply(location, chunk).intValue(), z.apply(location, chunk).intValue())).toVector();
|
||||
private Vector3 getVector(Location location, Chunk chunk, Rotation rotation) {
|
||||
return location.clone().add(chunk == null ? new Vector3(x.apply(location, rotation).intValue(), y.apply(location, rotation).intValue(), z.apply(location, rotation).intValue())
|
||||
: new Vector3(x.apply(location, chunk, rotation).intValue(), y.apply(location, chunk, rotation).intValue(), z.apply(location, chunk, rotation).intValue())).toVector();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String apply(Location location) {
|
||||
return apply(getVector(location, null), location.getWorld());
|
||||
public String apply(Location location, Rotation rotation) {
|
||||
return apply(getVector(location, null, rotation), location.getWorld());
|
||||
}
|
||||
|
||||
private String apply(Vector3 vector, World world) {
|
||||
@@ -48,8 +49,8 @@ public class CheckFunction implements Function<String> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String apply(Location location, Chunk chunk) {
|
||||
return apply(getVector(location, chunk), location.getWorld());
|
||||
public String apply(Location location, Chunk chunk, Rotation rotation) {
|
||||
return apply(getVector(location, chunk, rotation), location.getWorld());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -142,6 +142,7 @@ public class ConfigPack implements LoaderRegistrar {
|
||||
.registerLoader(LootTable.class, new LootTableLoader(loader, main)); // These loaders need access to the Loader instance to get files.
|
||||
loader
|
||||
.open("palettes").then(streams -> buildAll(new PaletteFactory(), paletteRegistry, abstractConfigLoader.load(streams, PaletteTemplate::new), main)).close()
|
||||
.open("palettes").thenNames(names -> names.forEach(System.out::println)).close()
|
||||
.open("ores").then(streams -> buildAll(new OreFactory(), oreRegistry, abstractConfigLoader.load(streams, OreTemplate::new), main)).close()
|
||||
.open("flora").then(streams -> buildAll(new FloraFactory(), floraRegistry, abstractConfigLoader.load(streams, FloraTemplate::new), main)).close()
|
||||
.open("carving").then(streams -> buildAll(new CarverFactory(this), carverRegistry, abstractConfigLoader.load(streams, CarverTemplate::new), main)).close()
|
||||
|
||||
@@ -23,8 +23,13 @@ public abstract class Loader {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Loader thenNames(Consumer<List<String>> consumer) throws ConfigException {
|
||||
public Loader thenNames(Consumer<List<String>> consumer) {
|
||||
consumer.accept(new GlueList<>(streams.keySet()));
|
||||
System.out.println("names ^ ");
|
||||
streams.forEach((name, stream) -> {
|
||||
System.out.println(name);
|
||||
});
|
||||
System.out.println("names ^ ");
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||
import com.dfsek.terra.api.structures.parser.lang.functions.Function;
|
||||
import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder;
|
||||
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@@ -50,9 +51,9 @@ public class ParserTest {
|
||||
long t = System.nanoTime() - l;
|
||||
System.out.println("Took " + (double) t / 1000000);
|
||||
|
||||
block.apply(null);
|
||||
block.apply(null, Rotation.NONE);
|
||||
|
||||
block.apply(null);
|
||||
block.apply(null, Rotation.NONE);
|
||||
}
|
||||
|
||||
private static class Test1 implements Function<Void> {
|
||||
@@ -67,13 +68,13 @@ public class ParserTest {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Location location) {
|
||||
System.out.println("string: " + a.apply(location) + ", double: " + b.apply(location));
|
||||
public Void apply(Location location, Rotation rotation) {
|
||||
System.out.println("string: " + a.apply(location, rotation) + ", double: " + b.apply(location, rotation));
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void apply(Location location, Chunk chunk) {
|
||||
public Void apply(Location location, Chunk chunk, Rotation rotation) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.dfsek.terra.api.structures.script.builders.BlockFunctionBuilder;
|
||||
import com.dfsek.terra.api.structures.script.builders.CheckFunctionBuilder;
|
||||
import com.dfsek.terra.bukkit.BukkitWorld;
|
||||
import com.dfsek.terra.bukkit.command.DebugCommand;
|
||||
import com.dfsek.terra.structure.Rotation;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.bukkit.block.Sign;
|
||||
import org.bukkit.command.Command;
|
||||
@@ -48,7 +49,7 @@ public class LoadRawCommand extends LoadCommand implements DebugCommand {
|
||||
|
||||
System.out.println("Done parsing");
|
||||
|
||||
main.apply(new Location(new BukkitWorld(sender.getWorld()), sender.getLocation().getX(), sender.getLocation().getY(), sender.getLocation().getZ()));
|
||||
main.apply(new Location(new BukkitWorld(sender.getWorld()), sender.getLocation().getX(), sender.getLocation().getY(), sender.getLocation().getZ()), Rotation.NONE);
|
||||
|
||||
} catch(IOException | ParseException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
Reference in New Issue
Block a user