diff --git a/src/main/java/net/minecraftforge/common/PlantType.java b/src/main/java/net/minecraftforge/common/PlantType.java index b0820e84a..7f628e5d2 100644 --- a/src/main/java/net/minecraftforge/common/PlantType.java +++ b/src/main/java/net/minecraftforge/common/PlantType.java @@ -22,7 +22,8 @@ package net.minecraftforge.common; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorldReader; -public enum PlantType +// TODO 1.16: This should not be an enum. Change it to something that functions similarly to ToolType +public enum PlantType implements IExtensibleEnum { Plains, Desert, @@ -45,5 +46,9 @@ public enum PlantType * @param name the name of the type of plant, you had better follow the style above * @return the acquired {@link PlantType}, a new one if not found. */ - public static PlantType create(String name){ return null; } + public static PlantType create(String name) + { + throw new IllegalStateException("Enum not extended"); + } } + diff --git a/src/test/java/net/minecraftforge/debug/block/CustomPlantTypeTest.java b/src/test/java/net/minecraftforge/debug/block/CustomPlantTypeTest.java new file mode 100644 index 000000000..f283180fd --- /dev/null +++ b/src/test/java/net/minecraftforge/debug/block/CustomPlantTypeTest.java @@ -0,0 +1,124 @@ +/* + * Minecraft Forge + * Copyright (c) 2016-2019. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation version 2.1 + * of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +package net.minecraftforge.debug.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.FlowerBlock; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.potion.Effects; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorldReader; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.common.PlantType; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.registries.ObjectHolder; + +@Mod(CustomPlantTypeTest.MODID) +@Mod.EventBusSubscriber(bus = Bus.MOD) +public class CustomPlantTypeTest +{ + static final String MODID = "custom_plant_type_test"; + private static final String CUSTOM_SOIL_BLOCK = "test_custom_block"; + private static final String CUSTOM_PLANT_BLOCK = "test_custom_plant"; + + @ObjectHolder(CUSTOM_SOIL_BLOCK) + public static Block CUSTOM_SOIL; + @ObjectHolder(CUSTOM_PLANT_BLOCK) + public static Block CUSTOM_PLANT; + + @SubscribeEvent + public static void registerBlocks(RegistryEvent.Register event) + { + event.getRegistry().registerAll(new CustomBlock(), new CustomPlantBlock()); + } + + @SubscribeEvent + public static void registerItems(RegistryEvent.Register event) + { + event.getRegistry().registerAll(new BlockItem(CUSTOM_SOIL, (new Item.Properties())).setRegistryName(MODID, CUSTOM_SOIL_BLOCK), + new BlockItem(CUSTOM_PLANT, (new Item.Properties())).setRegistryName(MODID, CUSTOM_PLANT_BLOCK)); + } + + public static class CustomBlock extends Block + { + public CustomBlock() + { + super(Block.Properties.create(Material.ROCK)); + this.setRegistryName(MODID, CUSTOM_SOIL_BLOCK); + } + + @Override + public boolean canSustainPlant(BlockState state, IBlockReader world, BlockPos pos, Direction facing, IPlantable plantable) + { + PlantType type = plantable.getPlantType(world, pos.offset(facing)); + if (type != null && type == CustomPlantBlock.pt) + { + return true; + } + return super.canSustainPlant(state, world, pos, facing, plantable); + } + } + + public static class CustomPlantBlock extends FlowerBlock implements IPlantable + { + public static PlantType pt = PlantType.create("CustomPlantType"); + + public CustomPlantBlock() + { + super(Effects.WEAKNESS, 9, Block.Properties.create(Material.PLANTS).doesNotBlockMovement().sound(SoundType.PLANT)); + this.setRegistryName(MODID, CUSTOM_PLANT_BLOCK); + } + + @Override + public PlantType getPlantType(IBlockReader world, BlockPos pos) + { + return pt; + } + + @Override + public BlockState getPlant(IBlockReader world, BlockPos pos) + { + return getDefaultState(); + } + + @Override + public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) + { + BlockState soil = world.getBlockState(pos.down()); + return soil.canSustainPlant(world, pos, Direction.UP, this); + } + + @Override + public boolean isValidGround(BlockState state, IBlockReader worldIn, BlockPos pos) + { + Block block = state.getBlock(); + return block == CUSTOM_SOIL; + } + } +} \ No newline at end of file diff --git a/src/test/resources/META-INF/mods.toml b/src/test/resources/META-INF/mods.toml index 206b36dc1..0c1c0ac1c 100644 --- a/src/test/resources/META-INF/mods.toml +++ b/src/test/resources/META-INF/mods.toml @@ -60,4 +60,6 @@ loaderVersion="[28,)" [[mods]] modId="nameplate_render_test" [[mods]] - modId="global_loot_test" \ No newline at end of file + modId="global_loot_test" +[[mods]] + modId="custom_plant_type_test"