random teleport scroll
This commit is contained in:
		
							parent
							
								
									a93b0858bc
								
							
						
					
					
						commit
						43b806a0b3
					
				| @ -1,12 +1,15 @@ | ||||
| package com.jenny.magic; | ||||
| 
 | ||||
| import com.jenny.magic.config.ConfigServer; | ||||
| import com.jenny.magic.entities.entities; | ||||
| import com.jenny.magic.items.items; | ||||
| import net.minecraftforge.api.distmarker.Dist; | ||||
| import net.minecraftforge.common.MinecraftForge; | ||||
| import net.minecraftforge.eventbus.api.IEventBus; | ||||
| import net.minecraftforge.eventbus.api.SubscribeEvent; | ||||
| import net.minecraftforge.fml.ModLoadingContext; | ||||
| import net.minecraftforge.fml.common.Mod; | ||||
| import net.minecraftforge.fml.config.ModConfig; | ||||
| import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; | ||||
| import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; | ||||
| 
 | ||||
| @ -22,6 +25,7 @@ public class Magic { | ||||
|         entities.register(modEventBus); | ||||
|         items.register(modEventBus); | ||||
|         creativeTab.register(modEventBus); | ||||
|         ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ConfigServer.SPEC, "magic-server.toml"); | ||||
|     } | ||||
| 
 | ||||
|     @Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) | ||||
|  | ||||
							
								
								
									
										24
									
								
								src/main/java/com/jenny/magic/config/ConfigServer.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/main/java/com/jenny/magic/config/ConfigServer.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | ||||
| package com.jenny.magic.config; | ||||
| 
 | ||||
| import net.minecraftforge.common.ForgeConfigSpec; | ||||
| import net.minecraftforge.fml.common.Mod; | ||||
| 
 | ||||
| import static com.jenny.magic.Magic.MODID; | ||||
| 
 | ||||
| @Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD) | ||||
| public class ConfigServer { | ||||
|     public static final ForgeConfigSpec SPEC; | ||||
|     public static final ForgeConfigSpec.ConfigValue<Integer> C_TELEPORT_SCROLL_RANGE, C_TELEPORT_SCROLL_RANGE_RANDOM; | ||||
|     private static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder(); | ||||
| 
 | ||||
|     static { | ||||
|         C_TELEPORT_SCROLL_RANGE = | ||||
|                 BUILDER.comment("maximum range for all targeted teleport scrolls; 0 = infinite") | ||||
|                         .defineInRange("scroll_teleport_range", 0, 0, 60000000); | ||||
|         C_TELEPORT_SCROLL_RANGE_RANDOM = | ||||
|                 BUILDER.comment("maximum range for all teleport scrolls with random targets") | ||||
|                         .defineInRange("scroll_teleport_random_range", 30000000, 0, 30000000); | ||||
| 
 | ||||
|         SPEC = BUILDER.build(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										22
									
								
								src/main/java/com/jenny/magic/datagen/DataGenerators.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/main/java/com/jenny/magic/datagen/DataGenerators.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| package com.jenny.magic.datagen; | ||||
| 
 | ||||
| import net.minecraft.data.DataGenerator; | ||||
| import net.minecraft.data.PackOutput; | ||||
| import net.minecraftforge.common.data.ExistingFileHelper; | ||||
| import net.minecraftforge.data.event.GatherDataEvent; | ||||
| import net.minecraftforge.eventbus.api.SubscribeEvent; | ||||
| import net.minecraftforge.fml.common.Mod; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| 
 | ||||
| import static com.jenny.magic.Magic.MODID; | ||||
| 
 | ||||
| @Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD) | ||||
| public class DataGenerators { | ||||
|     @SubscribeEvent | ||||
|     public static void gatherData(@NotNull GatherDataEvent event) { | ||||
|         DataGenerator generator = event.getGenerator(); | ||||
|         PackOutput packOutput = generator.getPackOutput(); | ||||
|         ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); | ||||
|         generator.addProvider(event.includeClient(), new ModItemModelProvider(packOutput, existingFileHelper)); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,32 @@ | ||||
| package com.jenny.magic.datagen; | ||||
| 
 | ||||
| import com.jenny.magic.items.items; | ||||
| import net.minecraft.data.PackOutput; | ||||
| import net.minecraft.resources.ResourceLocation; | ||||
| import net.minecraft.world.item.Item; | ||||
| import net.minecraftforge.client.model.generators.ItemModelBuilder; | ||||
| import net.minecraftforge.client.model.generators.ItemModelProvider; | ||||
| import net.minecraftforge.common.data.ExistingFileHelper; | ||||
| import net.minecraftforge.registries.RegistryObject; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| 
 | ||||
| import static com.jenny.magic.Magic.MODID; | ||||
| 
 | ||||
| public class ModItemModelProvider extends ItemModelProvider { | ||||
|     public ModItemModelProvider(PackOutput output, ExistingFileHelper existingFileHelper) { | ||||
|         super(output, MODID, existingFileHelper); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     protected void registerModels() { | ||||
|         for (RegistryObject<Item> item : items.ITEMS.getEntries()) { | ||||
|             simpleItem(item); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private ItemModelBuilder simpleItem(@NotNull RegistryObject<Item> item) { | ||||
|         return withExistingParent(item.getId().getPath(), | ||||
|                 new ResourceLocation("item/generated")).texture("layer0", | ||||
|                 new ResourceLocation(MODID, "item/" + item.getId().getPath())); | ||||
|     } | ||||
| } | ||||
| @ -1,5 +1,6 @@ | ||||
| package com.jenny.magic.items; | ||||
| 
 | ||||
| import com.jenny.magic.config.ConfigServer; | ||||
| import net.minecraft.ChatFormatting; | ||||
| import net.minecraft.client.Minecraft; | ||||
| import net.minecraft.core.particles.ParticleTypes; | ||||
| @ -40,35 +41,40 @@ public class TeleportScroll extends BaseItem { | ||||
|         return InteractionResult.SUCCESS; | ||||
|     } | ||||
| 
 | ||||
|     protected void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, Level level) { | ||||
|         if (itemStack.getTag() == null) { | ||||
|             itemStack.setTag(new CompoundTag()); | ||||
|         } | ||||
|         if (locationSet(itemStack.getTag()) && !player.isCrouching()) { | ||||
|             if (level.isClientSide) { | ||||
|                 spawnParticles(level, player.position().add(0, player.getEyeHeight(), 0), 20, 5, ParticleTypes.POOF, ParticleDirection.INWARD); | ||||
|             } | ||||
|             player.setPos(getLocation(itemStack.getTag())); | ||||
|             if (level.isClientSide) { | ||||
|                 spawnParticles(level, player.position().add(0, player.getEyeHeight(), 0), 20, 0.2, ParticleTypes.END_ROD, ParticleDirection.OUTWARD); | ||||
|             } | ||||
|         } else { | ||||
|             itemStack.setTag(setLocation(pos, itemStack.getTag())); | ||||
|             if (level.isClientSide) { | ||||
|                 MessageLocationSet(); | ||||
|             } | ||||
|         } | ||||
|     public static String dim(Level level) { | ||||
|         return level.dimension().location().toString(); | ||||
|     } | ||||
| 
 | ||||
|     private boolean locationSet(@NotNull CompoundTag cTag) { | ||||
|         return cTag.contains("teleport_x") && cTag.contains("teleport_y") && cTag.contains("teleport_z"); | ||||
|     } | ||||
| 
 | ||||
|     private CompoundTag setLocation(@NotNull Vec3 playerPos, @NotNull CompoundTag cTag) { | ||||
|         cTag.putDouble("teleport_x", playerPos.x); | ||||
|         cTag.putDouble("teleport_y", playerPos.y); | ||||
|         cTag.putDouble("teleport_z", playerPos.z); | ||||
|         return cTag; | ||||
|     protected void use(Vec3 pos, Player player, @NotNull ItemStack itemStack, Level level) { | ||||
|         if (itemStack.getTag() == null) { | ||||
|             itemStack.setTag(new CompoundTag()); | ||||
|         } | ||||
|         if (locationSet(itemStack.getTag()) && !player.isCrouching()) { | ||||
|             if (dimCheck(player, itemStack.getTag())) { | ||||
|                 if (level.isClientSide) { | ||||
|                     spawnParticles(level, player.position().add(0, player.getEyeHeight(), 0), 20, 5, ParticleTypes.POOF, ParticleDirection.INWARD); | ||||
|                     spawnParticles(level, getLocation(itemStack.getTag()).add(0, player.getEyeHeight(), 0), 20, 0.2, ParticleTypes.END_ROD, ParticleDirection.OUTWARD); | ||||
|                 } else { | ||||
|                     if (rangeCheck(player.position(), getLocation(itemStack.getTag()))) { | ||||
|                         Vec3 vec = getLocation(itemStack.getTag()); | ||||
|                         player.teleportTo(vec.x, vec.y, vec.z); | ||||
|                     } else { | ||||
|                         MessageDist(); | ||||
|                     } | ||||
|                 } | ||||
|             } else { | ||||
|                 MessageWrongDim(); | ||||
|             } | ||||
|         } else { | ||||
|             itemStack.setTag(setLocation(level, player, pos, itemStack.getTag())); | ||||
|             if (level.isClientSide) { | ||||
|                 MessageLocationSet(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private Vec3 getLocation(@NotNull CompoundTag cTag) { | ||||
| @ -79,6 +85,18 @@ public class TeleportScroll extends BaseItem { | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     private CompoundTag setLocation(@NotNull Level level, Player player, @NotNull Vec3 pos, @NotNull CompoundTag cTag) { | ||||
|         cTag.putDouble("teleport_x", pos.x); | ||||
|         cTag.putDouble("teleport_y", pos.y); | ||||
|         cTag.putDouble("teleport_z", pos.z); | ||||
|         cTag.putString("teleport_dim", dim(level)); | ||||
|         return cTag; | ||||
|     } | ||||
| 
 | ||||
|     protected boolean dimCheck(Player player, CompoundTag cTag) { | ||||
|         return cTag != null && cTag.contains("teleport_dim") && cTag.getString("teleport_dim").equals(dim(player.level())); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void appendHoverText(@NotNull ItemStack pStack, @Nullable Level pLevel, @NotNull List<Component> pTooltipComponents, @NotNull TooltipFlag pIsAdvanced) { | ||||
|         if (pStack.getTag() != null && locationSet(pStack.getTag())) { | ||||
| @ -95,7 +113,19 @@ public class TeleportScroll extends BaseItem { | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     protected boolean rangeCheck(@NotNull Vec3 p1, Vec3 p2) { | ||||
|         return ConfigServer.C_TELEPORT_SCROLL_RANGE.get() == 0 || p1.subtract(p2).length() < ConfigServer.C_TELEPORT_SCROLL_RANGE.get(); | ||||
|     } | ||||
| 
 | ||||
|     protected void MessageLocationSet() { | ||||
|         Minecraft.getInstance().player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.set", MODID))); | ||||
|     } | ||||
| 
 | ||||
|     protected void MessageWrongDim() { | ||||
|         Minecraft.getInstance().player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.dim", MODID))); | ||||
|     } | ||||
| 
 | ||||
|     protected void MessageDist() { | ||||
|         Minecraft.getInstance().player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport.dist", MODID))); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,23 @@ | ||||
| package com.jenny.magic.items; | ||||
| 
 | ||||
| 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 TeleportScrollPersistent(Properties pProperties) { | ||||
|         super(pProperties); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean isFoil(@NotNull ItemStack pStack) { | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public Component getName(@NotNull ItemStack pStack) { | ||||
|         return Component.translatable(this.getDescriptionId(pStack)).withStyle(ChatFormatting.DARK_PURPLE); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										104
									
								
								src/main/java/com/jenny/magic/items/TeleportScrollRandom.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								src/main/java/com/jenny/magic/items/TeleportScrollRandom.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,104 @@ | ||||
| package com.jenny.magic.items; | ||||
| 
 | ||||
| import com.jenny.magic.config.ConfigServer; | ||||
| import net.minecraft.ChatFormatting; | ||||
| import net.minecraft.core.BlockPos; | ||||
| import net.minecraft.core.particles.ParticleTypes; | ||||
| import net.minecraft.nbt.CompoundTag; | ||||
| import net.minecraft.network.chat.Component; | ||||
| import net.minecraft.network.chat.MutableComponent; | ||||
| import net.minecraft.util.RandomSource; | ||||
| import net.minecraft.world.InteractionHand; | ||||
| import net.minecraft.world.InteractionResult; | ||||
| import net.minecraft.world.InteractionResultHolder; | ||||
| import net.minecraft.world.entity.player.Player; | ||||
| import net.minecraft.world.item.ItemStack; | ||||
| import net.minecraft.world.item.TooltipFlag; | ||||
| import net.minecraft.world.item.context.UseOnContext; | ||||
| import net.minecraft.world.level.Level; | ||||
| import net.minecraft.world.level.chunk.ChunkStatus; | ||||
| import net.minecraft.world.level.levelgen.Heightmap; | ||||
| import net.minecraft.world.phys.Vec3; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.jetbrains.annotations.Nullable; | ||||
| 
 | ||||
| import java.util.List; | ||||
| 
 | ||||
| import static com.jenny.magic.Magic.MODID; | ||||
| 
 | ||||
| public class TeleportScrollRandom extends BaseItem { | ||||
|     public TeleportScrollRandom(Properties pProperties) { | ||||
|         super(pProperties); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public @NotNull InteractionResultHolder<ItemStack> use(@NotNull Level pLevel, @NotNull Player pPlayer, @NotNull InteractionHand pUsedHand) { | ||||
|         use(pPlayer, pPlayer.getItemInHand(pUsedHand)); | ||||
|         return InteractionResultHolder.success(pPlayer.getItemInHand(pUsedHand)); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) { | ||||
|         use(pContext.getPlayer(), pContext.getItemInHand()); | ||||
|         return InteractionResult.SUCCESS; | ||||
|     } | ||||
| 
 | ||||
|     protected void use(@NotNull Player player, ItemStack itemStack) { | ||||
|         if (!player.level().isClientSide) { | ||||
|             if (itemStack.getTag() != null && itemStack.getTag().contains("teleport_x")) { | ||||
|                 Vec3 pos = getPos(itemStack.getTag()); | ||||
|                 player.teleportTo(pos.x, pos.y, pos.z); | ||||
|                 spawnParticles(player.level(), player.position().add(0, player.getEyeHeight(), 0), 20, 5, ParticleTypes.POOF, ParticleDirection.INWARD); | ||||
|                 spawnParticles(player.level(), player.position().add(0, player.getEyeHeight(), 0), 20, 0.2, ParticleTypes.END_ROD, ParticleDirection.OUTWARD); | ||||
|                 itemStack.shrink(1); | ||||
|             } else { | ||||
|                 int maxDist = ConfigServer.C_TELEPORT_SCROLL_RANGE_RANDOM.get(); | ||||
|                 RandomSource rng = player.level().getRandom(); | ||||
|                 Vec3 randomLocation = new Vec3( | ||||
|                         rng.nextIntBetweenInclusive(-maxDist, maxDist), | ||||
|                         0, | ||||
|                         rng.nextIntBetweenInclusive(-maxDist, maxDist) | ||||
|                 ); | ||||
|                 System.out.println("test123 " + randomLocation.x + ";" + randomLocation.z); | ||||
|                 BlockPos blockPos = new BlockPos((int) randomLocation.x, 0, (int) randomLocation.z); | ||||
|                 int yMax = player.level().getChunk(((int) randomLocation.x) >> 4, ((int) randomLocation.z) >> 4, ChunkStatus.FULL, true).getHeight(Heightmap.Types.WORLD_SURFACE, ((int) randomLocation.x) % 16, ((int) randomLocation.z) % 16); | ||||
|                 randomLocation = randomLocation.add(0, yMax + 1, 0); | ||||
|                 spawnParticles(player.level(), player.position().add(0, player.getEyeHeight(), 0), 20, 5, ParticleTypes.POOF, ParticleDirection.INWARD); | ||||
|                 spawnParticles(player.level(), randomLocation.add(0, player.getEyeHeight(), 0), 20, 0.2, ParticleTypes.END_ROD, ParticleDirection.OUTWARD); | ||||
|                 itemStack.setTag(setPos(player.position(), itemStack.getTag())); | ||||
|                 player.teleportTo(randomLocation.x, randomLocation.y, randomLocation.z); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     protected CompoundTag setPos(@NotNull Vec3 pos, CompoundTag compoundTag) { | ||||
|         compoundTag = compoundTag == null ? new CompoundTag() : compoundTag; | ||||
|         compoundTag.putDouble("teleport_x", pos.x); | ||||
|         compoundTag.putDouble("teleport_y", pos.y); | ||||
|         compoundTag.putDouble("teleport_z", pos.z); | ||||
|         return compoundTag; | ||||
|     } | ||||
| 
 | ||||
|     protected Vec3 getPos(@NotNull CompoundTag compoundTag) { | ||||
|         return new Vec3( | ||||
|                 compoundTag.getDouble("teleport_x"), | ||||
|                 compoundTag.getDouble("teleport_y"), | ||||
|                 compoundTag.getDouble("teleport_z") | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void appendHoverText(@NotNull ItemStack pStack, @Nullable Level pLevel, @NotNull List<Component> pTooltipComponents, @NotNull TooltipFlag pIsAdvanced) { | ||||
|         if (pStack.getTag() != null && pStack.getTag().contains("teleport_x")) { | ||||
|             String key = String.format("tooltip.%s.%s.back", MODID, this); | ||||
|             MutableComponent toolTip = Component.translatable(key); | ||||
|             if (!toolTip.getString().equals(key)) { | ||||
|                 Vec3 pos = getPos(pStack.getTag()); | ||||
|                 MutableComponent toolTipPos = Component.literal((int) pos.x + ";" + (int) pos.y + ";" + (int) pos.z); | ||||
|                 pTooltipComponents.add(toolTip.withStyle(ChatFormatting.DARK_BLUE).append(toolTipPos.withStyle(ChatFormatting.WHITE))); | ||||
|             } | ||||
|         } else { | ||||
|             super.appendHoverText(pStack, pLevel, pTooltipComponents, pIsAdvanced); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -11,8 +11,10 @@ import static com.jenny.magic.Magic.MODID; | ||||
| public class items { | ||||
|     public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); | ||||
|     public static final RegistryObject<Item> WAND_HURTFUL = ITEMS.register("wand_hurtful", () -> new HurtfulWand(new Item.Properties())); | ||||
|     public static final RegistryObject<Item> SCROLL_TELEPORT = ITEMS.register("scroll_teleport", () -> new TeleportScroll(new Item.Properties().stacksTo(1))); | ||||
|     public static final RegistryObject<Item> SCROLL_TELEPORT_CONSUME = ITEMS.register("scroll_teleport_consume", () -> new TeleportScrollConsumable(new Item.Properties().stacksTo(16))); | ||||
|     public static final RegistryObject<Item> SCROLL_TELEPORT = ITEMS.register("scroll_teleport", () -> new TeleportScrollPersistent(new Item.Properties().stacksTo(1))); | ||||
|     public static final RegistryObject<Item> SCROLL_TELEPORT_BRITTLE = ITEMS.register("scroll_teleport_brittle", () -> new TeleportScrollConsumable(new Item.Properties().stacksTo(16))); | ||||
|     public static final RegistryObject<Item> SCROLL_TELEPORT_RANDOM = ITEMS.register("scroll_teleport_random", () -> new TeleportScrollRandom(new Item.Properties().stacksTo(1))); | ||||
| 
 | ||||
| 
 | ||||
|     public static void register(IEventBus bus) { | ||||
|         ITEMS.register(bus); | ||||
|  | ||||
| @ -1,8 +1,12 @@ | ||||
| { | ||||
|   "item.magic.scroll_teleport": "Teleport scroll", | ||||
|   "item.magic.scroll_teleport_consume": "Brittle teleport scroll", | ||||
| 
 | ||||
|   "tooltip.magic.scroll_teleport.unset": "no location set", | ||||
|   "tooltip.magic.scroll_teleport.set": "teleports to: ", | ||||
|   "message.magic.scroll_teleport.set": "location set" | ||||
|   "item.magic.scroll_teleport_brittle": "Brittle teleport scroll", | ||||
|   "item.magic.scroll_teleport_random": "Random teleport scroll", | ||||
|   "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: ", | ||||
|   "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" | ||||
| } | ||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 163 B | 
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 508 B | 
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/assets/magic/textures/item/wand_hurtful.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/main/resources/assets/magic/textures/item/wand_hurtful.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 97 B | 
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user