Jump to content

Include oredictionary entries scanner into forge


SpwnX

Recommended Posts

Basically, there are still modders who doesnt follow the standard convention for oredictionary names, registering items/blocks "improperly" causing compatibility issues.

GregTech, since 4.04d (Sep 24th) included a special code to detect those "invalid" entries and suggests fixes for them, although since it is only a particular mod, its range is severely limited, therefore I would like if forge included that feature of GregTech.

Example :

2013-10-19 17:42:23 [iNFO] [sTDERR] WARNING: 'diamondNugget' is an invalid OreDictionary Name. The Name doesn't fit to the Type of Item and/or doesn't follow a proper OreDictionary Convention. If you are the Owner of the Mod who adds this Item, please do the following: 
2013-10-19 17:42:23 [iNFO] [sTDERR] Put the 'Nugget' in the beginning of the Name to get 'nuggetDiamond'
2013-10-19 17:42:23 [iNFO] [sTDERR] Private Prefixes could also be a solution if the first Suggestion doesn't apply. In that case the suggestion for the name is 'Translocator:diamondNugget' don't forget to insert the ':' inbetween the Mod ID and OreDict Name, that is the most important part.
2013-10-19 17:42:23 [iNFO] [sTDERR] If you are not the Owner then report it to the Owner of the Mod, which the Item belongs to.
2013-10-19 17:42:23 [iNFO] [sTDERR] WARNING: 'obsidianRod' is an invalid OreDictionary Name. The Name doesn't fit to the Type of Item and/or doesn't follow a proper OreDictionary Convention. If you are the Owner of the Mod who adds this Item, please do the following: 
2013-10-19 17:42:23 [iNFO] [sTDERR] Put the 'Rod' in the beginning of the Name to get 'rodObsidian'
2013-10-19 17:42:23 [iNFO] [sTDERR] Private Prefixes could also be a solution if the first Suggestion doesn't apply. In that case the suggestion for the name is 'WR-CBE|Core:obsidianRod' don't forget to insert the ':' inbetween the Mod ID and OreDict Name, that is the most important part.
2013-10-19 17:42:23 [iNFO] [sTDERR] If you are not the Owner then report it to the Owner of the Mod, which the Item belongs to.

Link to comment
Share on other sites

[iNFO] [sTDERR] WARNING: 'obsidianRod' is an invalid OreDictionary Name. The Name doesn't fit to the Type of Item and/or doesn't follow a proper OreDictionary Convention. If you are the Owner of the Mod who adds this Item, please do the following:  Put the 'Rod' in the beginning of the Name to get 'rodObsidian'
[sTDERR] If you are not the Owner then report it to the Owner of the Mod, which the Item belongs to. (Not a bug, just a suggestion)

would be shorter and Less spammy.

Link to comment
Share on other sites

This is unnecessary.  There is no good reason to spam users about a non-issue.

Of course there is, to automatically warn modders (via users, because there is no other way) about improperly registered items, that causes incompatibility issues.

 

@Whoever wants to read another drama regarding GT and TiC: Go to GT thread on IC² forum and grab some popcorn.

Link to comment
Share on other sites

I would agree with this being added, so many people don't use the dictionary properly and you get childish people who break other people's code to make there wrongly defined ores work. *Cough* Tinkers. If normal users don't want to see the "spam" then a config option could be added to not show it. Otherwise people should deal with it, and who even watches there console when loading/playing minecraft?

 

If not then something should be added for developers to see when adding to the dictionary to check whether they are using the correct name structure for the item/block/ore they are trying to register simple.

Link to comment
Share on other sites

Are you fucking kidding me? Keep this in the Drecktech/IC^2 forums.  ::)

I didn't even mention TiC here, by the way.

Also, you just raged (ran out of arguments) there and got banned for insulting people.

No further comments are needed.

 

With this suggestion, i'm trying to help the whole modding community, by enforcing the standard convention, so we can have less problems regarding compatibility issues.

Link to comment
Share on other sites

The whole "private prefix" notion is completely contrary to the point of the ore dictionary in the first place (which is to allow mods to specify interchangeable items).  My counter-proposal, therefore would be to print an opt-in list after all of the mods have loaded of the strings registered in the ore dictionary and the number of items registered to those strings.

 

Anyone interested in compatibility would have done research into the strings that were already in use.

Link to comment
Share on other sites

The whole "private prefix" notion is completely contrary to the point of the ore dictionary in the first place (which is to allow mods to specify interchangeable items).  My counter-proposal, therefore would be to print an opt-in list after all of the mods have loaded of the strings registered in the ore dictionary and the number of items registered to those strings.

 

Anyone interested in compatibility would have done research into the strings that were already in use.

The private things are special cases, when the standard can't be applied and then must be registered that way to avoid unintended compatibility (Different items with same or close names). Example : GT gears and BC gears.

A standardization is required because nobody uses all mods at once, so there is kinda no way to get all registered things to be displayed to a modder for compatibility. Not to mention that it would bring extra work if everyone register the same stuff differently. Example "rodIron", "ironRod", and "rodFe" [Fe is the iron element]registered by three different mods for an iron stick (rod shape, 1/2 iron ingot of material).

Link to comment
Share on other sites

A standardization is required because nobody uses all mods at once, so there is kinda no way to get all registered things to be displayed to a modder for compatibility.

 

If the modder cares about compatibility, load all the mods he or she cares to be compatible with and call OreDictionary.getOreNames(), and if they want to go even further, iterate over the string array that it returns to call OreDictionary.getOres(oreName) and get a List of ItemStacks.

Link to comment
Share on other sites

A standardization is required because nobody uses all mods at once, so there is kinda no way to get all registered things to be displayed to a modder for compatibility.

 

If the modder cares about compatibility, load all the mods he or she cares to be compatible with and call OreDictionary.getOreNames(), and if they want to go even further, iterate over the string array that it returns to call OreDictionary.getOres(oreName) and get a List of ItemStacks.

Mod compatibility is meant to be global, not something restricted to certain mods. Guess what forge does, by allowing several different mods to run together, without any problems?

Standardization of oredict names allow cross-mod compatibility between mods even if they don't know the existance of each other, so the end user will never find incompatibility issues of items of the same type if both mods follow the standard.

 

So, this is not something unnecessary and not making mods follow the convention will eventually cause item incompatibility issues between mods, like GT and TiC rods are incompatible because of different oredictnames for same item.

Link to comment
Share on other sites

A standardization is required because nobody uses all mods at once, so there is kinda no way to get all registered things to be displayed to a modder for compatibility.

 

If the modder cares about compatibility, load all the mods he or she cares to be compatible with and call OreDictionary.getOreNames(), and if they want to go even further, iterate over the string array that it returns to call OreDictionary.getOres(oreName) and get a List of ItemStacks.

Mod compatibility is meant to be global, not something restricted to certain mods. Guess what forge does, by allowing several different mods to run together, without any problems?

Standardization of oredict names allow cross-mod compatibility between mods even if they don't know the existance of each other, so the end user will never find incompatibility issues of items of the same type if both mods follow the standard.

 

So, this is not something unnecessary and not making mods follow the convention will eventually cause item incompatibility issues between mods, like GT and TiC rods are incompatible because of different oredictnames for same item.

In the example you list, GregTech chose to not use the names that were already in use.  Also, the code that GT uses specifically ignores a large number of entries that do not follow the guideline, such as bronzeTube, ironTube, obbyTube, leatherSeal, and stoneBowl

 

Bonus fact:  one of the entries in the list of specifically invalid names is in fact appropriate according to the guideline:  woodRod.  According to the guideline: "- For anything wooden, please use "wood", then the type"

Link to comment
Share on other sites

No, Forge doesn't have a standard naming policy, aside from the things that we name. It is up to the modders to agree on the naming policy themselves.

I understand the debate as it sits, however, this is purely a debate between modders, Especially in the manor that GT has decided to go.

The wiki is created by the communitty not us. But ya, the answer is no, unless I get a large group of modders who aproach me with a actual standard they ALL have agreed on.

 

When it comes to the oredict, either you use the names that other people use, or your shit wont be found.

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Consider supporting the team on Patreon

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Join one of the largest civilization experiments in Minecraft under our banner!   Our goal is to create the largest and most prominent civilization across the entirety of Minecraft, and we’d like you to join! We offer lots of unique roles and jobs that tailor to your specific skillset in Minecraft! You can build a city, participate in the government, or fight for Gold, God, and Glory on the battlefield!   Join our nation today! https://discord.gg/hb3cuaDezA
    • I have an issue where after I exit the world the capability data does not save when I reload the world. It will save the initial data such as village name but if I modify any data during gameplay theres a 5% chance the data saves when I exit then reload the world. I read the docs and was told that chunks need to be marked dirty but the docs does not say how to mark the chunk dirty... Heres the provider: public class ChunkCapProvider implements ICapabilityProvider, INBTSerializable<CompoundTag> { private final Capability<ChunkCapability> capability = CapabilityManager.get(new CapabilityToken<ChunkCapability>() { }); private ChunkCapability instance = null; private final LazyOptional<ChunkCapability> lazy = LazyOptional.of(this::createChunk); private ChunkCapability createChunk(){ if(this.instance == null){ this.instance = new ChunkCapability(); } return this.instance; } public void invalidate(){ lazy.invalidate(); } @Nonnull @Override public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction direction) { if(cap == capability) return lazy.cast(); return LazyOptional.empty(); } @Override public CompoundTag serializeNBT() { CompoundTag nbt = new CompoundTag(); createChunk().serializeNBT(nbt); return nbt; } @Override public void deserializeNBT(CompoundTag tag) { createChunk().deserializeNBT(tag); } }   Heres the capability class: public class ChunkCapability { public static final ResourceLocation ID = new ResourceLocation(Main.MODID, "owner"); public static final String VILLAGE_NAME = "village_name"; public static final String SAVED_ROLES = "saved_roles"; public static final String SAVED_POINTS = "saved_points"; public static final String BAD_CHUNK = "BAD_VILLAGE_CHUNK"; public static Capability<IChunk> CHUNK_CAPABILITY = null; private String villageName = "BAD_VILLAGE_CHUNK"; private String savedRoles = ""; private String savedPoints = ""; public ChunkCapability(){ this.getClass(); } public CompoundTag serializeNBT(CompoundTag nbt) { nbt.putString(SAVED_ROLES, this.savedRoles); nbt.putString(SAVED_POINTS, this.savedPoints); nbt.putString(VILLAGE_NAME, this.villageName); return nbt; } public void deserializeNBT(CompoundTag tag) { this.setVillageName(tag.getString(VILLAGE_NAME)); this.setSavedRoles(tag.getString(SAVED_ROLES)); this.setSavedPoints(tag.getString(SAVED_POINTS)); } public String getVillageName() { return this.villageName; } public void setVillageName(String str) { this.villageName = str; } public void setSavedRoles(String str) { this.savedRoles = str; } public void setRole(String name, String role){ if(!this.hasRole(name)) { this.savedRoles += (name + ":" + role + ","); this.savedPoints += (name + ":" + 10 + ","); return; } String roleName = this.getRole(name); String firstStr = this.savedRoles.substring(0, this.savedRoles.indexOf(name + ":") + name.length() + 1); String lastStr = this.savedRoles.substring(this.savedRoles.indexOf(name + ":") + ((name.length() + 1) + roleName.length())); this.savedRoles = firstStr + role + lastStr; } public String getRole(String name){ if(this.savedRoles.isEmpty() || !this.savedRoles.contains(name)) { this.setRole(name, Roles.Role.FOREIGNER.getName()); } String fStr = this.savedRoles.substring(this.savedRoles.indexOf(name + ":"), this.savedRoles.indexOf(',')); return fStr.substring(fStr.indexOf(':') + 1); } public boolean hasRole(String name) { if(this.savedRoles.isEmpty()) return false; return this.savedRoles.contains(name); } public String getSavedRoles() { return this.savedRoles; } public String getSavedPoints() { return this.savedPoints; } public void setSavedPoints(String name) { this.savedPoints = name; } public int getPoints(String name) { if(this.savedPoints.isEmpty() || !this.savedRoles.contains(name)) this.setPoints(name, 10); String fStr = this.savedPoints.substring(this.savedPoints.indexOf(name + ':')); return Integer.parseInt(fStr.substring(fStr.indexOf(':') + 1, fStr.indexOf(','))); } public void setPoints(String name, int rV) { if(!this.hasPoints(name)){ this.savedPoints += (name + ":" + rV + ","); return; } String oldPoints = String.valueOf(this.getPoints(name)); String points = String.valueOf(rV); String firstStr = this.savedPoints.substring(0, this.savedPoints.indexOf(name + ":") + name.length() + 1); String lastStr = this.savedPoints.substring(this.savedPoints.indexOf(name + ":") + ((name.length() + 1) + oldPoints.length())); Minecraft.getInstance().player.displayClientMessage(Component.nullToEmpty("Saved String: " + (firstStr + points + lastStr)), false); this.savedPoints = (firstStr + points + lastStr); } public boolean hasPoints(String name) { if(this.savedPoints.isEmpty()) return false; return this.savedPoints.contains(name); } }   Heres where I attach/register: @Mod.EventBusSubscriber(modid = Main.MODID) public class CapabilityEvents { @SubscribeEvent public static void attachCapability(AttachCapabilitiesEvent<LevelChunk> event){ if(!event.getObject().getCapability(ChunkCapProvider.capability).isPresent()){ event.addCapability(new ResourceLocation(Main.MODID, "properties"), new ChunkCapProvider()); } } }  
    • Id use this ServerLevel#findNearestMapFeature  
    • Trying to play with the mods: Tinkers Construct, Buildcraft and the Blood Magic addon Blood Arsenal; the game crashes. I noticed that when trying to use only two of the three in any combination the game opens without problems, but when trying to put all three together the error occurs. Is there any configuration I can modify or any other way to solve the problem?   ---- Minecraft Crash Report ---- // Hi. I'm Minecraft, and I'm a crashaholic. Time: 5/22/24 8:48 PM Description: There was a severe problem during mod loading that has caused the game to fail cpw.mods.fml.common.LoaderException: java.lang.NoClassDefFoundError: tconstruct/library/weaponry/AmmoWeapon     at cpw.mods.fml.common.LoadController.transition(LoadController.java:163)     at cpw.mods.fml.common.Loader.loadMods(Loader.java:544)     at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:208)     at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:480)     at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:878)     at net.minecraft.client.main.Main.main(SourceFile:148)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)     at java.lang.reflect.Method.invoke(Unknown Source)     at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)     at net.minecraft.launchwrapper.Launch.main(Launch.java:28) Caused by: java.lang.NoClassDefFoundError: tconstruct/library/weaponry/AmmoWeapon     at java.lang.Class.forName0(Native Method)     at java.lang.Class.forName(Unknown Source)     at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:42)     at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:512)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)     at java.lang.reflect.Method.invoke(Unknown Source)     at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)     at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)     at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)     at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)     at com.google.common.eventbus.EventBus.post(EventBus.java:275)     at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212)     at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)     at java.lang.reflect.Method.invoke(Unknown Source)     at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)     at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)     at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)     at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)     at com.google.common.eventbus.EventBus.post(EventBus.java:275)     at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119)     at cpw.mods.fml.common.Loader.loadMods(Loader.java:513)     ... 10 more Caused by: java.lang.ClassNotFoundException: tconstruct.library.weaponry.AmmoWeapon     at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191)     at java.lang.ClassLoader.loadClass(Unknown Source)     at java.lang.ClassLoader.loadClass(Unknown Source)     ... 36 more Caused by: java.lang.NoClassDefFoundError: tconstruct/library/weaponry/AmmoItem     at java.lang.ClassLoader.defineClass1(Native Method)     at java.lang.ClassLoader.defineClass(Unknown Source)     at java.security.SecureClassLoader.defineClass(Unknown Source)     at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:182)     ... 38 more Caused by: java.lang.ClassNotFoundException: tconstruct.library.weaponry.AmmoItem     at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:101)     at java.lang.ClassLoader.loadClass(Unknown Source)     at java.lang.ClassLoader.loadClass(Unknown Source)     ... 42 more A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details:     Minecraft Version: 1.7.10     Operating System: Windows 10 (x86) version 10.0     Java Version: 1.8.0_411, Oracle Corporation     Java VM Version: Java HotSpot(TM) Client VM (mixed mode, sharing), Oracle Corporation     Memory: 271923192 bytes (259 MB) / 402653184 bytes (384 MB) up to 536870912 bytes (512 MB)     JVM Flags: 9 total; -Xmx512M -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M -XX:+IgnoreUnrecognizedVMOptions -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump     AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used     IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0     FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1614 14 mods loaded, 14 mods active     States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored     UC    mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)      UC    FML{7.10.99.99} [Forge Mod Loader] (forge-1.7.10-10.13.4.1614-1.7.10.jar)      UC    Forge{10.13.4.1614} [Minecraft Forge] (forge-1.7.10-10.13.4.1614-1.7.10.jar)      UC    AWWayofTime{v1.3.3} [Blood Magic: Alchemical Wizardry] (BloodMagic-1.7.10-1.3.3-17.jar)      UC    Mantle{1.7.10-0.3.2.jenkins191} [Mantle] (Mantle-1.7.10-0.3.2b.jar)      UE    TConstruct{1.7.10-1.8.8.build991} [Tinkers' Construct] (TConstruct-1.7.10-1.8.8.build991.jar)      UC    BloodArsenal{1.2-5} [Blood Arsenal] (BloodArsenal-1.7.10-1.2-5.jar)      UC    BuildCraft|Core{7.1.25} [BuildCraft] (buildcraft-7.1.25.jar)      UC    BuildCraft|Builders{7.1.25} [BC Builders] (buildcraft-7.1.25.jar)      UC    BuildCraft|Robotics{7.1.25} [BC Robotics] (buildcraft-7.1.25.jar)      UC    BuildCraft|Silicon{7.1.25} [BC Silicon] (buildcraft-7.1.25.jar)      UC    BuildCraft|Energy{7.1.25} [BC Energy] (buildcraft-7.1.25.jar)      UC    BuildCraft|Transport{7.1.25} [BC Transport] (buildcraft-7.1.25.jar)      UC    BuildCraft|Factory{7.1.25} [BC Factory] (buildcraft-7.1.25.jar)      GL info: ' Vendor: 'Intel' Version: '4.4.0 - Build 21.20.16.4541' Renderer: 'Intel(R) HD Graphics 610'     Mantle Environment: Environment healthy.     TConstruct Environment: Environment healthy.
    • fixed this problem but now i have a new one  java.lang.RuntimeException: java.lang.NoSuchFieldException: processor  Help 
  • Topics

×
×
  • Create New...

Important Information

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