init
This commit is contained in:
16 files changed
+541
No files matched your search
@@ -0,0 +1,76 @@
|
||||
package com.jenny.xp2items.items;
|
||||
|
||||
import com.jenny.xp2items.config.ServerConfig;
|
||||
import net.minecraft.server.commands.ExperienceCommand;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.item.ItemEntity;
|
||||
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.minecraftforge.registries.ForgeRegistries;
|
||||
import org.apache.logging.log4j.core.jmx.Server;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class xpTalisman extends Item {
|
||||
public xpTalisman(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull InteractionResult use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand interactionHand) {
|
||||
if (!level.isClientSide) {
|
||||
if (ServerConfig.C_XP_AMOUNT.get() > 0) { // xp amount mode
|
||||
spawnItem(level, (ServerPlayer) player);
|
||||
} else { // xp level mode
|
||||
spawnItemLevels(level, (ServerPlayer) player);
|
||||
}
|
||||
}
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
private static void spawnItem(Level level, ServerPlayer player) {
|
||||
List<Item> itemList = ForgeRegistries.ITEMS.getValues().stream().toList();
|
||||
int xpNeeded = ServerConfig.C_XP_AMOUNT.get();
|
||||
System.out.println(getPlayerXP(player));
|
||||
while (true) {
|
||||
int expLevelBefore = player.experienceLevel;
|
||||
float expProgressBefore = player.experienceProgress;
|
||||
player.giveExperiencePoints(-xpNeeded);
|
||||
if (getPlayerXP(player) == 0 && player.experienceLevel == 0) {
|
||||
player.experienceLevel = expLevelBefore;
|
||||
player.experienceProgress = expProgressBefore;
|
||||
break;
|
||||
} else {
|
||||
System.out.println("item dropped");
|
||||
Item item = itemList.get(level.getRandom().nextInt(0, itemList.size()));
|
||||
level.addFreshEntity(new ItemEntity(level, player.getX(), player.getY(), player.getZ(), new ItemStack(item)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static int getPlayerXP(ServerPlayer player) {
|
||||
return Mth.floor(player.experienceProgress * (float) player.getXpNeededForNextLevel());
|
||||
}
|
||||
|
||||
private static void spawnItemLevels(Level level, ServerPlayer player) {
|
||||
List<Item> itemList = ForgeRegistries.ITEMS.getValues().stream().toList();
|
||||
int itemsPerLevel = ServerConfig.C_ITEM_AMOUNT.get();
|
||||
int xpPoints = getPlayerXP(player);
|
||||
for (int i = 1; i <= player.experienceLevel; i++) {
|
||||
for (int i2 = 1; i2 <= itemsPerLevel; i2++) {
|
||||
System.out.println("item dropped");
|
||||
Item item = itemList.get(level.getRandom().nextInt(0, itemList.size()));
|
||||
level.addFreshEntity(new ItemEntity(level, player.getX(), player.getY(), player.getZ(), new ItemStack(item)));
|
||||
}
|
||||
}
|
||||
player.setExperienceLevels(0);
|
||||
player.setExperiencePoints(0);
|
||||
player.giveExperiencePoints(xpPoints);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user