mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-09-27 14:13:11 +02:00
Prepare MCAccessBukkitModern (1.13).
This commit is contained in:
parent
40b0107cc8
commit
54c022f74d
@ -17,7 +17,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bukkit</groupId>
|
<groupId>org.bukkit</groupId>
|
||||||
<artifactId>bukkit</artifactId>
|
<artifactId>bukkit</artifactId>
|
||||||
<version>1.11.2-R0.1-SNAPSHOT</version>
|
<version>1.13-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
package fr.neatmonster.nocheatplus.compat.bukkit;
|
||||||
|
|
||||||
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BlockCache for MCAccessBukkitModern.
|
||||||
|
*
|
||||||
|
* @author asofold
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class BlockCacheBukkitModern extends BlockCacheBukkit {
|
||||||
|
|
||||||
|
public BlockCacheBukkitModern(World world) {
|
||||||
|
super(world);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int fetchData(int x, int y, int z) {
|
||||||
|
// TODO: Might fake here too.
|
||||||
|
return super.fetchData(x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double[] fetchBounds(int x, int y, int z) {
|
||||||
|
// TODO: Fetch what's possible to fetch/guess (...).
|
||||||
|
return super.fetchBounds(x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -17,11 +17,13 @@ package fr.neatmonster.nocheatplus.compat.bukkit;
|
|||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
import fr.neatmonster.nocheatplus.compat.BridgeMaterial;
|
||||||
import fr.neatmonster.nocheatplus.compat.blocks.BlockPropertiesSetup;
|
import fr.neatmonster.nocheatplus.compat.blocks.BlockPropertiesSetup;
|
||||||
import fr.neatmonster.nocheatplus.config.WorldConfigProvider;
|
import fr.neatmonster.nocheatplus.config.WorldConfigProvider;
|
||||||
|
import fr.neatmonster.nocheatplus.logging.StaticLog;
|
||||||
import fr.neatmonster.nocheatplus.utilities.map.BlockProperties;
|
import fr.neatmonster.nocheatplus.utilities.map.BlockProperties;
|
||||||
|
|
||||||
public class MCAccessBukkit extends MCAccessBukkitBase implements BlockPropertiesSetup{
|
public class MCAccessBukkit extends MCAccessBukkitBase implements BlockPropertiesSetup {
|
||||||
|
|
||||||
public MCAccessBukkit() {
|
public MCAccessBukkit() {
|
||||||
super();
|
super();
|
||||||
@ -37,21 +39,24 @@ public class MCAccessBukkit extends MCAccessBukkitBase implements BlockPropertie
|
|||||||
}
|
}
|
||||||
else if (guessItchyBlock(mat)) {
|
else if (guessItchyBlock(mat)) {
|
||||||
// Uncertain bounding-box, allow passing through.
|
// Uncertain bounding-box, allow passing through.
|
||||||
|
StaticLog.logDebug("Itchy: " + mat);
|
||||||
long flags = BlockProperties.F_IGN_PASSABLE;
|
long flags = BlockProperties.F_IGN_PASSABLE;
|
||||||
if ((BlockProperties.isSolid(mat) || BlockProperties.isGround(mat)) && !BlockProperties.isLiquid(mat)) {
|
if ((BlockProperties.isSolid(mat)
|
||||||
|
|| BlockProperties.isGround(mat))) {
|
||||||
// Block can be ground, so allow standing on any height.
|
// Block can be ground, so allow standing on any height.
|
||||||
flags |= BlockProperties.F_GROUND_HEIGHT;
|
flags |= BlockProperties.F_GROUND | BlockProperties.F_GROUND_HEIGHT;
|
||||||
}
|
}
|
||||||
BlockProperties.setBlockFlags(mat, BlockProperties.getBlockFlags(mat) | flags);
|
BlockProperties.setBlockFlags(mat, BlockProperties.getBlockFlags(mat) | flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Blocks that are reported to be full and solid, but which are not.
|
// Blocks that are reported to be full and solid, but which are not.
|
||||||
|
final long flags = BlockProperties.F_IGN_PASSABLE | BlockProperties.F_GROUND_HEIGHT;
|
||||||
for (final Material mat : new Material[]{
|
for (final Material mat : new Material[]{
|
||||||
Material.ENDER_PORTAL_FRAME,
|
BridgeMaterial.END_PORTAL_FRAME,
|
||||||
}) {
|
}) {
|
||||||
// TODO: Add BlockFlags.FULL_BOUNDS?
|
if (!processedBlocks.contains(mat)) {
|
||||||
final long flags = BlockProperties.F_IGN_PASSABLE | BlockProperties.F_GROUND_HEIGHT;
|
BlockProperties.setBlockFlags(mat, BlockProperties.getBlockFlags(mat) | flags);
|
||||||
BlockProperties.setBlockFlags(mat, BlockProperties.getBlockFlags(mat) | flags);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
*/
|
*/
|
||||||
package fr.neatmonster.nocheatplus.compat.bukkit;
|
package fr.neatmonster.nocheatplus.compat.bukkit;
|
||||||
|
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -43,13 +46,19 @@ public class MCAccessBukkitBase implements MCAccess {
|
|||||||
// private AlmostBoolean entityPlayerAvailable = AlmostBoolean.MAYBE;
|
// private AlmostBoolean entityPlayerAvailable = AlmostBoolean.MAYBE;
|
||||||
protected final boolean bukkitHasGetHeightAndGetWidth;
|
protected final boolean bukkitHasGetHeightAndGetWidth;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fill in already initialized blocks, to return false for guessItchyBlock.
|
||||||
|
*/
|
||||||
|
protected final Set<Material> processedBlocks = new LinkedHashSet<Material>();
|
||||||
|
|
||||||
private boolean guessItchyBlockPre1_13(final Material mat) {
|
private boolean guessItchyBlockPre1_13(final Material mat) {
|
||||||
return !mat.isOccluding() || !mat.isSolid() || mat.isTransparent();
|
return !mat.isOccluding() || !mat.isSolid() || mat.isTransparent();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean guessItchyBlock(final Material mat) {
|
protected boolean guessItchyBlock(final Material mat) {
|
||||||
// General considerations first.
|
// General considerations first.
|
||||||
if (BlockProperties.isAir(mat) || BlockProperties.isLiquid(mat)) {
|
if (processedBlocks.contains(mat)
|
||||||
|
|| BlockProperties.isAir(mat) || BlockProperties.isLiquid(mat)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Fully solid/ground blocks.
|
// Fully solid/ground blocks.
|
||||||
@ -58,7 +67,7 @@ public class MCAccessBukkitBase implements MCAccess {
|
|||||||
* Skip fully passable blocks (partially passable blocks may be itchy,
|
* Skip fully passable blocks (partially passable blocks may be itchy,
|
||||||
* though slabs will be easy to handle).
|
* though slabs will be easy to handle).
|
||||||
*/
|
*/
|
||||||
if (BlockFlags.hasAnyFlag(flags,BlockProperties.F_IGN_PASSABLE)) {
|
if (BlockFlags.hasAnyFlag(flags, BlockProperties.F_IGN_PASSABLE)) {
|
||||||
// TODO: Blocks with min_height may actually be ok, if xz100 and some height are set.
|
// TODO: Blocks with min_height may actually be ok, if xz100 and some height are set.
|
||||||
if (BlockFlags.hasNoFlags(flags,
|
if (BlockFlags.hasNoFlags(flags,
|
||||||
BlockProperties.F_GROUND_HEIGHT
|
BlockProperties.F_GROUND_HEIGHT
|
||||||
@ -75,7 +84,7 @@ public class MCAccessBukkitBase implements MCAccess {
|
|||||||
long testFlags = (BlockProperties.F_SOLID | BlockProperties.F_XZ100
|
long testFlags = (BlockProperties.F_SOLID | BlockProperties.F_XZ100
|
||||||
| BlockProperties.F_HEIGHT100);
|
| BlockProperties.F_HEIGHT100);
|
||||||
if (BlockFlags.hasAllFlags(flags, testFlags)) {
|
if (BlockFlags.hasAllFlags(flags, testFlags)) {
|
||||||
// Fully solid block!
|
// Fully solid block.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
package fr.neatmonster.nocheatplus.compat.bukkit;
|
||||||
|
|
||||||
|
import fr.neatmonster.nocheatplus.config.WorldConfigProvider;
|
||||||
|
import fr.neatmonster.nocheatplus.utilities.map.BlockCache;
|
||||||
|
|
||||||
|
public class MCAccessBukkitModern extends MCAccessBukkit {
|
||||||
|
|
||||||
|
public MCAccessBukkitModern() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public String getMCVersion() {
|
||||||
|
return "1.13|?";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockCache getBlockCache() {
|
||||||
|
return new BlockCacheBukkitModern(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupBlockProperties(final WorldConfigProvider<?> worldConfigProvider) {
|
||||||
|
|
||||||
|
// TODO: Initialize some blocks and add to this.processedBlocks.
|
||||||
|
|
||||||
|
super.setupBlockProperties(worldConfigProvider);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -22,6 +22,7 @@ import org.bukkit.Bukkit;
|
|||||||
|
|
||||||
import fr.neatmonster.nocheatplus.compat.MCAccess;
|
import fr.neatmonster.nocheatplus.compat.MCAccess;
|
||||||
import fr.neatmonster.nocheatplus.compat.bukkit.MCAccessBukkit;
|
import fr.neatmonster.nocheatplus.compat.bukkit.MCAccessBukkit;
|
||||||
|
import fr.neatmonster.nocheatplus.compat.bukkit.MCAccessBukkitModern;
|
||||||
import fr.neatmonster.nocheatplus.compat.cbreflect.MCAccessCBReflect;
|
import fr.neatmonster.nocheatplus.compat.cbreflect.MCAccessCBReflect;
|
||||||
import fr.neatmonster.nocheatplus.logging.StaticLog;
|
import fr.neatmonster.nocheatplus.logging.StaticLog;
|
||||||
|
|
||||||
@ -66,6 +67,14 @@ public class MCAccessFactory {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bukkit API only: 1.13 (and possibly later).
|
||||||
|
try {
|
||||||
|
return new MCAccessBukkitModern();
|
||||||
|
}
|
||||||
|
catch(Throwable t) {
|
||||||
|
throwables.add(t);
|
||||||
|
}
|
||||||
|
|
||||||
// Try to set up api-only access (since 1.4.6).
|
// Try to set up api-only access (since 1.4.6).
|
||||||
try {
|
try {
|
||||||
mcAccess = new MCAccessBukkit();
|
mcAccess = new MCAccessBukkit();
|
||||||
|
Loading…
Reference in New Issue
Block a user