working disabled_recipes list
This commit is contained in:
parent
43b806a0b3
commit
5b15d7d55a
@ -1,9 +1,12 @@
|
|||||||
package com.jenny.magic;
|
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.config.ConfigServer;
|
import com.jenny.magic.config.ConfigServer;
|
||||||
import com.jenny.magic.entities.entities;
|
import com.jenny.magic.entities.entities;
|
||||||
import com.jenny.magic.items.items;
|
import com.jenny.magic.items.items;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import com.mojang.logging.LogUtils;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.eventbus.api.IEventBus;
|
import net.minecraftforge.eventbus.api.IEventBus;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
@ -11,29 +14,39 @@ import net.minecraftforge.fml.ModLoadingContext;
|
|||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.config.ModConfig;
|
import net.minecraftforge.fml.config.ModConfig;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
||||||
|
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
// The value here should match an entry in the META-INF/mods.toml file
|
// The value here should match an entry in the META-INF/mods.toml file
|
||||||
@Mod(Magic.MODID)
|
@Mod(Magic.MODID)
|
||||||
public class Magic {
|
public class Magic {
|
||||||
public static final String MODID = "magic";
|
public static final String MODID = "magic";
|
||||||
|
private static final Logger LOGGER = LogUtils.getLogger();
|
||||||
|
|
||||||
public Magic() {
|
public Magic() {
|
||||||
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
||||||
MinecraftForge.EVENT_BUS.register(this);
|
MinecraftForge.EVENT_BUS.register(this);
|
||||||
|
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ConfigServer.SPEC, "magic-server.toml");
|
||||||
|
|
||||||
entities.register(modEventBus);
|
entities.register(modEventBus);
|
||||||
items.register(modEventBus);
|
items.register(modEventBus);
|
||||||
|
blocks.register(modEventBus);
|
||||||
|
blockEntities.register(modEventBus);
|
||||||
creativeTab.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)
|
@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||||
public static class ClientModEvents {
|
public static class ModEvents {
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onClientSetup(FMLClientSetupEvent event) {
|
public static void onClientSetup(FMLClientSetupEvent event) {
|
||||||
entities.registerRenderers();
|
entities.registerRenderers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void onCommonSetup(FMLCommonSetupEvent event) {
|
||||||
|
conditions.register();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
39
src/main/java/com/jenny/magic/blocks/AntiSpawner.java
Normal file
39
src/main/java/com/jenny/magic/blocks/AntiSpawner.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package com.jenny.magic.blocks;
|
||||||
|
|
||||||
|
import com.jenny.magic.blocks.entities.AntiSpawnerBE;
|
||||||
|
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.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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) {
|
||||||
|
return new AntiSpawnerBE(pPos, pState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(@NotNull Level pLevel, @NotNull BlockState pState, @NotNull BlockEntityType<T> pBlockEntityType) {
|
||||||
|
if (pLevel.isClientSide()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return createTickerHelper(pBlockEntityType, blockEntities.ANTI_SPAWNER_BE.get(),
|
||||||
|
(pLevel1, pPos, pState1, pBlockEntity) -> pBlockEntity.tick(pLevel1, pPos, pState1));
|
||||||
|
}
|
||||||
|
}
|
26
src/main/java/com/jenny/magic/blocks/blocks.java
Normal file
26
src/main/java/com/jenny/magic/blocks/blocks.java
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package com.jenny.magic.blocks;
|
||||||
|
|
||||||
|
import com.jenny.magic.items.BlockItemTooltip;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||||
|
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 blocks {
|
||||||
|
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MODID);
|
||||||
|
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID);
|
||||||
|
|
||||||
|
public static final RegistryObject<Block> ANTI_SPAWNER = BLOCKS.register("anti_spawner", () -> new AntiSpawner(BlockBehaviour.Properties.of().strength(10.0F, 15.0F)));
|
||||||
|
public static final RegistryObject<Item> ANTI_SPAWNER_ITEM = ITEMS.register("anti_spawner", () -> new BlockItemTooltip(ANTI_SPAWNER.get(), new Item.Properties()));
|
||||||
|
|
||||||
|
|
||||||
|
public static void register(IEventBus bus) {
|
||||||
|
BLOCKS.register(bus);
|
||||||
|
ITEMS.register(bus);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package com.jenny.magic.blocks.conditions;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraftforge.common.ForgeConfigSpec;
|
||||||
|
import net.minecraftforge.common.crafting.conditions.ICondition;
|
||||||
|
import net.minecraftforge.common.crafting.conditions.IConditionSerializer;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.jenny.magic.Magic.MODID;
|
||||||
|
|
||||||
|
public class ConfigCondition implements IConditionSerializer<ConfigCondition>, ICondition {
|
||||||
|
public ForgeConfigSpec.ConfigValue<List<String>> list;
|
||||||
|
public String name;
|
||||||
|
|
||||||
|
public ConfigCondition(String name, ForgeConfigSpec.ConfigValue<List<String>> configListDisabled) {
|
||||||
|
this.list = configListDisabled;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(JsonObject json, ConfigCondition value) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConfigCondition read(JsonObject json) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getID() {
|
||||||
|
return new ResourceLocation(MODID, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean test(IContext context) {
|
||||||
|
return list.get().contains(name);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package com.jenny.magic.blocks.conditions;
|
||||||
|
|
||||||
|
import com.jenny.magic.blocks.blocks;
|
||||||
|
import com.jenny.magic.config.ConfigServer;
|
||||||
|
import com.jenny.magic.items.items;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.minecraftforge.common.crafting.CraftingHelper;
|
||||||
|
import net.minecraftforge.registries.RegistryObject;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class conditions {
|
||||||
|
public static void register() {
|
||||||
|
for (RegistryObject<Item> item : items()) {
|
||||||
|
String name = item.get().toString();
|
||||||
|
System.out.println("test123: " + name);
|
||||||
|
CraftingHelper.register(new ConfigCondition(name, ConfigServer.C_DISABLED_LIST));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<RegistryObject<Item>> items() {
|
||||||
|
ArrayList<RegistryObject<Item>> l = new ArrayList<>(items.ITEMS.getEntries().stream().toList());
|
||||||
|
l.addAll(blocks.ITEMS.getEntries().stream().toList());
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.jenny.magic.blocks.entities;
|
||||||
|
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.entity.MobSpawnType;
|
||||||
|
import net.minecraft.world.entity.monster.Monster;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.phys.AABB;
|
||||||
|
|
||||||
|
public class AntiSpawnerBE extends BlockEntity {
|
||||||
|
protected final AABB area;
|
||||||
|
|
||||||
|
public AntiSpawnerBE(BlockPos pPos, BlockState pBlockState) {
|
||||||
|
super(blockEntities.ANTI_SPAWNER_BE.get(), pPos, pBlockState);
|
||||||
|
area = new AABB(this.getBlockPos()).inflate(32);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void tick(Level pLevel, BlockPos pPos, BlockState pState) {
|
||||||
|
if (!pLevel.isClientSide) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.jenny.magic.blocks.entities;
|
||||||
|
|
||||||
|
import com.jenny.magic.blocks.blocks;
|
||||||
|
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||||
|
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 blockEntities {
|
||||||
|
public static final DeferredRegister<BlockEntityType<?>> BLOCK_ENTITIES =
|
||||||
|
DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, MODID);
|
||||||
|
|
||||||
|
public static void register(IEventBus bus) {
|
||||||
|
BLOCK_ENTITIES.register(bus);
|
||||||
|
} public static final RegistryObject<BlockEntityType<AntiSpawnerBE>> ANTI_SPAWNER_BE =
|
||||||
|
BLOCK_ENTITIES.register("anti_spawner_be", () ->
|
||||||
|
BlockEntityType.Builder.of(AntiSpawnerBE::new,
|
||||||
|
blocks.ANTI_SPAWNER.get()).build(null));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -3,12 +3,16 @@ package com.jenny.magic.config;
|
|||||||
import net.minecraftforge.common.ForgeConfigSpec;
|
import net.minecraftforge.common.ForgeConfigSpec;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static com.jenny.magic.Magic.MODID;
|
import static com.jenny.magic.Magic.MODID;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
|
@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||||
public class ConfigServer {
|
public class ConfigServer {
|
||||||
public static final ForgeConfigSpec SPEC;
|
public static final ForgeConfigSpec SPEC;
|
||||||
public static final ForgeConfigSpec.ConfigValue<Integer> C_TELEPORT_SCROLL_RANGE, C_TELEPORT_SCROLL_RANGE_RANDOM;
|
public static final ForgeConfigSpec.ConfigValue<Integer> C_TELEPORT_SCROLL_RANGE, C_TELEPORT_SCROLL_RANGE_RANDOM;
|
||||||
|
public static final ForgeConfigSpec.ConfigValue<List<String>> C_DISABLED_LIST;
|
||||||
private static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder();
|
private static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@ -18,7 +22,20 @@ public class ConfigServer {
|
|||||||
C_TELEPORT_SCROLL_RANGE_RANDOM =
|
C_TELEPORT_SCROLL_RANGE_RANDOM =
|
||||||
BUILDER.comment("maximum range for all teleport scrolls with random targets")
|
BUILDER.comment("maximum range for all teleport scrolls with random targets")
|
||||||
.defineInRange("scroll_teleport_random_range", 30000000, 0, 30000000);
|
.defineInRange("scroll_teleport_random_range", 30000000, 0, 30000000);
|
||||||
|
C_DISABLED_LIST =
|
||||||
|
BUILDER.comment("add any items (without mod ID) from this mod to this list to disable their recipes")
|
||||||
|
.define("disabled_items", defaultListDisabled());
|
||||||
SPEC = BUILDER.build();
|
SPEC = BUILDER.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isRecipeDisabled(String item) {
|
||||||
|
return C_DISABLED_LIST.get().contains(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<String> defaultListDisabled() {
|
||||||
|
List<String> l = new ArrayList<>();
|
||||||
|
l.add("item_1");
|
||||||
|
l.add("item_2");
|
||||||
|
return l;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.jenny.magic;
|
package com.jenny.magic;
|
||||||
|
|
||||||
|
import com.jenny.magic.blocks.blocks;
|
||||||
import com.jenny.magic.items.items;
|
import com.jenny.magic.items.items;
|
||||||
import net.minecraft.core.registries.Registries;
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
@ -18,6 +19,7 @@ import static com.jenny.magic.Magic.MODID;
|
|||||||
public class creativeTab {
|
public class creativeTab {
|
||||||
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID);
|
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(MODID, () -> CreativeModeTab.builder().withTabsBefore(CreativeModeTabs.SPAWN_EGGS).icon(() -> items.WAND_HURTFUL.get().getDefaultInstance()).displayItems((parameters, output) -> {
|
public static final RegistryObject<CreativeModeTab> CREATIVE_TAB = CREATIVE_MODE_TABS.register(MODID, () -> CreativeModeTab.builder().withTabsBefore(CreativeModeTabs.SPAWN_EGGS).icon(() -> items.WAND_HURTFUL.get().getDefaultInstance()).displayItems((parameters, output) -> {
|
||||||
|
output.acceptAll(Arrays.stream(getBlocks()).toList());
|
||||||
output.acceptAll(Arrays.stream(getItems()).toList());
|
output.acceptAll(Arrays.stream(getItems()).toList());
|
||||||
}).title(Component.literal("Magic")).build());
|
}).title(Component.literal("Magic")).build());
|
||||||
|
|
||||||
@ -34,4 +36,14 @@ public class creativeTab {
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ItemStack[] getBlocks() {
|
||||||
|
ItemStack[] ret = new ItemStack[blocks.ITEMS.getEntries().size()];
|
||||||
|
int i = 0;
|
||||||
|
for (RegistryObject<Item> item : blocks.ITEMS.getEntries()) {
|
||||||
|
ret[i] = item.get().getDefaultInstance();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,5 +18,6 @@ public class DataGenerators {
|
|||||||
PackOutput packOutput = generator.getPackOutput();
|
PackOutput packOutput = generator.getPackOutput();
|
||||||
ExistingFileHelper existingFileHelper = event.getExistingFileHelper();
|
ExistingFileHelper existingFileHelper = event.getExistingFileHelper();
|
||||||
generator.addProvider(event.includeClient(), new ModItemModelProvider(packOutput, existingFileHelper));
|
generator.addProvider(event.includeClient(), new ModItemModelProvider(packOutput, existingFileHelper));
|
||||||
|
generator.addProvider(event.includeClient(), new ModBlockStateProvider(packOutput, existingFileHelper));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,86 @@
|
|||||||
|
package com.jenny.magic.datagen;
|
||||||
|
|
||||||
|
import com.jenny.magic.blocks.blocks;
|
||||||
|
import net.minecraft.data.PackOutput;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.minecraftforge.client.model.generators.BlockStateProvider;
|
||||||
|
import net.minecraftforge.client.model.generators.ConfiguredModel;
|
||||||
|
import net.minecraftforge.client.model.generators.ModelFile;
|
||||||
|
import net.minecraftforge.common.data.ExistingFileHelper;
|
||||||
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
import net.minecraftforge.registries.RegistryObject;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import static com.jenny.magic.Magic.MODID;
|
||||||
|
|
||||||
|
public class ModBlockStateProvider extends BlockStateProvider {
|
||||||
|
public ModBlockStateProvider(PackOutput output, ExistingFileHelper exFileHelper) {
|
||||||
|
super(output, MODID, exFileHelper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerStatesAndModels() {
|
||||||
|
test(blocks.ANTI_SPAWNER);
|
||||||
|
//blockWithItem(blocks.ANTI_SPAWNER);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void test(@NotNull RegistryObject<Block> blockRegistryObject) {
|
||||||
|
Block block = blockRegistryObject.get();
|
||||||
|
ModelFile model = cube(block);
|
||||||
|
this.getVariantBuilder(block).forAllStates(blockState -> ConfiguredModel.builder().modelFile(model).build());
|
||||||
|
simpleBlockItem(block, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void blockWithItem(@NotNull RegistryObject<Block> blockRegistryObject) {
|
||||||
|
simpleBlockWithItem(blockRegistryObject.get(), cubeAll(blockRegistryObject.get()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SideTop(@NotNull RegistryObject<Block> blockRegistryObject) {
|
||||||
|
simpleBlockWithItem(blockRegistryObject.get(), topSide(blockRegistryObject.get()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void blockItem(@NotNull RegistryObject<Block> blockRegistryObject) {
|
||||||
|
simpleBlockItem(blockRegistryObject.get(), new ModelFile.UncheckedModelFile(MODID +
|
||||||
|
":block/" + Objects.requireNonNull(ForgeRegistries.BLOCKS.getKey(blockRegistryObject.get())).getPath()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void topBottom2Sides(@NotNull RegistryObject<Block> blockRegistryObject) {
|
||||||
|
simpleBlockWithItem(blockRegistryObject.get(), northEastTopBottom(blockRegistryObject.get()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private ResourceLocation key(Block block) {
|
||||||
|
return ForgeRegistries.BLOCKS.getKey(block);
|
||||||
|
}
|
||||||
|
|
||||||
|
private @NotNull String name(Block block) {
|
||||||
|
return key(block).getPath();
|
||||||
|
}
|
||||||
|
|
||||||
|
private ResourceLocation extend(@NotNull ResourceLocation rl, String suffix) {
|
||||||
|
return new ResourceLocation(rl.getNamespace(), rl.getPath() + suffix);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sideTopBottom(@NotNull RegistryObject<Block> blockRegistryObject) {
|
||||||
|
Block block = blockRegistryObject.get();
|
||||||
|
ModelFile model = models().cubeBottomTop(name(block), extend(blockTexture(block), "_side"), extend(blockTexture(block), "_bottom"), extend(blockTexture(block), "_top"));
|
||||||
|
this.getVariantBuilder(block).forAllStates(blockState -> ConfiguredModel.builder().modelFile(model).build());
|
||||||
|
simpleBlockItem(block, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModelFile northEastTopBottom(Block block) {
|
||||||
|
return models().cube(name(block), extend(blockTexture(block), "_bottom"), extend(blockTexture(block), "_top"), extend(blockTexture(block), "_nw"), extend(blockTexture(block), "_se"), extend(blockTexture(block), "_se"), extend(blockTexture(block), "_nw")).texture("particle", extend(blockTexture(block), "_se"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModelFile cube(Block block) {
|
||||||
|
return models().cubeAll(name(block), blockTexture(block));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModelFile topSide(Block block) {
|
||||||
|
return models().cubeColumn(name(block), extend(blockTexture(block), "_side"), extend(blockTexture(block), "_top"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
32
src/main/java/com/jenny/magic/items/BlockItemTooltip.java
Normal file
32
src/main/java/com/jenny/magic/items/BlockItemTooltip.java
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package com.jenny.magic.items;
|
||||||
|
|
||||||
|
import net.minecraft.ChatFormatting;
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.network.chat.MutableComponent;
|
||||||
|
import net.minecraft.world.item.BlockItem;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.item.TooltipFlag;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.jenny.magic.Magic.MODID;
|
||||||
|
|
||||||
|
public class BlockItemTooltip extends BlockItem {
|
||||||
|
public BlockItemTooltip(Block pBlock, Properties pProperties) {
|
||||||
|
super(pBlock, pProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void appendHoverText(@NotNull ItemStack pStack, @Nullable Level pLevel, @NotNull List<Component> pTooltipComponents, @NotNull TooltipFlag pIsAdvanced) {
|
||||||
|
String key = String.format("tooltip.%s.%s", MODID, this);
|
||||||
|
MutableComponent toolTip = Component.translatable(key);
|
||||||
|
if (!toolTip.getString().equals(key)) {
|
||||||
|
pTooltipComponents.add(toolTip.withStyle(ChatFormatting.DARK_BLUE));
|
||||||
|
super.appendHoverText(pStack, pLevel, pTooltipComponents, pIsAdvanced);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
67
src/main/java/com/jenny/magic/items/TeleportScrollBiome.java
Normal file
67
src/main/java/com/jenny/magic/items/TeleportScrollBiome.java
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
package com.jenny.magic.items;
|
||||||
|
|
||||||
|
import com.mojang.datafixers.util.Pair;
|
||||||
|
import net.minecraft.ChatFormatting;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.core.Holder;
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
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.context.UseOnContext;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.biome.Biome;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
import static com.jenny.magic.Magic.MODID;
|
||||||
|
|
||||||
|
public class TeleportScrollBiome extends BaseItem {
|
||||||
|
private final Biome biome;
|
||||||
|
private final ChatFormatting color;
|
||||||
|
|
||||||
|
public TeleportScrollBiome(Properties pProperties, Biome biome, ChatFormatting color) {
|
||||||
|
super(pProperties);
|
||||||
|
this.biome = biome;
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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) {
|
||||||
|
Predicate<Holder<Biome>> predicate = new Predicate<Holder<Biome>>() {
|
||||||
|
@Override
|
||||||
|
public boolean test(@NotNull Holder<Biome> biomeHolder) {
|
||||||
|
return Objects.equals(biomeHolder.get().toString(), biome.toString());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Pair<BlockPos, Holder<Biome>> pair = ((ServerLevel) player.level()).findClosestBiome3d(predicate, player.blockPosition(), 69000, 32, 64);
|
||||||
|
if (pair == null) {
|
||||||
|
MessageBiomeNotFound(player);
|
||||||
|
} else {
|
||||||
|
player.teleportTo(pair.getFirst().getX(), pair.getFirst().getY(), pair.getFirst().getZ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
itemStack.shrink(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void MessageBiomeNotFound(Player player) {
|
||||||
|
player.sendSystemMessage(Component.translatable(String.format("message.%s.scroll_teleport_biome.not_found", MODID)));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
package com.jenny.magic.items;
|
||||||
|
|
||||||
|
import com.mojang.datafixers.util.Pair;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.core.Holder;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
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.context.UseOnContext;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.biome.Biome;
|
||||||
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
public class TeleportScrollRandomBiome extends BaseItem {
|
||||||
|
public TeleportScrollRandomBiome(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 && itemStack.getTag() != null && itemStack.getTag().contains("teleport_biome")) {
|
||||||
|
Biome biome = ForgeRegistries.BIOMES.getValue(ResourceLocation.parse(itemStack.getTag().getString("teleport_biome")));
|
||||||
|
Predicate<Holder<Biome>> predicate = new Predicate<Holder<Biome>>() {
|
||||||
|
@Override
|
||||||
|
public boolean test(@NotNull Holder<Biome> biomeHolder) {
|
||||||
|
return Objects.equals(biomeHolder.get().toString(), biome.toString());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Pair<BlockPos, Holder<Biome>> pair = ((ServerLevel) player.level()).findClosestBiome3d(predicate, player.blockPosition(), 69000, 32, 64);
|
||||||
|
if (pair == null) {
|
||||||
|
System.out.println("error: biome not found");
|
||||||
|
} else {
|
||||||
|
player.teleportTo(pair.getFirst().getX(), pair.getFirst().getY(), pair.getFirst().getZ());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setBiome(player.level(), itemStack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setBiome(Level level, ItemStack itemStack) {
|
||||||
|
//ForgeRegistries.BIOMES.getEntries().stream().toList().get().;
|
||||||
|
Collection<Biome> list = ForgeRegistries.BIOMES.getValues();
|
||||||
|
//String biomeStr = list.get(level.getRandom().nextInt(list.size())).toString();
|
||||||
|
|
||||||
|
CompoundTag compoundTag = itemStack.getTag();
|
||||||
|
compoundTag = compoundTag != null ? compoundTag : new CompoundTag();
|
||||||
|
//compoundTag.putString("teleport_biome", biomeStr);
|
||||||
|
itemStack.setTag(compoundTag);
|
||||||
|
}
|
||||||
|
}
|
@ -14,6 +14,7 @@ public class items {
|
|||||||
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 = 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_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 final RegistryObject<Item> SCROLL_TELEPORT_RANDOM = ITEMS.register("scroll_teleport_random", () -> new TeleportScrollRandom(new Item.Properties().stacksTo(1)));
|
||||||
|
public static final RegistryObject<Item> SCROLL_TELEPORT_RANDOM_BIOME = ITEMS.register("scroll_teleport_random_biome", () -> new TeleportScrollRandomBiome(new Item.Properties().stacksTo(16)));
|
||||||
|
|
||||||
|
|
||||||
public static void register(IEventBus bus) {
|
public static void register(IEventBus bus) {
|
||||||
|
BIN
src/main/resources/assets/magic/textures/block/anti_spawner.png
Normal file
BIN
src/main/resources/assets/magic/textures/block/anti_spawner.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 97 B |
Binary file not shown.
After Width: | Height: | Size: 97 B |
Binary file not shown.
After Width: | Height: | Size: 97 B |
21
src/main/resources/data/magic/recipes/wand_hurtful_test.json
Normal file
21
src/main/resources/data/magic/recipes/wand_hurtful_test.json
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shapeless",
|
||||||
|
"category": "combat",
|
||||||
|
"ingredients": [
|
||||||
|
{
|
||||||
|
"item": "minecraft:stick"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item": "minecraft:diamond"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"result": {
|
||||||
|
"item": "magic:wand_hurtful"
|
||||||
|
},
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"type": "magic:wand_hurtful",
|
||||||
|
"mod": "magic"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"required": true,
|
"required": true,
|
||||||
"minVersion": "0.8",
|
"minVersion": "0.8",
|
||||||
"package": "com.jenny.magic.mixin",
|
"package": "com.jenny.magic.mixins",
|
||||||
"compatibilityLevel": "JAVA_8",
|
"compatibilityLevel": "JAVA_8",
|
||||||
"refmap": "magic.refmap.json",
|
"refmap": "magic.refmap.json",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
|
Loading…
x
Reference in New Issue
Block a user