diff --git a/src/main/java/com/jenny/magic/Magic.java b/src/main/java/com/jenny/magic/Magic.java index 93dba0c..c550ef9 100644 --- a/src/main/java/com/jenny/magic/Magic.java +++ b/src/main/java/com/jenny/magic/Magic.java @@ -1,12 +1,13 @@ package com.jenny.magic; import com.jenny.magic.blocks.blocks; -import com.jenny.magic.blocks.conditions.conditions; import com.jenny.magic.blocks.entities.blockEntities; -import com.jenny.magic.blocks.networking.networking; +import com.jenny.magic.conditions.conditions; import com.jenny.magic.config.ConfigServer; +import com.jenny.magic.enchantments.enchantments; import com.jenny.magic.entities.entities; import com.jenny.magic.items.items; +import com.jenny.magic.networking.networking; import com.mojang.logging.LogUtils; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; @@ -34,6 +35,7 @@ public class Magic { items.register(modEventBus); blocks.register(modEventBus); blockEntities.register(modEventBus); + enchantments.register(modEventBus); creativeTab.register(modEventBus); } diff --git a/src/main/java/com/jenny/magic/blocks/AntiSpawner.java b/src/main/java/com/jenny/magic/blocks/AntiSpawner.java index 7a32f6a..f74a4ef 100644 --- a/src/main/java/com/jenny/magic/blocks/AntiSpawner.java +++ b/src/main/java/com/jenny/magic/blocks/AntiSpawner.java @@ -5,18 +5,15 @@ import com.jenny.magic.blocks.entities.blockEntities; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BaseEntityBlock; -import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.shapes.VoxelShape; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class AntiSpawner extends BaseEntityBlock { - public static final VoxelShape SHAPE = Block.box(0, 0, 0, 16, 16, 16); - protected AntiSpawner(Properties pProperties) { super(pProperties); } @@ -26,6 +23,11 @@ public class AntiSpawner extends BaseEntityBlock { return new AntiSpawnerBE(pPos, pState); } + @Override + public RenderShape getRenderShape(BlockState pState) { + return RenderShape.MODEL; + } + @Nullable @Override public BlockEntityTicker getTicker(@NotNull Level pLevel, @NotNull BlockState pState, @NotNull BlockEntityType pBlockEntityType) { diff --git a/src/main/java/com/jenny/magic/blocks/entities/AntiSpawnerBE.java b/src/main/java/com/jenny/magic/blocks/entities/AntiSpawnerBE.java index b099d3f..36df306 100644 --- a/src/main/java/com/jenny/magic/blocks/entities/AntiSpawnerBE.java +++ b/src/main/java/com/jenny/magic/blocks/entities/AntiSpawnerBE.java @@ -22,7 +22,6 @@ public class AntiSpawnerBE extends BlockEntity { for (Entity e : pLevel.getEntities(null, area)) { if (e instanceof Monster && ((Monster) e).getSpawnType() == MobSpawnType.NATURAL) { e.remove(Entity.RemovalReason.KILLED); - e.remove(Entity.RemovalReason.KILLED); } } } diff --git a/src/main/java/com/jenny/magic/blocks/conditions/ConfigCondition.java b/src/main/java/com/jenny/magic/conditions/ConfigCondition.java similarity index 96% rename from src/main/java/com/jenny/magic/blocks/conditions/ConfigCondition.java rename to src/main/java/com/jenny/magic/conditions/ConfigCondition.java index 959d6b8..baa93a3 100644 --- a/src/main/java/com/jenny/magic/blocks/conditions/ConfigCondition.java +++ b/src/main/java/com/jenny/magic/conditions/ConfigCondition.java @@ -1,4 +1,4 @@ -package com.jenny.magic.blocks.conditions; +package com.jenny.magic.conditions; import com.google.gson.JsonObject; import net.minecraft.resources.ResourceLocation; diff --git a/src/main/java/com/jenny/magic/blocks/conditions/conditions.java b/src/main/java/com/jenny/magic/conditions/conditions.java similarity index 95% rename from src/main/java/com/jenny/magic/blocks/conditions/conditions.java rename to src/main/java/com/jenny/magic/conditions/conditions.java index 2d292ee..456a6dc 100644 --- a/src/main/java/com/jenny/magic/blocks/conditions/conditions.java +++ b/src/main/java/com/jenny/magic/conditions/conditions.java @@ -1,4 +1,4 @@ -package com.jenny.magic.blocks.conditions; +package com.jenny.magic.conditions; import com.jenny.magic.blocks.blocks; import com.jenny.magic.config.ConfigServer; diff --git a/src/main/java/com/jenny/magic/enchantments/Homing.java b/src/main/java/com/jenny/magic/enchantments/Homing.java new file mode 100644 index 0000000..c5c4451 --- /dev/null +++ b/src/main/java/com/jenny/magic/enchantments/Homing.java @@ -0,0 +1,38 @@ +package com.jenny.magic.enchantments; + +import com.jenny.magic.items.BaseWand; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentCategory; +import org.jetbrains.annotations.NotNull; + +public class Homing extends Enchantment { + + protected Homing(Rarity pRarity, EnchantmentCategory pCategory, EquipmentSlot[] pApplicableSlots) { + super(pRarity, pCategory, pApplicableSlots); + } + + @Override + public int getMaxLevel() { + return 3; + } + + @Override + public boolean canEnchant(@NotNull ItemStack pStack) { + return canApplyAtEnchantingTable(pStack) && isApplicableWand(pStack.getItem()); + } + + private boolean isApplicableWand(Item item) { + return item instanceof BaseWand; + } + + public boolean isTradeable() { + return false; + } + + public boolean isDiscoverable() { + return false; + } +} diff --git a/src/main/java/com/jenny/magic/enchantments/enchantments.java b/src/main/java/com/jenny/magic/enchantments/enchantments.java new file mode 100644 index 0000000..752c134 --- /dev/null +++ b/src/main/java/com/jenny/magic/enchantments/enchantments.java @@ -0,0 +1,25 @@ +package com.jenny.magic.enchantments; + +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentCategory; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +import static com.jenny.magic.Magic.MODID; + +public class enchantments { + public static final DeferredRegister ENCHANTMENTS = + DeferredRegister.create(ForgeRegistries.ENCHANTMENTS, MODID); + + public static RegistryObject HOMING = + ENCHANTMENTS.register("homing", + () -> new Homing(Enchantment.Rarity.VERY_RARE, + EnchantmentCategory.WEAPON, new EquipmentSlot[]{EquipmentSlot.MAINHAND})); + + public static void register(IEventBus eventBus) { + ENCHANTMENTS.register(eventBus); + } +} diff --git a/src/main/java/com/jenny/magic/entities/BaseWandProjectile.java b/src/main/java/com/jenny/magic/entities/BaseWandProjectile.java index 54d0f44..501c06f 100644 --- a/src/main/java/com/jenny/magic/entities/BaseWandProjectile.java +++ b/src/main/java/com/jenny/magic/entities/BaseWandProjectile.java @@ -45,7 +45,6 @@ public abstract class BaseWandProjectile extends AbstractArrow { hitParticles(); } hitEntity(pResult); - //this.discard(); } @Override @@ -55,7 +54,6 @@ public abstract class BaseWandProjectile extends AbstractArrow { hitParticles(); } super.onHitBlock(pResult); - //this.discard(); } protected Vec3 particlePos(double dist) { diff --git a/src/main/java/com/jenny/magic/items/BaseItem.java b/src/main/java/com/jenny/magic/items/BaseItem.java index a02f9bd..85d72d8 100644 --- a/src/main/java/com/jenny/magic/items/BaseItem.java +++ b/src/main/java/com/jenny/magic/items/BaseItem.java @@ -1,7 +1,7 @@ package com.jenny.magic.items; -import com.jenny.magic.blocks.networking.networking; -import com.jenny.magic.blocks.networking.packets.ManaAmountS2C; +import com.jenny.magic.networking.networking; +import com.jenny.magic.networking.packets.ManaAmountS2C; import net.minecraft.ChatFormatting; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.network.chat.Component; diff --git a/src/main/java/com/jenny/magic/items/BaseWand.java b/src/main/java/com/jenny/magic/items/BaseWand.java index ea0e68b..af4d5ed 100644 --- a/src/main/java/com/jenny/magic/items/BaseWand.java +++ b/src/main/java/com/jenny/magic/items/BaseWand.java @@ -1,7 +1,7 @@ package com.jenny.magic.items; -import com.jenny.magic.blocks.mana.ManaClient; import com.jenny.magic.entities.BaseWandProjectile; +import com.jenny.magic.mana.ManaClient; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; @@ -10,7 +10,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; -abstract class BaseWand extends BaseItem { +public abstract class BaseWand extends QualityItem { public BaseWand(Properties properties) { super(properties.stacksTo(1)); } diff --git a/src/main/java/com/jenny/magic/items/QualityItem.java b/src/main/java/com/jenny/magic/items/QualityItem.java new file mode 100644 index 0000000..2c51ed8 --- /dev/null +++ b/src/main/java/com/jenny/magic/items/QualityItem.java @@ -0,0 +1,49 @@ +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/HurtfulWand.java b/src/main/java/com/jenny/magic/items/WandHurtful.java similarity index 78% rename from src/main/java/com/jenny/magic/items/HurtfulWand.java rename to src/main/java/com/jenny/magic/items/WandHurtful.java index 9989d8f..d36f8d1 100644 --- a/src/main/java/com/jenny/magic/items/HurtfulWand.java +++ b/src/main/java/com/jenny/magic/items/WandHurtful.java @@ -4,8 +4,8 @@ import com.jenny.magic.entities.BaseWandProjectile; import com.jenny.magic.entities.HurtfulProjectile; import net.minecraft.world.level.Level; -public class HurtfulWand extends BaseWand { - public HurtfulWand(Properties p_41383_) { +public class WandHurtful extends BaseWand { + public WandHurtful(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/WandVacuum.java new file mode 100644 index 0000000..13eaea5 --- /dev/null +++ b/src/main/java/com/jenny/magic/items/WandVacuum.java @@ -0,0 +1,44 @@ +package com.jenny.magic.items; + +import com.jenny.magic.networking.networking; +import com.jenny.magic.networking.packets.EffectS2C; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.NotNull; + +public class WandVacuum extends BaseItem { + public WandVacuum(Properties pProperties) { + super(pProperties); + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level pLevel, @NotNull Player pPlayer, @NotNull InteractionHand pUsedHand) { + use(pPlayer.position(), pPlayer, pPlayer.getItemInHand(pUsedHand), pLevel); + return InteractionResultHolder.success(pPlayer.getItemInHand(pUsedHand)); + } + + @Override + public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) { + use(pContext.getClickedPos().getCenter().add(0, 0.5, 0), pContext.getPlayer(), pContext.getItemInHand(), pContext.getLevel()); + return InteractionResult.SUCCESS; + } + + protected void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, Level level) { + if (!level.isClientSide) { + AABB aabb = new AABB(player.position().subtract(20, 20, 20), player.position().add(20, 20, 20)); + for (ItemEntity e : level.getEntitiesOfClass(ItemEntity.class, aabb)) { + e.playerTouch(player); + } + networking.sendToPlayer(new EffectS2C(EffectS2C.Effect.WAND_VACUUM, player.position(), player.position()), (ServerPlayer) player); + } + } +} diff --git a/src/main/java/com/jenny/magic/items/items.java b/src/main/java/com/jenny/magic/items/items.java index 66373d6..0e73f35 100644 --- a/src/main/java/com/jenny/magic/items/items.java +++ b/src/main/java/com/jenny/magic/items/items.java @@ -12,12 +12,15 @@ import static com.jenny.magic.Magic.MODID; public class items { public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); - public static final RegistryObject WAND_HURTFUL = ITEMS.register("wand_hurtful", () -> new HurtfulWand(new Item.Properties())); + 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())); 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_RANDOM = ITEMS.register("scroll_teleport_random", () -> new TeleportScrollRandom(new Item.Properties().stacksTo(1))); //public static final RegistryObject SCROLL_TELEPORT_RANDOM_BIOME = ITEMS.register("scroll_teleport_random_biome", () -> new TeleportScrollRandomBiome(new Item.Properties().stacksTo(16))); 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 DRAGON_HEART = ITEMS.register("dragon_heart", () -> new QualityItem(new Item.Properties())); + public static void register(IEventBus bus) { ITEMS.register(bus); diff --git a/src/main/java/com/jenny/magic/blocks/mana/ManaClient.java b/src/main/java/com/jenny/magic/mana/ManaClient.java similarity index 72% rename from src/main/java/com/jenny/magic/blocks/mana/ManaClient.java rename to src/main/java/com/jenny/magic/mana/ManaClient.java index 4207140..73e2c43 100644 --- a/src/main/java/com/jenny/magic/blocks/mana/ManaClient.java +++ b/src/main/java/com/jenny/magic/mana/ManaClient.java @@ -1,4 +1,4 @@ -package com.jenny.magic.blocks.mana; +package com.jenny.magic.mana; public class ManaClient { public static int mana = 100; diff --git a/src/main/java/com/jenny/magic/mana/ManaServer.java b/src/main/java/com/jenny/magic/mana/ManaServer.java new file mode 100644 index 0000000..25f7d00 --- /dev/null +++ b/src/main/java/com/jenny/magic/mana/ManaServer.java @@ -0,0 +1,20 @@ +package com.jenny.magic.mana; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.event.server.ServerLifecycleEvent; +import net.minecraftforge.fml.common.Mod; + +import java.util.HashMap; + +import static com.jenny.magic.Magic.MODID; + +@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.DEDICATED_SERVER) +public class ManaServer { + public static HashMap mana = new HashMap<>(); + + public static void serverLoad(ServerLifecycleEvent event) { + if event. + } + + public st +} diff --git a/src/main/java/com/jenny/magic/mixins/ExperienceToMana.java b/src/main/java/com/jenny/magic/mixins/ExperienceToMana.java index a86b079..36f3388 100644 --- a/src/main/java/com/jenny/magic/mixins/ExperienceToMana.java +++ b/src/main/java/com/jenny/magic/mixins/ExperienceToMana.java @@ -1,6 +1,6 @@ package com.jenny.magic.mixins; -import com.jenny.magic.blocks.mana.ManaClient; +import com.jenny.magic.mana.ManaClient; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; diff --git a/src/main/java/com/jenny/magic/mixins/ShapelessRecipeMixin.java b/src/main/java/com/jenny/magic/mixins/ShapelessRecipeMixin.java new file mode 100644 index 0000000..77c9515 --- /dev/null +++ b/src/main/java/com/jenny/magic/mixins/ShapelessRecipeMixin.java @@ -0,0 +1,63 @@ +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/blocks/networking/networking.java b/src/main/java/com/jenny/magic/networking/networking.java similarity index 78% rename from src/main/java/com/jenny/magic/blocks/networking/networking.java rename to src/main/java/com/jenny/magic/networking/networking.java index c9dac0b..323b582 100644 --- a/src/main/java/com/jenny/magic/blocks/networking/networking.java +++ b/src/main/java/com/jenny/magic/networking/networking.java @@ -1,6 +1,7 @@ -package com.jenny.magic.blocks.networking; +package com.jenny.magic.networking; -import com.jenny.magic.blocks.networking.packets.ManaAmountS2C; +import com.jenny.magic.networking.packets.EffectS2C; +import com.jenny.magic.networking.packets.ManaAmountS2C; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraftforge.network.NetworkDirection; @@ -32,6 +33,12 @@ public class networking { .encoder(ManaAmountS2C::toBytes) .consumerMainThread(ManaAmountS2C::handle) .add(); + + net.messageBuilder(EffectS2C.class, id(), NetworkDirection.PLAY_TO_CLIENT) + .decoder(EffectS2C::new) + .encoder(EffectS2C::toBytes) + .consumerMainThread(EffectS2C::handle) + .add(); } public static void sendToServer(MSG message) { diff --git a/src/main/java/com/jenny/magic/networking/packets/EffectS2C.java b/src/main/java/com/jenny/magic/networking/packets/EffectS2C.java new file mode 100644 index 0000000..51fc754 --- /dev/null +++ b/src/main/java/com/jenny/magic/networking/packets/EffectS2C.java @@ -0,0 +1,51 @@ +package com.jenny.magic.networking.packets; + +import com.jenny.magic.particles.effects; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.network.NetworkEvent; + +import javax.annotation.Nullable; +import java.util.function.Supplier; + +public class EffectS2C { + private final Effect effectID; + private final Vec3 vector1, vector2; + + public EffectS2C(Effect effectID, @Nullable Vec3 origin, @Nullable Vec3 target) { + this.effectID = effectID; + this.vector1 = origin; + this.vector2 = target; + } + + public EffectS2C(FriendlyByteBuf buf) { + this.effectID = Effect.values()[buf.getByte(2)]; + this.vector1 = new Vec3(buf.getFloat(3), buf.getFloat(7), buf.getFloat(11)); + this.vector2 = new Vec3(buf.getFloat(15), buf.getFloat(19), buf.getFloat(23)); + } + + public void toBytes(FriendlyByteBuf buf) { + buf.writeByte(0); + buf.writeByte(this.effectID.ordinal()); + buf.writeFloat((float) vector1.x); + buf.writeFloat((float) vector1.y); + buf.writeFloat((float) vector1.z); + buf.writeFloat((float) vector2.x); + buf.writeFloat((float) vector2.y); + buf.writeFloat((float) vector2.z); + } + + public boolean handle(Supplier supplier) { + NetworkEvent.Context context = supplier.get(); + context.enqueueWork(() -> { + System.out.println("test069 " + this.effectID + " " + this.vector1 + " " + this.vector2); + effects.executeEffect(this.effectID, this.vector1, this.vector2); + }); + return true; + } + + public enum Effect { + SCROLL_HEALTH, + WAND_VACUUM + } +} diff --git a/src/main/java/com/jenny/magic/blocks/networking/packets/ManaAmountS2C.java b/src/main/java/com/jenny/magic/networking/packets/ManaAmountS2C.java similarity index 88% rename from src/main/java/com/jenny/magic/blocks/networking/packets/ManaAmountS2C.java rename to src/main/java/com/jenny/magic/networking/packets/ManaAmountS2C.java index 479bcb4..611d353 100644 --- a/src/main/java/com/jenny/magic/blocks/networking/packets/ManaAmountS2C.java +++ b/src/main/java/com/jenny/magic/networking/packets/ManaAmountS2C.java @@ -1,6 +1,6 @@ -package com.jenny.magic.blocks.networking.packets; +package com.jenny.magic.networking.packets; -import com.jenny.magic.blocks.mana.ManaClient; +import com.jenny.magic.mana.ManaClient; import net.minecraft.network.FriendlyByteBuf; import net.minecraftforge.network.NetworkEvent; diff --git a/src/main/java/com/jenny/magic/particles/effects.java b/src/main/java/com/jenny/magic/particles/effects.java new file mode 100644 index 0000000..270cbcf --- /dev/null +++ b/src/main/java/com/jenny/magic/particles/effects.java @@ -0,0 +1,59 @@ +package com.jenny.magic.particles; + +import com.jenny.magic.networking.packets.EffectS2C; +import net.minecraft.client.Minecraft; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; + +import javax.annotation.Nullable; + +public class effects { + public static void executeEffect(EffectS2C.Effect effect, @Nullable Vec3 origin, @Nullable Vec3 destination) { + if (effect == EffectS2C.Effect.WAND_VACUUM) { + wandVacuum(origin, destination); + } + } + + private static void scrollTeleport(Vec3 origin, Vec3 destination) { + } + + private static void wandVacuum(Vec3 origin, Vec3 destination) { + for (int i = 0; i < 20; i++) { + Vec3 randPos = randPos2D(5); + Vec3 pos = origin.add(randPos); + Vec3 delta = randPos.scale(-0.1).add(0, 0.2, 0); + level().addParticle(ParticleTypes.GLOW_SQUID_INK, pos.x, pos.y, pos.z, delta.x, delta.y, delta.z); + } + } + + public static Vec3 randPos(float maxDist) { + return new Vec3( + rng().nextFloat() * 2 - 1, + rng().nextFloat() * 2 - 1, + rng().nextFloat() * 2 - 1).normalize().scale(maxDist); + } + + public static Vec3 randPos2D(float maxDist) { + return new Vec3( + rng().nextFloat() * 2 - 1, + 0, + rng().nextFloat() * 2 - 1).normalize().scale(maxDist); + } + + public static Vec3 randPosRandDist(float maxDist) { + return new Vec3( + rng().nextFloat() * 2 - 1, + rng().nextFloat() * 2 - 1, + rng().nextFloat() * 2 - 1).normalize().scale(rng().nextFloat() * maxDist); + } + + private static Level level() { + return Minecraft.getInstance().level; + } + + private static RandomSource rng() { + return level().getRandom(); + } +} diff --git a/src/main/resources/assets/magic/lang/en_us.json b/src/main/resources/assets/magic/lang/en_us.json index e7c6349..5585fc8 100644 --- a/src/main/resources/assets/magic/lang/en_us.json +++ b/src/main/resources/assets/magic/lang/en_us.json @@ -2,11 +2,14 @@ "item.magic.scroll_teleport": "Teleport scroll", "item.magic.scroll_teleport_brittle": "Brittle teleport scroll", "item.magic.scroll_teleport_random": "Random teleport scroll", + "item.magic.wand_hurtful": "Hurtful Wand", + "item.magic.wand_vacuum": "Vaccum Wand", "tooltip.magic.scroll_teleport.unset": "No location set", "tooltip.magic.scroll_teleport.set": "Teleports to: ", "tooltip.magic.scroll_teleport_random": "Using it a second time teleports you back", "tooltip.magic.scroll_teleport_random.back": "Will teleport you back to ", "tooltip.magic.scroll_teleport_biome": "teleports you to the Biome ", + "enchantment.magic.homing": "Homing", "message.magic.scroll_teleport.set": "Location set.", "message.magic.scroll_teleport.dim": "You're not in the same dimension.", "message.magic.scroll_teleport.dist": "You're too far away", diff --git a/src/main/resources/data/magic/recipes/nbt_test.json b/src/main/resources/data/magic/recipes/nbt_test.json new file mode 100644 index 0000000..2cfc5a9 --- /dev/null +++ b/src/main/resources/data/magic/recipes/nbt_test.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "combat", + "ingredients": [ + { + "item": "magic:dragon_heart" + }, + { + "item": "minecraft:diamond" + } + ], + "result": { + "item": "magic:wand_hurtful" + } +} \ No newline at end of file diff --git a/src/main/resources/magic.mixins.json b/src/main/resources/magic.mixins.json index aa859f4..e6ed0fe 100644 --- a/src/main/resources/magic.mixins.json +++ b/src/main/resources/magic.mixins.json @@ -5,6 +5,7 @@ "compatibilityLevel": "JAVA_8", "refmap": "magic.refmap.json", "mixins": [ + "ShapelessRecipeMixin" ], "client": [ "ExperienceToMana"