Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add module for 1.4.7: NCPCompatCB2602
- Loading branch information
Showing
6 changed files
with
327 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<modelVersion>4.0.0</modelVersion> | ||
<groupId>fr.neatmonster</groupId> | ||
<artifactId>ncpcompatcb2602</artifactId> | ||
<packaging>jar</packaging> | ||
<name>NCPCompatCB2602</name> | ||
<version>static</version> | ||
|
||
<parent> | ||
<groupId>fr.neatmonster</groupId> | ||
<artifactId>nocheatplus-parent</artifactId> | ||
<version>static</version> | ||
</parent> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>fr.neatmonster</groupId> | ||
<artifactId>ncpcompat</artifactId> | ||
<version>static</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.bukkit</groupId> | ||
<artifactId>craftbukkit</artifactId> | ||
<version>1.4.7-R1.0</version> | ||
</dependency> | ||
</dependencies> | ||
|
||
<description>Compatibility for CB2602 (1.4.7). | ||
|
||
Version updating is done for NCPPlugin mainly, expect the other poms version to change randomly rather.</description> | ||
</project> |
113 changes: 113 additions & 0 deletions
113
NCPCompatCB2602/src/main/java/fr/neatmonster/nocheatplus/compat/cb2602/BlockCacheCB2602.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
package fr.neatmonster.nocheatplus.compat.cb2602; | ||
|
||
import java.util.Iterator; | ||
import java.util.List; | ||
|
||
import net.minecraft.server.v1_4_R1.AxisAlignedBB; | ||
import net.minecraft.server.v1_4_R1.EntityBoat; | ||
import net.minecraft.server.v1_4_R1.EntityMinecart; | ||
import net.minecraft.server.v1_4_R1.IBlockAccess; | ||
import net.minecraft.server.v1_4_R1.Material; | ||
import net.minecraft.server.v1_4_R1.TileEntity; | ||
import net.minecraft.server.v1_4_R1.Vec3DPool; | ||
|
||
import org.bukkit.World; | ||
import org.bukkit.craftbukkit.v1_4_R1.CraftWorld; | ||
import org.bukkit.craftbukkit.v1_4_R1.entity.CraftEntity; | ||
import org.bukkit.entity.Entity; | ||
|
||
import fr.neatmonster.nocheatplus.utilities.BlockCache; | ||
|
||
public class BlockCacheCB2602 extends BlockCache implements IBlockAccess{ | ||
|
||
/** Box for one time use, no nesting, no extra storing this(!). */ | ||
protected static final AxisAlignedBB useBox = AxisAlignedBB.a(0, 0, 0, 0, 0, 0); | ||
|
||
protected net.minecraft.server.v1_4_R1.World world; | ||
|
||
public BlockCacheCB2602(World world) { | ||
setAccess(world); | ||
} | ||
|
||
@Override | ||
public void setAccess(World world) { | ||
this.world = world == null ? null : ((CraftWorld) world).getHandle(); | ||
} | ||
|
||
@Override | ||
public int fetchTypeId(final int x, final int y, final int z) { | ||
return world.getTypeId(x, y, z); | ||
} | ||
|
||
@Override | ||
public int fetchData(final int x, final int y, final int z) { | ||
return world.getData(x, y, z); | ||
} | ||
|
||
@Override | ||
public double[] fetchBounds(final int x, final int y, final int z){ | ||
|
||
// TODO: change api for this / use nodes (!) | ||
final int id = getTypeId(x, y, z); | ||
final net.minecraft.server.v1_4_R1.Block block = net.minecraft.server.v1_4_R1.Block.byId[id]; | ||
if (block == null) return null; | ||
block.updateShape(this, x, y, z); // TODO: use THIS instead of world. | ||
|
||
// minX, minY, minZ, maxX, maxY, maxZ | ||
return new double[]{block.v(), block.x(), block.z(), block.w(), block.y(), block.A()}; | ||
} | ||
|
||
@Override | ||
public boolean standsOnEntity(final Entity entity, final double minX, final double minY, final double minZ, final double maxX, final double maxY, final double maxZ){ | ||
try{ | ||
// TODO: Probably check other ids too before doing this ? | ||
|
||
final net.minecraft.server.v1_4_R1.Entity mcEntity = ((CraftEntity) entity).getHandle(); | ||
|
||
final AxisAlignedBB box = useBox.b(minX, minY, minZ, maxX, maxY, maxZ); | ||
@SuppressWarnings("rawtypes") | ||
final List list = world.getEntities(mcEntity, box); | ||
@SuppressWarnings("rawtypes") | ||
Iterator iterator = list.iterator(); | ||
while (iterator.hasNext()) { | ||
final net.minecraft.server.v1_4_R1.Entity other = (net.minecraft.server.v1_4_R1.Entity) iterator.next(); | ||
if (!(other instanceof EntityBoat) && !(other instanceof EntityMinecart)) continue; | ||
final AxisAlignedBB otherBox = other.boundingBox; | ||
if (box.a > otherBox.d || box.d < otherBox.a || box.b > otherBox.e || box.e < otherBox.b || box.c > otherBox.f || box.f < otherBox.c) continue; | ||
else { | ||
return true; | ||
} | ||
} | ||
} | ||
catch (Throwable t){ | ||
// Ignore exceptions (Context: DisguiseCraft). | ||
} | ||
return false; | ||
} | ||
|
||
@Override | ||
public Material getMaterial(final int x, final int y, final int z) { | ||
return world.getMaterial(x, y, z); | ||
} | ||
|
||
@Override | ||
public TileEntity getTileEntity(final int x, final int y, final int z) { | ||
return world.getTileEntity(x, y, z); | ||
} | ||
|
||
@Override | ||
public Vec3DPool getVec3DPool() { | ||
return world.getVec3DPool(); | ||
} | ||
|
||
@Override | ||
public boolean isBlockFacePowered(final int arg0, final int arg1, final int arg2, final int arg3) { | ||
return world.isBlockFacePowered(arg0, arg1, arg2, arg3); | ||
} | ||
|
||
@Override | ||
public boolean t(final int x, final int y, final int z) { | ||
return world.t(x, y, z); | ||
} | ||
|
||
} |
163 changes: 163 additions & 0 deletions
163
NCPCompatCB2602/src/main/java/fr/neatmonster/nocheatplus/compat/cb2602/MCAccessCB2602.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
package fr.neatmonster.nocheatplus.compat.cb2602; | ||
|
||
import net.minecraft.server.v1_4_R1.AxisAlignedBB; | ||
import net.minecraft.server.v1_4_R1.Block; | ||
import net.minecraft.server.v1_4_R1.DamageSource; | ||
import net.minecraft.server.v1_4_R1.EntityComplexPart; | ||
import net.minecraft.server.v1_4_R1.EntityPlayer; | ||
import net.minecraft.server.v1_4_R1.MobEffectList; | ||
|
||
import org.bukkit.Bukkit; | ||
import org.bukkit.World; | ||
import org.bukkit.command.CommandMap; | ||
import org.bukkit.craftbukkit.v1_4_R1.CraftServer; | ||
import org.bukkit.craftbukkit.v1_4_R1.entity.CraftEntity; | ||
import org.bukkit.craftbukkit.v1_4_R1.entity.CraftPlayer; | ||
import org.bukkit.entity.Entity; | ||
import org.bukkit.entity.LivingEntity; | ||
import org.bukkit.entity.Player; | ||
|
||
import fr.neatmonster.nocheatplus.compat.AlmostBoolean; | ||
import fr.neatmonster.nocheatplus.compat.MCAccess; | ||
import fr.neatmonster.nocheatplus.utilities.BlockCache; | ||
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil; | ||
|
||
public class MCAccessCB2602 implements MCAccess{ | ||
|
||
/** | ||
* Constructor to let it fail. | ||
*/ | ||
public MCAccessCB2602(){ | ||
getCommandMap(); | ||
ReflectionUtil.checkMembers("net.minecraft.server.v1_4_R1.", new String[]{"Entity" , "dead"}); | ||
} | ||
|
||
@Override | ||
public String getMCVersion() { | ||
// 1_4_R1 | ||
return "1.4.7"; | ||
} | ||
|
||
@Override | ||
public String getServerVersionTag() { | ||
return "CB2602"; | ||
} | ||
|
||
@Override | ||
public CommandMap getCommandMap() { | ||
return ((CraftServer) Bukkit.getServer()).getCommandMap(); | ||
} | ||
|
||
@Override | ||
public BlockCache getBlockCache(final World world) { | ||
return new BlockCacheCB2602(world); | ||
} | ||
|
||
@Override | ||
public double getHeight(final Entity entity) { | ||
final net.minecraft.server.v1_4_R1.Entity mcEntity = ((CraftEntity) entity).getHandle(); | ||
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b)); | ||
if (entity instanceof LivingEntity) { | ||
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight); | ||
} else return entityHeight; | ||
} | ||
|
||
@Override | ||
public AlmostBoolean isBlockSolid(final int id) { | ||
final Block block = Block.byId[id]; | ||
if (block == null || block.material == null) return AlmostBoolean.MAYBE; | ||
else return AlmostBoolean.match(block.material.isSolid()); | ||
} | ||
|
||
@Override | ||
public AlmostBoolean isBlockLiquid(final int id) { | ||
final Block block = Block.byId[id]; | ||
if (block == null || block.material == null) return AlmostBoolean.MAYBE; | ||
else return AlmostBoolean.match(block.material.isLiquid()); | ||
} | ||
|
||
@Override | ||
public boolean Block_i(final int id) { | ||
try{ | ||
return Block.i(id); | ||
} | ||
catch(Throwable t){ | ||
// Minecraft default value. | ||
return true; | ||
} | ||
} | ||
|
||
@Override | ||
public double getWidth(final Entity entity) { | ||
return ((CraftEntity) entity).getHandle().width; | ||
} | ||
|
||
@Override | ||
public AlmostBoolean isIllegalBounds(final Player player) { | ||
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); | ||
if (entityPlayer.dead) return AlmostBoolean.NO; | ||
final AxisAlignedBB box = entityPlayer.boundingBox; | ||
if (!entityPlayer.isSleeping()){ | ||
// This can not really test stance but height of bounding box. | ||
final double dY = Math.abs(box.e - box.b); | ||
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D || | ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES; | ||
} | ||
return AlmostBoolean.MAYBE; | ||
} | ||
|
||
@Override | ||
public double getJumpAmplifier(final Player player) { | ||
final net.minecraft.server.v1_4_R1.EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle(); | ||
|
||
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier(); | ||
else return Double.NEGATIVE_INFINITY; | ||
} | ||
|
||
@Override | ||
public double getFasterMovementAmplifier(final Player player) { | ||
final net.minecraft.server.v1_4_R1.EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle(); | ||
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier(); | ||
else return Double.NEGATIVE_INFINITY; | ||
} | ||
|
||
@Override | ||
public int getInvulnerableTicks(final Player player) { | ||
return ((CraftPlayer) player).getHandle().invulnerableTicks; | ||
} | ||
|
||
@Override | ||
public void setInvulnerableTicks(final Player player, final int ticks) { | ||
((CraftPlayer) player).getHandle().invulnerableTicks = ticks; | ||
} | ||
|
||
@Override | ||
public void dealFallDamage(final Player player, final int damage) { | ||
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, damage); | ||
} | ||
|
||
@Override | ||
public boolean isComplexPart(final Entity entity) { | ||
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart; | ||
} | ||
|
||
@Override | ||
public boolean shouldBeZombie(final Player player) { | ||
final net.minecraft.server.v1_4_R1.EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle(); | ||
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ; | ||
} | ||
|
||
@Override | ||
public void setDead(final Player player, final int deathTicks) { | ||
final net.minecraft.server.v1_4_R1.EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle(); | ||
mcPlayer.deathTicks = deathTicks; | ||
mcPlayer.dead = true; | ||
} | ||
|
||
@Override | ||
public long getKeepAliveTime(final Player player) { | ||
// TODO: Implement if possible. | ||
return Long.MIN_VALUE; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters