Update to 1.17

This commit is contained in:
Brokkonaut
2021-06-29 05:23:17 +02:00
parent a58206b21d
commit 9399b7062e
11 changed files with 175 additions and 19 deletions

View File

@ -4,7 +4,7 @@
<groupId>de.diddiz</groupId>
<artifactId>logblock</artifactId>
<version>1.16.5.2-SNAPSHOT</version>
<version>1.17.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>LogBlock</name>
@ -42,13 +42,13 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.16.5-R0.1-SNAPSHOT</version>
<version>1.17-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sk89q.worldedit</groupId>
<artifactId>worldedit-bukkit</artifactId>
<version>7.1.0-SNAPSHOT</version>
<version>7.2.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>

View File

@ -35,6 +35,7 @@ import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.BlockState;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Waterlogged;
import org.bukkit.block.data.type.Sign;
import org.bukkit.block.data.type.WallSign;
import org.bukkit.configuration.file.YamlConfiguration;
@ -52,6 +53,7 @@ import de.diddiz.LogBlock.blockstate.BlockStateCodecSign;
import de.diddiz.LogBlock.blockstate.BlockStateCodecs;
import de.diddiz.LogBlock.config.Config;
import de.diddiz.LogBlock.events.BlockChangePreLogEvent;
import de.diddiz.util.BukkitUtils;
import de.diddiz.util.Utils;
public class Consumer extends Thread {
@ -693,6 +695,9 @@ public class Consumer extends Thread {
if (typeBefore == null || typeBefore.getMaterial() == Material.CAVE_AIR || typeBefore.getMaterial() == Material.VOID_AIR) {
typeBefore = Bukkit.createBlockData(Material.AIR);
}
if (typeAfter == null && ((typeBefore instanceof Waterlogged && ((Waterlogged) typeBefore).isWaterlogged()) || BukkitUtils.isAlwaysWaterlogged(typeBefore.getMaterial()))) {
typeAfter = Bukkit.createBlockData(Material.WATER);
}
if (typeAfter == null || typeAfter.getMaterial() == Material.CAVE_AIR || typeAfter.getMaterial() == Material.VOID_AIR) {
typeAfter = Bukkit.createBlockData(Material.AIR);
}

View File

@ -192,7 +192,7 @@ public class LogBlock extends JavaPlugin {
if (isLogging(Logging.NATURALSTRUCTUREGROW) || isLogging(Logging.BONEMEALSTRUCTUREGROW)) {
pm.registerEvents(new StructureGrowLogging(this), this);
}
if (isLogging(Logging.GRASSGROWTH) || isLogging(Logging.MYCELIUMSPREAD) || isLogging(Logging.VINEGROWTH) || isLogging(Logging.MUSHROOMSPREAD)) {
if (isLogging(Logging.GRASSGROWTH) || isLogging(Logging.MYCELIUMSPREAD) || isLogging(Logging.VINEGROWTH) || isLogging(Logging.MUSHROOMSPREAD) || isLogging(Logging.BAMBOOGROWTH) || isLogging(Logging.DRIPSTONEGROWTH)) {
pm.registerEvents(new BlockSpreadLogging(this), this);
}
if (isLogging(Logging.DRAGONEGGTELEPORT)) {
@ -201,6 +201,9 @@ public class LogBlock extends JavaPlugin {
if (isLogging(Logging.LECTERNBOOKCHANGE)) {
pm.registerEvents(new LecternLogging(this), this);
}
if (isLogging(Logging.OXIDIZATION)) {
pm.registerEvents(new OxidizationLogging(this), this);
}
if (Config.isLoggingAnyEntities()) {
if (!WorldEditHelper.hasFullWorldEdit()) {
getLogger().severe("No compatible WorldEdit found, entity logging will not work!");

View File

@ -33,6 +33,7 @@ public enum Logging {
GRASSGROWTH,
MYCELIUMSPREAD,
VINEGROWTH,
DRIPSTONEGROWTH,
MUSHROOMSPREAD,
BAMBOOGROWTH,
WITHER(true),
@ -46,6 +47,7 @@ public enum Logging {
DAYLIGHTDETECTORINTERACT,
LECTERNBOOKCHANGE(true),
SCAFFOLDING(true),
OXIDIZATION,
SHULKER_BOX_CONTENT,
PLAYER_COMMANDS,
COMMANDBLOCK_COMMANDS,

View File

@ -885,6 +885,11 @@ class Updater {
renameMaterial("minecraft:cactus_green", Material.GREEN_DYE);
}
if (comparablePreviousMinecraftVersion.compareTo("1.17") < 0 && comparableCurrentMinecraftVersion.compareTo("1.17") >= 0) {
logblock.getLogger().info("[Updater] Upgrading Materials to 1.17");
renameMaterial("minecraft:grass_path", Material.DIRT_PATH);
}
config.set("previousMinecraftVersion", currentMinecraftVersion);
logblock.saveConfig();
}

View File

@ -5,6 +5,10 @@ import de.diddiz.LogBlock.LogBlock;
import de.diddiz.LogBlock.Logging;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.data.type.PointedDripstone;
import org.bukkit.block.data.type.PointedDripstone.Thickness;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockSpreadEvent;
@ -22,8 +26,8 @@ public class BlockSpreadLogging extends LoggingListener {
String name;
World world = event.getBlock().getWorld();
Material type = event.getSource().getType();
World world = event.getNewState().getWorld();
Material type = event.getNewState().getType();
switch (type) {
case GRASS:
@ -39,6 +43,12 @@ public class BlockSpreadLogging extends LoggingListener {
name = "MyceliumSpread";
break;
case VINE:
case CAVE_VINES:
case CAVE_VINES_PLANT:
case WEEPING_VINES:
case WEEPING_VINES_PLANT:
case TWISTING_VINES:
case TWISTING_VINES_PLANT:
if (!isLogging(world, Logging.VINEGROWTH)) {
return;
}
@ -52,7 +62,7 @@ public class BlockSpreadLogging extends LoggingListener {
name = "MushroomSpread";
break;
case BAMBOO:
case BAMBOO_SAPLING: {
case BAMBOO_SAPLING:
if (!isLogging(world, Logging.BAMBOOGROWTH)) {
return;
}
@ -62,7 +72,36 @@ public class BlockSpreadLogging extends LoggingListener {
consumer.queueBlockReplace(new Actor(name), event.getSource().getState(), Material.BAMBOO.createBlockData());
}
break;
}
case POINTED_DRIPSTONE:
if (!isLogging(world, Logging.DRIPSTONEGROWTH)) {
return;
}
name = "DripstoneGrowth";
PointedDripstone pointed = (PointedDripstone) event.getNewState().getBlockData();
if (pointed.getThickness() != Thickness.TIP_MERGE) {
BlockFace direction = pointed.getVerticalDirection();
Block previousPart = event.getBlock().getRelative(direction.getOppositeFace());
if (previousPart.getType() == Material.POINTED_DRIPSTONE) {
PointedDripstone newBelow = (PointedDripstone) previousPart.getBlockData();
newBelow.setThickness(Thickness.FRUSTUM);
consumer.queueBlockReplace(new Actor(name), previousPart.getState(), newBelow);
previousPart = previousPart.getRelative(direction.getOppositeFace());
if (previousPart.getType() == Material.POINTED_DRIPSTONE) {
Block evenMorePrevious = previousPart.getRelative(direction.getOppositeFace());
newBelow = (PointedDripstone) previousPart.getBlockData();
newBelow.setThickness(evenMorePrevious.getType() == Material.POINTED_DRIPSTONE ? Thickness.MIDDLE : Thickness.BASE);
consumer.queueBlockReplace(new Actor(name), previousPart.getState(), newBelow);
}
}
} else {
// special case because the old state is already changed (for one half)
PointedDripstone oldState = (PointedDripstone) event.getNewState().getBlockData();
oldState.setThickness(Thickness.TIP);
consumer.queueBlockReplace(new Actor(name), oldState, event.getNewState());
return;
}
break;
default:
return;
}

View File

@ -0,0 +1,28 @@
package de.diddiz.LogBlock.listeners;
import static de.diddiz.LogBlock.config.Config.isLogging;
import de.diddiz.LogBlock.Actor;
import de.diddiz.LogBlock.LogBlock;
import de.diddiz.LogBlock.Logging;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockFormEvent;
public class OxidizationLogging extends LoggingListener {
public OxidizationLogging(LogBlock lb) {
super(lb);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockPhysics(BlockFormEvent event) {
if (isLogging(event.getBlock().getWorld(), Logging.OXIDIZATION)) {
final Material type = event.getNewState().getType();
if (type.name().contains("COPPER")) {
consumer.queueBlockReplace(new Actor("NaturalOxidization"), event.getBlock().getState(), event.getNewState());
}
}
}
}

View File

@ -78,6 +78,7 @@ public class BukkitUtils {
private static final EnumSet<Material> slabs;
private static final EnumSet<Material> concreteBlocks;
private static final EnumMap<Material, DyeColor> dyes;
private static final EnumSet<Material> alwaysWaterlogged;
static {
pressurePlates = EnumSet.noneOf(Material.class);
@ -155,6 +156,10 @@ public class BukkitUtils {
slabs.add(Material.PRISMARINE_BRICK_SLAB);
slabs.add(Material.BLACKSTONE_SLAB);
slabs.add(Material.POLISHED_BLACKSTONE_SLAB);
slabs.add(Material.DEEPSLATE_BRICK_SLAB);
slabs.add(Material.DEEPSLATE_TILE_SLAB);
slabs.add(Material.COBBLED_DEEPSLATE_SLAB);
slabs.add(Material.POLISHED_DEEPSLATE_SLAB);
buttons = EnumSet.noneOf(Material.class);
buttons.add(Material.STONE_BUTTON);
@ -216,6 +221,8 @@ public class BukkitUtils {
singleBlockPlants.add(Material.CRIMSON_ROOTS);
singleBlockPlants.add(Material.WARPED_ROOTS);
singleBlockPlants.add(Material.NETHER_SPROUTS);
singleBlockPlants.add(Material.AZALEA);
singleBlockPlants.add(Material.FLOWERING_AZALEA);
doublePlants = EnumSet.noneOf(Material.class);
doublePlants.add(Material.TALL_GRASS);
@ -225,6 +232,7 @@ public class BukkitUtils {
doublePlants.add(Material.LILAC);
doublePlants.add(Material.SUNFLOWER);
doublePlants.add(Material.PEONY);
doublePlants.add(Material.SMALL_DRIPLEAF);
blockEquivalents = new HashSet<>(7);
blockEquivalents.add(new HashSet<>(Arrays.asList(2, 3, 60)));
@ -246,6 +254,10 @@ public class BukkitUtils {
relativeBreakable.add(Material.TRIPWIRE_HOOK);
relativeBreakable.add(Material.COCOA);
relativeBreakable.add(Material.BELL);
relativeBreakable.add(Material.AMETHYST_CLUSTER);
relativeBreakable.add(Material.SMALL_AMETHYST_BUD);
relativeBreakable.add(Material.MEDIUM_AMETHYST_BUD);
relativeBreakable.add(Material.LARGE_AMETHYST_BUD);
// Blocks that break when they are on top of a block
relativeTopBreakable = EnumSet.noneOf(Material.class);
@ -279,10 +291,15 @@ public class BukkitUtils {
relativeTopBreakable.add(Material.BAMBOO_SAPLING);
relativeTopBreakable.add(Material.TWISTING_VINES);
relativeTopBreakable.add(Material.TWISTING_VINES_PLANT);
relativeTopBreakable.add(Material.BIG_DRIPLEAF);
relativeTopBreakable.add(Material.BIG_DRIPLEAF_STEM);
for (Material m : Material.values()) {
if (m.name().startsWith("POTTED_")) {
relativeTopBreakable.add(m);
}
if (m.name().endsWith("CANDLE_CAKE")) {
relativeTopBreakable.add(m);
}
}
// Blocks that break falling entities
@ -331,6 +348,11 @@ public class BukkitUtils {
fallingEntityKillers.add(Material.SKELETON_WALL_SKULL);
fallingEntityKillers.add(Material.WITHER_SKELETON_SKULL);
fallingEntityKillers.add(Material.WITHER_SKELETON_WALL_SKULL);
for (Material m : Material.values()) {
if (m.name().contains("CANDLE")) {
fallingEntityKillers.add(m);
}
}
// Crop Blocks
cropBlocks = EnumSet.noneOf(Material.class);
@ -410,10 +432,10 @@ public class BukkitUtils {
nonFluidProofBlocks.add(Material.TORCH);
nonFluidProofBlocks.add(Material.SOUL_TORCH);
nonFluidProofBlocks.add(Material.FLOWER_POT);
nonFluidProofBlocks.add(Material.POWERED_RAIL);
nonFluidProofBlocks.add(Material.DETECTOR_RAIL);
nonFluidProofBlocks.add(Material.ACTIVATOR_RAIL);
nonFluidProofBlocks.add(Material.RAIL);
// nonFluidProofBlocks.add(Material.POWERED_RAIL);
// nonFluidProofBlocks.add(Material.DETECTOR_RAIL);
// nonFluidProofBlocks.add(Material.ACTIVATOR_RAIL);
// nonFluidProofBlocks.add(Material.RAIL);
nonFluidProofBlocks.add(Material.LEVER);
nonFluidProofBlocks.add(Material.REDSTONE_WIRE);
nonFluidProofBlocks.add(Material.REDSTONE_TORCH);
@ -422,6 +444,12 @@ public class BukkitUtils {
nonFluidProofBlocks.add(Material.DAYLIGHT_DETECTOR);
nonFluidProofBlocks.addAll(carpets);
alwaysWaterlogged = EnumSet.noneOf(Material.class);
alwaysWaterlogged.add(Material.SEAGRASS);
alwaysWaterlogged.add(Material.TALL_SEAGRASS);
alwaysWaterlogged.add(Material.KELP);
alwaysWaterlogged.add(Material.KELP_PLANT);
bedBlocks = EnumSet.noneOf(Material.class);
bedBlocks.add(Material.BLACK_BED);
bedBlocks.add(Material.BLUE_BED);
@ -1018,8 +1046,8 @@ public class BukkitUtils {
case FARMLAND:
case GRASS_BLOCK:
case PODZOL:
case GRASS_PATH:
return found == Material.DIRT || found == Material.MYCELIUM || found == Material.FARMLAND || found == Material.GRASS_BLOCK || found == Material.PODZOL || found == Material.GRASS_PATH;
case DIRT_PATH:
return found == Material.DIRT || found == Material.MYCELIUM || found == Material.FARMLAND || found == Material.GRASS_BLOCK || found == Material.PODZOL || found == Material.DIRT_PATH;
case BAMBOO:
case BAMBOO_SAPLING:
return found == Material.BAMBOO || found == Material.BAMBOO_SAPLING;
@ -1038,6 +1066,32 @@ public class BukkitUtils {
case WEEPING_VINES:
case WEEPING_VINES_PLANT:
return found == Material.WEEPING_VINES || found == Material.WEEPING_VINES_PLANT;
case CAVE_VINES:
case CAVE_VINES_PLANT:
return found == Material.CAVE_VINES || found == Material.CAVE_VINES_PLANT;
case BIG_DRIPLEAF:
case BIG_DRIPLEAF_STEM:
return found == Material.BIG_DRIPLEAF || found == Material.BIG_DRIPLEAF_STEM;
case COPPER_BLOCK:
case EXPOSED_COPPER:
case WEATHERED_COPPER:
case OXIDIZED_COPPER:
return found == Material.COPPER_BLOCK || found == Material.EXPOSED_COPPER || found == Material.WEATHERED_COPPER || found == Material.OXIDIZED_COPPER;
case CUT_COPPER:
case EXPOSED_CUT_COPPER:
case WEATHERED_CUT_COPPER:
case OXIDIZED_CUT_COPPER:
return found == Material.CUT_COPPER || found == Material.EXPOSED_CUT_COPPER || found == Material.WEATHERED_CUT_COPPER || found == Material.OXIDIZED_CUT_COPPER;
case CUT_COPPER_STAIRS:
case EXPOSED_CUT_COPPER_STAIRS:
case WEATHERED_CUT_COPPER_STAIRS:
case OXIDIZED_CUT_COPPER_STAIRS:
return found == Material.CUT_COPPER_STAIRS || found == Material.EXPOSED_CUT_COPPER_STAIRS || found == Material.WEATHERED_CUT_COPPER_STAIRS || found == Material.OXIDIZED_CUT_COPPER_STAIRS;
case CUT_COPPER_SLAB:
case EXPOSED_CUT_COPPER_SLAB:
case WEATHERED_CUT_COPPER_SLAB:
case OXIDIZED_CUT_COPPER_SLAB:
return found == Material.CUT_COPPER_SLAB || found == Material.EXPOSED_CUT_COPPER_SLAB || found == Material.WEATHERED_CUT_COPPER_SLAB || found == Material.OXIDIZED_CUT_COPPER_SLAB;
}
return false;
}
@ -1045,4 +1099,8 @@ public class BukkitUtils {
public static Material[] getAllSignsArray() {
return allSigns.toArray(new Material[allSigns.size()]);
}
public static boolean isAlwaysWaterlogged(Material m) {
return alwaysWaterlogged.contains(m);
}
}

View File

@ -144,6 +144,12 @@ public class LoggingUtil {
consumer.queueBlockReplace(actor, above.getState(), Material.WEEPING_VINES.createBlockData());
}
}
if (replacedType == Material.CAVE_VINES || replacedType == Material.CAVE_VINES_PLANT) {
Block above = origin.getRelative(BlockFace.UP);
if (above.getType() == Material.CAVE_VINES_PLANT) {
consumer.queueBlockReplace(actor, above.getState(), Material.CAVE_VINES.createBlockData());
}
}
Block checkBlock = origin.getRelative(BlockFace.UP);
Material typeAbove = checkBlock.getType();
@ -207,12 +213,22 @@ public class LoggingUtil {
if (bell.getAttachment() == Attachment.CEILING) {
consumer.queueBlockBreak(actor, checkBlock.getState());
}
} else if (typeBelow == Material.WEEPING_VINES || typeBelow == Material.WEEPING_VINES_PLANT) {
} else if (typeBelow == Material.WEEPING_VINES || typeBelow == Material.WEEPING_VINES_PLANT || typeBelow == Material.CAVE_VINES || typeBelow == Material.CAVE_VINES_PLANT) {
consumer.queueBlockBreak(actor, checkBlock.getState());
// check next blocks above
// check next blocks below
checkBlock = checkBlock.getRelative(BlockFace.DOWN);
typeBelow = checkBlock.getType();
while (typeBelow == Material.WEEPING_VINES || typeBelow == Material.WEEPING_VINES_PLANT) {
while (typeBelow == Material.WEEPING_VINES || typeBelow == Material.WEEPING_VINES_PLANT || typeBelow == Material.CAVE_VINES || typeBelow == Material.CAVE_VINES_PLANT) {
consumer.queueBlockBreak(actor, checkBlock.getState());
checkBlock = checkBlock.getRelative(BlockFace.DOWN);
typeBelow = checkBlock.getType();
}
} else if ((replacedType == Material.BIG_DRIPLEAF || replacedType == Material.BIG_DRIPLEAF_STEM) && (typeBelow == Material.BIG_DRIPLEAF || typeBelow == Material.BIG_DRIPLEAF_STEM)) {
consumer.queueBlockBreak(actor, checkBlock.getState());
// check next blocks below
checkBlock = checkBlock.getRelative(BlockFace.DOWN);
typeBelow = checkBlock.getType();
while (typeBelow == Material.BIG_DRIPLEAF || typeBelow == Material.BIG_DRIPLEAF_STEM) {
consumer.queueBlockBreak(actor, checkBlock.getState());
checkBlock = checkBlock.getRelative(BlockFace.DOWN);
typeBelow = checkBlock.getType();

View File

@ -1813,7 +1813,7 @@
207:13,minecraft:air
207:14,minecraft:air
207:15,minecraft:air
208:0,minecraft:grass_path
208:0,minecraft:dirt_path
209:0,minecraft:end_gateway
210:0,minecraft:repeating_command_block[conditional=false,facing=down]
210:1,minecraft:repeating_command_block[conditional=false,facing=up]

View File

@ -454,7 +454,7 @@
205:0,minecraft:purpur_slab
206:0,minecraft:end_stone_bricks
207:0,minecraft:beetroots
208:0,minecraft:grass_path
208:0,minecraft:dirt_path
209:0,minecraft:end_gateway
210:0,minecraft:repeating_command_block
211:0,minecraft:chain_command_block