From d5cd8fa485c847827630f2635386b618252b0dfb Mon Sep 17 00:00:00 2001 From: "TrenTech@gmail.com" Date: Thu, 26 May 2016 21:46:57 -0400 Subject: [PATCH] Fix cause error when spawning entities Small raw data changes. --- .gitignore | 20 ++++++++-- .project | 18 +++++++++ build.gradle | 4 +- .../treedestroyage/TreeDetector.java | 19 ++++++---- .../commands/SetConfigCommand.java | 1 - .../event/BreakBlockHandler.java | 37 +++++++++++-------- .../event/SaplingProtectionHandler.java | 22 ++++++----- 7 files changed, 81 insertions(+), 40 deletions(-) create mode 100644 .project diff --git a/.gitignore b/.gitignore index eb0e9dc..cca8d7e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,16 @@ -*.iml -.gradle/* -.idea/* -build/* +.classpath +.gradle +*.settings +/build +/bin + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* diff --git a/.project b/.project new file mode 100644 index 0000000..3d6a7b0 --- /dev/null +++ b/.project @@ -0,0 +1,18 @@ + + + TreeDestroyage + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.springsource.ide.eclipse.gradle.core.nature + org.eclipse.jdt.core.javanature + + diff --git a/build.gradle b/build.gradle index 887ffdc..de2b0b3 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ group 'mineguild.net' ext.versionCode = System.getenv("BUILD_NUMBER") as Integer ?: 0 -ext.versionName = "0.8-DEV-API4.0.3" +ext.versionName = "0.8-DEV-API4.1.0" version "${versionName}-${versionCode}" @@ -29,7 +29,7 @@ repositories { } dependencies { - compile 'org.spongepowered:spongeapi:4.0.3' + compile 'org.spongepowered:spongeapi:4.1.0-SNAPSHOT' compile 'net.minecrell.mcstats:statslite-sponge:0.2.2' } diff --git a/src/main/java/net/mineguild/minecraft/treedestroyage/TreeDetector.java b/src/main/java/net/mineguild/minecraft/treedestroyage/TreeDetector.java index a401e7c..ca7467a 100644 --- a/src/main/java/net/mineguild/minecraft/treedestroyage/TreeDetector.java +++ b/src/main/java/net/mineguild/minecraft/treedestroyage/TreeDetector.java @@ -1,17 +1,20 @@ package net.mineguild.minecraft.treedestroyage; -import com.flowpowered.math.vector.Vector3d; -import com.google.common.collect.Lists; -import ninja.leaping.configurate.ConfigurationNode; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + import org.spongepowered.api.block.BlockSnapshot; import org.spongepowered.api.block.BlockTypes; import org.spongepowered.api.data.key.Keys; import org.spongepowered.api.data.type.TreeType; import org.spongepowered.api.world.Location; +import org.spongepowered.api.world.World; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; +import com.flowpowered.math.vector.Vector3d; +import com.google.common.collect.Lists; + +import ninja.leaping.configurate.ConfigurationNode; public class TreeDetector { @@ -66,7 +69,7 @@ private void getWoodLocations(BlockSnapshot startBlock) { locations.add(startBlock.getLocation().get().getPosition()); // Checking all DIRECTIONS for (Vector3d dir : DIRECTIONS) { - Location nextBlock = startBlock.getLocation().get().add(dir); + Location nextBlock = startBlock.getLocation().get().add(dir); if (!locations.contains(nextBlock.getPosition())) { getWoodLocations(nextBlock.getBlock().snapshotFor(nextBlock)); lastDirection = dir; @@ -84,7 +87,7 @@ private void extendedCheck(BlockSnapshot startBlock) { inExtended = true; for (Vector3d dir : DIRECTIONS) { if (!dir.equals(lastDirection)) { // Don't allow a ONE BLOCK gap between// primitive check.. - Location nextBlock = startBlock.getLocation().get().add(dir); + Location nextBlock = startBlock.getLocation().get().add(dir); if (!locations.contains(nextBlock.getPosition())) { getWoodLocations(nextBlock.getBlock().snapshotFor(nextBlock)); lastDirection = dir; diff --git a/src/main/java/net/mineguild/minecraft/treedestroyage/commands/SetConfigCommand.java b/src/main/java/net/mineguild/minecraft/treedestroyage/commands/SetConfigCommand.java index d41b4ba..92cf9ae 100644 --- a/src/main/java/net/mineguild/minecraft/treedestroyage/commands/SetConfigCommand.java +++ b/src/main/java/net/mineguild/minecraft/treedestroyage/commands/SetConfigCommand.java @@ -20,7 +20,6 @@ import java.util.List; import java.util.Optional; -@SuppressWarnings("NullableProblems") public class SetConfigCommand implements CommandExecutor { private TreeDestroyage plugin; diff --git a/src/main/java/net/mineguild/minecraft/treedestroyage/event/BreakBlockHandler.java b/src/main/java/net/mineguild/minecraft/treedestroyage/event/BreakBlockHandler.java index 5eba962..6ff3bba 100644 --- a/src/main/java/net/mineguild/minecraft/treedestroyage/event/BreakBlockHandler.java +++ b/src/main/java/net/mineguild/minecraft/treedestroyage/event/BreakBlockHandler.java @@ -1,12 +1,11 @@ package net.mineguild.minecraft.treedestroyage.event; -import com.flowpowered.math.vector.Vector3d; -import com.google.common.collect.Lists; -import com.google.common.reflect.TypeToken; -import net.mineguild.minecraft.treedestroyage.TreeDestroyage; -import net.mineguild.minecraft.treedestroyage.TreeDetector; -import ninja.leaping.configurate.ConfigurationNode; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + import org.spongepowered.api.Game; import org.spongepowered.api.Sponge; import org.spongepowered.api.block.BlockSnapshot; @@ -24,13 +23,21 @@ import org.spongepowered.api.event.SpongeEventFactory; import org.spongepowered.api.event.block.ChangeBlockEvent; import org.spongepowered.api.event.cause.Cause; +import org.spongepowered.api.event.cause.NamedCause; +import org.spongepowered.api.event.cause.entity.spawn.EntitySpawnCause; +import org.spongepowered.api.event.cause.entity.spawn.SpawnTypes; +import org.spongepowered.api.event.filter.cause.First; import org.spongepowered.api.item.inventory.ItemStack; import org.spongepowered.api.world.Location; import org.spongepowered.api.world.World; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; +import com.flowpowered.math.vector.Vector3d; +import com.google.common.collect.Lists; +import com.google.common.reflect.TypeToken; + +import net.mineguild.minecraft.treedestroyage.TreeDestroyage; +import net.mineguild.minecraft.treedestroyage.TreeDetector; +import ninja.leaping.configurate.ConfigurationNode; public class BreakBlockHandler { @@ -43,7 +50,7 @@ public BreakBlockHandler(TreeDestroyage plugin) { } @Listener - public void handle(ChangeBlockEvent.Break breakEvent) throws Exception { + public void handle(ChangeBlockEvent.Break breakEvent, @First Player cause) throws Exception { if (breakEvent.getTransactions().size() > 1) { return; } @@ -55,7 +62,7 @@ public void handle(ChangeBlockEvent.Break breakEvent) throws Exception { if (!firedEvents.contains(breakEvent) && breakEvent.getCause().containsType(Player.class) && getConfig().getNode("enabled").getBoolean(true) && !breakEvent.isCancelled() && TreeDetector.isWood(transaction.getOriginal())) { TreeType treeType = transaction.getOriginal().getState().get(Keys.TREE_TYPE).get(); - Player cause = breakEvent.getCause().first(Player.class).get(); + Optional inHand = cause.getItemInHand(); List items = getConfig().getNode("items").getList(TypeToken.of(String.class)); final boolean consumeDurability = getConfig().getNode("consumeDurability").getBoolean(); @@ -91,7 +98,7 @@ public void handle(ChangeBlockEvent.Break breakEvent) throws Exception { }); transactions.forEach(blockSnapshotTransaction -> { ChangeBlockEvent.Break event = SpongeEventFactory.createChangeBlockEventBreak(Cause.builder().owner(cause).build(), - cause.getWorld(), Lists.newArrayList(blockSnapshotTransaction)); + cause.getWorld(), Arrays.asList(blockSnapshotTransaction)); firedEvents.add(event); if (!getGame().getEventManager().post(event)) { if (cause.getGameModeData().get(Keys.GAME_MODE).get() != GameModes.CREATIVE) { @@ -101,7 +108,7 @@ public void handle(ChangeBlockEvent.Break breakEvent) throws Exception { itemStack.offer(Keys.TREE_TYPE, state.get(Keys.TREE_TYPE).get()); Entity entity = cause.getWorld().createEntity(EntityTypes.ITEM, blockSnapshotTransaction.getOriginal().getPosition()).get(); // 'cause' is the player entity.offer(Keys.REPRESENTED_ITEM, itemStack.createSnapshot()); - cause.getWorld().spawnEntity(entity, Cause.builder().owner(cause).build()); + cause.getWorld().spawnEntity(entity, Cause.of(NamedCause.source(EntitySpawnCause.builder().entity(entity).type(SpawnTypes.PLUGIN).build()))); if (consumeDurability && item.supports(Keys.ITEM_DURABILITY)) { if (item.get(Keys.ITEM_DURABILITY).get() == 0) { cause.getWorld().playSound(SoundTypes.ITEM_BREAK, cause.getLocation().getPosition(), 1); @@ -128,7 +135,7 @@ public void handle(ChangeBlockEvent.Break breakEvent) throws Exception { } private void placeSapling(Player c, Location treeBlock, TreeType treeType) { - Location baseBlock = treeBlock.sub(Vector3d.UP); + Location baseBlock = treeBlock.sub(Vector3d.UP); // Not yet implemented /*Optional saplingSnapshot = ItemTypes.SAPLING.getTemplate().with(Keys.TREE_TYPE, treeType); if(saplingSnapshot.isPresent()){ @@ -164,7 +171,7 @@ private void placeSapling(Player c, Location treeBlock, TreeType treeType } - private Location findBase(Location startLocation){ + private Location findBase(Location startLocation){ while(!(startLocation.getBlockType() == BlockTypes.DIRT || startLocation.getBlockType() == BlockTypes.GRASS)){ startLocation = startLocation.sub(Vector3d.UP); } diff --git a/src/main/java/net/mineguild/minecraft/treedestroyage/event/SaplingProtectionHandler.java b/src/main/java/net/mineguild/minecraft/treedestroyage/event/SaplingProtectionHandler.java index 1e7c6d0..079cbfb 100644 --- a/src/main/java/net/mineguild/minecraft/treedestroyage/event/SaplingProtectionHandler.java +++ b/src/main/java/net/mineguild/minecraft/treedestroyage/event/SaplingProtectionHandler.java @@ -1,8 +1,10 @@ package net.mineguild.minecraft.treedestroyage.event; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import net.mineguild.minecraft.treedestroyage.TreeDestroyage; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; +import java.util.concurrent.TimeUnit; + import org.spongepowered.api.Sponge; import org.spongepowered.api.block.BlockTypes; import org.spongepowered.api.entity.living.player.Player; @@ -12,10 +14,10 @@ import org.spongepowered.api.world.Location; import org.spongepowered.api.world.World; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.TimeUnit; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import net.mineguild.minecraft.treedestroyage.TreeDestroyage; public class SaplingProtectionHandler { private TreeDestroyage plugin; @@ -28,10 +30,10 @@ public SaplingProtectionHandler(TreeDestroyage plugin) { public void activate(){ Sponge.getScheduler().createTaskBuilder().interval(10, TimeUnit.SECONDS).execute(() -> { - List toRemove = Lists.newArrayListWithExpectedSize(protectedSaplings.size()); - for (Map.Entry sapling : protectedSaplings.entrySet()) { + List> toRemove = Lists.newArrayListWithExpectedSize(protectedSaplings.size()); + for (Entry, Long> sapling : protectedSaplings.entrySet()) { if((System.currentTimeMillis() - (long)sapling.getValue()) / 1000 >= plugin.getConfig().getNode("saplingProtection").getInt()){ - toRemove.add((Location) sapling.getKey()); + toRemove.add(sapling.getKey()); } } toRemove.forEach(location -> protectedSaplings.remove(location));