mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-08-29 13:20:32 +00:00
add LootPopulateEvent
This commit is contained in:
+9
-4
@@ -1,6 +1,5 @@
|
|||||||
package com.dfsek.terra.api.event.events.world;
|
package com.dfsek.terra.api.event.events.world;
|
||||||
|
|
||||||
import com.dfsek.terra.api.event.events.Event;
|
|
||||||
import com.dfsek.terra.api.event.events.PackEvent;
|
import com.dfsek.terra.api.event.events.PackEvent;
|
||||||
import com.dfsek.terra.config.pack.ConfigPack;
|
import com.dfsek.terra.config.pack.ConfigPack;
|
||||||
import com.dfsek.terra.config.pack.WorldConfig;
|
import com.dfsek.terra.config.pack.WorldConfig;
|
||||||
@@ -9,18 +8,24 @@ import com.dfsek.terra.world.TerraWorld;
|
|||||||
/**
|
/**
|
||||||
* Called upon initialization of a TerraWorld.
|
* Called upon initialization of a TerraWorld.
|
||||||
*/
|
*/
|
||||||
public class TerraWorldLoadEvent implements Event {
|
public class TerraWorldLoadEvent implements PackEvent {
|
||||||
private final TerraWorld world;
|
private final TerraWorld world;
|
||||||
|
private final ConfigPack pack;
|
||||||
|
|
||||||
public TerraWorldLoadEvent(TerraWorld world) {
|
public TerraWorldLoadEvent(TerraWorld world, ConfigPack pack) {
|
||||||
this.world = world;
|
this.world = world;
|
||||||
|
this.pack = pack;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TerraWorld getWorld() {
|
public TerraWorld getWorld() {
|
||||||
return world;
|
return world;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WorldConfig getPack() {
|
public ConfigPack getPack() {
|
||||||
|
return pack;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WorldConfig getWorldConfig() {
|
||||||
return world.getConfig();
|
return world.getConfig();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+56
@@ -0,0 +1,56 @@
|
|||||||
|
package com.dfsek.terra.api.event.events.world.generation;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.event.events.Cancellable;
|
||||||
|
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.structure.buffer.items.BufferedLootApplication;
|
||||||
|
import com.dfsek.terra.api.util.mutable.MutableBoolean;
|
||||||
|
import com.dfsek.terra.config.pack.ConfigPack;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when loot is populated via {@link BufferedLootApplication}.
|
||||||
|
*/
|
||||||
|
public class LootPopulateEvent implements PackEvent, Cancellable {
|
||||||
|
private final Block block;
|
||||||
|
private final Container container;
|
||||||
|
private final ConfigPack pack;
|
||||||
|
private final MutableBoolean cancelled = new MutableBoolean();
|
||||||
|
|
||||||
|
public LootPopulateEvent(Block block, Container container, ConfigPack pack) {
|
||||||
|
this.block = block;
|
||||||
|
this.container = container;
|
||||||
|
this.pack = pack;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConfigPack getPack() {
|
||||||
|
return pack;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the block containing the tile entity loot is applied to.
|
||||||
|
* @return Block at which loot is applied.
|
||||||
|
*/
|
||||||
|
public Block getBlock() {
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the {@link Container} representing the inventory.
|
||||||
|
* @return Inventory recieving loot.
|
||||||
|
*/
|
||||||
|
public Container getContainer() {
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean cancelled) {
|
||||||
|
this.cancelled.set(cancelled);
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
-1
@@ -1,7 +1,9 @@
|
|||||||
package com.dfsek.terra.api.structures.structure.buffer.items;
|
package com.dfsek.terra.api.structures.structure.buffer.items;
|
||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
|
import com.dfsek.terra.api.event.events.world.generation.LootPopulateEvent;
|
||||||
import com.dfsek.terra.api.math.vector.Location;
|
import com.dfsek.terra.api.math.vector.Location;
|
||||||
|
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.BlockState;
|
||||||
import com.dfsek.terra.api.platform.block.state.Container;
|
import com.dfsek.terra.api.platform.block.state.Container;
|
||||||
import com.dfsek.terra.api.structures.loot.LootTable;
|
import com.dfsek.terra.api.structures.loot.LootTable;
|
||||||
@@ -19,12 +21,18 @@ public class BufferedLootApplication implements BufferedItem {
|
|||||||
@Override
|
@Override
|
||||||
public void paste(Location origin) {
|
public void paste(Location origin) {
|
||||||
try {
|
try {
|
||||||
BlockState data = origin.getBlock().getState();
|
Block block = origin.getBlock();
|
||||||
|
BlockState data = block.getState();
|
||||||
if(!(data instanceof Container)) {
|
if(!(data instanceof Container)) {
|
||||||
main.logger().severe("Failed to place loot at " + origin + "; block " + data + " is not container.");
|
main.logger().severe("Failed to place loot at " + origin + "; block " + data + " is not container.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Container container = (Container) data;
|
Container container = (Container) data;
|
||||||
|
|
||||||
|
LootPopulateEvent event = new LootPopulateEvent(block, container, main.getWorld(block.getLocation().getWorld()).getGenerator().getConfigPack());
|
||||||
|
main.getEventManager().callEvent(event);
|
||||||
|
if(event.isCancelled()) return;
|
||||||
|
|
||||||
table.fillInventory(container.getInventory(), new FastRandom(origin.hashCode()));
|
table.fillInventory(container.getInventory(), new FastRandom(origin.hashCode()));
|
||||||
data.update(false);
|
data.update(false);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public class TerraWorld {
|
|||||||
this.provider = config.getProvider();
|
this.provider = config.getProvider();
|
||||||
profiler = new WorldProfiler(w);
|
profiler = new WorldProfiler(w);
|
||||||
air = main.getWorldHandle().createBlockData("minecraft:air");
|
air = main.getWorldHandle().createBlockData("minecraft:air");
|
||||||
main.getEventManager().callEvent(new TerraWorldLoadEvent(this));
|
main.getEventManager().callEvent(new TerraWorldLoadEvent(this, c));
|
||||||
safe = true;
|
safe = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user