diff --git a/build.gradle b/build.gradle index ccc497ab..3e89bd8c 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,7 @@ repositories { } } -String umcVersion = "1.2.0" +String umcVersion = "1.2.1" if (!"release".equalsIgnoreCase(System.getProperty("target"))) { try { umcVersion += "-" + 'git rev-parse --verify --short=7 HEAD'.execute().text.trim() diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index 54c7cf85..27abbeb0 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -50,7 +50,7 @@ public class ModCore { public static final String MODID = "universalmodcore"; public static final String NAME = "UniversalModCore"; - public static final String VERSION = "1.2.0"; + public static final String VERSION = "1.2.1"; public static ModCore instance; private List mods = new ArrayList<>(); diff --git a/src/main/java/cam72cam/mod/block/BlockType.java b/src/main/java/cam72cam/mod/block/BlockType.java index ba0277d4..8f816957 100644 --- a/src/main/java/cam72cam/mod/block/BlockType.java +++ b/src/main/java/cam72cam/mod/block/BlockType.java @@ -142,7 +142,11 @@ public int getWeakPower(World world, Vec3i vec3i, Facing from) { * BlockInternal is an internal class that should only be extended when you need to implement * an interface. */ - protected class BlockInternal extends net.minecraft.block.Block { + protected class BlockInternal extends net.minecraft.block.Block implements IBlockTypeBlock { + public BlockType getType() { + return BlockType.this; + } + public BlockInternal() { super(BlockType.this.getMaterial().internal); BlockType type = BlockType.this; diff --git a/src/main/java/cam72cam/mod/block/IBlockTypeBlock.java b/src/main/java/cam72cam/mod/block/IBlockTypeBlock.java new file mode 100644 index 00000000..f53fcaa1 --- /dev/null +++ b/src/main/java/cam72cam/mod/block/IBlockTypeBlock.java @@ -0,0 +1,5 @@ +package cam72cam.mod.block; + +public interface IBlockTypeBlock { + BlockType getType(); +} diff --git a/src/main/java/cam72cam/mod/world/IBlockEntityCollision.java b/src/main/java/cam72cam/mod/world/IBlockEntityCollision.java new file mode 100644 index 00000000..8536ab83 --- /dev/null +++ b/src/main/java/cam72cam/mod/world/IBlockEntityCollision.java @@ -0,0 +1,8 @@ +package cam72cam.mod.world; + +import cam72cam.mod.entity.Entity; +import cam72cam.mod.math.Vec3i; + +public interface IBlockEntityCollision { + boolean canCollide(World world, Vec3i pos, Entity entity); +} diff --git a/src/main/java/cam72cam/mod/world/IConditionalCollision.java b/src/main/java/cam72cam/mod/world/IConditionalCollision.java index d4fb6f24..4890023d 100644 --- a/src/main/java/cam72cam/mod/world/IConditionalCollision.java +++ b/src/main/java/cam72cam/mod/world/IConditionalCollision.java @@ -1,6 +1,7 @@ package cam72cam.mod.world; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; import net.minecraft.util.DamageSource; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -21,6 +22,6 @@ public interface IConditionalCollision { * @param damageSource Damage source that would be used to collide with the block. * @return Whether or not to calculate actual collision. */ - boolean canCollide(World world, BlockPos pos, IBlockState state, DamageSource damageSource); + boolean canCollide(World world, BlockPos pos, IBlockState state, Entity entity); } diff --git a/src/main/java/cam72cam/mod/world/World.java b/src/main/java/cam72cam/mod/world/World.java index 9b21c116..bddf5534 100644 --- a/src/main/java/cam72cam/mod/world/World.java +++ b/src/main/java/cam72cam/mod/world/World.java @@ -4,6 +4,7 @@ import cam72cam.mod.ModCore; import cam72cam.mod.block.BlockEntity; import cam72cam.mod.block.BlockType; +import cam72cam.mod.block.IBlockTypeBlock; import cam72cam.mod.block.tile.TileEntity; import cam72cam.mod.entity.*; import cam72cam.mod.entity.boundingbox.BoundingBox; @@ -632,10 +633,20 @@ public void setBlock(Vec3i pos, BlockInfo info) { } /** Opt in collision overriding */ - public boolean canEntityCollideWith(Vec3i bp, String damageType) { - Block block = internal.getBlockState(bp.internal()).getBlock(); - return ! (block instanceof IConditionalCollision) || - ((IConditionalCollision) block).canCollide(internal, bp.internal(), internal.getBlockState(bp.internal()), new DamageSource(damageType)); + public boolean canEntityCollideWith(Vec3i bp, Entity entity) { + IBlockState state = internal.getBlockState(bp.internal()); + Block block = state.getBlock(); + + if (block instanceof IConditionalCollision && ((IConditionalCollision) block).canCollide(internal, bp.internal(), state, entity.internal)) + return true; + + if (block instanceof IBlockTypeBlock) { + BlockType type = ((IBlockTypeBlock) block).getType(); + if (type instanceof IBlockEntityCollision) { + return ((IBlockEntityCollision) type).canCollide(this, bp, entity); + } + } + return false; } /** Spawn a particle */ diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info new file mode 100644 index 00000000..bbd1cc99 --- /dev/null +++ b/src/main/resources/mcmod.info @@ -0,0 +1,16 @@ +[ +{ + "modid": "universalmodcore", + "name": "UniversalModCore", + "description": "Universal Mod Core", + "version": "1.2.1", + "mcversion": "1.12.2", + "url": "", + "updateUrl": "", + "authorList": [], + "credits": "", + "logoFile": "", + "screenshots": [], + "dependencies": [] +} +]