diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..830fdd3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.gradle/ +build/ +.idea/ +resources/ +run/ \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 41c411e..38d0289 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,11 +6,11 @@ org.gradle.parallel=true # check these on https://fabricmc.net/develop minecraft_version=1.19.2 yarn_mappings=1.19.2+build.28 -loader_version=0.16.14 +loader_version=0.16.10 loom_version=1.10-SNAPSHOT # Mod Properties -mod_version=0.1.3-1.19.2 +mod_version=0.1.7-1.19.2 maven_group=net.capozi.demise archives_base_name=demise diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..1b33c55 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..ca025c8 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/resources/assets/demise/icon.png b/resources/assets/demise/icon.png deleted file mode 100644 index 582b253..0000000 Binary files a/resources/assets/demise/icon.png and /dev/null differ diff --git a/resources/demise.mixins.json b/resources/demise.mixins.json deleted file mode 100644 index 2042053..0000000 --- a/resources/demise.mixins.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "required": true, - "package": "net.capozi.demise.mixin", - "compatibilityLevel": "JAVA_17", - "mixins": [ - "LivingEntityMixin", - "PlayerEntityMixin" - ], - "injectors": { - "defaultRequire": 1 - } -} \ No newline at end of file diff --git a/resources/fabric.mod.json b/resources/fabric.mod.json deleted file mode 100644 index 712a7b9..0000000 --- a/resources/fabric.mod.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "schemaVersion": 1, - "id": "demise", - "version": "${version}", - "name": "Demise", - "description": "This is an example description! Tell everyone what your mod is about!", - "authors": [ - "Me!" - ], - "contact": { - "homepage": "https://fabricmc.net/", - "sources": "https://github.com/FabricMC/fabric-example-mod" - }, - "license": "CC0-1.0", - "icon": "assets/demise/icon.png", - "environment": "*", - "entrypoints": { - "main": [ - "net.capozi.demise.Demise" - ], - "fabric-datagen": [ - "net.capozi.demise.DemiseDataGenerator" - ] - }, - "mixins": [ - "demise.mixins.json" - ], - "depends": { - "fabricloader": ">=0.16.14", - "minecraft": "~1.19.2", - "java": ">=17", - "fabric-api": "*" - }, - "suggests": { - "another-mod": "*" - } -} \ No newline at end of file diff --git a/src/main/java/net/capozi/demise/common/entity/PlayerRemainsEntity.java b/src/main/java/net/capozi/demise/common/entity/PlayerRemainsEntity.java index 5be1dee..50dd454 100644 --- a/src/main/java/net/capozi/demise/common/entity/PlayerRemainsEntity.java +++ b/src/main/java/net/capozi/demise/common/entity/PlayerRemainsEntity.java @@ -15,15 +15,19 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.screen.GenericContainerScreenHandler; import net.minecraft.screen.ScreenHandler; +import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.ActionResult; import net.minecraft.util.Arm; import net.minecraft.util.Hand; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; +import net.minecraft.util.math.Box; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.List; public class PlayerRemainsEntity extends LivingEntity implements VehicleInventory { @@ -59,11 +63,27 @@ public void writeCustomDataToNbt(NbtCompound nbt) { @Override public boolean damage(DamageSource source, float amount) { - if(source.getAttacker() instanceof PlayerEntity player) { + if (source.getAttacker() instanceof PlayerEntity player) { if(player.isSneaking()) { - if(world.isClient) return true; - + if(getEntityWorld().isClient) return true; this.dropInventory(); + this.clearInventory(); + Vec3d center = this.getPos(); + double radius = 10.0; + Box box = new Box( + center.x - radius, center.y - (radius/2), center.z - radius, + center.x + radius, center.y + (radius/2), center.z + radius + ); + List entities = this.getWorld().getEntitiesByClass( + LivingEntity.class, + box, + e -> e.squaredDistanceTo(center) <= radius * radius + ); + for (LivingEntity entity : entities) { + if (entity instanceof ServerPlayerEntity playerEntity) { + playerEntity.closeHandledScreen(); + } + } this.discard(); return true; } diff --git a/src/main/java/net/capozi/demise/mixin/LivingEntityMixin.java b/src/main/java/net/capozi/demise/mixin/LivingEntityMixin.java index 97c8008..9e6a619 100644 --- a/src/main/java/net/capozi/demise/mixin/LivingEntityMixin.java +++ b/src/main/java/net/capozi/demise/mixin/LivingEntityMixin.java @@ -15,6 +15,7 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import net.capozi.demise.common.TwoHanded; @@ -24,32 +25,30 @@ public abstract class LivingEntityMixin { @Shadow protected abstract void consumeItem(); @Inject(method = "getOffHandStack", at = @At("HEAD"), cancellable = true) - public void grimoire$getOffHandStack(CallbackInfoReturnable cir) { + public void demise$getOffHandStack(CallbackInfoReturnable cir) { if((LivingEntity)(Object)this instanceof PlayerEntity player) { if(player.getMainHandStack().getItem() instanceof TwoHanded) cir.setReturnValue(new ItemStack(Items.AIR)); } } - @Inject(method = "damage", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;onDeath(Lnet/minecraft/entity/damage/DamageSource;)V")) - private void grimoire$onDeath(DamageSource source, float amount, CallbackInfoReturnable cir) { + @Inject(method = "onDeath", at = @At("HEAD")) + private void demise$onDeath(DamageSource damageSource, CallbackInfo ci) { if(((LivingEntity)(Object)this).getWorld().getGameRules().getBoolean(GameruleRegistry.CREATE_GRAVE) && (Object)this instanceof PlayerEntity player) { if(player.getWorld().getGameRules().getBoolean(GameRules.KEEP_INVENTORY)) return; - + if (!(((Object)this) instanceof PlayerEntity)) { + return; + } PlayerRemainsEntity playerRemainsEntity = new PlayerRemainsEntity(EntityTypeRegistry.PLAYER_REMAINS_TYPE, player.world); playerRemainsEntity.setPosition(player.getPos()); - playerRemainsEntity.resetInventory(); - for(int i = 0;i