This commit is contained in:
Jenny committed 2025-03-12 05:42:25 +01:00
commit c65afe83e8
16 files changed
+541

No files matched your search

@@ -0,0 +1,27 @@
package com.jenny.xp2items;
import com.jenny.xp2items.config.ServerConfig;
import com.jenny.xp2items.items.items;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
@Mod(Xp2Items.MODID)
public class Xp2Items {
public static final String MODID = "xp2items";
public Xp2Items(FMLJavaModLoadingContext context) {
IEventBus modEventBus = context.getModEventBus();
items.register(modEventBus);
creativeTab.register(modEventBus);
MinecraftForge.EVENT_BUS.register(this);
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ServerConfig.SPEC, "xp2items.toml");
}
}
@@ -0,0 +1,22 @@
package com.jenny.xp2items.config;
import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.fml.common.Mod;
import static com.jenny.xp2items.Xp2Items.MODID;
@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ServerConfig {
private static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder();
public static final ForgeConfigSpec SPEC;
public static final ForgeConfigSpec.ConfigValue<Integer> C_XP_AMOUNT;
public static final ForgeConfigSpec.ConfigValue<Integer> C_ITEM_AMOUNT;
static {
C_XP_AMOUNT = BUILDER.comment("xp needed per loot drop, 0=per level").define("xp_amount", 25);
C_ITEM_AMOUNT = BUILDER.comment("items per loot drop").define("item_amount", 1);
SPEC = BUILDER.build();
}
}
@@ -0,0 +1,35 @@
package com.jenny.xp2items;
import com.jenny.xp2items.items.items;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.CreativeModeTabs;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.RegistryObject;
import java.util.Arrays;
import static com.jenny.xp2items.Xp2Items.MODID;
public class creativeTab {
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID);
public static final RegistryObject<CreativeModeTab> CREATIVE_TAB = CREATIVE_MODE_TABS.register("xp2items", () -> CreativeModeTab.builder().withTabsBefore(CreativeModeTabs.SPAWN_EGGS).icon(() -> items.XP_TALISMAN.get().getDefaultInstance()).displayItems((parameters, output) -> output.acceptAll(Arrays.stream(getItems()).toList())).title(Component.literal("xp2items")).build());
public static void register(IEventBus bus) {
CREATIVE_MODE_TABS.register(bus);
}
public static ItemStack[] getItems() {
ItemStack[] ret = new ItemStack[items.ITEMS.getEntries().size()];
int i = 0;
for (RegistryObject<Item> item : items.ITEMS.getEntries()) {
ret[i] = item.get().getDefaultInstance();
i++;
}
return ret;
}
}
@@ -0,0 +1,23 @@
package com.jenny.xp2items.items;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
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.xp2items.Xp2Items.MODID;
public class items {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID);
public static final RegistryObject<Item> XP_TALISMAN = ITEMS.register("xp_talisman", () -> new xpTalisman(new Item.Properties().setId(ResourceKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(MODID, "xp_talisman"))).stacksTo(1)));
public static void register(IEventBus bus) {
ITEMS.register(bus);
}
}
@@ -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);
}
}