diff options
author | nea <romangraef@gmail.com> | 2022-06-06 17:30:02 +0200 |
---|---|---|
committer | nea <romangraef@gmail.com> | 2022-06-06 17:30:14 +0200 |
commit | bedfa3b4d0507e0de4beb522285a18ecef80ea2a (patch) | |
tree | baad8e208aaf56648a9b317cbdbd18e838758dee /src | |
parent | 8429ee15a20c38fe3a094bebf4ba4eb51c2cedd7 (diff) | |
download | morbingtime-bedfa3b4d0507e0de4beb522285a18ecef80ea2a.tar.gz morbingtime-bedfa3b4d0507e0de4beb522285a18ecef80ea2a.tar.bz2 morbingtime-bedfa3b4d0507e0de4beb522285a18ecef80ea2a.zip |
More morbing
Diffstat (limited to 'src')
17 files changed, 143 insertions, 6 deletions
diff --git a/src/main/java/moe/nea/morbing/BloodFluid.java b/src/main/java/moe/nea/morbing/BloodFluid.java index bbda497..4583967 100644 --- a/src/main/java/moe/nea/morbing/BloodFluid.java +++ b/src/main/java/moe/nea/morbing/BloodFluid.java @@ -74,7 +74,7 @@ public abstract class BloodFluid extends FlowableFluid { BlockPos abovePos = pos.up(); BlockState aboveState = world.getBlockState(abovePos); FluidState aboveFluid = aboveState.getFluidState(); - if (state.getFluidState().getFluid() != this && !aboveFluid.isEmpty() && matchesType(aboveFluid.getFluid())) { + if (state.getFluidState().isEmpty() && !aboveFluid.isEmpty() && matchesType(aboveFluid.getFluid())) { return getFlowing(aboveFluid.getLevel(), true); } if (state.getFluidState().getFluid() == getFlowing()) { @@ -86,6 +86,9 @@ public abstract class BloodFluid extends FlowableFluid { return getFlowing(1, false); } } + if (state.getFluidState().getFluid() == getStill()) { + return getFlowing(1, false); + } return state.getFluidState(); } diff --git a/src/main/java/moe/nea/morbing/ModItems.java b/src/main/java/moe/nea/morbing/ModItems.java index ba7a5c7..9403198 100644 --- a/src/main/java/moe/nea/morbing/ModItems.java +++ b/src/main/java/moe/nea/morbing/ModItems.java @@ -2,8 +2,16 @@ package moe.nea.morbing; import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +import net.minecraft.client.item.TooltipContext; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; +import net.minecraft.text.TranslatableText; import net.minecraft.util.registry.Registry; +import net.minecraft.world.World; +import org.jetbrains.annotations.Nullable; + +import java.util.List; public class ModItems extends ModRegistry<Item> { @@ -14,5 +22,11 @@ public class ModItems extends ModRegistry<Item> { public static ModItems INSTANCE = new ModItems(); public Item morbItem = register("morbitem", new Item(new FabricItemSettings())); public Item morbArrow = register("morbarrow", new MorbArrowItem(new FabricItemSettings())); - public Item morbSyringe = register("morbsyringe", new Item(new FabricItemSettings())); + public Item morbSyringe = register("morbsyringe", new Item(new FabricItemSettings()) { + @Override + public void appendTooltip(ItemStack stack, @Nullable World world, List<Text> tooltip, TooltipContext context) { + super.appendTooltip(stack, world, tooltip, context); + tooltip.add(new TranslatableText("tooltip.morbing.morbyringe")); + } + }); } diff --git a/src/main/java/moe/nea/morbing/Morbing.java b/src/main/java/moe/nea/morbing/Morbing.java index adf52b0..6743112 100644 --- a/src/main/java/moe/nea/morbing/Morbing.java +++ b/src/main/java/moe/nea/morbing/Morbing.java @@ -1,10 +1,17 @@ package moe.nea.morbing; +import moe.nea.morbing.mixin.AccessorBrewingRecipeRegistry; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.event.player.AttackEntityCallback; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.fluid.FlowableFluid; import net.minecraft.potion.Potion; +import net.minecraft.potion.Potions; +import net.minecraft.sound.SoundEvent; +import net.minecraft.state.property.Properties; +import net.minecraft.util.ActionResult; import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.Registry; public class Morbing implements ModInitializer { @@ -17,6 +24,8 @@ public class Morbing implements ModInitializer { public static FlowableFluid STILL_BLOOD = new BloodFluid.Still(); public static FlowableFluid FLOWING_BLOOD = new BloodFluid.Flowing(); + public static SoundEvent ITSMORBINTIME_SOUND = new SoundEvent(Morbing.identifier("itsmorbintime")); + public static Potion MORB_POTION = new Potion(new StatusEffectInstance(MorbingTimeStatus.INSTANCE, 600)); @Override public void onInitialize() { @@ -25,8 +34,19 @@ public class Morbing implements ModInitializer { ModEntities.INSTANCE.registerAll(); Registry.register(Registry.FLUID, Morbing.identifier("blood"), STILL_BLOOD); Registry.register(Registry.FLUID, Morbing.identifier("blood_flowing"), FLOWING_BLOOD); - Registry.register(Registry.STATUS_EFFECT, Morbing.identifier("morbingtime"), new MorbingTimeStatus()); - Registry.register(Registry.POTION, Morbing.identifier("morbingtime"), new Potion(new StatusEffectInstance(new MorbingTimeStatus(), 60))); + Registry.register(Registry.STATUS_EFFECT, Morbing.identifier("morbingtime"), MorbingTimeStatus.INSTANCE); + Registry.register(Registry.POTION, Morbing.identifier("morbingtime"), MORB_POTION); + + AttackEntityCallback.EVENT.register((player, world, hand, entity, hitResult) -> { + StatusEffectInstance morbingStatus = player.getStatusEffect(MorbingTimeStatus.INSTANCE); + if (morbingStatus != null && morbingStatus.getDuration() > 0) { + BlockPos blockPos = entity.getBlockPos(); + world.setBlockState(blockPos, ModBlocks.INSTANCE.bloodFluidBlock.getDefaultState().with(Properties.LEVEL_15, 1)); + } + return ActionResult.PASS; + }); + Registry.register(Registry.SOUND_EVENT, Morbing.identifier("itsmorbintime"), ITSMORBINTIME_SOUND); + AccessorBrewingRecipeRegistry.registerPotionRecipe(Potions.AWKWARD, ModItems.INSTANCE.morbSyringe, MORB_POTION); System.out.println("It's Morbing time!"); } } diff --git a/src/main/java/moe/nea/morbing/MorbingClient.java b/src/main/java/moe/nea/morbing/MorbingClient.java index fca79e2..6325bd6 100644 --- a/src/main/java/moe/nea/morbing/MorbingClient.java +++ b/src/main/java/moe/nea/morbing/MorbingClient.java @@ -18,6 +18,5 @@ public class MorbingClient implements ClientModInitializer { )); BlockRenderLayerMap.INSTANCE.putFluids(RenderLayer.getTranslucent(), Morbing.STILL_BLOOD, Morbing.FLOWING_BLOOD); EntityRendererRegistry.register(ModEntities.INSTANCE.morbArrowEntityEntityType, MorbArrowEntityRenderer::new); - } } diff --git a/src/main/java/moe/nea/morbing/MorbingTimeStatus.java b/src/main/java/moe/nea/morbing/MorbingTimeStatus.java index 2ab865a..657f91f 100644 --- a/src/main/java/moe/nea/morbing/MorbingTimeStatus.java +++ b/src/main/java/moe/nea/morbing/MorbingTimeStatus.java @@ -8,4 +8,5 @@ public class MorbingTimeStatus extends StatusEffect { super(StatusEffectCategory.NEUTRAL, 0x10_10_10); } + public static MorbingTimeStatus INSTANCE = new MorbingTimeStatus(); } diff --git a/src/main/java/moe/nea/morbing/mixin/AccessorBrewingRecipeRegistry.java b/src/main/java/moe/nea/morbing/mixin/AccessorBrewingRecipeRegistry.java new file mode 100644 index 0000000..994b72e --- /dev/null +++ b/src/main/java/moe/nea/morbing/mixin/AccessorBrewingRecipeRegistry.java @@ -0,0 +1,16 @@ +package moe.nea.morbing.mixin; + +import net.minecraft.item.Item; +import net.minecraft.potion.Potion; +import net.minecraft.recipe.BrewingRecipeRegistry; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(BrewingRecipeRegistry.class) +public interface AccessorBrewingRecipeRegistry { + @Invoker(value = "registerPotionRecipe") + static void registerPotionRecipe(Potion input, Item item, Potion output) { + throw new IllegalStateException("Mixin not applied"); + } + +} diff --git a/src/main/java/moe/nea/morbing/mixin/MixinAbstractClientPlayerEntity.java b/src/main/java/moe/nea/morbing/mixin/MixinAbstractClientPlayerEntity.java new file mode 100644 index 0000000..553414e --- /dev/null +++ b/src/main/java/moe/nea/morbing/mixin/MixinAbstractClientPlayerEntity.java @@ -0,0 +1,38 @@ +package moe.nea.morbing.mixin; + +import com.mojang.authlib.GameProfile; +import moe.nea.morbing.Morbing; +import moe.nea.morbing.MorbingTimeStatus; +import net.minecraft.client.network.AbstractClientPlayerEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(AbstractClientPlayerEntity.class) +public abstract class MixinAbstractClientPlayerEntity extends PlayerEntity { + + public MixinAbstractClientPlayerEntity(World world, BlockPos pos, float yaw, GameProfile profile) { + super(world, pos, yaw, profile); + } + + @Inject(method = "hasSkinTexture", at = @At("HEAD"), cancellable = true) + public void onHasSkinTexture(CallbackInfoReturnable<Boolean> cir) { + if (hasStatusEffect(MorbingTimeStatus.INSTANCE)) { + cir.setReturnValue(true); + } + } + + @Inject(method = "getSkinTexture", at = @At("HEAD"), cancellable = true) + public void onGetSkinTexture(CallbackInfoReturnable<Identifier> cir) { + if (hasStatusEffect(MorbingTimeStatus.INSTANCE)) { + cir.setReturnValue(Morbing.identifier("morbingskin.png")); + } + } + + +} diff --git a/src/main/resources/assets/morbing/lang/en_us.json b/src/main/resources/assets/morbing/lang/en_us.json index a2326b4..492218d 100644 --- a/src/main/resources/assets/morbing/lang/en_us.json +++ b/src/main/resources/assets/morbing/lang/en_us.json @@ -1,3 +1,7 @@ { - "effect.morbing.morbingtime": "Morbing" + "effect.morbing.morbingtime": "Morbing", + "item.morbing.morbarrow": "Empty Morbing Syringe", + "item.morbing.morbsyringe": "Filled Morbing Syringe", + "tooltip.morbing.morbyringe": "It's Morbing Time!", + "subtitles.morbing.itsmorbintime": "It's Morbing Time!" } diff --git a/src/main/resources/assets/morbing/models/item/morbarrow.json b/src/main/resources/assets/morbing/models/item/morbarrow.json new file mode 100644 index 0000000..afef195 --- /dev/null +++ b/src/main/resources/assets/morbing/models/item/morbarrow.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "morbing:item/morbarrow" + } +} diff --git a/src/main/resources/assets/morbing/models/item/morbsyringe.json b/src/main/resources/assets/morbing/models/item/morbsyringe.json new file mode 100644 index 0000000..857df53 --- /dev/null +++ b/src/main/resources/assets/morbing/models/item/morbsyringe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "morbing:item/morbsyringe" + } +} diff --git a/src/main/resources/assets/morbing/morbingskin.png b/src/main/resources/assets/morbing/morbingskin.png Binary files differnew file mode 100644 index 0000000..2ed2e06 --- /dev/null +++ b/src/main/resources/assets/morbing/morbingskin.png diff --git a/src/main/resources/assets/morbing/sounds.json b/src/main/resources/assets/morbing/sounds.json new file mode 100644 index 0000000..a4a82e6 --- /dev/null +++ b/src/main/resources/assets/morbing/sounds.json @@ -0,0 +1,8 @@ +{ + "itsmorbintime": { + "subtitle": "subtitles.morbing.itsmorbintime", + "sounds": [ + "morbing:itsmorbingtime" + ] + } +} diff --git a/src/main/resources/assets/morbing/sounds/itsmorbingtime.ogg b/src/main/resources/assets/morbing/sounds/itsmorbingtime.ogg Binary files differnew file mode 100644 index 0000000..ed92232 --- /dev/null +++ b/src/main/resources/assets/morbing/sounds/itsmorbingtime.ogg diff --git a/src/main/resources/assets/morbing/textures/item/morbarrow.png b/src/main/resources/assets/morbing/textures/item/morbarrow.png Binary files differnew file mode 100644 index 0000000..dfc0a37 --- /dev/null +++ b/src/main/resources/assets/morbing/textures/item/morbarrow.png diff --git a/src/main/resources/assets/morbing/textures/item/morbsyringe.png b/src/main/resources/assets/morbing/textures/item/morbsyringe.png Binary files differnew file mode 100644 index 0000000..6f324d7 --- /dev/null +++ b/src/main/resources/assets/morbing/textures/item/morbsyringe.png diff --git a/src/main/resources/data/morbing/recipes/morbarrow.json b/src/main/resources/data/morbing/recipes/morbarrow.json new file mode 100644 index 0000000..8e44539 --- /dev/null +++ b/src/main/resources/data/morbing/recipes/morbarrow.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " I ", + " G ", + " G " + ], + "key": { + "I": { + "item": "minecraft:iron_ingot" + }, + "G": { + "tag": "c:glass_blocks" + } + }, + "result": { + "item": "morbing:morbarrow", + "count": 16 + } +} diff --git a/src/main/resources/morbing.mixins.json b/src/main/resources/morbing.mixins.json index cdbc1ea..fd3eb43 100644 --- a/src/main/resources/morbing.mixins.json +++ b/src/main/resources/morbing.mixins.json @@ -3,8 +3,10 @@ "package": "moe.nea.morbing.mixin", "compatibilityLevel": "JAVA_16", "client": [ + "MixinAbstractClientPlayerEntity" ], "mixins": [ + "AccessorBrewingRecipeRegistry" ], "injectors": { "defaultRequire": 1 |