init
This commit is contained in:
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);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user