Jump to content

winnetrie

Members
  • Posts

    408
  • Joined

  • Last visited

Posts posted by winnetrie

  1. On ‎7‎/‎11‎/‎2019 at 5:38 AM, DaemonUmbra said:

    Twitch's CDN is broken.

    Check my signature, "Logs" section "Twitch" sub-section, the instructions and video I give for getting a log from Twitch will also allow you to run a Twitch modpack without Twitch trying to use their own versions of things.

    Srry to ask, but where do i find this "signature". I have been looking around, but i cannot find it. Srry if this sounds stupid.

  2. 6 hours ago, Albert_OS said:

    I tried to install mods from curseforge just now, the problem persists. None of the mods create anything in the "/ config" folder. with version 1.13.2 the same problem, and versions lower than 1.13 work perfectly

    The config files generate after you have started your game once. They do not create by installing the mods

  3. I don't understand why it is so hard for people to download mods from most legit and official site called curseforge

    Here is a link curseforge  <--- Download only from this page or from the mod owners official sites.

    Even better install the twitch app and use that to install mods. It let's you set up multiple profiles you can easily manage and install mods from within that app.

    The legit Official and most important free tools are there, please use it.

  4. I have added several liquids to the game and forge has added buckets for all those liquids.

    The liquids represent all kind of fruit juices (apple_juice, carrot_juice, lemon_juice, etc etc)

    I have also added bottles with the liquid inside

    What i want to achieve is that the game also knows that those bottles have the liquids.

     

    I tried by adding NBT data:

    @Override
    	public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
    		
    		NBTTagCompound nbt = stack.getTagCompound();
    		if (nbt == null) {nbt = new NBTTagCompound();}
    		nbt.setString("FluidName", NBTliquid);
    		nbt.setInteger("Amount", 1000);
    		stack.setTagCompound(nbt);
    	}

    where NBTliquid is a variable (String)  i get from the constructor.

     

    I have also CraftTweaker installed so i did /ct hand with an apple_juice bottle in my hand to see the tag on it.

    This is the result from a bucket: <forge:bucketfilled>.withTag({FluidName: "apple_juice", Amount: 1000})

    This is the result from a bottle:  <winnetriesexpansionmod:apple_juice_bottle>.withTag({FluidName: "apple_juice", Amount: 1000})

     

    Am i'm doing something wrong here. The bucket works properly but the bottle not.

    For example the bucket is accepted in various mods that load and unloads liquids, the bottles are not

  5. Could anyone help me with this pls? I just want to know where to put the railcraftapi.jar so i can use it in my mod.

     

    Nvm, found it myself. For future searches:

     

    1: put the api jar in "lib" folder

    2: rightclick within your IDE(eclipse) the api jar and click "add to buildpath"

    3: inside build.gradle add compile files("lib/railcraft-12.0.0-api.jar") in the depencies section

    4: done, you can now use it and reference it within your project and it will compile properly

     

     

  6. If for example i want to use the railcraft api, how do i properly add it?

    What i want to do:

    removing and adding recipes for the rollingmachine (since crafttweaker has nu support for railcraft latest version)

    Ofcourse i searched the web and this forum for info. What i found was i had to extract the files into src\api\java folder, but doing so doesn't make it useable. It says there isn't source attached.

  7. First of all to answer your question, go ingame and and press F3 + H....This will show advanced tooltips.

    Now put your item/block in your inventory and hover with your mouse over it. You should see a gray tekst, that tekst contains your modid followed with ":" and then the name of your item/block

    Actually to be short the gray tekst is the registryname of your item/block. So what does it say? …."imagespawner:imagespawner" ?

    DavidM is right. Why do you use an enum for naming stuff? Why do you use 2 separate names for registryname and unlocalizedname?

    Something i do is passing a resourcelocation in the constructor for example my invar block class in a simple way:

     

    public class BlockInvar extends Block{
    
    	public BlockInvar(ResourceLocation registryname) {
    		super(Material.IRON, MapColor.IRON);
    		setSoundType(SoundType.METAL);
    		setHardness(7.0F);
    		setResistance(10.0F);
    		//setHarvestLevel("pickaxe", 3);
    		setUnlocalizedName(registryname.toString());
    		setRegistryName(registryname);
    		setCreativeTab(Utilities.WINNETRIESEXPANSIONMOD);
    	}
    
    }

    You can still use an Enum if you like, but just keep 1 name. 

    Creating the block would look like this:

    ModBlockReference.invar_block = new BlockInvar(new ResourceLocation(References.PREFIX + "block_invar"))

    If you want to use your enum naming change "block_invar" to Reference.ImageSpawnerEnum.IMAGESPAWNER.getRegistryName()

    But i think that enum thing is just overkill in my opinion

  8. 2 hours ago, DavidM said:

    Nonononono BlockBase Bad.

    Do not abuse inheritance just to write less code.

     

    IHasModel is also unnecessary.

    Please read the common problems and suggestion for more info.

    This is true. Just make your class extend Block. You also should not use this IHasModel thing. I bet you are also using a common proxy wich is also bad!

  9. 2 hours ago, Triphion said:

    if(worldIn.isRemote)
            {
                playerIn.openGui(MainClass.instance, MainClass.GUI_ENUM.CYCLOPS_SMITHY.ordinal(), worldIn, pos.getX(), pos.getY(), pos.getZ());
            }

    I think this has to be if(!worldIn.isRemote) 

    Because you want to do the following action if the statement is NOT true

     

    EDIT: Just checked the workbench class, you should check the onBlockActivated method again.

    You forgot an else statement

  10. Can anyone help me with this? I only need to know why the flowing liquid texture is zoomed in. the texture is 16 x 512

     

    EDIT: I just tried to make the texture 32 x 512, because i have to try something.

    This seems to fix the texture problem, now the flowing texture has the appropriate texture format 16 x 16 and not 8 x 8.

    I'm not sure this is the right way to do it nor do i know why this happens.

  11. I have made a custom fluid, but for some reason the blockstate is not working.

     

    blockstate file:

    Spoiler
    
    {
        "forge_marker": 1,
    	"variants": {
    	    "fluids": {
    		    "model": "forge:fluid",
    			"custom": { "fluid": "molten_invar" }
    			}
    	}
    }

     

    fluidclass:

    Spoiler
    
    public class FluidLiquid extends Fluid{
    
    	public FluidLiquid(String registryname, ResourceLocation still, ResourceLocation flowing) {
    		super(registryname, still, flowing);
    		
    		setUnlocalizedName(registryname);
    		
    		
    	}
    
    }

     

    fluidblock class:

    Spoiler
    
    public class FluidSolid extends BlockFluidClassic{
    
    	public FluidSolid(String registryname, Fluid fluid, Material material) {
    		super(fluid, material);
    		
    		setUnlocalizedName(registryname);
    		setRegistryName(registryname);
    		setCreativeTab(Utilities.WINNETRIETERRACOTTAEXPANSION);
    		
    	}
    
    	@Override
    	public EnumBlockRenderType getRenderType(IBlockState state) {
    		
    		return EnumBlockRenderType.MODEL;
    	}
    }

     

    i made a renderHandler class:

    Spoiler
    
    public class RenderHandler {
    	
    	public static void registerCustomMeshesAndStates(ResourceLocation registryname, Block blockreference) {
    		
    		ModelLoader.setCustomMeshDefinition(Item.getItemFromBlock(blockreference), new ItemMeshDefinition() {
    			
    			@Override
    			public ModelResourceLocation getModelLocation(ItemStack stack) {
    				
    				return new ModelResourceLocation(registryname, "fluid");
    			}
    		});
    		
    		ModelLoader.setCustomStateMapper(blockreference, new StateMapperBase() {
    			
    			@Override
    			protected ModelResourceLocation getModelResourceLocation(IBlockState state) {
    				
    				return new ModelResourceLocation(registryname, "fluid");
    			}
    		});
    	}
    
    }

     

    a fluidinit class:

    Spoiler
    
    public class FluidInit {
    	
    	public static void registerFluids() {
    		
    		
    		if (Loader.isModLoaded("immersiveengineering")) {
    			
    			registerFluid(ModFluidReference.invar_fluid = new FluidLiquid("molten_invar", 
    					new ResourceLocation(References.PREFIX + "blocks/liquid_invar_still"), 
    					new ResourceLocation(References.PREFIX + "blocks/liquid_invar_flow")));
    		}
    		
    	}
    	
    	public static void registerFluid(Fluid fluid) {
    		
    		FluidRegistry.registerFluid(fluid);
    		FluidRegistry.addBucketForFluid(fluid);
    	}
    
    }

     

    inside the blockregistry event:

    Spoiler
    
    if (Loader.isModLoaded("immersiveengineering")) {
    			event.getRegistry().registerAll(
    					
    					ModBlockReference.invar_block = new BlockInvar(new ResourceLocation(References.PREFIX + "block_invar")),
    					ModBlockReference.bronze_block = new BlockBronze(new ResourceLocation(References.PREFIX + "block_bronze")),
    					ModBlockReference.tin_block = new BlockTin(new ResourceLocation(References.PREFIX + "block_tin")),
    					ModBlockReference.solder_block = new BlockSolder(new ResourceLocation(References.PREFIX + "block_solder")),
    					
    					ModBlockReference.molten_invar = new FluidSolid("winnetriesexpansionmod:molten_invar", ModFluidReference.invar_fluid, Material.LAVA)
    					
    					);
    			
    		}

     

    Btw it is registering just the blockstate isn't loading, so i have purple/black squared textures

    here the client class:

    Spoiler
    
    @EventBusSubscriber
    public class ClientProxy implements IProxy{
    	
    	private static final String DEFAULT_VARIANT = "default";
    	private static final String NORMAL_VARIANT = "normal";
    
    	@SubscribeEvent
    	public static void onModelRegister(ModelRegistryEvent event) {
    		
    		
    		RenderHandler.registerCustomMeshesAndStates(new ResourceLocation(References.PREFIX + "molten_invar"), ModBlockReference.molten_invar);
    		
    		
    		for (Item item : ForgeRegistries.ITEMS.getValuesCollection()) {
    			if (item.getRegistryName().getResourceDomain().equals(References.MOD_ID)) {
    				registerItemModel(item);
    			}
    		}
    		
    		for (Block block : ForgeRegistries.BLOCKS.getValuesCollection()) {
    			if (block.getRegistryName().getResourceDomain().equals(References.MOD_ID) && !(block instanceof BlockWinnetrieSlab.Double)) {
    				registerBlockModel(block);
    			}
    		}
    		
    		
    	}
    	
    	@Override
    	public void PreInit(FMLPreInitializationEvent event) {
    		// TODO Auto-generated method stub
    		//RenderHandler.registerCustomMeshesAndStates(new ResourceLocation(References.PREFIX + "molten_invar"), ModBlockReference.molten_invar);
    		
    	}
    
    	@Override
    	public void Init(FMLInitializationEvent event) {
    		// TODO Auto-generated method stub
    		
    		
    	}
    
    	@Override
    	public void PostInit(FMLPostInitializationEvent event) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void ServerStarting(FMLServerStartingEvent event) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	public static void registerItemModel(Item item) {
    		
    		ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(), NORMAL_VARIANT));
    		
    	}
    	
    	public static void registerItemSlab(Item item) {
    		
    		ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(), DEFAULT_VARIANT));
    		
    	}
        public static void registerBlockModel(Block block) {
    		
    		ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(), NORMAL_VARIANT));
    		
    	}
    
    }

     

    and at last the main mod class:

    Spoiler
    
    @Mod(modid = References.MOD_ID, name = References.NAME, version = References.VERSION, dependencies=References.DEPENDENCIES)
    public class Wtemod {
    	
    	@Instance
    	public static Wtemod instance;
    	
    	private static File configDir;
    	public static File getConfigDir() {
    
            return configDir;
    
        }
    	static { FluidRegistry.enableUniversalBucket(); }
    	
    	@SidedProxy(clientSide = References.CLIENT_PROXY_CLASS, serverSide = References.SERVER_PROXY_CLASS)
    	public static IProxy proxy;
    	
    	@EventHandler
    	public void PreInit(FMLPreInitializationEvent event)
    	{
    		
    		//entities & networking
    		
    		configDir = new File(event.getModConfigurationDirectory() + "/" + References.MOD_ID);
            configDir.mkdirs();
            ConfigHandler.init(new File(configDir.getPath(), References.MOD_ID + ".cfg"));
            
            
            FluidInit.registerFluids();
    		
    	}
    	
    	@EventHandler
    	public void Init(FMLInitializationEvent event)
    	{
    		//registry events
    		
    		ModRecipes.init();
    		GameRegistry.registerWorldGenerator(new WinnetrieWorldGenerator(), 10);
    		if (Loader.isModLoaded("immersiveengineering")) {
    			ModIEAddon.init();
    		}
    	}
    	
    	@EventHandler
    	public void PostInit(FMLPostInitializationEvent event)
    	{
    		//inter-mod stuff
    	}
    	@EventHandler
        public void serverStarting(FMLServerStartingEvent event)
        {
    		//server commands registering
        }
    
    	
    }

     

    I have searched this forum for similar problems but none apply to me (as far as i know). I don't why is doesn' tload the blockstate

    Btw the blockstate file is inside assets/winnetriesexpansionmod/blockstates  package

    the textures with the mcmeta files are at assets/winnetriesexpansionmod/textures/blocks

    the texture files are called :   liquid_invar_flow.png, liquid_invar_flow.png.mcmeta, liquid_invar_still.png, liquid_invar_still.png.mcmeta

     

     

  12. You can also use the twitch app (was called curse app before), it has it's own section for modded minecraft and it's directly linked to the curse website. You can then setup multiple profiles and install mods from in the app. The app install's the right mod for the version you want and it comes directly from the Original site.

    I suggest you search on YouTube how to install twitch for minecraft and how to use it. It's pretty easy to use. Me, family and friends are using it too. There are also other apps that will probebly do the same. I prefer the twitch app and as far as i know, it is the only offcial app for this.

    • Like 1
  13. 1-Download the mdk

    2-put the mdk in a folder …….\minecraft_modding\winnetriesexpansionmod1.13.2

    3-Extract the mdk in that folder.

    4-Run gradlew eclipse with cmd in that folder

    5-Open eclipse and select workspace ……\minecraft_modding

    6-In eclipse, click File -> open projects from file system and select the …..\minecraft_modding\winnetriesexpansionmod folder.

    7-Done

     

     

    Those are the steps i did. I even tried completely clean with only the mdk example, gave me the same error.

    It only works with the workaround thing

  14. 8 hours ago, Cadiboo said:

    Isolate the error, place breakpoints, find the cause and solve it

    Well , i did that already before. I know where the problem, what it is and why it does it. Just not how to solve it.

    I tried providing a dummy model and this seems to take away the multimodel error while not affecting my wall.

    I knew the wall blockstate needed a sort of base model, the problem is when providing 1 that model will be visible in all blockstates. Not something you want ofcourse. By providing a dummy model wich contains just a comment, fixes that visual bug/glitch however you want to call it. Important, the dummy model has to contain some information or else it won't load it or perhaps it will give an error.

     

    Look here:

    {
        "forge_marker": 1,
        "defaults": {
            "textures": {
    		    "wall": "minecraft:blocks/concrete_pink",
                "particle": "#wall"
            }    
        },
        
        "variants": {
            "up": {
                "true": {
                    "submodel": {"wall_up": {"model": "wall_post"}}
                },
                "false": {}
            },
            "north": {
                "true": {
                    "submodel": {"wall_north": {"model": "wall_side","uvlock": true}}
                },
                "false": {}
            },
            "east": {
                "true": {
                    "submodel": {"wall_east": {"model": "wall_side","y": 90,"uvlock": true}}
                },
                "false": {}
            },
            "south": {
                "true": {
                    "submodel": {"wall_south": {"model": "wall_side","y": 180,"uvlock": true}}
                },
                "false": {}
            },
            "west": {
                "true": {
                    "submodel": {"wall_west": {"model": "wall_side","y": 270,"uvlock": true}}
                },
                "false": {}
            },
            
            "normal": {
                "model": "wall_inventory",
                "textures": {
                    "all": "minecraft:blocks/concrete_pink"
                }
            },
            "variant": {
                "default": {
    			    "model": "winnetriesexpansionmod:dummy",
                    "textures": {
                        "all": "minecraft:blocks/concrete_pink"
                    }
                }
            }
        }
    }

     

    Here the dummy model:

    {
        "__comment": "An empty model",
        "elements": [
    
        ]
    }

     

    I think this can be very helpfull to others with the same problem. I saw alot of mods i play who has the same error spam in the log, so i'm pretty sure this multumodel stuff is a real thing among other modders.

  15. I am trying out modding for 1.13.2, but on startup i get this crash :

    Exception in thread "main" joptsimple.MissingRequiredOptionsException: Missing required option(s) [accessToken, version]
        at joptsimple.OptionParser.ensureRequiredOptions(OptionParser.java:426)
        at joptsimple.OptionParser.parse(OptionParser.java:400)
        at net.minecraft.client.main.Main.main(Main.java:63)

     

    I have no idea what this means and how to fix this.

    I am not able to find any proper documentation for 1.13.2

  16. Oh right, haha , i forgot the add the error.

    It's this: 

    [Client thread/ERROR] [FML]: MultiModel minecraft:builtin/missing is empty (no base model or parts were provided/resolved)

     

    I don't think it's something ver bad, but ennoying.

    I have this message now 64 times, because i have added 64 walls 

  17. After a started creating walls for my mod i see this message appearing multiple times (i think the number of wall blocks i have)

     

    I'm pretty sure (99%) it comes from the wall blockstate file. I can't see what's wrong, maybe someone else:

    {
        "forge_marker": 1,
        "defaults": {
            "textures": {
    		    "wall": "minecraft:blocks/hardened_clay_stained_black",
                "particle": "#wall"
            }    
        },
        
        "variants": {
            "up": {
                "true": {
                    "submodel": {"wall_up": {"model": "wall_post"}}
                },
                "false": {}
            },
            "north": {
                "true": {
                    "submodel": {"wall_north": {"model": "wall_side","uvlock": true}}
                },
                "false": {}
            },
            "east": {
                "true": {
                    "submodel": {"wall_east": {"model": "wall_side","y": 90,"uvlock": true}}
                },
                "false": {}
            },
            "south": {
                "true": {
                    "submodel": {"wall_south": {"model": "wall_side","y": 180,"uvlock": true}}
                },
                "false": {}
            },
            "west": {
                "true": {
                    "submodel": {"wall_west": {"model": "wall_side","y": 270,"uvlock": true}}
                },
                "false": {}
            },
            
            "normal": {
                "model": "wall_inventory",
                "textures": {
                    "all": "minecraft:blocks/hardened_clay_stained_black"
                }
            },
            "variant": {
                "default": {
                    "textures": {
                        "all": "minecraft:blocks/hardened_clay_stained_black"
                    }
                }
            }
        }
    }

    Everything in the game is fine, i can't see any visual bugs or something.

     

    Here is the wall class:

    public class BlockWinnetrieWall extends Block{
    	
    	public static final PropertyBool UP = PropertyBool.create("up");
        public static final PropertyBool NORTH = PropertyBool.create("north");
        public static final PropertyBool EAST = PropertyBool.create("east");
        public static final PropertyBool SOUTH = PropertyBool.create("south");
        public static final PropertyBool WEST = PropertyBool.create("west");
        
        protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[] {new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)};
        protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[] {AABB_BY_INDEX[0].setMaxY(1.5D), AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), AABB_BY_INDEX[3].setMaxY(1.5D), AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), AABB_BY_INDEX[6].setMaxY(1.5D), AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), AABB_BY_INDEX[9].setMaxY(1.5D), AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), AABB_BY_INDEX[12].setMaxY(1.5D), AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), AABB_BY_INDEX[15].setMaxY(1.5D)};
    	
    	private IBlockState parentBlock;
    	public static final PropertyEnum<EnumType> VARIANT = PropertyEnum.<EnumType>create("variant", EnumType.class);
    
    	public BlockWinnetrieWall(IBlockState modelBlock, ResourceLocation registryname) {
    		super(modelBlock.getMaterial());
    		
    		this.setDefaultState(this.blockState.getBaseState().withProperty(UP, Boolean.valueOf(false)).withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false)).withProperty(VARIANT, EnumType.DEFAULT));
    		setUnlocalizedName(registryname.toString());
    		setRegistryName(registryname);
    		setCreativeTab(Utilities.WINNETRIETERRACOTTAEXPANSION);
    		useNeighborBrightness = true;
    		parentBlock = modelBlock;
    	}
    	
    	@Override
    	public SoundType getSoundType(IBlockState state, World world, BlockPos pos, @Nullable Entity entity){
    		
            return parentBlock.getBlock().getSoundType(state, world, pos, entity);
        }
    	
    	
    	@Override
        public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos)
        {
            return parentBlock.getBlockHardness(worldIn, pos);
        }
    	
    	@Override
        public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos)
        {
            
        	return parentBlock.getMapColor(worldIn, pos);
        }
    	
    	@Override
    	public int damageDropped(IBlockState state) {
    		
    		return 0;
    		
    	}
    	
    	@Override
    	public IBlockState getStateFromMeta(int meta)
        {
            return this.getDefaultState();
        }
    
        @Override
        public int getMetaFromState(IBlockState state)
        {
            return state.getValue(VARIANT).ordinal();
        }
        
    	@Override
    	protected BlockStateContainer createBlockState()
        {
            return new BlockStateContainer(this, new IProperty[] {UP, NORTH, EAST, WEST, SOUTH, VARIANT});
        }
    	
    	public enum EnumType implements IStringSerializable {
    
    		DEFAULT();
    
    		@Override
    		@Nonnull
    		public String getName() {
    
    			return "default";
    
    		}
    
    	}
    	
    	public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
        {
            state = this.getActualState(state, source, pos);
            return AABB_BY_INDEX[getAABBIndex(state)];
        }
    
        public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entityIn, boolean isActualState)
        {
            if (!isActualState)
            {
                state = this.getActualState(state, worldIn, pos);
            }
    
            addCollisionBoxToList(pos, entityBox, collidingBoxes, CLIP_AABB_BY_INDEX[getAABBIndex(state)]);
        }
    
        @Nullable
        public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos)
        {
            blockState = this.getActualState(blockState, worldIn, pos);
            return CLIP_AABB_BY_INDEX[getAABBIndex(blockState)];
        }
    
        private static int getAABBIndex(IBlockState state)
        {
            int i = 0;
    
            if (((Boolean)state.getValue(NORTH)).booleanValue())
            {
                i |= 1 << EnumFacing.NORTH.getHorizontalIndex();
            }
    
            if (((Boolean)state.getValue(EAST)).booleanValue())
            {
                i |= 1 << EnumFacing.EAST.getHorizontalIndex();
            }
    
            if (((Boolean)state.getValue(SOUTH)).booleanValue())
            {
                i |= 1 << EnumFacing.SOUTH.getHorizontalIndex();
            }
    
            if (((Boolean)state.getValue(WEST)).booleanValue())
            {
                i |= 1 << EnumFacing.WEST.getHorizontalIndex();
            }
    
            return i;
        }
    
    
        public boolean isFullCube(IBlockState state)
        {
            return false;
        }
    
        /**
         * Determines if an entity can path through this block
         */
        public boolean isPassable(IBlockAccess worldIn, BlockPos pos)
        {
            return false;
        }
    
        /**
         * Used to determine ambient occlusion and culling when rebuilding chunks for render
         */
        public boolean isOpaqueCube(IBlockState state)
        {
            return false;
        }
    
        private boolean canConnectTo(IBlockAccess worldIn, BlockPos pos, EnumFacing p_176253_3_)
        {
            IBlockState iblockstate = worldIn.getBlockState(pos);
            Block block = iblockstate.getBlock();
            BlockFaceShape blockfaceshape = iblockstate.getBlockFaceShape(worldIn, pos, p_176253_3_);
            boolean flag = blockfaceshape == BlockFaceShape.MIDDLE_POLE_THICK || blockfaceshape == BlockFaceShape.MIDDLE_POLE ;//&& block instanceof BlockFenceGate;
            return !isExcepBlockForAttachWithPiston(block) && blockfaceshape == BlockFaceShape.SOLID || flag;
        }
    
        protected static boolean isExcepBlockForAttachWithPiston(Block p_194143_0_)
        {
            return Block.isExceptBlockForAttachWithPiston(p_194143_0_) || p_194143_0_ == Blocks.BARRIER || p_194143_0_ == Blocks.MELON_BLOCK || p_194143_0_ == Blocks.PUMPKIN || p_194143_0_ == Blocks.LIT_PUMPKIN;
        }
    
     
    
        @SideOnly(Side.CLIENT)
        public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side)
        {
            return side == EnumFacing.DOWN ? super.shouldSideBeRendered(blockState, blockAccess, pos, side) : true;
        }
    
    
        /**
         * Get the actual Block state of this Block at the given position. This applies properties not visible in the
         * metadata, such as fence connections.
         */
        public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos)
        {
            boolean flag =  canWallConnectTo(worldIn, pos, EnumFacing.NORTH);
            boolean flag1 = canWallConnectTo(worldIn, pos, EnumFacing.EAST);
            boolean flag2 = canWallConnectTo(worldIn, pos, EnumFacing.SOUTH);
            boolean flag3 = canWallConnectTo(worldIn, pos, EnumFacing.WEST);
            boolean flag4 = flag && !flag1 && flag2 && !flag3 || !flag && flag1 && !flag2 && flag3;
            return state.withProperty(UP, Boolean.valueOf(!flag4 || !worldIn.isAirBlock(pos.up()))).withProperty(NORTH, Boolean.valueOf(flag)).withProperty(EAST, Boolean.valueOf(flag1)).withProperty(SOUTH, Boolean.valueOf(flag2)).withProperty(WEST, Boolean.valueOf(flag3));
        }
    
    
    
        /**
         * Get the geometry of the queried face at the given position and state. This is used to decide whether things like
         * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things.
         * <p>
         * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that
         * does not fit the other descriptions and will generally cause other things not to connect to the face.
         * 
         * @return an approximation of the form of the given face
         */
        public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face)
        {
            return face != EnumFacing.UP && face != EnumFacing.DOWN ? BlockFaceShape.MIDDLE_POLE_THICK : BlockFaceShape.CENTER_BIG;
        }
    
        /* ======================================== FORGE START ======================================== */
    
        @Override
        public boolean canBeConnectedTo(IBlockAccess world, BlockPos pos, EnumFacing facing)
        {
            Block connector = world.getBlockState(pos.offset(facing)).getBlock();
            return connector instanceof BlockWall || connector  instanceof BlockWinnetrieWall;
        }
    
        private boolean canWallConnectTo(IBlockAccess world, BlockPos pos, EnumFacing facing)
        {
            BlockPos other = pos.offset(facing);
            Block block = world.getBlockState(other).getBlock();
            return block.canBeConnectedTo(world, other, facing.getOpposite()) || canConnectTo(world, other, facing.getOpposite());
        }
        
        public boolean canPlaceTorchOnTop(IBlockState state, IBlockAccess world, BlockPos pos)
        {
            return true;
        }

    For the most part i just copy-pasted the whole BlockWall class, because of the enums that's hardcoded in that class (cobblestone & mossy cobblestone).

    I do not get any other errors of any kind. Only the multimodel part

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.