diff --git a/src/main/java/com/jenny/magic/blocks/entities/blockEntities.java b/src/main/java/com/jenny/magic/blocks/entities/blockEntities.java index 1cfeaad..55f2a54 100644 --- a/src/main/java/com/jenny/magic/blocks/entities/blockEntities.java +++ b/src/main/java/com/jenny/magic/blocks/entities/blockEntities.java @@ -12,7 +12,6 @@ import static com.jenny.magic.Magic.MODID; public class blockEntities { public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, MODID); - public static void register(IEventBus bus) { BLOCK_ENTITIES.register(bus); } public static final RegistryObject> ANTI_SPAWNER_BE = @@ -21,4 +20,5 @@ public class blockEntities { blocks.ANTI_SPAWNER.get()).build(null)); + } diff --git a/src/main/java/com/jenny/magic/enchantments/Homing.java b/src/main/java/com/jenny/magic/enchantments/Homing.java index c5c4451..96fa88b 100644 --- a/src/main/java/com/jenny/magic/enchantments/Homing.java +++ b/src/main/java/com/jenny/magic/enchantments/Homing.java @@ -1,6 +1,6 @@ package com.jenny.magic.enchantments; -import com.jenny.magic.items.BaseWand; +import com.jenny.magic.items.wands.BaseWand; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; diff --git a/src/main/java/com/jenny/magic/items/QualityItem.java b/src/main/java/com/jenny/magic/items/QualityItem.java deleted file mode 100644 index 2c51ed8..0000000 --- a/src/main/java/com/jenny/magic/items/QualityItem.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.jenny.magic.items; - -import net.minecraft.ChatFormatting; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.MutableComponent; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.level.Level; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; -import java.util.Random; - -public class QualityItem extends BaseItem { - public QualityItem(Properties pProperties) { - super(pProperties); - } - - @Override - public ItemStack getDefaultInstance() { - return setQuality(new ItemStack(this)); - } - - protected ItemStack setQuality(@NotNull ItemStack itemStack) { - float quality = (float) new Random(System.nanoTime()).nextInt(0, 21) / 10 + 1; - CompoundTag tag; - if (itemStack.getTag() != null) { - tag = itemStack.getTag(); - } else { - tag = new CompoundTag(); - } - tag.putFloat("magic_quality", quality); - itemStack.setTag(tag); - return itemStack; - } - - protected float getQuality(@NotNull ItemStack itemStack) { - return itemStack.getTag() != null ? itemStack.getTag().getFloat("magic_quality") : 1; - } - - @Override - public void appendHoverText(@NotNull ItemStack pStack, @Nullable Level pLevel, @NotNull List pTooltipComponents, @NotNull TooltipFlag pIsAdvanced) { - MutableComponent toolTip = Component.literal(Float.toString(getQuality(pStack))); - pTooltipComponents.add(toolTip.withStyle(ChatFormatting.DARK_RED)); - super.appendHoverText(pStack, pLevel, pTooltipComponents, pIsAdvanced); - } -} diff --git a/src/main/java/com/jenny/magic/items/amulets/AmuletBase.java b/src/main/java/com/jenny/magic/items/amulets/AmuletBase.java new file mode 100644 index 0000000..7e65520 --- /dev/null +++ b/src/main/java/com/jenny/magic/items/amulets/AmuletBase.java @@ -0,0 +1,46 @@ +package com.jenny.magic.items.amulets; + +import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.NotNull; + +public class AmuletBase extends com.jenny.magic.items.scrolls.SingleActionScroll { + public AmuletBase(Properties pProperties) { + super(pProperties.stacksTo(1)); + } + + public static boolean isEnabled(CompoundTag tag) { + if (tag != null && tag.contains("amulet_enabled") && tag.getString("amulet_enabled").equals("false")) { + return false; + } else { + return true; + } + } + + public static CompoundTag setEnabled(CompoundTag tag, boolean b) { + tag.putString("amulet_enabled", Boolean.toString(b)); + return tag; + } + + protected void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, Level level) { + CompoundTag tag = itemStack.getTag(); + if (tag == null) { + tag = new CompoundTag(); + } + itemStack.setTag(setEnabled(tag, !isEnabled(tag))); + } + + @Override + public Component getName(@NotNull ItemStack pStack) { + if (!isEnabled(pStack.getTag())) { + return Component.translatable(this.getDescriptionId(pStack)).withStyle(ChatFormatting.GRAY); + } else { + return Component.translatable(this.getDescriptionId(pStack)); + } + } +} diff --git a/src/main/java/com/jenny/magic/items/amulets/AmuletBonemeal.java b/src/main/java/com/jenny/magic/items/amulets/AmuletBonemeal.java new file mode 100644 index 0000000..c624443 --- /dev/null +++ b/src/main/java/com/jenny/magic/items/amulets/AmuletBonemeal.java @@ -0,0 +1,30 @@ +package com.jenny.magic.items.amulets; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BoneMealItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +public class AmuletBonemeal extends AmuletBase { + protected static int chance = 10; + + public AmuletBonemeal(Properties pProperties) { + super(pProperties); + } + + protected static BlockPos getLocation(Player player) { + return player.blockPosition().offset(new Vec3i(player.level().getRandom().nextIntBetweenInclusive(-5, 5), 0, player.level().getRandom().nextIntBetweenInclusive(-5, 5))); + } + + @Override + public void inventoryTick(@NotNull ItemStack pStack, @NotNull Level pLevel, @NotNull Entity pEntity, int pSlotId, boolean pIsSelected) { + if (!pLevel.isClientSide && isEnabled(pStack.getTag()) && pLevel.getRandom().nextInt(chance) == 0 && pEntity instanceof Player pPlayer) { + BoneMealItem.applyBonemeal(new ItemStack(Items.BONE_MEAL), pLevel, getLocation(pPlayer), pPlayer); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/jenny/magic/items/AmuletEffect.java b/src/main/java/com/jenny/magic/items/amulets/AmuletEffect.java similarity index 63% rename from src/main/java/com/jenny/magic/items/AmuletEffect.java rename to src/main/java/com/jenny/magic/items/amulets/AmuletEffect.java index 1ba331e..e915048 100644 --- a/src/main/java/com/jenny/magic/items/AmuletEffect.java +++ b/src/main/java/com/jenny/magic/items/amulets/AmuletEffect.java @@ -1,6 +1,5 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.amulets; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; @@ -11,25 +10,26 @@ import org.jetbrains.annotations.NotNull; import java.util.Optional; -public class AmuletEffect extends BaseItem { +public class AmuletEffect extends AmuletBase { private MobEffect effect; - private int delay, duration, amplifier; + private int delay, duration, amplifier, tick; public AmuletEffect(Properties pProperties, MobEffect effect, int delay, int duration, int amplifier) { - super(pProperties.stacksTo(1)); + super(pProperties); this.effect = effect; this.delay = delay; this.duration = duration; this.amplifier = amplifier; + this.tick = 0; } @Override public void inventoryTick(@NotNull ItemStack pStack, @NotNull Level pLevel, @NotNull Entity pEntity, int pSlotId, boolean pIsSelected) { - if (!pLevel.isClientSide && ((ServerLevel) pLevel).getServer().getTickCount() % this.delay == 0) { + if (!pLevel.isClientSide && isEnabled(pStack.getTag()) && tick % delay == 0) { if (pEntity instanceof LivingEntity p) { - p.addEffect(new MobEffectInstance(effect, this.duration, this.amplifier, true, true, true, null, Optional.empty())); - System.out.println("test1878567"); + p.addEffect(new MobEffectInstance(effect, duration, amplifier, true, true, true, null, Optional.empty())); } } + tick++; } } diff --git a/src/main/java/com/jenny/magic/items/amulets/AmuletImmunity.java b/src/main/java/com/jenny/magic/items/amulets/AmuletImmunity.java new file mode 100644 index 0000000..62947df --- /dev/null +++ b/src/main/java/com/jenny/magic/items/amulets/AmuletImmunity.java @@ -0,0 +1,35 @@ +package com.jenny.magic.items.amulets; + +import net.minecraft.world.effect.MobEffectCategory; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +public class AmuletImmunity extends AmuletBase { + private static int delay = 200; + private int count = 0; + + public AmuletImmunity(Item.Properties pProperties) { + super(pProperties); + } + + @Override + public void inventoryTick(@NotNull ItemStack pStack, @NotNull Level pLevel, @NotNull Entity pEntity, int pSlotId, boolean pIsSelected) { + if (!pLevel.isClientSide) { + count = count < 200 ? count + 1 : count; + if (count == 200 && pEntity instanceof LivingEntity entity) { + for (MobEffectInstance effect : entity.getActiveEffects()) { + if (effect.getEffect().getCategory().equals(MobEffectCategory.HARMFUL)) { + entity.removeEffect(effect.getEffect()); + count = 1; + break; + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/jenny/magic/items/AmuletRepair.java b/src/main/java/com/jenny/magic/items/amulets/AmuletRepair.java similarity index 75% rename from src/main/java/com/jenny/magic/items/AmuletRepair.java rename to src/main/java/com/jenny/magic/items/amulets/AmuletRepair.java index 0128d62..81511f5 100644 --- a/src/main/java/com/jenny/magic/items/AmuletRepair.java +++ b/src/main/java/com/jenny/magic/items/amulets/AmuletRepair.java @@ -1,4 +1,4 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.amulets; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; @@ -6,17 +6,16 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; -public class AmuletRepair extends BaseItem { +public class AmuletRepair extends AmuletBase { public AmuletRepair(@NotNull Properties pProperties) { super(pProperties.stacksTo(1)); } @Override public void inventoryTick(@NotNull ItemStack pStack, @NotNull Level pLevel, @NotNull Entity pEntity, int pSlotId, boolean pIsSelected) { - if (!pLevel.isClientSide && pLevel.getRandom().nextInt(10) == 0 && pEntity instanceof Player pPlayer) { + if (!pLevel.isClientSide && isEnabled(pStack.getTag()) && pLevel.getRandom().nextInt(10) == 0 && pEntity instanceof Player pPlayer) { int rand = pLevel.getRandom().nextInt(0, 9); ItemStack itemStack = pPlayer.getInventory().items.get(rand); - System.out.println(itemStack.getItem().toString()); if (itemStack.isDamaged()) { itemStack.setDamageValue(itemStack.getDamageValue() - 1); } diff --git a/src/main/java/com/jenny/magic/items/amulets/AmuletSuction.java b/src/main/java/com/jenny/magic/items/amulets/AmuletSuction.java new file mode 100644 index 0000000..ac1a1f7 --- /dev/null +++ b/src/main/java/com/jenny/magic/items/amulets/AmuletSuction.java @@ -0,0 +1,31 @@ +package com.jenny.magic.items.amulets; + +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import org.jetbrains.annotations.NotNull; + +public class AmuletSuction extends AmuletBase { + private int delay, tick; + private float range, power; + + public AmuletSuction(Properties pProperties, int delay, float range, float power) { + super(pProperties); + this.delay = delay; + this.range = range; + this.power = power; + this.tick = 0; + } + + @Override + public void inventoryTick(@NotNull ItemStack pStack, @NotNull Level pLevel, @NotNull Entity pEntity, int pSlotId, boolean pIsSelected) { + if (this.tick % this.delay == 0 && isEnabled(pStack.getTag())) { + for (Entity drop : pLevel.getEntitiesOfClass(ItemEntity.class, new AABB(pEntity.position(), pEntity.position()).inflate(range), (itemEntity) -> true)) { + drop.addDeltaMovement(pEntity.position().subtract(drop.position()).normalize().scale(power)); + } + } + tick++; + } +} diff --git a/src/main/java/com/jenny/magic/items/items.java b/src/main/java/com/jenny/magic/items/items.java index 58344e4..455da48 100644 --- a/src/main/java/com/jenny/magic/items/items.java +++ b/src/main/java/com/jenny/magic/items/items.java @@ -1,5 +1,9 @@ package com.jenny.magic.items; +import com.jenny.magic.items.amulets.*; +import com.jenny.magic.items.scrolls.*; +import com.jenny.magic.items.wands.WandHurtful; +import com.jenny.magic.items.wands.WandVacuum; import net.minecraft.ChatFormatting; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.item.Item; @@ -15,19 +19,21 @@ public class items { public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); public static final RegistryObject WAND_HURTFUL = ITEMS.register("wand_hurtful", () -> new WandHurtful(new Item.Properties())); public static final RegistryObject WAND_VAUUM = ITEMS.register("wand_vacuum", () -> new WandVacuum(new Item.Properties().stacksTo(1))); - public static final RegistryObject SCROLL_TELEPORT = ITEMS.register("scroll_teleport", () -> new TeleportScrollPersistent(new Item.Properties().stacksTo(1))); - public static final RegistryObject SCROLL_TELEPORT_BRITTLE = ITEMS.register("scroll_teleport_brittle", () -> new TeleportScrollConsumable(new Item.Properties().stacksTo(16))); + public static final RegistryObject SCROLL_TELEPORT = ITEMS.register("scroll_teleport", () -> new ScrollTeleportPersistent(new Item.Properties().stacksTo(1))); + public static final RegistryObject SCROLL_TELEPORT_BRITTLE = ITEMS.register("scroll_teleport_brittle", () -> new ScrollTeleportConsumable(new Item.Properties().stacksTo(16))); public static final RegistryObject SCROLL_TELEPORT_RANDOM = ITEMS.register("scroll_teleport_random", () -> new TeleportScrollRandom(new Item.Properties().stacksTo(1))); - public static final RegistryObject SCROLL_TELEPORT_BIOME_PLAINS = ITEMS.register("scroll_teleport_biome_plains", () -> new TeleportScrollBiome(new Item.Properties().stacksTo(16), Biomes.PLAINS, ChatFormatting.GREEN)); - public static final RegistryObject SCROLL_HEALTH = ITEMS.register("scroll_health", () -> new HealthScroll(new Item.Properties().stacksTo(16))); - public static final RegistryObject SCROLL_REPEL = ITEMS.register("scroll_repel", () -> new RepelScroll(new Item.Properties().stacksTo(16))); - public static final RegistryObject SCROLL_BONEMEAL = ITEMS.register("scroll_bonemeal", () -> new BonemealScroll(new Item.Properties().stacksTo(16))); + public static final RegistryObject SCROLL_TELEPORT_BIOME_PLAINS = ITEMS.register("scroll_teleport_biome_plains", () -> new ScrollTeleportBiome(new Item.Properties().stacksTo(16), Biomes.PLAINS, ChatFormatting.GREEN)); + public static final RegistryObject SCROLL_HEALTH = ITEMS.register("scroll_health", () -> new ScrollHealth(new Item.Properties().stacksTo(16))); + public static final RegistryObject SCROLL_REPEL = ITEMS.register("scroll_repel", () -> new ScrollRepel(new Item.Properties().stacksTo(16))); + public static final RegistryObject SCROLL_BONEMEAL = ITEMS.register("scroll_bonemeal", () -> new ScrollBonemeal(new Item.Properties().stacksTo(16))); public static final RegistryObject AMULET_REPAIR = ITEMS.register("amulet_repair", () -> new AmuletRepair(new Item.Properties())); - public static final RegistryObject AMULET_BREATHING = ITEMS.register("amulet_breathing", () -> new AmuletEffect(new Item.Properties(), MobEffects.WATER_BREATHING, 100, 200, 1)); + public static final RegistryObject AMULET_BREATHING = ITEMS.register("amulet_breathing", () -> new AmuletEffect(new Item.Properties(), MobEffects.WATER_BREATHING, 200, 500, 1)); public static final RegistryObject AMULET_NIGHTVISION = ITEMS.register("amulet_nightvision", () -> new AmuletEffect(new Item.Properties(), MobEffects.NIGHT_VISION, 200, 500, 1)); - - public static final RegistryObject DRAGON_HEART = ITEMS.register("dragon_heart", () -> new QualityItem(new Item.Properties())); - + public static final RegistryObject AMULET_SATURATION = ITEMS.register("amulet_saturation", () -> new AmuletEffect(new Item.Properties(), MobEffects.SATURATION, 200, 500, 1)); + public static final RegistryObject AMULET_SUCTION = ITEMS.register("amulet_suction", () -> new AmuletSuction(new Item.Properties(), 3, 4, 0.5f)); + public static final RegistryObject AMULET_BONEMEAL = ITEMS.register("amulet_bonemeal", () -> new AmuletBonemeal(new Item.Properties())); + public static final RegistryObject AMULET_GOLD = ITEMS.register("amulet_gold", () -> new Item(new Item.Properties())); + public static final RegistryObject AMULET_IMMUNITY = ITEMS.register("amulet_immunity", () -> new AmuletImmunity(new Item.Properties())); public static void register(IEventBus bus) { ITEMS.register(bus); } diff --git a/src/main/java/com/jenny/magic/items/BonemealScroll.java b/src/main/java/com/jenny/magic/items/scrolls/ScrollBonemeal.java similarity index 81% rename from src/main/java/com/jenny/magic/items/BonemealScroll.java rename to src/main/java/com/jenny/magic/items/scrolls/ScrollBonemeal.java index abd197a..ff17d21 100644 --- a/src/main/java/com/jenny/magic/items/BonemealScroll.java +++ b/src/main/java/com/jenny/magic/items/scrolls/ScrollBonemeal.java @@ -1,4 +1,4 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.scrolls; import com.jenny.magic.networking.networking; import com.jenny.magic.networking.packets.EffectS2C; @@ -6,19 +6,20 @@ import com.jenny.magic.particles.effects; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BoneMealItem; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; -public class BonemealScroll extends SingleActionScroll { - public BonemealScroll(Properties pProperties) { +public class ScrollBonemeal extends SingleActionScroll { + public ScrollBonemeal(Item.Properties pProperties) { super(pProperties); } @Override - void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, @NotNull Level level) { + protected void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, @NotNull Level level) { if (!level.isClientSide) { boolean flag = false; for (int x = -5; x <= 5; x++) { diff --git a/src/main/java/com/jenny/magic/items/HealthScroll.java b/src/main/java/com/jenny/magic/items/scrolls/ScrollHealth.java similarity index 74% rename from src/main/java/com/jenny/magic/items/HealthScroll.java rename to src/main/java/com/jenny/magic/items/scrolls/ScrollHealth.java index d78322f..8f7cd36 100644 --- a/src/main/java/com/jenny/magic/items/HealthScroll.java +++ b/src/main/java/com/jenny/magic/items/scrolls/ScrollHealth.java @@ -1,22 +1,23 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.scrolls; import com.jenny.magic.networking.networking; import com.jenny.magic.networking.packets.EffectS2C; import com.jenny.magic.particles.effects; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; -public class HealthScroll extends SingleActionScroll { - public HealthScroll(Properties pProperties) { +public class ScrollHealth extends SingleActionScroll { + public ScrollHealth(Item.Properties pProperties) { super(pProperties); } @Override - void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, Level level) { + protected void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, Level level) { if (!level.isClientSide) { if (player.getMaxHealth() != player.getHealth()) { player.heal(5); diff --git a/src/main/java/com/jenny/magic/items/RepelScroll.java b/src/main/java/com/jenny/magic/items/scrolls/ScrollRepel.java similarity index 76% rename from src/main/java/com/jenny/magic/items/RepelScroll.java rename to src/main/java/com/jenny/magic/items/scrolls/ScrollRepel.java index 9f3cb68..436ff0f 100644 --- a/src/main/java/com/jenny/magic/items/RepelScroll.java +++ b/src/main/java/com/jenny/magic/items/scrolls/ScrollRepel.java @@ -1,4 +1,4 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.scrolls; import com.jenny.magic.networking.networking; import com.jenny.magic.networking.packets.EffectS2C; @@ -7,21 +7,25 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; -public class RepelScroll extends SingleActionScroll { - public RepelScroll(Properties pProperties) { +public class ScrollRepel extends SingleActionScroll { + public ScrollRepel(Item.Properties pProperties) { super(pProperties); } @Override - void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, @NotNull Level level) { + protected void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, @NotNull Level level) { if (!level.isClientSide) { boolean flag = false; for (Entity e : level.getEntitiesOfClass(LivingEntity.class, player.getBoundingBox().inflate(5, 2, 5))) { + if (e.is(player)) { + continue; + } e.addDeltaMovement(e.position().subtract(player.position()).normalize().scale(5 * e.position().subtract(player.position()).length()).multiply(1, 0, 1)); flag = true; networking.sendToPlayer(new EffectS2C(effects.EFFECT.SCROLL_REPEL, e.position().add(0, e.getEyeHeight(), 0)), (ServerPlayer) player); diff --git a/src/main/java/com/jenny/magic/items/TeleportScroll.java b/src/main/java/com/jenny/magic/items/scrolls/ScrollTeleport.java similarity index 97% rename from src/main/java/com/jenny/magic/items/TeleportScroll.java rename to src/main/java/com/jenny/magic/items/scrolls/ScrollTeleport.java index fbdcd44..4a2e787 100644 --- a/src/main/java/com/jenny/magic/items/TeleportScroll.java +++ b/src/main/java/com/jenny/magic/items/scrolls/ScrollTeleport.java @@ -1,4 +1,4 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.scrolls; import com.jenny.magic.config.ConfigServer; import com.jenny.magic.networking.networking; @@ -25,8 +25,8 @@ import java.util.List; import static com.jenny.magic.Magic.MODID; -public class TeleportScroll extends BaseItem { - public TeleportScroll(Properties pProperties) { +public class ScrollTeleport extends ScrollTeleportRandom { + public ScrollTeleport(Properties pProperties) { super(pProperties); } diff --git a/src/main/java/com/jenny/magic/items/TeleportScrollBiome.java b/src/main/java/com/jenny/magic/items/scrolls/ScrollTeleportBiome.java similarity index 95% rename from src/main/java/com/jenny/magic/items/TeleportScrollBiome.java rename to src/main/java/com/jenny/magic/items/scrolls/ScrollTeleportBiome.java index 5bab3f7..389f1c5 100644 --- a/src/main/java/com/jenny/magic/items/TeleportScrollBiome.java +++ b/src/main/java/com/jenny/magic/items/scrolls/ScrollTeleportBiome.java @@ -1,4 +1,4 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.scrolls; import com.jenny.magic.networking.networking; import com.jenny.magic.networking.packets.EffectS2C; @@ -28,11 +28,11 @@ import java.util.List; import static com.jenny.magic.Magic.MODID; -public class TeleportScrollBiome extends BaseItem { +public class ScrollTeleportBiome extends ScrollTeleportRandom { private final ResourceKey biome; private final ChatFormatting color; - public TeleportScrollBiome(Properties pProperties, ResourceKey biome, ChatFormatting color) { + public ScrollTeleportBiome(Properties pProperties, ResourceKey biome, ChatFormatting color) { super(pProperties); this.biome = biome; this.color = color; diff --git a/src/main/java/com/jenny/magic/items/TeleportScrollConsumable.java b/src/main/java/com/jenny/magic/items/scrolls/ScrollTeleportConsumable.java similarity index 78% rename from src/main/java/com/jenny/magic/items/TeleportScrollConsumable.java rename to src/main/java/com/jenny/magic/items/scrolls/ScrollTeleportConsumable.java index 6cc9c10..3975e1f 100644 --- a/src/main/java/com/jenny/magic/items/TeleportScrollConsumable.java +++ b/src/main/java/com/jenny/magic/items/scrolls/ScrollTeleportConsumable.java @@ -1,4 +1,4 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.scrolls; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -6,8 +6,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; -public class TeleportScrollConsumable extends TeleportScroll { - public TeleportScrollConsumable(Properties pProperties) { +public class ScrollTeleportConsumable extends ScrollTeleport { + public ScrollTeleportConsumable(Properties pProperties) { super(pProperties); } diff --git a/src/main/java/com/jenny/magic/items/TeleportScrollPersistent.java b/src/main/java/com/jenny/magic/items/scrolls/ScrollTeleportPersistent.java similarity index 74% rename from src/main/java/com/jenny/magic/items/TeleportScrollPersistent.java rename to src/main/java/com/jenny/magic/items/scrolls/ScrollTeleportPersistent.java index 894ae7d..1735040 100644 --- a/src/main/java/com/jenny/magic/items/TeleportScrollPersistent.java +++ b/src/main/java/com/jenny/magic/items/scrolls/ScrollTeleportPersistent.java @@ -1,13 +1,13 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.scrolls; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.NotNull; -public class TeleportScrollPersistent extends TeleportScroll { +public class ScrollTeleportPersistent extends ScrollTeleport { - public TeleportScrollPersistent(Properties pProperties) { + public ScrollTeleportPersistent(Properties pProperties) { super(pProperties); } diff --git a/src/main/java/com/jenny/magic/items/BaseItem.java b/src/main/java/com/jenny/magic/items/scrolls/ScrollTeleportRandom.java similarity index 92% rename from src/main/java/com/jenny/magic/items/BaseItem.java rename to src/main/java/com/jenny/magic/items/scrolls/ScrollTeleportRandom.java index 85d72d8..2b993a9 100644 --- a/src/main/java/com/jenny/magic/items/BaseItem.java +++ b/src/main/java/com/jenny/magic/items/scrolls/ScrollTeleportRandom.java @@ -1,4 +1,4 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.scrolls; import com.jenny.magic.networking.networking; import com.jenny.magic.networking.packets.ManaAmountS2C; @@ -20,9 +20,9 @@ import java.util.List; import static com.jenny.magic.Magic.MODID; -abstract class BaseItem extends Item { +public abstract class ScrollTeleportRandom extends Item { - public BaseItem(Properties pProperties) { + public ScrollTeleportRandom(Properties pProperties) { super(pProperties); } @@ -52,7 +52,7 @@ abstract class BaseItem extends Item { } } - enum ParticleDirection { + public enum ParticleDirection { INWARD, OUTWARD } diff --git a/src/main/java/com/jenny/magic/items/SingleActionScroll.java b/src/main/java/com/jenny/magic/items/scrolls/SingleActionScroll.java similarity index 83% rename from src/main/java/com/jenny/magic/items/SingleActionScroll.java rename to src/main/java/com/jenny/magic/items/scrolls/SingleActionScroll.java index 6aa7fb5..232e391 100644 --- a/src/main/java/com/jenny/magic/items/SingleActionScroll.java +++ b/src/main/java/com/jenny/magic/items/scrolls/SingleActionScroll.java @@ -1,4 +1,4 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.scrolls; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -10,7 +10,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; -abstract class SingleActionScroll extends BaseItem { +public abstract class SingleActionScroll extends ScrollTeleportRandom { public SingleActionScroll(Properties pProperties) { super(pProperties); } @@ -27,5 +27,5 @@ abstract class SingleActionScroll extends BaseItem { return InteractionResult.SUCCESS; } - abstract void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, Level level); + protected abstract void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, Level level); } diff --git a/src/main/java/com/jenny/magic/items/TeleportScrollRandom.java b/src/main/java/com/jenny/magic/items/scrolls/TeleportScrollRandom.java similarity index 98% rename from src/main/java/com/jenny/magic/items/TeleportScrollRandom.java rename to src/main/java/com/jenny/magic/items/scrolls/TeleportScrollRandom.java index 515e45d..16d2b8a 100644 --- a/src/main/java/com/jenny/magic/items/TeleportScrollRandom.java +++ b/src/main/java/com/jenny/magic/items/scrolls/TeleportScrollRandom.java @@ -1,4 +1,4 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.scrolls; import com.jenny.magic.config.ConfigServer; import com.jenny.magic.networking.networking; @@ -30,7 +30,7 @@ import java.util.List; import static com.jenny.magic.Magic.MODID; -public class TeleportScrollRandom extends BaseItem { +public class TeleportScrollRandom extends ScrollTeleportRandom { public TeleportScrollRandom(Properties pProperties) { super(pProperties); } diff --git a/src/main/java/com/jenny/magic/items/BaseWand.java b/src/main/java/com/jenny/magic/items/wands/BaseWand.java similarity index 78% rename from src/main/java/com/jenny/magic/items/BaseWand.java rename to src/main/java/com/jenny/magic/items/wands/BaseWand.java index 1ebbf1a..139cd3b 100644 --- a/src/main/java/com/jenny/magic/items/BaseWand.java +++ b/src/main/java/com/jenny/magic/items/wands/BaseWand.java @@ -1,38 +1,33 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.wands; import com.jenny.magic.entities.BaseWandProjectile; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; -public abstract class BaseWand extends QualityItem { - public BaseWand(Properties properties) { +public abstract class BaseWand extends Item { + public BaseWand(Item.Properties properties) { super(properties.stacksTo(1).durability(100)); } - private static void onItemDestroyed(Player player) { - } - @Override public @NotNull InteractionResultHolder use(@NotNull Level pLevel, Player pPlayer, @NotNull InteractionHand pUsedHand) { ItemStack itemstack = pPlayer.getItemInHand(pUsedHand); BaseWandProjectile projectile = newProjectile(pLevel); projectile.shootFromRotation(pPlayer, pPlayer.getXRot(), pPlayer.getYRot(), 0.0F, 2.0F); pLevel.addFreshEntity(projectile); - itemstack.hurtAndBreak(1, pPlayer, (player) -> { - player.broadcastBreakEvent(pPlayer.getUsedItemHand()); - }); + itemstack.hurtAndBreak(1, pPlayer, (player) -> player.broadcastBreakEvent(pPlayer.getUsedItemHand())); return InteractionResultHolder.success(itemstack); } - ; - @Override public boolean isValidRepairItem(@NotNull ItemStack pStack, @NotNull ItemStack pRepairCandidate) { - if (pRepairCandidate.getItem().getDescriptionId().equals(items.DRAGON_HEART.get().getDescriptionId())) { + if (pRepairCandidate.getItem().getDescriptionId().equals(Items.DIAMOND.getDescriptionId())) { while (pRepairCandidate.getCount() >= 1 && pStack.isDamaged()) { pRepairCandidate.shrink(1); pStack.setDamageValue(pStack.getDamageValue() - 20); diff --git a/src/main/java/com/jenny/magic/items/WandHurtful.java b/src/main/java/com/jenny/magic/items/wands/WandHurtful.java similarity index 72% rename from src/main/java/com/jenny/magic/items/WandHurtful.java rename to src/main/java/com/jenny/magic/items/wands/WandHurtful.java index d36f8d1..de211e6 100644 --- a/src/main/java/com/jenny/magic/items/WandHurtful.java +++ b/src/main/java/com/jenny/magic/items/wands/WandHurtful.java @@ -1,11 +1,12 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.wands; import com.jenny.magic.entities.BaseWandProjectile; import com.jenny.magic.entities.HurtfulProjectile; +import net.minecraft.world.item.Item; import net.minecraft.world.level.Level; public class WandHurtful extends BaseWand { - public WandHurtful(Properties p_41383_) { + public WandHurtful(Item.Properties p_41383_) { super(p_41383_); } diff --git a/src/main/java/com/jenny/magic/items/WandVacuum.java b/src/main/java/com/jenny/magic/items/wands/WandVacuum.java similarity index 92% rename from src/main/java/com/jenny/magic/items/WandVacuum.java rename to src/main/java/com/jenny/magic/items/wands/WandVacuum.java index 1471372..f394747 100644 --- a/src/main/java/com/jenny/magic/items/WandVacuum.java +++ b/src/main/java/com/jenny/magic/items/wands/WandVacuum.java @@ -1,5 +1,6 @@ -package com.jenny.magic.items; +package com.jenny.magic.items.wands; +import com.jenny.magic.items.scrolls.ScrollTeleportRandom; import com.jenny.magic.networking.networking; import com.jenny.magic.networking.packets.EffectS2C; import com.jenny.magic.particles.effects; @@ -16,7 +17,7 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; -public class WandVacuum extends BaseItem { +public class WandVacuum extends ScrollTeleportRandom { public WandVacuum(Properties pProperties) { super(pProperties); } diff --git a/src/main/java/com/jenny/magic/mixins/ExperienceToMana.java b/src/main/java/com/jenny/magic/mixins/ExperienceToMana.java deleted file mode 100644 index 36f3388..0000000 --- a/src/main/java/com/jenny/magic/mixins/ExperienceToMana.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.jenny.magic.mixins; - -import com.jenny.magic.mana.ManaClient; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.resources.ResourceLocation; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Gui.class) -public class ExperienceToMana { - @Shadow - protected int screenHeight; - @Unique - private float experienceProgress; - @Unique - private int experienceLevel; - @Unique - private ResourceLocation guiIconsLocation = new ResourceLocation("textures/gui/icons_mana.png"); - - @Unique - private Gui self() { - return (Gui) (Object) this; - } - - @Unique - private boolean manaMode() { - return System.currentTimeMillis() - ManaClient.lastUse < 1000; - } - - - /** - * @author xJenny69 - * @reason display mana instead of xp bar - */ - @Inject(method = "renderExperienceBar", at = @At("HEAD")) - public void renderExperienceBarHead(GuiGraphics pGuiGraphics, int pX, CallbackInfo ci) { - if (manaMode()) { - experienceLevel = Minecraft.getInstance().player.experienceLevel; - experienceProgress = Minecraft.getInstance().player.experienceProgress; - - Minecraft.getInstance().player.experienceLevel = ManaClient.mana; - Minecraft.getInstance().player.experienceProgress = (float) ManaClient.mana / 100; - } - } - - @Inject(method = "renderExperienceBar", at = @At("TAIL")) - public void renderExperienceBarTail(GuiGraphics pGuiGraphics, int pX, CallbackInfo ci) { - if (manaMode()) { - int l = this.screenHeight - 32 + 3; - pGuiGraphics.blit(guiIconsLocation, pX, l, 0, 64, 182, 5); - Minecraft.getInstance().player.experienceLevel = experienceLevel; - Minecraft.getInstance().player.experienceProgress = experienceProgress; - } - } -} diff --git a/src/main/java/com/jenny/magic/mixins/PiglinAi.java b/src/main/java/com/jenny/magic/mixins/PiglinAi.java new file mode 100644 index 0000000..369c6e2 --- /dev/null +++ b/src/main/java/com/jenny/magic/mixins/PiglinAi.java @@ -0,0 +1,20 @@ +package com.jenny.magic.mixins; + +import com.jenny.magic.items.items; +import com.jenny.magic.util.util; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +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(net.minecraft.world.entity.monster.piglin.PiglinAi.class) +public class PiglinAi { + @Inject(method = "isWearingGold", at = @At("RETURN"), cancellable = true) + private static void isWearingGold(LivingEntity pLivingEntity, CallbackInfoReturnable cir) { + if (pLivingEntity instanceof Player player && util.hasItem(player, items.AMULET_GOLD.get())) { + cir.setReturnValue(true); + } + } +} diff --git a/src/main/java/com/jenny/magic/mixins/ShapelessRecipeMixin.java b/src/main/java/com/jenny/magic/mixins/ShapelessRecipeMixin.java deleted file mode 100644 index 77c9515..0000000 --- a/src/main/java/com/jenny/magic/mixins/ShapelessRecipeMixin.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.jenny.magic.mixins; - -import net.minecraft.core.NonNullList; -import net.minecraft.core.RegistryAccess; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.inventory.CraftingContainer; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.item.crafting.ShapelessRecipe; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(ShapelessRecipe.class) -public class ShapelessRecipeMixin { - @Final - @Shadow - ItemStack result; - - @Final - @Shadow - NonNullList ingredients; - - /** - * @author xJenny69 - * @reason allow "magic_quality" tag to be passed on - */ - @Overwrite - public ItemStack assemble(CraftingContainer pContainer, RegistryAccess pRegistryAccess) { - for (Ingredient ingredient : ingredients) { - for (ItemStack itemStack : ingredient.getItems()) { - if (itemStack.getTag() != null && itemStack.getTag().contains("magic_quality")) { - CompoundTag tag = result.getTag(); - tag.putFloat("magic_quality", itemStack.getTag().getFloat("magic_quality")); - result.setTag(tag); - return result.copy(); - } - } - } - return result.copy(); - } - - /** - * @author - * @reason - */ - @Overwrite - public ItemStack getResultItem(RegistryAccess pRegistryAccess) { - for (Ingredient ingredient : ingredients) { - for (ItemStack itemStack : ingredient.getItems()) { - if (itemStack.getTag() != null && itemStack.getTag().contains("magic_quality")) { - CompoundTag tag = result.getTag(); - tag.putFloat("magic_quality", itemStack.getTag().getFloat("magic_quality")); - result.setTag(tag); - return result.copy(); - } - } - } - return result.copy(); - } - -} diff --git a/src/main/java/com/jenny/magic/util/util.java b/src/main/java/com/jenny/magic/util/util.java new file mode 100644 index 0000000..62e4708 --- /dev/null +++ b/src/main/java/com/jenny/magic/util/util.java @@ -0,0 +1,16 @@ +package com.jenny.magic.util; + +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +public class util { + public static boolean hasItem(Player player, Item item) { + for (ItemStack itemStack : player.getInventory().items) { + if (itemStack.getItem().equals(item)) { + return true; + } + } + return false; + } +} diff --git a/src/main/resources/assets/magic/textures/item/amulet_bonemeal.png b/src/main/resources/assets/magic/textures/item/amulet_bonemeal.png new file mode 100644 index 0000000..2e135d5 Binary files /dev/null and b/src/main/resources/assets/magic/textures/item/amulet_bonemeal.png differ diff --git a/src/main/resources/assets/magic/textures/item/amulet_breathing.png b/src/main/resources/assets/magic/textures/item/amulet_breathing.png new file mode 100644 index 0000000..9a8837e Binary files /dev/null and b/src/main/resources/assets/magic/textures/item/amulet_breathing.png differ diff --git a/src/main/resources/assets/magic/textures/item/amulet_gold.png b/src/main/resources/assets/magic/textures/item/amulet_gold.png new file mode 100644 index 0000000..0b1a140 Binary files /dev/null and b/src/main/resources/assets/magic/textures/item/amulet_gold.png differ diff --git a/src/main/resources/assets/magic/textures/item/amulet_growth.png b/src/main/resources/assets/magic/textures/item/amulet_growth.png new file mode 100644 index 0000000..62ec713 Binary files /dev/null and b/src/main/resources/assets/magic/textures/item/amulet_growth.png differ diff --git a/src/main/resources/assets/magic/textures/item/amulet_nightvision.png b/src/main/resources/assets/magic/textures/item/amulet_nightvision.png new file mode 100644 index 0000000..3fc27c8 Binary files /dev/null and b/src/main/resources/assets/magic/textures/item/amulet_nightvision.png differ diff --git a/src/main/resources/assets/magic/textures/item/amulet_repair.png b/src/main/resources/assets/magic/textures/item/amulet_repair.png index 1b847d5..d47d28c 100644 Binary files a/src/main/resources/assets/magic/textures/item/amulet_repair.png and b/src/main/resources/assets/magic/textures/item/amulet_repair.png differ diff --git a/src/main/resources/assets/magic/textures/item/amulet_saturation.png b/src/main/resources/assets/magic/textures/item/amulet_saturation.png new file mode 100644 index 0000000..c67e57f Binary files /dev/null and b/src/main/resources/assets/magic/textures/item/amulet_saturation.png differ diff --git a/src/main/resources/assets/magic/textures/item/amulet_suction.png b/src/main/resources/assets/magic/textures/item/amulet_suction.png new file mode 100644 index 0000000..b76be27 Binary files /dev/null and b/src/main/resources/assets/magic/textures/item/amulet_suction.png differ diff --git a/src/main/resources/magic.mixins.json b/src/main/resources/magic.mixins.json index e6ed0fe..adbed21 100644 --- a/src/main/resources/magic.mixins.json +++ b/src/main/resources/magic.mixins.json @@ -2,14 +2,12 @@ "required": true, "minVersion": "0.8", "package": "com.jenny.magic.mixins", - "compatibilityLevel": "JAVA_8", + "compatibilityLevel": "JAVA_17", "refmap": "magic.refmap.json", "mixins": [ - "ShapelessRecipeMixin" - ], - "client": [ - "ExperienceToMana" + "PiglinAi" ], + "client": [], "injectors": { "defaultRequire": 1 }