diff --git a/common/src/main/java/com/dfsek/terra/api/event/events/world/generation/LootPopulateEvent.java b/common/src/main/java/com/dfsek/terra/api/event/events/world/generation/LootPopulateEvent.java index 5ff80ed0c..cb3735017 100644 --- a/common/src/main/java/com/dfsek/terra/api/event/events/world/generation/LootPopulateEvent.java +++ b/common/src/main/java/com/dfsek/terra/api/event/events/world/generation/LootPopulateEvent.java @@ -6,6 +6,7 @@ import com.dfsek.terra.api.event.events.PackEvent; import com.dfsek.terra.api.platform.block.Block; import com.dfsek.terra.api.platform.block.state.Container; import com.dfsek.terra.api.structures.loot.LootTable; +import com.dfsek.terra.api.structures.script.StructureScript; import com.dfsek.terra.api.structures.structure.buffer.items.BufferedLootApplication; import com.dfsek.terra.config.pack.ConfigPack; import org.jetbrains.annotations.NotNull; @@ -18,12 +19,14 @@ public class LootPopulateEvent extends AbstractCancellable implements PackEvent, private final Container container; private LootTable table; private final ConfigPack pack; + private final StructureScript script; - public LootPopulateEvent(Block block, Container container, LootTable table, ConfigPack pack) { + public LootPopulateEvent(Block block, Container container, LootTable table, ConfigPack pack, StructureScript script) { this.block = block; this.container = container; this.table = table; this.pack = pack; + this.script = script; } @Override @@ -59,9 +62,19 @@ public class LootPopulateEvent extends AbstractCancellable implements PackEvent, /** * Set the loot table to be populated. + * * @param table New loot table. */ public void setTable(@NotNull LootTable table) { this.table = table; } + + /** + * Get the script used to generate the structure. + * + * @return Structure script. + */ + public StructureScript getStructureScript() { + return script; + } } diff --git a/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java b/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java index 391713edb..108b3b101 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java @@ -68,7 +68,7 @@ public class StructureScript { .registerFunction("setMark", new SetMarkFunctionBuilder()) .registerFunction("getMark", new GetMarkFunctionBuilder()) .registerFunction("pull", new PullFunctionBuilder(main)) - .registerFunction("loot", new LootFunctionBuilder(main, lootRegistry)) + .registerFunction("loot", new LootFunctionBuilder(main, lootRegistry, this)) .registerFunction("entity", new EntityFunctionBuilder(main)) .registerFunction("getBiome", new BiomeFunctionBuilder(main)) .registerFunction("getBlock", new CheckBlockFunctionBuilder()) diff --git a/common/src/main/java/com/dfsek/terra/api/structures/script/builders/LootFunctionBuilder.java b/common/src/main/java/com/dfsek/terra/api/structures/script/builders/LootFunctionBuilder.java index fe4634848..d5e46d9d3 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/script/builders/LootFunctionBuilder.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/script/builders/LootFunctionBuilder.java @@ -3,6 +3,7 @@ package com.dfsek.terra.api.structures.script.builders; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.structures.parser.lang.Returnable; import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder; +import com.dfsek.terra.api.structures.script.StructureScript; import com.dfsek.terra.api.structures.script.functions.LootFunction; import com.dfsek.terra.api.structures.tokenizer.Position; import com.dfsek.terra.registry.config.LootRegistry; @@ -12,16 +13,18 @@ import java.util.List; public class LootFunctionBuilder implements FunctionBuilder { private final TerraPlugin main; private final LootRegistry registry; + private final StructureScript script; - public LootFunctionBuilder(TerraPlugin main, LootRegistry registry) { + public LootFunctionBuilder(TerraPlugin main, LootRegistry registry, StructureScript script) { this.main = main; this.registry = registry; + this.script = script; } @SuppressWarnings("unchecked") @Override public LootFunction build(List> argumentList, Position position) { - return new LootFunction(registry, (Returnable) argumentList.get(0), (Returnable) argumentList.get(1), (Returnable) argumentList.get(2), (Returnable) argumentList.get(3), main, position); + return new LootFunction(registry, (Returnable) argumentList.get(0), (Returnable) argumentList.get(1), (Returnable) argumentList.get(2), (Returnable) argumentList.get(3), main, position, script); } @Override diff --git a/common/src/main/java/com/dfsek/terra/api/structures/script/functions/LootFunction.java b/common/src/main/java/com/dfsek/terra/api/structures/script/functions/LootFunction.java index 353294c73..42add8070 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/script/functions/LootFunction.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/script/functions/LootFunction.java @@ -8,6 +8,7 @@ import com.dfsek.terra.api.structures.parser.lang.ImplementationArguments; 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.variables.Variable; +import com.dfsek.terra.api.structures.script.StructureScript; import com.dfsek.terra.api.structures.script.TerraImplementationArguments; import com.dfsek.terra.api.structures.structure.RotationUtil; import com.dfsek.terra.api.structures.structure.buffer.items.BufferedLootApplication; @@ -23,8 +24,9 @@ public class LootFunction implements Function { private final Returnable x, y, z; private final Position position; private final TerraPlugin main; + private final StructureScript script; - public LootFunction(LootRegistry registry, Returnable x, Returnable y, Returnable z, Returnable data, TerraPlugin main, Position position) { + public LootFunction(LootRegistry registry, Returnable x, Returnable y, Returnable z, Returnable data, TerraPlugin main, Position position, StructureScript script) { this.registry = registry; this.position = position; this.data = data; @@ -32,6 +34,7 @@ public class LootFunction implements Function { this.y = y; this.z = z; this.main = main; + this.script = script; } @Override @@ -49,7 +52,7 @@ public class LootFunction implements Function { return null; } - arguments.getBuffer().addItem(new BufferedLootApplication(table, main), new Vector3(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).intValue(), FastMath.roundToInt(xz.getZ())).toLocation(arguments.getBuffer().getOrigin().getWorld())); + arguments.getBuffer().addItem(new BufferedLootApplication(table, main, script), new Vector3(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments, variableMap).intValue(), FastMath.roundToInt(xz.getZ())).toLocation(arguments.getBuffer().getOrigin().getWorld())); return null; } diff --git a/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedLootApplication.java b/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedLootApplication.java index 80ae6afd8..a2c474a08 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedLootApplication.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/structure/buffer/items/BufferedLootApplication.java @@ -7,15 +7,18 @@ import com.dfsek.terra.api.platform.block.Block; import com.dfsek.terra.api.platform.block.state.BlockState; import com.dfsek.terra.api.platform.block.state.Container; import com.dfsek.terra.api.structures.loot.LootTable; +import com.dfsek.terra.api.structures.script.StructureScript; import com.dfsek.terra.api.util.FastRandom; public class BufferedLootApplication implements BufferedItem { private final LootTable table; private final TerraPlugin main; + private final StructureScript structure; - public BufferedLootApplication(LootTable table, TerraPlugin main) { + public BufferedLootApplication(LootTable table, TerraPlugin main, StructureScript structure) { this.table = table; this.main = main; + this.structure = structure; } @Override @@ -29,7 +32,7 @@ public class BufferedLootApplication implements BufferedItem { } Container container = (Container) data; - LootPopulateEvent event = new LootPopulateEvent(block, container, table, main.getWorld(block.getLocation().getWorld()).getGenerator().getConfigPack()); + LootPopulateEvent event = new LootPopulateEvent(block, container, table, main.getWorld(block.getLocation().getWorld()).getGenerator().getConfigPack(), structure); main.getEventManager().callEvent(event); if(event.isCancelled()) return;